我正在尝试扩展一个复杂类型以更改其 minOccurs 值,但我尝试了不同的方法均未成功,这是我的基本类型:
<xs:complexType name="PhoneNumberType">
<xs:sequence>
<xs:element name="AreaCode">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="[0-9]+" />
<xs:maxLength value="3" />
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="LocalNumber">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="[0-9]+" />
<xs:minLength value="7" />
<xs:maxLength value="17" />
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="Extension" minOccurs="0">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="[0-9]+" />
<xs:maxLength value="5" />
</xs:restriction>
</xs:simpleType>
</xs:element>
</xs:sequence>
</xs:complexType>
首先,我尝试使 AreaCode 在特定情况下成为可选:
<xs:element name="PhoneNumberWithOptionalAreaCode">
<xs:complexType>
<xs:complexContent>
<xs:extension base="PhoneNumberType">
<xs:sequence>
<xs:element name="AreaCode" type="xs:string" minOccurs="0" />
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
它给了我一个错误,说具有相同名称的元素应该具有相同的类型。
所以我尝试了这个:
<xs:complexType name="PhoneNumberType">
<xs:sequence>
<xs:element name="AreaCode" type="AreaCodeType" />
<xs:element name="LocalNumber">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="[0-9]+" />
<xs:minLength value="7" />
<xs:maxLength value="17" />
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="Extension" minOccurs="0">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="[0-9]+" />
<xs:maxLength value="5" />
</xs:restriction>
</xs:simpleType>
</xs:element>
</xs:sequence>
</xs:complexType>
<xs:simpleType name="AreaCodeType">
<xs:restriction base="xs:string">
<xs:pattern value="[0-9]+" />
<xs:maxLength value="3" />
</xs:restriction>
</xs:simpleType>
<xs:element name="PhoneNumberWithOptionalAreaCode">
<xs:complexType>
<xs:complexContent>
<xs:extension base="PhoneNumberType">
<xs:sequence>
<xs:element name="AreaCode" type="AreaCodeType" minOccurs="0" />
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
现在 xsd 是有效的,但是当我尝试验证以下 xml 时,它说 LocalNumber 不是预期的,预期的 AreaCode。
<PhoneNumberWithOptionalAreaCode>
<LocalNumber>1234567</LocalNumber>
</PhoneNumberWithOptionalAreaCode>
任何人都可以帮忙吗?
谢谢 !