我很难理解在 XSD 中定义类型扩展和限制的格式的一些细微差别。根据W3Schools 参考:
simpleContent
定义“对纯文本复杂类型或简单类型的扩展或限制作为内容并且不包含任何元素”complexContent
定义“仅包含混合内容或元素的复杂类型的扩展或限制
我不清楚的是为什么 XSD 要求将扩展和限制包含在这些容器之一中,此外,为什么只有扩展和限制需要它。如果必须在容器中定义所有“内容”,这对我来说会更有意义,但情况并非如此——对于基本类型,内容(sequence
s 等)被定义为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>
我假设一定有某种原因它被定义为它的方式,但我找不到任何关于为什么的线索。