为什么xsd:complexType不是属性?

时间:2016-04-15 08:03:33

标签: mysql xml xsd

我想知道为什么而不必写

<xs:element name="elementName">
  <xs:complexType>
    <xs:sequence>
      <xs:element name="subElementName" type="xs:string"/>
    </xs:sequence>
  </xs:complexType>
</xs:element>

我不能指定它是xs:complexType的元素属性?或者是否xs:superSecretThingIdontKnowAbout合并了xs:elementxs:complexType?虽然我们正在进行它,但是甚至还有一些组合xs:sequence。我期望的是上面的代码可以用以下方式编写。

<xs:superSecretThingIdontKnowAbout name="elementName" sequence="true">
    <xs:element name="subElementName" type="xs:string"/>
<xs:superSecretThingIdontKnowAbout>

上下文

由于XSD是XML并且可以根据需要进行扩展,我想补充一点,我正在为MySQL数据库中的字段编写模式。我不知道这是否限制了这种可能性。任何对此都不起作用的答案也是受欢迎的,因为这可以证实我不是唯一一个被这个事实困扰的人。

1 个答案:

答案 0 :(得分:1)

您唯一缺少的superSecretThingIdontKnowAbout是属性更适合表示简单的无结构值;元素更适合表示结构。请参阅 XML Elements vs XML Attributes

复杂类型具有结构;它不是标量。从元素移动到属性会阻碍结构的表达。例如,在您的替代设计中,您如何表示序列上的事件指示符?更多属性?啊。在子序列中混合选择的序列怎么样?等等。

大多数人都对XSD中缺乏正交性感到遗憾。你的建议会让事情变得更糟。

但请注意,您可以定义复杂类型并通过属性引用它们:

 <xs:element name="a" type="aType"/>

这对于共享复杂的类型定义非常有用。