码迷,mamicode.com
首页 > 其他好文 > 详细

XML文档中如何引入Schema

时间:2014-05-27 04:14:00      阅读:327      评论:0      收藏:0      [点我收藏+]

标签:xml schema

   接触XML有一段日子了,但一直都是复制粘贴,或者照着例子写,没有真正地理解。

今天,又温习了一下XML,有种陌生又熟悉的感觉。。。

   言归正传,先看一个简单的schema文件(05.xsd)

bubuko.com,布布扣

语法就不说了,这里主要解释一下schema元素的前三个属性:

1. xmlns="http://www.w3.org/2001/XMLSchema"

   声明默认的命名空间,表示这个schema文件中的所使用的元素和数据类型都来自      http://www.w3.org/2001/XMLSchema这个命名空间

2. targetNamespace="http://www.example.org/05"

http://www.example.org/05这个命名空间

3. xmlns:tns="http://www.example.org/05"

   表示对http://www.example.org/05这个命名空间中所定义的元素的引用,在这个文档中所有对这个命名空间中定义的元素的引用都要加tns前缀


   接下来,在看如何在xml文档中引用这个schema文件

bubuko.com,布布扣

   xsi:schemaLocation="http://www.example.org/05 05.xsd"这句话告诉xml到05.xsd文件中找http://www.example.org/05这个命名空间,这句话就在当前xml文件中引入了schema文件05.xsd。


   我当时有一个疑问:schema文件中声明的targetNamespace、xml文档中的xmlns、xml文档中引用的schema文件的命名空间(即schemaLocation属性中的写的那个)这三者之间有什么关联呢?

   后来,我发现schemaLocation中指定的命名空间要和这个被引用的schema文件中声明的targetNamespace相同,xml会在这个schema文件中找这个指定的命名空间中所定义的元素规则。原来如此,这一点好理解,但是我试过在xml文档中声明的命名空间和它所引用schema时指定的命名空间不同也不能正确校验。比如:上面这个例子中,我不写xmlns或者将它写成xmlns="http://www.example.org/08"都不能到达校验的目的,总是有一个警告:No grammar constraints (DTD or XML schema) detected for the document.

   经过一番思考,我终于想通了。关键在于定义schema文件时targetNamespace属性,这个属性指明在这个schema文件中定义的元素(注意:是定义的元素。对于上面的例子来说,name和birthday才是定义的元素,像element、complexType等不是这里所说的定义的元素。)都来自targetNamespace所指定的这个命名空间。在xml文档中引用了这个schema文件,如何不定义命名空间或者声明的命名空间和schema定义的元素的命名空间不同就无法验证,xml文档中元素在一个命名空间,而schema在另一个命名空间,不可能用A命名空间下的校验规则去校验B命名空间下的元素。例子中只引入了一个schema文件,其实可以引用多个的,这里不作介绍。


   接着,说一说在xml文档中引入schema文件

   有两个属性是做这个事的:schemaLocation和noNamespaceSchemaLocation

   noNamespaceSchemaLocation属性引用没有命名空间的schema文件

   schemaLocation属性引用有命名空间的schema文件


   最后,附上几种截图

bubuko.com,布布扣


bubuko.com,布布扣

bubuko.com,布布扣


小结:xml声明的元素的命名空间要和被引用的schema文件的命名空间相匹配才能达到校验的效果。

   现在,回头再看spring的配置文件,有种莫名的喜悦。。。

bubuko.com,布布扣


   参考:http://msdn.microsoft.com/zh-cn/library/ms256139(v=vs.80).aspx

本文出自 “十里稻花香” 博客,请务必保留此出处http://5880861.blog.51cto.com/5870861/1412883

XML文档中如何引入Schema,布布扣,bubuko.com

XML文档中如何引入Schema

标签:xml schema

原文地址:http://5880861.blog.51cto.com/5870861/1412883

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!