我有一个简单的 xml 文件
<form xmlns="http://www.example.org/form-reader/form-description"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.example.org/form-reader/form-description form-description.xsd">
<pages amount="1"/>
<pages amount="1"/>
</form>
我为它写了模式
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.example.org/form-reader/form-description"
xmlns="http://www.example.org/form-reader/form-description"
elementFormDefault="qualified">
<xs:complexType name="pagesType">
<xs:attribute name="amount" type="xs:string" use="required" />
</xs:complexType>
<xs:complexType name="formType">
<xs:sequence minOccurs="1">
<xs:element name="pages" minOccurs="0" maxOccurs="unbounded"
type="pagesType" />
</xs:sequence>
</xs:complexType>
<xs:element name="form" type="formType">
<xs:unique name="pageNumberUnique">
<xs:selector xpath="pages" />
<xs:field xpath="@amount" />
</xs:unique>
</xs:element>
</xs:schema>
我想验证 amount 属性的唯一性,但在所有验证器中,我的 xml 文件似乎是有效的,它不应该,为什么?
解决方案
应用@PetruGardea 修复后我的架构如下所示:
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:tns="http://www.example.org/form-reader/form-description"
targetNamespace="http://www.example.org/form-reader/form-description"
xmlns="http://www.example.org/form-reader/form-description"
elementFormDefault="qualified">
<xs:complexType name="pagesType">
<xs:attribute name="amount" type="xs:string" use="required" />
</xs:complexType>
<xs:complexType name="formType">
<xs:sequence minOccurs="1">
<xs:element name="pages" minOccurs="0" maxOccurs="unbounded"
type="pagesType" />
</xs:sequence>
</xs:complexType>
<xs:element name="form" type="formType">
<xs:unique name="pageNumberUnique">
<xs:selector xpath="tns:pages" />
<xs:field xpath="@amount" />
</xs:unique>
</xs:element>
</xs:schema>