xsd扩展类型以更改属性值
我试图扩展一个复杂类型以更改其minOccurs值,我尝试了不同的方法但未成功,以下是我的基本类型:xsd扩展类型以更改属性值,xsd,xsd-validation,Xsd,Xsd Validation,我试图扩展一个复杂类型以更改其minOccurs值,我尝试了不同的方法但未成功,以下是我的基本类型: <xs:complexType name="PhoneNumberType"> <xs:sequence> <xs:element name="AreaCode"> <xs:simpleType> <xs:restriction base="xs:stri
<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不是预期的,而是预期的区域代码
<PhoneNumberWithOptionalAreaCode>
<LocalNumber>1234567</LocalNumber>
</PhoneNumberWithOptionalAreaCode>
1234567
有人能帮忙吗
谢谢 在较低层次结构中,不能同时使用扩展/限制使强制元素成为可选元素。有关这方面的详细信息,请参见XML架构规范: 唯一可能的解决方案是,如果您有控制权,则反转层次结构。将带有OptionalAreaCode的电话号码作为基础,并将带有OptionalAreaCode的电话号码扩展为