为什么 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:element
和 xs: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"/>
这对于共享复杂类型定义非常有用。
我想知道为什么不用写
<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:element
和 xs: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"/>
这对于共享复杂类型定义非常有用。