我正在尝试扩展复杂类型以更改其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>
有人可以帮忙吗?
谢谢!
答案 0 :(得分:0)
您不能同时使用扩展名/限制来使必需元素在较低层次结构中可选。请参阅XML Schema规范:Restriction
如果您有控制权,那么只有可能的解决方案才会反转层次结构。以PhoneNumberWithOptionalAreaCode
为基础,PhoneNumberType
扩展PhoneNumberWithOptionalAreaCode