xsd 需要基于 xml 消息内容的不同元素
xsd requires different elements based on xml message content
我有 2 xml 条消息几乎相似,但确实有一些专用元素。现在我想将这些组合到消息中并为其创建一个“灵活的”xml 模式,以便我可以在处理之前对其进行验证。
我们的想法是拥有一个共同的结构,其中所有字段都在 xml 消息中定义,然后是不同字段的 2 个专用部分。然后以某种方式确定正在接收的消息,然后使用 xml 模式的通用且正确的专用部分进行验证。
下面是一个简单的例子。根据 TransportType(可以是汽车或船),xml 消息将包含 3 个元素。 2 个元素(品牌和型号)对两者都是通用的,另外 2 个(安全气囊和机动)根据选择而定。
汽车示例
<root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<TransportType>Car</TransportType>
<Input>
<Make>String</Make>
<Model>String</Model>
<Airbags>true</Airbags>
</Input>
</root>
船的例子
<root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<TransportType>Boat</TransportType>
<Input>
<Make>String</Make>
<Model>String</Model>
<Motorized>true</Motorized>
</Input>
</root>
我一直在尝试选择和参考,但如果不添加元素(这是不允许的)我就无法正常工作。
除非您准备在源文档中使用 xsi:type
属性来区分不同的情况,否则 XSD 1.0 无法做到这一点。在 XSD 1.1 中,您可以使用断言来完成它 - 尽管如果您可以使 TransportType
成为一个属性而不是一个元素,您可以使用条件类型分配来完成它,这是一个更简洁的解决方案,因为它是自定义的 -专为这项工作而设计。
见https://www.xml.com/articles/2018/05/29/co-occurrence-cta-xsd/
我有 2 xml 条消息几乎相似,但确实有一些专用元素。现在我想将这些组合到消息中并为其创建一个“灵活的”xml 模式,以便我可以在处理之前对其进行验证。
我们的想法是拥有一个共同的结构,其中所有字段都在 xml 消息中定义,然后是不同字段的 2 个专用部分。然后以某种方式确定正在接收的消息,然后使用 xml 模式的通用且正确的专用部分进行验证。
下面是一个简单的例子。根据 TransportType(可以是汽车或船),xml 消息将包含 3 个元素。 2 个元素(品牌和型号)对两者都是通用的,另外 2 个(安全气囊和机动)根据选择而定。
汽车示例
<root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<TransportType>Car</TransportType>
<Input>
<Make>String</Make>
<Model>String</Model>
<Airbags>true</Airbags>
</Input>
</root>
船的例子
<root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<TransportType>Boat</TransportType>
<Input>
<Make>String</Make>
<Model>String</Model>
<Motorized>true</Motorized>
</Input>
</root>
我一直在尝试选择和参考,但如果不添加元素(这是不允许的)我就无法正常工作。
除非您准备在源文档中使用 xsi:type
属性来区分不同的情况,否则 XSD 1.0 无法做到这一点。在 XSD 1.1 中,您可以使用断言来完成它 - 尽管如果您可以使 TransportType
成为一个属性而不是一个元素,您可以使用条件类型分配来完成它,这是一个更简洁的解决方案,因为它是自定义的 -专为这项工作而设计。
见https://www.xml.com/articles/2018/05/29/co-occurrence-cta-xsd/