我很难理解用于在XSD中定义类型扩展和限制的格式的一些细微差别.根据W3Schools的参考:
simpleContent 定义"对纯文本复杂类型或简单类型的扩展或限制作为内容,不包含任何元素"complexContent 定义"仅包含混合内容或元素的复杂类型的扩展或限制我不清楚的是,为什么XSD要求扩展和限制包含在其中一个容器中,此外,为什么只有扩展和限制需要它.如果必须在容器中定义所有"内容",对我来说会更有意义,但事实并非如此 - 对于基类型,内容(sequences等)被定义为complexType容器的直接子项.
就拿这个例子中,这对我来说似乎过于冗长:
<xs:complexType name="fullpersoninfo">
<xs:complexContent>
<xs:extension base="personinfo">
<xs:sequence>
<xs:element name="address" type="xs:string"/>
<xs:element name="city" type="xs:string"/>
<xs:element name="country" type="xs:string"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
Run Code Online (Sandbox Code Playgroud)
为什么不能这样写呢?
<xs:complexType name="fullpersoninfo">
<xs:extension base="personinfo">
<xs:sequence>
<xs:element name="address" type="xs:string"/>
<xs:element name="city" type="xs:string"/>
<xs:element name="country" type="xs:string"/>
</xs:sequence>
</xs:extension>
</xs:complexType>
Run Code Online (Sandbox Code Playgroud)
或者甚至喜欢这个?
<xs:complexType name="fullpersoninfo" extends="personinfo">
<xs:sequence>
<xs:element name="address" type="xs:string"/>
<xs:element name="city" type="xs:string"/>
<xs:element name="country" type="xs:string"/>
</xs:sequence>
</xs:complexType>
Run Code Online (Sandbox Code Playgroud)
我假设必须有某种原因它被定义的方式,但我找不到任何关于为什么的线索.
我认为您不会为复杂类型的 XML 语法找到任何有用的设计原理。我只想说,那些设计 XML 语法的人通过您提到的元素来解决一些技术困难,并且没有明显更好的语法在工作组中取得共识。您可能想知道 simpleContent 和 complexContent 解决了哪些技术难题,这是一个合理的问题,但我怀疑是否有人愿意深入研究 XSD 的设计记录,这是回答这个问题所必需的。
一个简单的观察:扩展和限制的合法子级会根据父级是 simpleContent 还是 complexContent 而有所不同。这是使用 simpleContent 和 complexContent 类型的本地声明来完成的,没有它们就不可能实现 — 至少在没有对 XML 语法进行非常彻底的重新设计的情况下是不可能的。
| 归档时间: |
|
| 查看次数: |
2481 次 |
| 最近记录: |