1

我有一个 XML 模式,其中的一个片段如下所示:

<xs:complexType name="Operation" abstract="true">
    <xs:sequence>
        <xs:element name="id" type="xs:string"/>
        <xs:element name="type" type="xs:string"/>
        <xs:element name="inputFields" minOccurs="0">
            <xs:complexType>
                <xs:sequence>
                    <xs:element name="field" type="field" minOccurs="0" maxOccurs="unbounded"/>
                </xs:sequence>
            </xs:complexType>
        </xs:element>
        <xs:element name="outputFields" minOccurs="1">
            <xs:complexType>
                <xs:sequence>
                    <xs:element name="field" type="field"  minOccurs="0" maxOccurs="unbounded"/>
                </xs:sequence>
            </xs:complexType>
        </xs:element>
    </xs:sequence>
</xs:complexType>

我想限制/验证列表的大小inputFields并且outputFields相等。如何在 XML Schema 本身中实现这一点?

4

1 回答 1

2

XSD 1.1

您可以通过 XSD 1.1 中的断言来执行此操作,方法是将inputFields和中的数字元素的计数限制outputFields为相等:

<xs:assert test="count(inputFields/field) = count(outputFields/field)"/>

你可以把它放在同时包含inputFields和的元素声明中outputFields

XSD 1.0

您不能xs:assert在 XSD 1.0 中使用,也不能在给定当前 XML 设计的情况下表达您的约束。但是,如果您首先重新设计 XML 以将输入和输出字段配对在一起,

            <xs:sequence maxOccurs="unbounded">
                <xs:element name="inputField" type="field"/>
                <xs:element name="outputField" type="field"/>
            </xs:sequence>

您自然会将它们的出现次数限制为相等,并且您将能够使用 XSD 1.0。

于 2017-01-25T14:23:30.927 回答