xmlns 与 targetNamespace 的解释

依然范特西╮ 提交于 2019-12-26 23:01:37
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 验证.

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!