xml - 具有 simpleType 或 complexType 子元素的 XSD 内容模型?
问题描述
我试图让一个 XML 元素能够使用 acomplexType
和 asimpleType
作为其类型属性。我对 XML 和 XSD 比较陌生,我不确定这是否可行。我写了一些测试代码来解释这个问题。
我必须工作的一种半解决方案只是创建两种不同的EntityType
类型,但在这种情况下,我不想这样做,因为将所有相同的元素重写为新类型只是为了更改PhoneNumber
元素类型两种EntityType
类型感觉像是在浪费代码,尤其是当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
。我不确定我还能做什么,而且我的想法已经不多了。任何帮助表示赞赏!
解决方案
关于您的标题问题,请参阅XSD 允许同一元素的 simpleType 和 complexType 内容? 有一些子问题,我将在下面依次解决......
我试图让一个 XML 元素能够使用 a
complexType
和 asimpleType
作为其类型属性。
这是令人困惑的陈述,可能是因为您在某种通用意义上使用了“属性”;在 XML 的上下文中这样做,其中“属性”意味着非常具体的东西,必然会造成混乱。
关于
两种
EntityType
类型感觉像是在浪费代码,尤其是当EntityType
其中可以包含更多元素时。
减少此类重复的常用方法是通过xsd:group
. 看
关于拥有两种电话号码,请考虑拥有两个不同命名的元素,一个用于每种(简单和复杂)类型,并xsd:choice
在包含内容模型中使用以允许您希望允许电话号码的任一元素。
推荐阅读
- discord - DiscordAPIError:createOverwrite 上缺少访问权限
- javascript - 在 Typescript / Angular 中使用两个 JSON 对象使 Chart.JS 条形图动态化
- android - Unfortunate, myAppName has stopped. Thread already started - Kotlin
- html - Using CSS to Overlap Text on Image -- Works on Screen, but not in Print
- javascript - React Native node_modules package errors
- sql - Oracle SQL: How can I sum every x number of subsequent rows for each row
- python-3.x - 为什么 pip list 在 pipx 创建的虚拟环境中无法正常工作?
- python - Extracting GREY colour from image openCv
- c - Ignoring numbers with letters around them
- mysql - 在 MySQL 中,如何将多个输出行分组为单行,保持各自的列