为什么 xsd:complexType 不是属性?

Why is xsd:complexType not an attribute?

我想知道为什么不用写

<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 数据库中的字段编写架构。我不知道这是否限制了这种可能性。也欢迎任何对此不起作用的答案,因为这将证实我不是唯一一个被这个事实困扰的人。

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

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

大多数人感叹 XSD 缺乏正交性。你的建议会使事情变得更糟。

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

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

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