XML_Schema Namespace

转:http://blog.sina.com.cn/s/blog_68d733750101n7rd.html


(1)带命名空间
xml文件node.xml:
<?xml version="1.0"?>
<note
xmlns="http://www.w3school.com.cn"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.w3school.com.cn note.xsd">

<to>George</to>
<from>John</from>
<heading>Reminder</heading>
<body>Don't forget the meeting!</body>
</note>

对应的XSD文件node.xsd: 


<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" 

//using SML Schema to defaine gramme

//targetNamespace 表示所有元素to from等都属于targetNamespace这命名空间的


<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.w3school.com.cn"
xmlns="http://www.w3school.com.cn"
elementFormDefault="qualified">

<xs:element name="note">
<xs:complexType>
<xs:sequence>
<xs:element name="to" type="xs:string"/>
<xs:element name="from" type="xs:string"/>
<xs:element name="heading" type="xs:string"/>
<xs:element name="body" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>



(2)不带命名空间
xml文件node.xml:
<?xml version="1.0"?>
<note
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="note.xsd">
<to>George</to>
<from>John</from>
<heading>Reminder</heading>
<body>Don't forget the meeting!</body>
</note>

对应的XSD文件node.xsd:
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified">
<xs:element name="note">
<xs:complexType>
<xs:sequence>
<xs:element name="to" type="xs:string"/>
<xs:element name="from" type="xs:string"/>
<xs:element name="heading" type="xs:string"/>
<xs:element name="body" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>


主要存在两区别:
(1)指定命名空间
带命名空间的XSD文件要指定命名空间targetNamespace,同样xml文件也要设置该命名空间xmlns;
不带命名空间时XSD文件和xml文件都不用设置
(2)设置XSD验证的方式不一样
带命名空间的xml用 schemaLocation="命名空间 xsd文件" 设置
不带命名空间的noNamespaceSchemaLocation="xsd"文件设置


但是不管有没有自定义命名空间,xml和xsd文件都要放在同一目录下



_____________________________________________

  例二:重点理解Schema文档使用自身定义类型

     xsd文件中定义了一个targetNameSpace后,其内部定义的元素,属性,类型等都属于该targetNameSpace,其自身或外部xsd文件使用这些元素,属性等都必须从定义的targetNameSpace中找。修改一下note.xsd,去除默认名称空间的声明,并添加一个复杂类型:

 

[html]  view plain copy
  1. <?xml version="1.0"?>  
  2. <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"  
  3. targetNamespace="http://www.w3schools.com"  
  4. elementFormDefault="qualified">  
  5. <xsd:element name="note">  
  6.       <xsd:complexType>  
  7.         <xsd:sequence>  
  8.        <xsd:element name="to" type="xs:string"/>  
  9.        <xsd:element name="from" type="xs:string"/>  
  10. <xsd:element name="heading" type="xs:string"/>  
  11.        <xsd:element name="body" type="xs:string"/>  
  12.        </xsd:sequence>  
  13.       </xsd:complexType>  
  14. </xsd:element>  
  15. <xsd:element name="Student" type="stu"/>   
  16.   <xsd:complexType name="stu">   
  17.   <xsd:sequence>   
  18.    <xsd:element name="Name" type="xs:string"/>   
  19.    <xsd:element name="Class" type="xs:string"/>   
  20.   </xsd:sequence>   
  21.  </xsd:complexType>   
  22. </xsd:schema>  


        上述代码中,复杂类型stu是找不到的,因为你定义了一个名称空间"http://www.w3schools.com",该复杂类型存在于"http://www.w3schools.com"中,因此应该修改代码如下:

 

 

[html]  view plain copy
  1. <?xml version="1.0"?>  
  2. <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"  
  3. targetNamespace="http://www.w3schools.com"  
  4. xmlns:student="http://www.w3schools.com"  
  5. elementFormDefault="qualified">  
  6. <xsd:element name="note">  
  7.       <xsd:complexType>  
  8.         <xsd:sequence>  
  9.        <xsd:element name="to" type="xs:string"/>  
  10.        <xsd:element name="from" type="xs:string"/>  
  11. <xsd:element name="heading" type="xs:string"/>  
  12.        <xsd:element name="body" type="xs:string"/>  
  13.        </xsd:sequence>  
  14.       </xsd:complexType>  
  15. </xsd:element>  
  16. <xsd:element name="Student" type="student:stu"/>   
  17.   <xsd:complexType name="stu">   
  18.   <xsd:sequence>   
  19.    <xsd:element name="Name" type="xs:string"/>   
  20.    <xsd:element name="Class" type="xs:string"/>   
  21.   </xsd:sequence>   
  22.  </xsd:complexType>   
  23. </xsd:schema>  


        若自身并不使用重用组件,仅供外部使用的话,则只定义targetNameSpace就可以,不用指定别名。
        通过上面的例子,我们可以很深刻的理解targetNameSpace。targetNamespace定义了Schema定义的新元素与属性的名称空间。而"http://www.w3.org/2001/XMLSchema"名称空间则定义了element, attribute, complexType, group, simpleType等元素。

 

    理解了上面的两个例子,Schema的命名空间的内容应该就明了了。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值