6

我很难理解在 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>

为什么不能这样写呢?

<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>

或者甚至像这样?

<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>

我假设一定有某种原因它被定义为它的方式,但我找不到任何关于为什么的线索。

4

2 回答 2

4

我认为您不会为复杂类型的 XML 语法找到任何有用的设计原理。可以说,那些设计 XML 语法的人通过您提到的元素来解决一些技术难题,并且没有明显更好的语法在工作组中获得共识。您可能想知道 simpleContent 和 complexContent 解决了哪些技术难题,这是一个合理的问题,但我怀疑是否有人愿意深入研究 XSD 的设计记录来回答这个问题。

一个简单的观察:扩展和限制的合法子代取决于父代是 simpleContent 还是 complexContent。这是使用 simpleContent 和 complexContent 类型的本地声明来完成的,没有它们是不可能的——至少,如果没有对 XML 语法进行非常彻底的重新设计,就不可能。

于 2013-05-29T17:02:05.760 回答
1

为了以 CM Sperberg-McQueen 的回答为基础,我认为有些(如果不是更多的话)与语言的限制有关(我猜是“技术困难”参考);由于大多数语法都试图证明它们足以定义自己,想象一下在“模式的模式”中实际上可以做的事情有多少,考虑到我们今天在 1.0 版中仍然“享受”的限制。

许多人认为,他们可以通过针对XMLSchema.xsd验证 XSD 的 XML 来真正验证 XSD - 事实并非如此。

许多 XML Schema 设计提出了与您相同的问题;答案通常是作者希望通过解决语言的限制来最大化其模式规范的约束能力。

不知何故,我相信如果 1.0 中的功能与 1.1 相似,那么语法就会有所不同;该规范不会更容易理解......

为了使这更丰富,我还将探索其他模式语言规范,例如 RelaxNG 或 Schematron;也许是一些争论性的讨论......一个好的阅读可能是 Rick Jelliffe 对 XSD 的看法。

于 2013-05-30T04:25:07.903 回答