`
ljzforever
  • 浏览: 117176 次
  • 性别: 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中命名空间的使用是非常重要的,命名空间可以使我们能够从不同的词汇表中区分定义以及声明。目标命名空间使我们能够区分在XML Schema语言词汇表中的元素声明和在一个其他的假定的化学语言词汇表中的元素...

    XmlSchema-1.4.7.jar

    XmlSchema-1.4.7.jar 是一个Java库,它实现了W3C的XML Schema标准,用于处理XML Schema文档。这个版本(1.4.7)可能是该库的一个稳定版本,提供给用户免费使用。XML Schema是XML的一种规范,定义了如何验证XML文档的...

    XML Schema教程

    - **XML 以及 XML 命名空间**:熟悉 XML 的基本概念和命名空间的使用。 - **DTD 的基本了解**:尽管 XML Schema 是 DTD 的替代品,但了解 DTD 的基本原理有助于更好地理解 XML Schema 的优势和特点。 通过上述内容...

    xmlschema-core-2.0.3的jar

    4. **命名空间管理**:XML Schema支持命名空间,库能有效地管理和处理命名空间,确保正确解析和引用元素和属性。 5. **错误报告**:在验证过程中,如果发现不符合规范的地方,会生成详细的错误信息,帮助开发者调试...

    XML与XMLSchema

    【XML与XMLSchema】 XML,全称可扩展标记语言(eXtensible Markup Language),是一种基于标准通用标记语言SGML的简化版本,由万维网联盟(W3C)于1996年开始制定,并在1998年2月10日发布了XML 1.0规范。它的设计...

    apache xmlschema api文档

    - 处理命名空间:API支持处理XML文档中的命名空间,以便正确解析和验证具有多个命名空间的文档。 在实际开发中,Apache XML Schema API通常与DOM(Document Object Model)、SAX(Simple API for XML)或StAX...

    XMLSchema经典例题

    2. **命名空间**:XML Schema支持命名空间,这使得在同一文档中可以使用相同的名字而不引起冲突。通过使用`xmlns`属性,我们可以为元素和类型指定独特的命名空间前缀。 3. **约束和验证**:XML Schema提供了一套...

    XMLSchema.chm

    这个“XMLSchema.chm”文件很可能是一个帮助文档,旨在为学习XML Schema的用户提供详细的指导和参考资料。下面我们将深入探讨XML Schema的相关知识点。 1. **XML Schema的作用**:XML Schema的主要功能是规范XML...

    XML Schema简明教程-W3C.rar

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

    西工大服务计算实验2-1_XML Schema

    4. 命名空间(Namespace):用于区分相同名称但来自不同来源的元素和属性。 5. 限制和约束(Constraints):如最大长度、最小值、枚举值等,用于规定元素或属性的具体规则。 接下来,你需要掌握如何创建XML文档。...

    xml Schema 例子(C#写的验证程序)

    在C#中,我们通常使用System.Xml.Schema命名空间下的类来处理XML Schema。以下是一些关键类: 1. **XmlSchema**: 这是XML Schema的根对象,用于表示整个XML Schema文档。 2. **XmlSchemaSet**: 用于存储和加载多个...

    XML Schema xsd XML Schema xsd

    &lt;note xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://example.com/note.xsd"&gt; &lt;to&gt;George &lt;from&gt;John &lt;heading&gt;Reminder &lt;body&gt;Don't forget the meeting! ``` 对应的 ...

    xmlschema-1.4.5.jar.zip

    "xmlschema-1.4.5.jar.zip"是一个包含XML Schema相关实现的Java类库,主要用于处理和验证XML文档是否符合特定的XSD规范。 在Java环境中,`xmlschema-1.4.5.jar`是一个关键组件,它提供了一系列API供开发者使用,...

    xml Schema学习

    1. **命名空间**:XML Schema支持命名空间,使得可以在同一文档中定义多个独立的XML模式,避免了元素和属性名的冲突。 2. **数据类型**:XML Schema提供了丰富的内置数据类型,如字符串、整数、浮点数、日期等,还...

    xml schema complete reference

    XML Schema支持命名空间,允许在不同的组织和领域中重用元素和属性,同时它引入了数据类型系统,可以对XML元素和属性进行类型约束,如整数、日期、浮点数等。 以下是XML Schema的一些核心概念和特性: 1. **元素...

    XML Schema初窥

    3. **命名空间支持**:XML Schema支持名称空间,能够处理多个不同来源的元素和属性,避免命名冲突。DTD不支持名称空间。 4. **更强大的约束机制**:XML Schema提供了更多的方式来约束元素和属性,如最大长度、最小...

    XML的schema部分代码

    3. **命名空间支持**:XML Schema支持命名空间,这使得在不同的组织或项目中可以使用相同的元素和属性名称而不会产生冲突。 4. **复杂类型定义**:除了基本数据类型,XML Schema还支持创建复杂的元素结构,如组合...

Global site tag (gtag.js) - Google Analytics