根据w3schools,group元素是complexType元素的子元素。下面的XML文件(XSD)可以互换使用吗?
没有组元素的XSD :
<xs:complexType name="personInfo">
<xs:sequence>
<xs:element name="firstName" type="xs:string"/>
<xs:element name="lastName" type="xs:string"/>
</xs:sequence>
<xs:attribute name="personId" type="xs:string" use="required"/>
</xs:complexType>
<xs:element name="person" type="personInfo"/>具有组元素的XSD :
<xs:group name="personGroup">
<xs:sequence>
<xs:element name="firstName" type="xs:string"/>
<xs:element name="lastName" type="xs:string"/>
</xs:sequence>
<xs:attribute name="personId" type="xs:string" use="required"/>
</xs:group>
<xs:complexType name="personInfo">
<xs:group ref="personGroup"/>
</xs:complexType>
<xs:element name="person" type="personInfo"/>如果是的话,他们有什么区别?当group具有相同的效果时,为什么要使用complexType元素?
发布于 2020-02-10 23:37:11
您在“XSD with group元素”示例中的内容是不正确的:
<xs:group name="personGroup">
<xs:sequence>
<xs:element name="firstName" type="xs:string"/>
<xs:element name="lastName" type="xs:string"/>
</xs:sequence>
<!-- Wrong -->
<xs:attribute name="personId" type="xs:string" use="required"/>
</xs:group>不能在<xs:group>根目录中定义属性。您可以有一个包含元素的组,这些元素可以有它们自己的属性。这实际上是组和复杂类型之间的区别之一。
组只能包含内容模型或注释(也就是说,它们的直接子元素只能是3:<xs:all />、<xs:choice />、<xs:sequence />或文档元素之一)。见第3.7.2节下的定义:
<group
id = ID
maxOccurs = (nonNegativeInteger | unbounded) : 1
minOccurs = nonNegativeInteger : 1
name = NCName
ref = QName
{any attributes with non-schema namespace . . .}>
Content: (annotation?, (all | choice | sequence)?)
</group>复杂类型的行为非常相似,因为它们也可以具有与组相同的内容模型,但也可以定义<xs:attributes>。您甚至可以有只定义属性的复杂类型,这些属性是您不能对组进行的。
https://stackoverflow.com/questions/49072644
复制相似问题