为同名元素创建 XML 架构?
Creating XML Schema for elements with the same name?
我正在尝试为我收到的 XML 文档创建一个 XSD 架构,但是有两个元素 staff
具有相同的名称。
有没有办法为此 XML 创建架构,即使有两个元素同名?
XML:
<contacts>
<staff count="248" pagesize="284">
<staff id="1231">
<Forename>test</Forename>
<Surname>test</Surname>
<DateOfBirth>0000-00-00</DateOfBirth>
<Gender/>
<Address1/>
<Address2/>
<Town/>
<County/>
<Telephone/>
<Mobile/>
<Email/>
<Created>0000-06-18 09:46:32</Created>
<CreatedBy>test</CreatedBy>
<Updated>2000-06-18 09:46:32</Updated>
<UpdatedBy>test</UpdatedBy>
<Archived>0000-00-00 00:00:00</Archived>
<ArchivedBy/>
<Postcode/>
<Age>0</Age>
<RestrictedRecord>0</RestrictedRecord>
<Disability_S_24/>
<Ethnicity_S_25/>
<Type>8</Type>
<PersonID>1231</PersonID>
<TypeName>staff</TypeName>
</staff>
</staff>
</contacts>
目前架构:
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
<xs:element name="contacts">
<xs:complexType>
<xs:sequence>
<xs:element ref="staff"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="staff">
<xs:complexType>
<xs:sequence>
<xs:element maxOccurs="unbounded" ref="staff"/>
</xs:sequence>
<xs:attribute name="count" use="required" type="xs:integer"/>
<xs:attribute name="pagesize" use="required" type="xs:integer"/>
</xs:complexType>
</xs:element>
<xs:element name="staff">
<xs:complexType>
<xs:all >
<xs:element ref="Forename" minOccurs="0"/>
<xs:element ref="Surname" minOccurs="0"/>
<xs:element ref="DateOfBirth" minOccurs="0"/>
<xs:element ref="Gender" minOccurs="0"/>
<xs:element ref="Address1" minOccurs="0"/>
<xs:element ref="Address2" minOccurs="0"/>
<xs:element ref="Town" minOccurs="0"/>
<xs:element ref="County" minOccurs="0"/>
<xs:element ref="Telephone" minOccurs="0"/>
<xs:element ref="Mobile" minOccurs="0"/>
<xs:element ref="Email" minOccurs="0"/>
<xs:element ref="Created" minOccurs="0"/>
<xs:element ref="CreatedBy" minOccurs="0"/>
<xs:element ref="Updated" minOccurs="0"/>
<xs:element ref="UpdatedBy" minOccurs="0"/>
<xs:element ref="Archived" minOccurs="0"/>
<xs:element ref="ArchivedBy" minOccurs="0"/>
<xs:element ref="Postcode" minOccurs="0"/>
<xs:element ref="Age" minOccurs="0"/>
<xs:element ref="RestrictedRecord" minOccurs="0"/>
<xs:element ref="Disability_S_24" minOccurs="0"/>
<xs:element ref="Ethnicity_S_25" minOccurs="0"/>
<xs:element ref="Education_V_2" minOccurs="0"/>
<xs:element ref="EmploymentTrainingStatus_V_1" minOccurs="0"/>
<xs:element ref="Type" minOccurs="0"/>
<xs:element ref="PersonID" minOccurs="0"/>
<xs:element ref="TypeName" minOccurs="0"/>
</xs:all>
<xs:attribute name="id" use="required" type="xs:integer"/>
</xs:complexType>
</xs:element>
<xs:element name="Forename" type="xs:string"/>
<xs:element name="Surname" type="xs:string"/>
<xs:element name="DateOfBirth" type="xs:NMTOKEN"/>
<xs:element name="Gender" type="xs:string"/>
<xs:element name="Address1" type="xs:string"/>
<xs:element name="Address2" type="xs:string"/>
<xs:element name="Town" type="xs:string"/>
<xs:element name="County" type="xs:string"/>
<xs:element name="Telephone" type="xs:string"/>
<xs:element name="Mobile" type="xs:string"/>
<xs:element name="Email" type="xs:string"/>
<xs:element name="Created" type="xs:string"/>
<xs:element name="CreatedBy" type="xs:NCName"/>
<xs:element name="Updated" type="xs:string"/>
<xs:element name="UpdatedBy" type="xs:NCName"/>
<xs:element name="Archived" type="xs:string"/>
<xs:element name="ArchivedBy" type="xs:string"/>
<xs:element name="Postcode" type="xs:string"/>
<xs:element name="Age" type="xs:integer"/>
<xs:element name="RestrictedRecord" type="xs:integer"/>
<xs:element name="Disability_S_24">
<xs:complexType/>
</xs:element>
<xs:element name="Ethnicity_S_25">
<xs:complexType/>
</xs:element>
<xs:element name="Type" type="xs:integer"/>
<xs:element name="PersonID" type="xs:integer"/>
<xs:element name="TypeName" type="xs:NCName"/>
</xs:schema>
A. 如果您控制了 两者 XSD 和 XML,这里有两个 staff
元素具有不同内容模型的选项 XML :
- 使用命名空间来区分它们。
- 重命名其中之一。
B. 如果您可以控制 XSD 但不能控制 XML,这里有一些选项:
- 使用本地定义。 (两个全局定义的元素不能有相同的名称,但如果一个或两个是本地定义的就没问题。)[推荐,如果你真的想使用相同的名称。]
- 合并两个内容模型,使得共同的组件是必需的,不同的组件是可选的。 (如果上下文区分了两个内容模型,可选择添加 XSD 1.1 断言以强制区分。)
这是一个完全更正的 XSD 使用选项 B.1:
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified">
<xs:element name="contacts">
<xs:complexType>
<xs:sequence>
<xs:element ref="staff"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="staff">
<xs:complexType>
<xs:sequence>
<xs:element name="staff" maxOccurs="unbounded">
<xs:complexType>
<xs:all>
<xs:element ref="Forename" minOccurs="0"/>
<xs:element ref="Surname" minOccurs="0"/>
<xs:element ref="DateOfBirth" minOccurs="0"/>
<xs:element ref="Gender" minOccurs="0"/>
<xs:element ref="Address1" minOccurs="0"/>
<xs:element ref="Address2" minOccurs="0"/>
<xs:element ref="Town" minOccurs="0"/>
<xs:element ref="County" minOccurs="0"/>
<xs:element ref="Telephone" minOccurs="0"/>
<xs:element ref="Mobile" minOccurs="0"/>
<xs:element ref="Email" minOccurs="0"/>
<xs:element ref="Created" minOccurs="0"/>
<xs:element ref="CreatedBy" minOccurs="0"/>
<xs:element ref="Updated" minOccurs="0"/>
<xs:element ref="UpdatedBy" minOccurs="0"/>
<xs:element ref="Archived" minOccurs="0"/>
<xs:element ref="ArchivedBy" minOccurs="0"/>
<xs:element ref="Postcode" minOccurs="0"/>
<xs:element ref="Age" minOccurs="0"/>
<xs:element ref="RestrictedRecord" minOccurs="0"/>
<xs:element ref="Disability_S_24" minOccurs="0"/>
<xs:element ref="Ethnicity_S_25" minOccurs="0"/>
<xs:element ref="Education_V_2" minOccurs="0"/>
<xs:element ref="EmploymentTrainingStatus_V_1" minOccurs="0"/>
<xs:element ref="Type" minOccurs="0"/>
<xs:element ref="PersonID" minOccurs="0"/>
<xs:element ref="TypeName" minOccurs="0"/>
</xs:all>
<xs:attribute name="id" use="required" type="xs:integer"/>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="count" use="required" type="xs:integer"/>
<xs:attribute name="pagesize" use="required" type="xs:integer"/>
</xs:complexType>
</xs:element>
<xs:element name="Forename" type="xs:string"/>
<xs:element name="Surname" type="xs:string"/>
<xs:element name="DateOfBirth" type="xs:NMTOKEN"/>
<xs:element name="Gender" type="xs:string"/>
<xs:element name="Address1" type="xs:string"/>
<xs:element name="Address2" type="xs:string"/>
<xs:element name="Town" type="xs:string"/>
<xs:element name="County" type="xs:string"/>
<xs:element name="Telephone" type="xs:string"/>
<xs:element name="Mobile" type="xs:string"/>
<xs:element name="Email" type="xs:string"/>
<xs:element name="Created" type="xs:string"/>
<xs:element name="CreatedBy" type="xs:NCName"/>
<xs:element name="Updated" type="xs:string"/>
<xs:element name="UpdatedBy" type="xs:NCName"/>
<xs:element name="Archived" type="xs:string"/>
<xs:element name="ArchivedBy" type="xs:string"/>
<xs:element name="Postcode" type="xs:string"/>
<xs:element name="Age" type="xs:integer"/>
<xs:element name="RestrictedRecord" type="xs:integer"/>
<xs:element name="Disability_S_24">
<xs:complexType/>
</xs:element>
<xs:element name="Ethnicity_S_25">
<xs:complexType/>
</xs:element>
<xs:element name="Education_V_2">
<xs:complexType/>
</xs:element>
<xs:element name="EmploymentTrainingStatus_V_1">
<xs:complexType/>
</xs:element>
<xs:element name="Type" type="xs:integer"/>
<xs:element name="PersonID" type="xs:integer"/>
<xs:element name="TypeName" type="xs:NCName"/>
</xs:schema>
此 XSD 将成功验证您的 XML。
如果两个同级元素具有相同的名称,则 XSD ("element declarations consistent") 中的规则规定它们也必须具有相同的类型。
但是,如果元素出现在 XML 中的不同位置,而不是兄弟姐妹(例如 staff/staff 与 contacts/staff),那么它们可以有不同的类型;这可以使用局部元素声明来实现。
你的格式让我失望了——我最初在你的问题中更正了它,但后来改变了主意,因为我认为这是与你的问题相关的细节。您实际上没有两个同级 staff
元素(我在查找结束标记时注意到了这一点),您有一个与其父元素同名的子元素。没关系。这是您重新格式化的 XML:
<contacts>
<staff count="248" pagesize="284">
<staff id="1231">
<Forename>test</Forename>
<Surname>test</Surname>
<DateOfBirth>0000-00-00</DateOfBirth>
<Gender/>
<Address1/>
<Address2/>
<Town/>
<County/>
<Telephone/>
<Mobile/>
<Email/>
<Created>0000-06-18 09:46:32</Created>
<CreatedBy>test</CreatedBy>
<Updated>2000-06-18 09:46:32</Updated>
<UpdatedBy>test</UpdatedBy>
<Archived>0000-00-00 00:00:00</Archived>
<ArchivedBy/>
<Postcode/>
<Age>0</Age>
<RestrictedRecord>0</RestrictedRecord>
<Disability_S_24/>
<Ethnicity_S_25/>
<Type>8</Type>
<PersonID>1231</PersonID>
<TypeName>staff</TypeName>
</staff>
</staff>
</contacts>
就是说,您不能按照现在的方式构建架构 - 想一想,ref
指的是哪个 staff
元素? XSD 解析器怎么知道它是哪一个?
我认为更正架构的最简单方法是执行以下操作:
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
<xs:element name="contacts">
<xs:complexType>
<xs:sequence>
<xs:element ref="staff"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="staff">
<xs:complexType>
<xs:sequence>
<xs:element maxOccurs="unbounded" name="staff" type="staffInner"/>
</xs:sequence>
<xs:attribute name="count" use="required" type="xs:integer"/>
<xs:attribute name="pagesize" use="required" type="xs:integer"/>
</xs:complexType>
</xs:element>
<xs:complexType name="staffInner">
<xs:all>
....
如果我有更多的上下文,我会选择一个比 staffInner
更好的名字 - 也许像 individualStaffMember
?为了保持一致性,我也可能最终会更改您的其他 ref
以使用 type
。
此外,您确定要 xs:all
而不仅仅是 xs:sequence
吗?如果保留 xs:all
,则所有这些子元素上的 minOccurs="0"
都是多余的。如果你想 xs:sequence
(我怀疑可能是这种情况),你确实需要它 - 但要小心,因为 xs:all
将允许元素以任何顺序出现......
我正在尝试为我收到的 XML 文档创建一个 XSD 架构,但是有两个元素 staff
具有相同的名称。
有没有办法为此 XML 创建架构,即使有两个元素同名?
XML:
<contacts>
<staff count="248" pagesize="284">
<staff id="1231">
<Forename>test</Forename>
<Surname>test</Surname>
<DateOfBirth>0000-00-00</DateOfBirth>
<Gender/>
<Address1/>
<Address2/>
<Town/>
<County/>
<Telephone/>
<Mobile/>
<Email/>
<Created>0000-06-18 09:46:32</Created>
<CreatedBy>test</CreatedBy>
<Updated>2000-06-18 09:46:32</Updated>
<UpdatedBy>test</UpdatedBy>
<Archived>0000-00-00 00:00:00</Archived>
<ArchivedBy/>
<Postcode/>
<Age>0</Age>
<RestrictedRecord>0</RestrictedRecord>
<Disability_S_24/>
<Ethnicity_S_25/>
<Type>8</Type>
<PersonID>1231</PersonID>
<TypeName>staff</TypeName>
</staff>
</staff>
</contacts>
目前架构:
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
<xs:element name="contacts">
<xs:complexType>
<xs:sequence>
<xs:element ref="staff"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="staff">
<xs:complexType>
<xs:sequence>
<xs:element maxOccurs="unbounded" ref="staff"/>
</xs:sequence>
<xs:attribute name="count" use="required" type="xs:integer"/>
<xs:attribute name="pagesize" use="required" type="xs:integer"/>
</xs:complexType>
</xs:element>
<xs:element name="staff">
<xs:complexType>
<xs:all >
<xs:element ref="Forename" minOccurs="0"/>
<xs:element ref="Surname" minOccurs="0"/>
<xs:element ref="DateOfBirth" minOccurs="0"/>
<xs:element ref="Gender" minOccurs="0"/>
<xs:element ref="Address1" minOccurs="0"/>
<xs:element ref="Address2" minOccurs="0"/>
<xs:element ref="Town" minOccurs="0"/>
<xs:element ref="County" minOccurs="0"/>
<xs:element ref="Telephone" minOccurs="0"/>
<xs:element ref="Mobile" minOccurs="0"/>
<xs:element ref="Email" minOccurs="0"/>
<xs:element ref="Created" minOccurs="0"/>
<xs:element ref="CreatedBy" minOccurs="0"/>
<xs:element ref="Updated" minOccurs="0"/>
<xs:element ref="UpdatedBy" minOccurs="0"/>
<xs:element ref="Archived" minOccurs="0"/>
<xs:element ref="ArchivedBy" minOccurs="0"/>
<xs:element ref="Postcode" minOccurs="0"/>
<xs:element ref="Age" minOccurs="0"/>
<xs:element ref="RestrictedRecord" minOccurs="0"/>
<xs:element ref="Disability_S_24" minOccurs="0"/>
<xs:element ref="Ethnicity_S_25" minOccurs="0"/>
<xs:element ref="Education_V_2" minOccurs="0"/>
<xs:element ref="EmploymentTrainingStatus_V_1" minOccurs="0"/>
<xs:element ref="Type" minOccurs="0"/>
<xs:element ref="PersonID" minOccurs="0"/>
<xs:element ref="TypeName" minOccurs="0"/>
</xs:all>
<xs:attribute name="id" use="required" type="xs:integer"/>
</xs:complexType>
</xs:element>
<xs:element name="Forename" type="xs:string"/>
<xs:element name="Surname" type="xs:string"/>
<xs:element name="DateOfBirth" type="xs:NMTOKEN"/>
<xs:element name="Gender" type="xs:string"/>
<xs:element name="Address1" type="xs:string"/>
<xs:element name="Address2" type="xs:string"/>
<xs:element name="Town" type="xs:string"/>
<xs:element name="County" type="xs:string"/>
<xs:element name="Telephone" type="xs:string"/>
<xs:element name="Mobile" type="xs:string"/>
<xs:element name="Email" type="xs:string"/>
<xs:element name="Created" type="xs:string"/>
<xs:element name="CreatedBy" type="xs:NCName"/>
<xs:element name="Updated" type="xs:string"/>
<xs:element name="UpdatedBy" type="xs:NCName"/>
<xs:element name="Archived" type="xs:string"/>
<xs:element name="ArchivedBy" type="xs:string"/>
<xs:element name="Postcode" type="xs:string"/>
<xs:element name="Age" type="xs:integer"/>
<xs:element name="RestrictedRecord" type="xs:integer"/>
<xs:element name="Disability_S_24">
<xs:complexType/>
</xs:element>
<xs:element name="Ethnicity_S_25">
<xs:complexType/>
</xs:element>
<xs:element name="Type" type="xs:integer"/>
<xs:element name="PersonID" type="xs:integer"/>
<xs:element name="TypeName" type="xs:NCName"/>
</xs:schema>
A. 如果您控制了 两者 XSD 和 XML,这里有两个 staff
元素具有不同内容模型的选项 XML :
- 使用命名空间来区分它们。
- 重命名其中之一。
B. 如果您可以控制 XSD 但不能控制 XML,这里有一些选项:
- 使用本地定义。 (两个全局定义的元素不能有相同的名称,但如果一个或两个是本地定义的就没问题。)[推荐,如果你真的想使用相同的名称。]
- 合并两个内容模型,使得共同的组件是必需的,不同的组件是可选的。 (如果上下文区分了两个内容模型,可选择添加 XSD 1.1 断言以强制区分。)
这是一个完全更正的 XSD 使用选项 B.1:
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified">
<xs:element name="contacts">
<xs:complexType>
<xs:sequence>
<xs:element ref="staff"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="staff">
<xs:complexType>
<xs:sequence>
<xs:element name="staff" maxOccurs="unbounded">
<xs:complexType>
<xs:all>
<xs:element ref="Forename" minOccurs="0"/>
<xs:element ref="Surname" minOccurs="0"/>
<xs:element ref="DateOfBirth" minOccurs="0"/>
<xs:element ref="Gender" minOccurs="0"/>
<xs:element ref="Address1" minOccurs="0"/>
<xs:element ref="Address2" minOccurs="0"/>
<xs:element ref="Town" minOccurs="0"/>
<xs:element ref="County" minOccurs="0"/>
<xs:element ref="Telephone" minOccurs="0"/>
<xs:element ref="Mobile" minOccurs="0"/>
<xs:element ref="Email" minOccurs="0"/>
<xs:element ref="Created" minOccurs="0"/>
<xs:element ref="CreatedBy" minOccurs="0"/>
<xs:element ref="Updated" minOccurs="0"/>
<xs:element ref="UpdatedBy" minOccurs="0"/>
<xs:element ref="Archived" minOccurs="0"/>
<xs:element ref="ArchivedBy" minOccurs="0"/>
<xs:element ref="Postcode" minOccurs="0"/>
<xs:element ref="Age" minOccurs="0"/>
<xs:element ref="RestrictedRecord" minOccurs="0"/>
<xs:element ref="Disability_S_24" minOccurs="0"/>
<xs:element ref="Ethnicity_S_25" minOccurs="0"/>
<xs:element ref="Education_V_2" minOccurs="0"/>
<xs:element ref="EmploymentTrainingStatus_V_1" minOccurs="0"/>
<xs:element ref="Type" minOccurs="0"/>
<xs:element ref="PersonID" minOccurs="0"/>
<xs:element ref="TypeName" minOccurs="0"/>
</xs:all>
<xs:attribute name="id" use="required" type="xs:integer"/>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="count" use="required" type="xs:integer"/>
<xs:attribute name="pagesize" use="required" type="xs:integer"/>
</xs:complexType>
</xs:element>
<xs:element name="Forename" type="xs:string"/>
<xs:element name="Surname" type="xs:string"/>
<xs:element name="DateOfBirth" type="xs:NMTOKEN"/>
<xs:element name="Gender" type="xs:string"/>
<xs:element name="Address1" type="xs:string"/>
<xs:element name="Address2" type="xs:string"/>
<xs:element name="Town" type="xs:string"/>
<xs:element name="County" type="xs:string"/>
<xs:element name="Telephone" type="xs:string"/>
<xs:element name="Mobile" type="xs:string"/>
<xs:element name="Email" type="xs:string"/>
<xs:element name="Created" type="xs:string"/>
<xs:element name="CreatedBy" type="xs:NCName"/>
<xs:element name="Updated" type="xs:string"/>
<xs:element name="UpdatedBy" type="xs:NCName"/>
<xs:element name="Archived" type="xs:string"/>
<xs:element name="ArchivedBy" type="xs:string"/>
<xs:element name="Postcode" type="xs:string"/>
<xs:element name="Age" type="xs:integer"/>
<xs:element name="RestrictedRecord" type="xs:integer"/>
<xs:element name="Disability_S_24">
<xs:complexType/>
</xs:element>
<xs:element name="Ethnicity_S_25">
<xs:complexType/>
</xs:element>
<xs:element name="Education_V_2">
<xs:complexType/>
</xs:element>
<xs:element name="EmploymentTrainingStatus_V_1">
<xs:complexType/>
</xs:element>
<xs:element name="Type" type="xs:integer"/>
<xs:element name="PersonID" type="xs:integer"/>
<xs:element name="TypeName" type="xs:NCName"/>
</xs:schema>
此 XSD 将成功验证您的 XML。
如果两个同级元素具有相同的名称,则 XSD ("element declarations consistent") 中的规则规定它们也必须具有相同的类型。
但是,如果元素出现在 XML 中的不同位置,而不是兄弟姐妹(例如 staff/staff 与 contacts/staff),那么它们可以有不同的类型;这可以使用局部元素声明来实现。
你的格式让我失望了——我最初在你的问题中更正了它,但后来改变了主意,因为我认为这是与你的问题相关的细节。您实际上没有两个同级 staff
元素(我在查找结束标记时注意到了这一点),您有一个与其父元素同名的子元素。没关系。这是您重新格式化的 XML:
<contacts>
<staff count="248" pagesize="284">
<staff id="1231">
<Forename>test</Forename>
<Surname>test</Surname>
<DateOfBirth>0000-00-00</DateOfBirth>
<Gender/>
<Address1/>
<Address2/>
<Town/>
<County/>
<Telephone/>
<Mobile/>
<Email/>
<Created>0000-06-18 09:46:32</Created>
<CreatedBy>test</CreatedBy>
<Updated>2000-06-18 09:46:32</Updated>
<UpdatedBy>test</UpdatedBy>
<Archived>0000-00-00 00:00:00</Archived>
<ArchivedBy/>
<Postcode/>
<Age>0</Age>
<RestrictedRecord>0</RestrictedRecord>
<Disability_S_24/>
<Ethnicity_S_25/>
<Type>8</Type>
<PersonID>1231</PersonID>
<TypeName>staff</TypeName>
</staff>
</staff>
</contacts>
就是说,您不能按照现在的方式构建架构 - 想一想,ref
指的是哪个 staff
元素? XSD 解析器怎么知道它是哪一个?
我认为更正架构的最简单方法是执行以下操作:
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
<xs:element name="contacts">
<xs:complexType>
<xs:sequence>
<xs:element ref="staff"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="staff">
<xs:complexType>
<xs:sequence>
<xs:element maxOccurs="unbounded" name="staff" type="staffInner"/>
</xs:sequence>
<xs:attribute name="count" use="required" type="xs:integer"/>
<xs:attribute name="pagesize" use="required" type="xs:integer"/>
</xs:complexType>
</xs:element>
<xs:complexType name="staffInner">
<xs:all>
....
如果我有更多的上下文,我会选择一个比 staffInner
更好的名字 - 也许像 individualStaffMember
?为了保持一致性,我也可能最终会更改您的其他 ref
以使用 type
。
此外,您确定要 xs:all
而不仅仅是 xs:sequence
吗?如果保留 xs:all
,则所有这些子元素上的 minOccurs="0"
都是多余的。如果你想 xs:sequence
(我怀疑可能是这种情况),你确实需要它 - 但要小心,因为 xs:all
将允许元素以任何顺序出现......