XML 输入的验证#
所有 SUMO 应用程序 都支持对其输入进行 XML 验证。要启用此功能,可以使用以下选项:
| 选项 | 描述 |
|---|---|
| -X <STRING> --xml-validation <STRING> |
设置 XML 输入的模式验证方案("never"、"local"、"auto" 或 "always");默认值: local |
| --xml-validation.net <STRING> | 设置 SUMO 网络输入的模式验证方案("never"、"local"、"auto" 或 "always");默认值: never |
| --xml-validation.routes <STRING> | 设置 SUMO 路径输入的模式验证方案("never"、"local"、"auto" 或 "always");默认值: local |
验证是通过在 XML 解析器中激活 XML 模式处理 来执行的。这可以捕获许多常见的输入错误,例如拼写错误以及本应放置在另一个元素中的属性。
验证的另一个前提条件是在输入文件的根元素中包含模式声明,例如:
<routes xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="https://sumo.dlr.de/xsd/routes_file.xsd">
当将验证选项设置为 always 时,网络、附加文件和路径的模式将从本地模式文件中进行预解析。对于所有其他文件类型,如果缺少声明,在这种情况下将导致错误。
相比之下,验证选项 auto(在 SUMO 1.15.0 之前是默认值)仅在存在模式声明时才验证文件。它首先尝试从本地路径解析模式(参见模式文件部分),如果未设置 SUMO_HOME 或找不到文件,则回退到网络版本。当前的默认值 local 没有回退,因此如果本地文件无法访问(或未设置 SUMO_HOME),验证将失败。这是为了防止意外的网络访问和 XXE 攻击。
模式验证可能会显著减慢 XML 解析速度,因此默认情况下对网络输入是禁用的(因为网络不应手动编辑,因此无论如何都应该是有效的)。
Note
如果您有大量自动生成的输入,您可能考虑完全禁用模式验证。另请参阅此常见问题解答
添加模式声明#
由 SUMO 应用程序编写的文件会自动获得适当的模式声明。当从头开始编写输入文件时,必须手动将模式声明添加到根元素,如下所示:
<ROOT_ELEMENT xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="https://sumo.dlr.de/xsd/SCHEMA_FILE">
其中 ROOT_ELEMENT 和 SCHEMA_FILE 应根据下表进行设置:
| 应用程序选项 | ROOT_ELEMENT | SCHEMA_FILE |
|---|---|---|
| --route-files, --trip-files, --flow-files | routes | routes_file.xsd |
| --additional-files | add | additional_file.xsd |
| --node-files | nodes | nodes_file.xsd |
| --edge-files | edges | edges_file.xsd |
| --connection-files | connections | connections_file.xsd |
| --tllogic-files | tlLogics | tllogic_file.xsd |
| --type-files | types | types_file.xsd |
| --weight-files | meandata | meandata_file.xsd |
Note
ROOT_ELEMENT 的值是一个约定问题,可以取任意值。
模式文件#
模式文件可以在 SUMO 安装目录的 <SUMO_HOME>/data/xsd 目录中找到。如果环境变量 SUMO_HOME 已设置,这些文件将在验证输入时使用。
否则,文件将从 https://sumo.dlr.de/xsd/SCHEMA_FILE 加载,这可能会减慢应用程序速度(或者如果没有互联网连接则失败)。
SUMO 文件类型#
SUMO 应用程序 使用的文件扩展名的完整列表在 File_Extensions 中给出。
禁用模式验证#
要禁用模式验证,执行以下任一操作即可:
- 设置选项 --xml-validation never
- 从 XML 输入文件的顶部移除
xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance"xsi:noNamespaceSchemaLocation="https://sumo.dlr.de/xsd/....xsd"属性。
