Schema在有命名空間的情況下使用unique校驗Xml

xsd文件adapter-mapper.xsd:

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
           targetNamespace="http://www.fgi.net.cn"
           xmlns:ad="http://www.fgi.net.cn"
           elementFormDefault="qualified">
    <xs:element name="node">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="name" type="xs:string"/>
                <xs:element ref="ad:adapters"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
    <xs:element name="adapters">
        <xs:complexType>
            <xs:sequence>
                <xs:element maxOccurs="unbounded" ref="ad:adapter"/>
            </xs:sequence>
        </xs:complexType>
        <xs:unique name="adapterUnique">
            <xs:selector xpath="ad:adapter"/>
            <xs:field xpath="@name"/>
        </xs:unique>
    </xs:element>
    <xs:element name="adapter">
        <xs:complexType>
            <xs:attribute name="name" type="xs:string" use="required"/>
            <xs:attribute name="httpMethod" type="ad:httpMethodType" use="required"/>
        </xs:complexType>
    </xs:element>

    <xs:simpleType name="httpMethodType">
        <xs:restriction base="xs:string">
            <xs:enumeration value="get"/>
            <xs:enumeration value="post"/>
        </xs:restriction>
    </xs:simpleType>
</xs:schema>

其中要注意的是默認命名空間上要加前綴,比如xmlns:ad=“http://www.fgi.net.cn”,xs:selector標籤的xpath屬性和xs:element標籤的ref屬性要加前綴,引用自定義類型type屬性也需要加前綴。

要校驗的adapter-mapper.xml

<?xml version="1.0" encoding="UTF-8"?>
<node xmlns="http://www.fgi.net.cn"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://www.fgi.net.cn http://www.fgi.net.cn/adapter-mapper.xsd">
    <name>adapter-demo</name>
    <adapters>
        <adapter name="aa" httpMethod="get"/>
        <adapter name="bb" httpMethod="get"/>
    </adapters>
</node>

這樣是可以校驗通過的,如果adapter的name一樣,會提示錯誤:
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章