XMLValidation

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_ELEMENTSCHEMA_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" 属性。