xmlns 與 targetNamespace 的解釋

test.xsd文件:

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema elementFormDefault="qualified" 
targetNamespace="http://xxx/myxml"
xmlns:xs="http://www.w3.org/2001/XMLSchema" 
xmlns="http://xxx/myxml">
    <xs:element name="my-document">
        <xs:complexType>
            <xs:choice>
                <xs:element name="my-mn"/>
                <xs:element name="my-case"/>
            </xs:choice>
            </xs:complexType>
    </xs:element>
    <xs:element name="my-mn"/>
    <xs:element name="my-case">
        <xs:complexType>
            <xs:choice>
                <xs:element ref="my-mn"/>
            </xs:choice>
        </xs:complexType>
    </xs:element>
</xs:schema>

test.xml文件:

<?xml version="1.0" encoding="UTF-8"?>
<my-document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns="http://xxx/myxml" 
xsi:schemaLocation="http://xxx/myxml test.xsd">
<my-case>
<my-mn>
</my-mn>
</my-case>
</my-document>


targetNamespace 是一個被xml文件某些元素的xmlns或xmlns:xxx屬性引用的目標命名空間值,其值一般以URI形式存在. 它也能夠被自身xsd文件schema元素的xmlns屬性引用.(紅色字體部分) xmlns或xmlns:xxx決定了某元素的歸屬問題,也包括 ref 所指向的值, 如:<xs:element ref="my-mn"/>中的 my-mn. 這裏的問題就是: xsd文件中紅色字體部分: xmlns="http://xxx/myxml" 是否必定要出現? 答案是:不必定. 在這個xsd中,它是必定要出現的, 不然 <xs:element ref="my-mn"/> 中的 my-mn 找不到命名空間, 若是把它改爲 <xs:element name="my-mn"/> ,則能夠不出現. 在xml文件中,若是使用的 xsd 定義的元素(無前綴),則 xmlns="http://xxx/myxml" 必須出如今xml文件中,且跟targetNamespace 的值保持一致. 而 xsi:schemaLocation 則是該 xsd文件的真實地址(每兩個值爲一對,取自第二個值), 不然沒法經過 schema 驗證.
相關文章
相關標籤/搜索