我想创建一个XSD,其中Item需要指定至少一个标识符,或两者都指定,但从不指定任何标识符。 这在第一时间工作正常:
<xs:choice>
<xs:sequence>
<xs:element name="OneIdType">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:maxLength value="50"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="AnotherIdType" type="xs:string" minOccurs="0"/>
</xs:sequence>
<xs:element name="AnotherIdType" type="xs:string"/>
但两种IdType都应具有(不同的)长度限制。 因此,当我尝试以下操作时,我的XSD无效:
<xs:choice>
<xs:sequence>
<xs:element name="OneIdType">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:maxLength value="50"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="AnotherIdType" minOccurs="0">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:maxLength value="20"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
</xs:sequence>
<xs:element name="AnotherIdType">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:maxLength value="20"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
我收到错误
元素&#39; AnotherIdType&#39;与元素不一致&#39; AnotherIdType&#39;
因此XSD有可能实施一个或两个选择&#34;限制类型?
谢谢, 最大
答案 0 :(得分:1)
虽然这两个AnotherIdType
元素声明中的匿名类型具有相同的定义,但它们不是相同的类型。将simpleType
声明拉出到顶层
<xs:simpleType name="max20String">
<xs:restriction base="xs:string">
<xs:maxLength value="20"/>
</xs:restriction>
</xs:simpleType>
然后从两个元素
引用它<xs:choice>
<xs:sequence>
<xs:element name="OneIdType">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:maxLength value="50"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="AnotherIdType" type="tns:max20String" minOccurs="0"/>
</xs:sequence>
<xs:element name="AnotherIdType" type="tns:max20String"/>
(其中tns
前缀绑定到架构&#39; s targetNamespace
)