我想知道为什么而不必写
<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数据库中的字段编写模式。我不知道这是否限制了这种可能性。任何对此都不起作用的答案也是受欢迎的,因为这可以证实我不是唯一一个被这个事实困扰的人。
答案 0 :(得分:1)
您唯一缺少的superSecretThingIdontKnowAbout
是属性更适合表示简单的无结构值;元素更适合表示结构。请参阅 XML Elements vs XML Attributes 。
复杂类型具有结构;它不是标量。从元素移动到属性会阻碍结构的表达。例如,在您的替代设计中,您如何表示序列上的事件指示符?更多属性?啊。在子序列中混合选择的序列怎么样?等等。
大多数人都对XSD中缺乏正交性感到遗憾。你的建议会让事情变得更糟。
但请注意,您可以定义复杂类型并通过属性引用它们:
<xs:element name="a" type="aType"/>
这对于共享复杂的类型定义非常有用。