`
jsun
  • 浏览: 72033 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

SCHEMA笔记-命名空间

阅读更多

1       XML Schema概述

1.1    XML Schema的功能

Ø           定义可出现在文档中的元素

Ø           定义可出现在文档中的属性

Ø           定义哪个元素是子元素

Ø           定义子元素的次序

Ø           定义子元素的数目

Ø           定义元素是否为空,或者是否可包含文本

Ø           定义元素和属性的数据类型

Ø           定义元素和属性的默认值以及固定值

 

1.2    XML SchemaDTD比较

Ø           XML Schema 可针对未来的需求进行扩展

Ø           XML Schema 更完善,功能更强大

Ø           XML Schema 基于XML编写

Ø           XML Schema 支持数据类型

Ø           XML Schema 支持命名空间

 

1.3    XML Schema数据支持特点

Ø           可更容易地描述允许的文档内容

Ø           可更容易地验证数据的正确性

Ø           可更容易地与来自数据库的数据一并工作

Ø           可更容易地定义数据约束(data facets

Ø           可更容易地定义数据模型(或称数据格式)

Ø           可更容易地在不同的数据类型间转换数据

 

2       XSD元素

 

2.1    命名空间

本章节举例:

<?xml version="1.0" encoding="UTF-8"?>

<xsd:schema xmlns="http://schema.example.com/schema/example" xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace=" http://schema.example.com/schema/example" />

Ø      xmlns

A.        命名空间类似于java的包package概念,它的主要目的也是为了解决名字冲突。

B.        命名空间被声明为元素的属性。并不一定只在根元素声明命名空间;而是可以在 XML 文档中的任何元素中进行声明。声明的命名空间的范围起始于声明该命名空间的元素,并应用于该元素的所有内容,直到被具有相同前缀名称的其他命名空间声明覆盖其中,元素内容是指该元素的 <opening-tag> </closing-tag> 之间的内容。命名空间声明如下:

<someElement xmlns:pfx="http://www.foo.com" />

C.        命名空间的名字不一定需要URL的形式

D.       “xmlns”定义了命名空间,如上例就定义了本XSD的命名空间为

http://schema.example.com/schema/example

E.        一个XSD可以没有命名空间。在一个XSD文件中,没有前缀限定的元素默认引用的是”xmlns”指定的命名空间的元素;命名空间“http://www.w3.org/2001/XMLSchema”是由w3c 定义的,它定义了elementschemacomplextType等等一大批元素,当我们要使用这些元素或它定义的变量时,就必须引用该命名空间。

F.        通常为了书写的简单,我们对一个命名空间进行缩写或称为起个别名。

 

Ø      默认命名空间与无命名空间

如果范围中没有默认命名空间,便不存在命名空间。{默认命名空间} 是使用 xmlns 显式声明的命名空间。如果未使用 xmlns 声明 {默认命名空间},则不能说元素位于 {默认命名空间} 中。这种情况下,我们可以说元素位于 {无命名空间} 中。当已声明的 {默认命名空间} 被取消声明时,也将应用 {无命名空间}

摘要:

  • 声明的命名空间的范围起始于声明该命名空间的元素,并应用于该元素的所有内容,直到被具有相同前缀名称的其他命名空间声明覆盖
  • 带前缀的命名空间和 {默认命名空间} 都可以被覆盖。
  • 带前缀的命名空间和 {默认命名空间} 都可以被取消声明。
  • {默认命名空间} 不直接应用于属性,因此要将命名空间应用于属性,必须显式使用限定前缀。
  • 仅当显式声明 {默认命名空间} 时,该命名空间才存在。如果未声明默认命名空间,则不应使用术语 {默认命名空间}
  • 如果范围中没有默认命名空间,便不存在命名空间。

 

Ø      命名空间缩写

“命名空间缩写“有的地方又称命名空间前缀;类似于给某个事件起个别名,它使用指令

xmlns:xsd=” http://www.w3.org/2001/XMLSchema指定,

例子就指定了 http://www.w3.org/2001/XMLSchema的缩写为xsd,所以当我们使用xsd:schema时,就是使用了命名空间“http://www.w3.org/2001/XMLSchema定义的元素schema。如果需要可以在一个XSD中,使用“xmls:aliaseNameXX”来定义多个命名空间的缩写。

 

Ø      目标命名空间

XSD中用”targetNamespace”指令定义的是目标命名空间,一个XSD中只能有一个目标命名空间;通常我们用w3c已定义的元素来构建新的元素,而这些新的元素就保留在目标命名空间中。一个XSD可以没有目标命名空间,但却不能给它指定一个空URL,这时,该XSD构建的元素和属性就保留在无目标命名空间中。要验证相应的 XML 实例,相应的 XML 实例必须使用 http://www.w3.org/2001/XMLSchema-instance 命名空间中的 noNamespaceSchemaLocation 属性来引用没有目标命名空间的 XML 模式。

 

Ø      取消命名空间

Namespaces in XML 1.0 W3C 推荐标准不允许取消绑定已经绑定的前缀,而 Namespaces in XML 1.1 W3C 推荐标准则允许这样做。1.0 没有理由不允许取消绑定,不过该错误已经在 1.1 中得到修正。不必知道此差别,这是因为支持 Namespaces in XML 1.1 XML 分析器并不多。

尽管取消绑定带前缀的命名空间有一些差别,但这两个版本均允许您取消绑定或删除已声明的 {默认命名空间}:用其他 {默认命名空间} 声明(覆盖声明中的命名空间为空)覆盖已声明的 {默认命名空间}。取消绑定命名空间与未声明命名空间具有同样的效果。此处的 Sherlock Holmes - III Sherlock Holmes - I 的元素 BookTitle Author 与命名空间 http://www.library.com 关联,而 Sherlock Holmes - II 的元素 purchaseTitle Author {没有命名空间}

<someElement xmlns="" />
 
<?xml version="1.0"?>
<Book xmlns="http://www.library.com">
<Title>Sherlock Holmes - I</Title>
<Author>Arthur Conan Doyle</Author>
<purchase xmlns="">
<Title>Sherlock Holmes - II</Title>
<Author>Arthur Conan Doyle</Author>
</purchase>
<Title>Sherlock Holmes - III</Title>
<Author>Arthur Conan Doyle</Author>
</Book>

此处是根据 XML 1.0 规范中的命名空间取消绑定前缀的无效示例,而根据 XML 1.1 中的命名空间取消绑定前缀则是有效的:

<purchase xmlns:lib="">

从此处开始,前缀 lib 不能在 XML 文档中使用,因为只要您在元素 purchase 的范围内,它就保持未声名状态。当然,您完全可以再次定义它

 

Ø         elementFormDefault限定与未限定

XML 模式中,可以选择指定实例文档是必须限定所有元素和属性,还是只限定全局声明的元素和属性。无论做出什么样的选择,都将验证整个实例。这样做的目的是:可管理性。当我们选择限定时,我们指定实例中的所有元素和属性都必须有一个命名空间,这将增强实例的命名空间复杂性。比如,当因将某些局部声明变为全局声明和将某些全局声明变为局部声明而修改了模式时,根本不会影响实例文档。相反,如果选择非限定,则指定只有实例中全局声明的元素和属性才必须具有命名空间,从而隐藏实例的命名空间复杂性。但在此情形下,比如,当因将某些局部声明变为全局声明和将某些全局声明变为局部声明而修改了模式时,将影响所有实例文档 ——且实例不再有效。如果试图根据已修改的 XML 模式验证该实例,则 XML 模式验证器将报告验证错误。因此,必须根据 XML 模式中所作的修改修正命名空间,才能重新使该实例有效。

<?xml version="1.0" encoding="US-ASCII"?>

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

xmlns:tns="http://www.library.com"

targetNamespace="http://www.library.com"

elementFormDefault="qualified">

attributeFormDefault="unqualified">

 

<element name="Book" type="tns:BookType" />

分享到:
评论

相关推荐

    张龙 Schema DOM笔记

    - 支持命名空间,便于解决名称冲突问题。 #### 二、SimpleType与ComplexType的区别 1. **SimpleType**: - SimpleType类型的元素没有子元素,也没有属性。 - 适用于简单数据类型如字符串、整数等。 2. **...

    xml schema 学习笔记

    在学习 XML Schema 之前,需要具备基本的 XML 和 XML 命名空间知识。如果您不熟悉这些知识,可以访问 http://www.w3school.com.cn/index.html 进行学习。 XML Schema 的主要特点包括: 1. 定义可出现在文档中的...

    李君老师JavaEE笔记-Spring中集成Dwr

    1. **整合Spring与DWR配置**:在原有的Spring配置文件中添加DWR相关的命名空间,并指定DWR配置的Schema位置,这使得Spring和DWR的配置可以无缝结合。 2. **DWR配置简化**:使用XML Schema配置方式,可以简化配置,...

    尚硅谷Webservice学习笔记

    - `xmlns`属性用来引入一个命名空间,其值为Schema文件的命名空间值。 - `schemaLocation`属性则指定了引用的Schema文件的具体位置,它包含了命名空间和对应的文件路径。 2. HTTP协议: - HTTP(Hypertext ...

    Schema学习

    PostgreSQL的Schema同样是一个逻辑上的命名空间,允许在一个数据库中组织多个独立的命名空间。 **Schema在工具中的使用** 1. **数据库设计工具**: 如MySQL Workbench、SQL Server Management Studio (SSMS)、...

    北京圣思园xml学习笔记

    - 支持命名空间,避免元素名称冲突。 #### SimpleType与ComplexType - **SimpleType**:用于定义没有子元素且没有属性的元素类型。 - **ComplexType**:用于定义包含子元素或属性的复杂数据类型。 - **...

    SOAPUI学习笔记(1-150页)

    在实际操作中,创建和引用XMLSchema文件需要明确指定XML命名空间,这是一种避免元素和属性名冲突的方法。对于复杂类型的定义,可以使用XMLSchema来定义包含其他元素的复合元素,以及对元素或属性的内容施加各种限定...

    Schama —— Xml文档约束技术 学习笔记

    3. **命名空间支持**:XML Schema支持命名空间,这使得在大型项目中可以避免元素和属性名称的冲突,便于代码组织和重用。 4. **约束和验证**:通过XML Schema,我们可以为XML文档设置各种约束,如必须存在的元素、...

    XML应用开发(软件品牌)-1期 第3单元 单元项目实践-使用XML Schema定义描述网上订单信息的XML标签.doc

    这个实践旨在帮助我们掌握XML Schema的使用,包括创建XML Schema文档、定义XML标签、验证XML数据、使用内置简单类型和复杂类型,以及理解命名空间的概念。 首先,实践目标是创建XML Schema文档,定义一套描述网上...

    spring使用annotation整合dwr笔记

    - **引入命名空间**:为方便配置,首先引入必要的命名空间和XSD schema引用。 ```xml &lt;!-- 引入命名空间 --&gt; &lt;beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi=...

    XML学习笔记

    - **elementFormDefault**: 指定了该Schema中的元素是否默认限定到命名空间中。 - `&lt;xs:element&gt;`: 定义了一个名为“book”的元素,类型为“bookType”。 - `&lt;xs:complexType&gt;`: 定义了一个复合类型的元素,它包含了...

    基于Jena学习笔记,新手使用更方便

    了解vCard的命名空间和规范对于理解教程内容至关重要。你可以在W3C的官方网站上找到vCard-RDF的详细信息。 **5. 使用Jena API** Jena提供了丰富的API,包括RDF模型操作、查询执行、本体处理等。通过阅读Jena的HTML...

    XSD学习笔记

    - **`xmlns:xs="http://www.w3.org/2001/XMLSchema"`**:声明 XML Schema 的命名空间,通常使用 W3C 提供的标准命名空间。 - **`targetNamespace`**:指定此 XSD 定义的目标命名空间。这有助于区分不同源的元素和...

    spring总结笔记

    - 在`beans.xml`文件中,需要声明Spring的XML命名空间以及对应的XSD约束文件。这样做的目的是为了能够正确解析Spring特有的标签和属性,并且在IDE中提供代码补全等功能。示例如下: ```xml ...

    韩顺平oracle笔记

    方案相当于命名空间,与用户名相同,当用户创建数据对象时,这些对象将归属到相应的方案下。 最后,笔记总结了数据库实例、表空间、用户、方案及数据对象之间的关系。一个实例可以有多个表空间,而一个用户可以访问...

    MLDN学习笔记 —— XML学习笔记

    1. **命名空间**:通过引入命名空间,可以避免元素名称的冲突,如`&lt;xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"&gt;`。 2. **DTD(Document Type Definition)**:定义XML文档的结构,用于验证文档是否符合...

    Spring学习总结笔记

    配置文件遵循XML规范,需要指定命名空间和schema位置,如示例所示。 4. **加载配置文件的三种方式** - **ClassPathXmlApplicationContext**:从类路径下加载配置文件。 - **FileSystemXmlApplicationContext**:...

    XML笔记(总结XML精华TXT)

    4. **命名空间**:XML命名空间用于解决元素名称的冲突问题,通过使用前缀(如`xmlns:prefix="namespace"`)来区分来自不同来源的元素。 5. **文档类型定义(DTD)**:DTD是用来定义XML文档结构的规范,它包含了元素...

Global site tag (gtag.js) - Google Analytics