`
ljzforever
  • 浏览: 114659 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

xml schema的命名空间之研究

    博客分类:
  • xml
阅读更多

先放下将要进行说明的例子:
data.xml

 

<?xml version="1.0"?>
<root xmlns="www.ljzforever.com"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="www.ljzforever.com xsd.xsd">
 <emp>
  <id>1</id>
  <name>ljz1</name>
 </emp>
 <emp>
  <id>2</id>
  <name>ljz2</name>
 </emp>
 <emp>
  <id>3</id>
  <name>ljz3</name>
 </emp>
 <emp>
  <id>4</id>
  <name>ljz4</name>
 </emp>
</root>

 

xsd.xsd

 

<?xml version="1.0"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
  targetNamespace="www.ljzforever.com"
  elementFormDefault="qualified">
 <element name="root">
  <complexType>
   <sequence>
    <element name="emp" maxOccurs="unbounded">
     <complexType>
      <sequence>
       <element name="id" type="int" />
       <element name="name" type="string" />
      </sequence>
     </complexType>
    </element>
   </sequence>
  </complexType>
 </element>
</schema>

 

先讲schema

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

其实还有另一种写法

<xs:schema xmlns:xs=http://www.w3.org/2001/XMLSchema
我在这里倫了个懒,把它作为了默认的命名空间,如果按照下面的一种写法,就需要在每个schema标签前都加上xs:
这是固定语法

 

 targetNamespace="www.ljzforever.com"

表示在schema所定义的标签应作用于哪一个命名空间下。应用此schema的xml文件中如果有部分或全部标签想受此schema的控制,标签前必须使用此命名空间。

里面的www.ljzforever.com其实可以随便写,写abc都行

 

elementFormDefault="qualified"

有两个值:qualified和unqualified

首先要知道:运用了schema中声明的元素或者类型的Xml标签只能归到两个命名空间中的某一个去,这两个是,无名命名空间和由targetSchema属性指明的目标命名空间。

如果该值是 unqualified,实例xml的根元素必须有命名空间的的限定,这个命名空间必须是schema中定义的targetNameSpace。但是其下子元素无须也不允许用命名空间前缀限定目标命名空间。 子元素的命名空间为空命名空间。

如果该值是 qualified,实例xml根元素及其下所有子元素都必须通过命名空间前缀限定目标命名空间。这个命名空间必须是schema中定义的targetNameSpace

说的很拗口啊,我来解释一下,这个属性与targetNameSpace相关

前面不是说了一个schema只对特定命名空间下的标签起作用,

如果是qualified,则使用此schema的xml的每个标签必须使用此命名空间,因为我在前面使用的默认的命名空间,所以不需要在每个标签的前面加上命名空间前缀

如果是unqualified,则是只能在根标签上使用此命名空间,且子标签不能使用此命名空间,使用别的命名空间是可以的。但是起不到验证作用。

我不太明白为什么要弄个起不到验证作用的unqualified参数,反正我用的一般都是qualified

 

下面再来谈谈xml文件的

xmlns="www.ljzforever.com"

里面的值必须和targetNameSpace内定义的一样,我是倫了个懒,写成了默认的命名空间,如果写成一般的,则需要在所有子标签前加上命名空间前缀

 

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
固定写法,没什么好说的

 

 xsi:schemaLocation="www.ljzforever.com xsd.xsd">
固定写法,值由两部分组成,空格前面是与targetNameSpace内定义的一样,后面是xsd文件路径,因为我把它们放在了同一目录下,所以没有写很多路径

 

 

讲了这么多,其实你一定觉得这个命名空间很麻烦,其实xml也提供了无命名空间的解决方案:

 

data.xml

 

<?xml version="1.0"?>
<root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="xsd.xsd">
 <emp>
  <id>1a</id>
  <name>ljz1</name>
 </emp>
</root>

 

xsd.xsd

 

<?xml version="1.0"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
 <element name="root">
  <complexType>
   <sequence>
    <element name="emp" minOccurs="1" maxOccurs="unbounded">
     <complexType>
      <sequence>
       <element name="id" type="int" />
       <element name="name" type="string" />
      </sequence>
     </complexType>
    </element>
   </sequence>
  </complexType>
 </element>
</schema>

 

只不过把xsi:schemaLocation改成xsi:noNamespaceSchemaLocation,而后面直接跟文件路径,而不用写命名空间!

如果采取这种方式,xml文件中可以采用任意命名空间,或者不用,但是要注意保持一致:要用就用一样的,要么就都不用!

 

以下是我所参考的文章:

Schema中elementFormDefault="qualified"所起的作用

http://blog.csai.cn/user1/15907/archives/2007/16440.html

XSD schema文件中elementFormDefault 属性探讨

http://www.cnblogs.com/chnking/archive/2006/07/12/448849.html

XML Schema介绍之namespace

http://www.cnblogs.com/gzhnan/articles/1108442.html

还有w3school的

分享到:
评论

相关推荐

    XML Schema教程

    一本关于XML Schema的打包教程,深入浅出,系统性强,并附有相应实例。

    XML Schema简明教程-W3C.rar

    XML Schema 是基于 XML 的 DTD 替代者。 XML Schema 描述 XML 文档的结构。 XML Schema 语言也称作 XML Schema 定义(XML Schema Definition,XSD)。 在此教程中,你将学习如何在应用...XML Schema 支持命名空间

    xml schema实验报告

    shema基础 熟悉Schema的结构。 2、掌握Schema中的数据类型、命名空间、元素声明、属性声明。

    《XML》实验任务书 XML Schema 答案 解答

    假设SpyBase1.xml中的alias、mission、spy来自不同的命名空间中,如何在Schema中对其进行限定,请在XMLSPY中完成相应的xsd文档?修改SpyBase1.xml,并验证新的SpyBase1_2.xsd是否正确? [提交时间及内容] 最后...

    xml的命名空间.md

    xml的命名空间.md

    WCF返回xml格式时去除命名空间

    WCF返回xml格式数据时去除命名空间(比如xmlns="http://schemas.datacontract.org/2004/07/XmlRemoveNamespaceWcfService" xmlns:i="http://www.w3.org/2001/XMLSchema-instance")

    C#+XML+入门经典part2

    XML技术是近年来最热门的...主要内容包括:XML语法和格式良好的XML,XML命名空间,利用DTD和XML Schema进行XML验证,使用SOAP和Web服务,以及运用ADO.NET进行数据库访问等。本书还用两个案例分析来展示XML的具体应用。

    XSDInferencer:XSDInferencer 是一个自动 XML Schema 文档生成工具,它可以从 XML 正例中生成全面且正确的 XSD

    XSDInferencer 的主要优点: 100% 符合 XML 和 XSD 规范,包括正确的命名空间处理。 高度可配置,因此生成的模式更适合用户需求。 模块化且易于扩展。 它不仅可以根据节点名称,还可以根据它们的上下文来推断简单和...

    xml培训学习资料

    3.4 XML命名空间 3.5 开发工具XML Spy与XML实例   第四章 XML文档类型定义   第五章 XML Schema结构   第六章 层叠样式表 6.1 CSS简介 6.2 设置字体属性 6.3 设置色彩和背景图像属性 6.4 设置边界属性 ...

    对象转xml和xml轻松转对象

    XML Schema描述了XML文档的结构。可以用一个指定的XML Schema来验证某个XML文档,以 ... 命令介绍本节您将只用到Schema/WSDL视图

    C# XML入门经典

    主要内容包括:XML语法和格式良好的XML,XML命名空间,利用DTD和XML Schema进行XML验证,使用SOAP和Web服务,以及运用ADO.NET进行数据库访问等。本书还用两个案例分析来展示XML的具体应用。  本书适合于有一定的...

    Java and XML, 3rd Edition

    书中的主题如下: *XML基础,包括DTD、命名空间(namespace)、XML Schema和数据格式转换 (Transformation) *SAX应用程序编程接口,包括处理器接口、过滤器接口和写出接口 *DOM应用程序编程接口,...

    Spring实战之使用util:命名空间简化配置操作示例

    本文实例讲述了Spring使用util:命名空间简化配置操作。分享给大家供大家参考,具体如下: 一 配置 &lt;... xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance xmlns:p=http://www.springframew

    XML课件,自己的一点贡献

    学会如何使用 DTD 和Schema验证XML 掌握命名空间的使用 学会使用XSLT 学会使用XML数据岛 了解 XML的体系结构及优势 理解格式良好且有效的 XML 文档 学会如何使用 DTD 生成 XML 文档 理解命名空间

    JAVA与XML.rar

    书中的主题如下: XML基础,包括DTD、命名空间(namespace)、XML Schema和数据格式转换(Transformation) SAX应用程序编程接口,包括处理器接口、过滤器接口和写出接口 DOM应用程序编程接口,包括DOM第2层、第3层...

    Java与XML第三版本

    书中的主题为XML基础,包括DTD、命名空间(namespace)、XML Schema和数据格式转换(Transformation) SAX应用程序编程接口,包括处理器接口、过滤器接口和写出接口 DOM应用程序编程接口,包括DOM第2层、第3层和DOM ...

    xml入门教程/xml入门教程

    DTD不支持命名空间,解析器无法测试命名空间。 1、作用: 解决XML文档中命名冲突的问题,即将 XML文档与引用URI标识的名域相结合,来 限定其中的元素和属性名。 示例: &lt;?xml version="1.0" encoding="UTF-8" ...

    C#XML入门经典 C#编程人员必备的XML技能.part2

    在.NET中使用XML &lt;br&gt;3.1 XML如何适合.NET 3.1.1 XML 3.1.2 文档对象模型(DOM) 3.1.3 命名空间 3.1.4 DTD和XML Schema 3.1.5 XPath 3.1.6 XSLT 3.2 .NET Framework使用XML 3.2.1 配置...

    电力系统信息的XML描述

    Schema声明语句,包含Schema命名空间的声明;声明一个元素名为Substation的用户自定义的复杂数据类型,并通过嵌入复杂数据类型的定义实现用户自定义的复杂数据类型;声明一个Transformer元素;各个独立子元素的声明。

Global site tag (gtag.js) - Google Analytics