我有以下xml结构
<library>
<propertySet>
<SUPorganisationId></SUPorganisationId>
<SUPdataCategory></SUPdataCategory>
<SUPguId></SUPguId>
<LIBuserNotice></LIBuserNotice>
</propertySet>
</library>
propertySet 中的属性可以出现一次(minOccurs =“0”maxOccurs =“1”),可以是任何顺序。当我创建XSD时,我想将一些属性(前缀为SUP)分组以供进一步使用。所以我提出了以下xsd段。
<xs:element name="propertySet">
<xs:complexType>
<xs:all>
<xs:group ref="CORproperties"/>
<xs:element name="LIBuserNotice" type="xs:string" minOccurs="0" maxOccurs="1"/>
</xs:all>
</xs:complexType>
<xs:element name="propertySet">
<xs:group name="CORproperties">
<xs:all>
<xs:element name="SUPorganisationId" type="xs:integer" minOccurs="0" maxOccurs="1"/>
<xs:element name="SUPdataCategory" type="xs:integer" minOccurs="0" maxOccurs="1"/>
<xs:element name="SUPguId" type="xs:string" minOccurs="0" maxOccurs="1"/>
</xs:all>
</xs:group>
有了这个xsd,我收到的错误是 xs:all 的使用不正确。我被迫使用 xs:all ,因为没有出现属性的顺序。但是如果我使用 xs:sequence ,它可以正常工作。有人可以指引我走正确的道路吗?
答案 0 :(得分:1)
您可以使用<xs:extension>
来执行此操作。如果您以这种方式重构架构,它将正常工作:
警告:它仅在XSD 1.1中可用。在XSD 1.0中,不允许使用。
<xs:element name="propertySet">
<xs:complexType>
<xs:complexContent>
<xs:extension base="CORProperties">
<xs:all>
<xs:element name="LIBuserNotice" type="xs:string" minOccurs="0" maxOccurs="1"/>
</xs:all>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
<xs:complexType name="CORProperties">
<xs:all>
<xs:element name="SUPorganisationId" type="xs:integer" minOccurs="0" maxOccurs="1"/>
<xs:element name="SUPdataCategory" type="xs:integer" minOccurs="0" maxOccurs="1"/>
<xs:element name="SUPguId" type="xs:string" minOccurs="0" maxOccurs="1"/>
</xs:all>
</xs:complexType>
答案 1 :(得分:0)
从xs:all
的注释中,我们发现它不能拥有群组:
<all
id = ID
maxOccurs = 1 : 1
minOccurs = (0 | 1) : 1
{any attributes with non-schema namespace . . .}>
Content: (annotation?, element*)
</all>
当然,这会改变你的xml的结构,但这种方式比第二种方式更具可读性。
<xs:element name="propertySet">
<xs:complexType>
<xs:choice maxOccurs="unbounded">
<xs:group ref="CORproperties"/>
<xs:element name="LIBuserNotice" type="xs:string" minOccurs="0" maxOccurs="1"/>
</xs:choice>
</xs:complexType>
</xs:element>
<xs:group name="CORproperties">
<xs:choice maxOccurs="unbounded">
<xs:element name="SUPorganisationId" type="xs:integer" minOccurs="0" maxOccurs="1"/>
<xs:element name="SUPdataCategory" type="xs:integer" minOccurs="0" maxOccurs="1"/>
<xs:element name="SUPguId" type="xs:string" minOccurs="0" maxOccurs="1"/>
</xs:choice>
</xs:group>
更多: