0

我有 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>

我一直在尝试选择和引用,但如果不添加元素(这是不允许的),我无法让它工作。

4

1 回答 1

1

除非您准备xsi:type在源文档中使用属性来区分不同的情况,否则在 XSD 1.0 中无法做到这一点。在 XSD 1.1 中,您可以使用断言来实现 - 尽管如果您可以创建TransportType属性而不是元素,则可以使用条件类型分配来实现,这是一个更简洁的解决方案,因为它是为这项工作定制的。

https://www.xml.com/articles/2018/05/29/co-occurrence-cta-xsd/

于 2021-06-07T14:16:11.663 回答