我正在使用 XSD 定义用户元素。对于此示例,用户具有姓名、电子邮件和一个或多个国籍。我试过了:
<xs:all>
<xs:element name="name" blabla />
<xs:element name="email" blabla />
<xs:element name="nationality" minOccurs="1" maxOccurs="unbounded" />
</xs:all>
然而,这是非法的。显然,“All”内的元素只能出现一次(或根本不出现)。
我可以通过将“全部”更改为“序列”来解决此问题,但随后人们必须按确切的顺序输入属性,而我实际上并不关心这一点。
有这两者的组合吗?不根据http://www.w3schools.com/Schema/schema_complex_indicators.asp http://www.w3schools.com/Schema/schema_complex_indicators.asp,但也许它是隐藏的(或者我缺乏经验的眼睛看不到它)。
凭直觉,我也尝试过:
<xs:all>
<xs:element name="name" blabla />
<xs:element name="email" blabla />
<xs:sequence>
<xs:element name="nationality" minOccurs="1" maxOccurs="unbounded" />
</xs:sequence>
</xs:all>
但不幸的是,这是无效的。
这是当前真实的 XSD 片段:
<!-- user -->
<xs:complexType name="user">
<xs:sequence>
<xs:element name="firstname" type="xs:string" minOccurs="1" maxOccurs="1" />
<xs:element name="appendix" type="xs:string" minOccurs="0" maxOccurs="1" />
<xs:element name="lastname" type="xs:string" minOccurs="1" maxOccurs="1" />
<xs:element name="address" type="xs:string" minOccurs="1" maxOccurs="1" />
<xs:element name="zipcode" type="xs:string" minOccurs="1" maxOccurs="1" />
<xs:element name="city" type="xs:string" minOccurs="1" maxOccurs="1"/>
<xs:element name="username" type="xs:string" minOccurs="1" maxOccurs="1"/>
<xs:element name="email" type="xs:string" minOccurs="1" maxOccurs="1"/>
<xs:element name="country" type="country" minOccurs="1" maxOccurs="1"/>
<xs:element name="nationality" type="xs:string" minOccurs="1" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
您能否将您的“国籍”事物转变为它自己的复杂类型,然后在您的 xs:all 中使用该新的复杂类型?
<xs:complexType name="NationalityType">
<xs:sequence>
<xs:element name="nationality" minOccurs="1" maxOccurs="unbounded" />
</xs:sequence>
</xs:complexType>
<xs:all>
<xs:element name="name" blabla />
<xs:element name="email" blabla />
<xs:element name="nationalities" type="NationalityType" />
</xs:all>
我手头没有任何东西可以测试这个,所以这真的只是我的想法......尝试一下!
编辑:现在已经测试过了 - 它可以工作,唯一要付出的小代价是你的 XML 必须看起来像这样:
<....>
<email>......</email>
<nationalities>
<nationality>ABC</nationality>
<nationality>CDE</nationality>
</nationalities>
<name>.....</name>
</.....>
所以你会得到一个额外的节点,其中包含任意长列表<nationality>
items.
Marc
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)