【发布时间】:2019-07-25 18:32:14
【问题描述】:
我正在尝试让 XML 元素能够使用 complexType 和 simpleType 作为其类型属性。我对 XML 和 XSD 比较陌生,我不确定这是否可行。我写了一些测试代码来解释这个问题。
我必须工作的一种半解决方案只是创建两个不同的EntityType 类型,但在这种情况下,我不想这样做,因为将所有相同的元素重写为新类型只是为了更改两个EntityType 类型中的PhoneNumber 元素类型感觉就像在浪费代码,尤其是当EntityType 中可能包含更多元素时。我曾尝试研究 XML 版本 1.1 并使用 xs:alternative,但我不确定它是否适用于这种特殊情况。
这是我的 XML:
<?xml version="1.0" encoding="UTF-8"?>
<City>
<Bob>
<Name>Bob</Name>
<PhoneNumber>262-662-6262</PhoneNumber>
</Bob>
<QMart>
<Name>QMart</Name>
<PhoneNumber>
<FAX>#45654</FAX>
<PhoneNumber>262-333-3939</PhoneNumber>
<PhoneNumber2>262-412-8633</PhoneNumber2>
</PhoneNumber>
</QMart>
</City>
这里是 XSD:
?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="City" type="CityType"/>
<xs:complexType name="CityType">
<xs:sequence>
<xs:element name="Bob" type="EntityType"/>
<xs:element name="QMart" type="EntityType"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="EntityType">
<xs:sequence>
<xs:element name="Name" type="NameType"/>
<!-- I want both Bob and QMart to use the same EntityType type,
but the only difference is that QMart uses the complex
PhoneNumberType for element PhoneNumber, while Bob uses
the simple PhoneNumberValueType for the PhoneNumber element
Bob: <xs:element name="PhoneNumber" type="PhoneNumberValueType"/>
QMart: <xs:element name="PhoneNumber" type="PhoneNumberType"/>
-->
</xs:sequence>
</xs:complexType>
<xs:complexType name="PhoneNumberType">
<xs:sequence>
<xs:element name="FAX" type="FAXType"/>
<xs:element name="PhoneNumber" type="PhoneNumberValueType"/>
<xs:element name="PhoneNumber2" type="PhoneNumberValueType"/>
</xs:sequence>
</xs:complexType>
<xs:simpleType name="PhoneNumberValueType">
<xs:restriction base="xs:string"/>
</xs:simpleType>
<xs:simpleType name="NameType">
<xs:restriction base="xs:string"/>
</xs:simpleType>
<xs:simpleType name="FAXType">
<xs:restriction base="xs:string"/>
</xs:simpleType>
</xs:schema>
我尝试使用 xs:union 元素验证 XML 和 XSD,但这仅适用于 simpleTypes。我不确定我还能做什么,而且我的想法已经不多了。任何帮助表示赞赏!
【问题讨论】:
标签: xml xsd xsd-validation xml-validation