1

我有一个简单的 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>
4

1 回答 1

1

您必须为您的 targetNamespace 定义一个别名,并在您的 xpath 中将其用于选择器和字段。请参阅SO 上的此答案,并阅读我所做的帖子和评论以获取更多详细信息。

于 2013-04-03T01:24:30.003 回答