XML Schema学习笔记(一)

原创 2007年10月03日 15:50:00

XML Schema学习笔记(一)

XML规范包括DTD(Document Type Definition,文档类型定义)DTD可用于描述XML标记语言,并检验标记语言实例的有效性。虽然多年来已经证明DTD非常有用,但仍有一定的局限性。为了解决DTD的局限性,W3C创建了一种用于描述标记语言的新方法,即XML Schema

1.  XML Schema的优势

读取XML实例的解析器要通过将XML实例与DTD比较来确定实例是否有效。为使XML实例有效,该实例必须符合它的DTD,即必须按正确的顺序和多样性来使用由DTD的元素。同时DTD中只提供了四种的数据类型,即EMPTYANY、元素内容和元素与文本的混合内容。

XML Schema提供了很强的类型系统,包括简单的原始类型以及更为复杂的类型。XML Schema还允许通过扩展或限制简单或者复杂类型来创建新类型。此外,XML模式支持用XML命名空间创建由多种标记语言构成的复合文档。

2.  XML Schema文档

Schema以复杂类型和简单类型的方式描述XML文档的结构。复杂类型描述如何组织、嵌套元素;简单类型是由元素和特性包含的原始数据类型。

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

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

      xmlns:cs="http://www.Cactus.org/cactus"

      targetNamespace="http://www.Cactus.org/cactus">

      <element name="address" type="cs:ChinaAddress"/>

      <complexType name="ChinaAddress">

             <sequence>

                    <element name="name" type="string"/>

                    <element name="street" type="string"/>

                    <element name="city" type="string"/>

                    <element name="state" type="string"/>

                    <element name="zip" type="string"/>

             </sequence>

      </complexType>

</schema>

Schema文档的根元素总是schema元素。元素声明和类型声明嵌套于schema元素中。上述例子中声明了一个名为ChinaAddress的复杂类型和该类型的一个名为address的元素。

2.1  简单类型

简单类型类似于Java原始类型,其中不能再包含其他元素,只能包含数据。

XML Schema内置简单类型

简单类型

定义

string

符合UCS的符号序列

normalizedString

没有结束符、开始符和制表位的字符串

token

没有空白、开始符合制表位的字符串

NMTKEN

特性中使用的令牌

integer

任何大小的十进制整数

float

符合IEEE单精度32位浮点类型的小数

boolean

布尔值

Time

以小时、分、秒、毫秒格式表示的时间

date

以世纪、年、月和日格式表示的日期

2.2 复杂类型

Schema可以声明复杂类型。复杂类型定义了如何组织包含有其他元素的元素,类似于有字段没有方法的Java类。

2.2.1 元素序列

各模式中的大多数complexType声明均会包含一个列有一个或者多个element元素定义的sequence元素。其中也定义了元素出现的顺序以及每个元素的数据类型。

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

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

       xmlns:cs="http://www.Cactus.org/cactus"

       targetNamespace="http://www.Cactus.org/cactus">

       <element name="purchaseOrder" type="cs:PurchaseOrder"/>

       <element name="address" type="cs:ChinaAddress"/>

 

       <complexType name="PurchaseOrder">

              <sequence>

                     <element name="accountName" type="string"/>

                     <element name="accountNumber" type="unsignedShort"/>

                     <element name="shipAddress" type="cs:ChinaAddress"/>

                     <element name="billAddress" type="cs:ChinaAddress"/>

                     <element name="book" type="cs:Book"/>

                     <element name="total" type="float"/>

              </sequence>

       </complexType>

       <complexType name="ChinaAddress">

              <sequence>

                     <element name="name" type="string"/>

                     <element name="street" type="string"/>

                     <element name="city" type="string"/>

                     <element name="state" type="string"/>

                     <element name="zip" type="string"/>

              </sequence>

       </complexType>

<schema>

复杂类型可以建立在其他复杂类型之上,以创建能够方便描述非常复杂的XML结构的丰富类型。

2.2.2 限定元素和非限定元素

可以利用命名空间使元素限定或者非限定,即XML文档中的元素可以有限定名称前缀,也可以没有。但全局元素和全局特性必须总为限定。有个例外,属于默认命名空间的全局元素不需要用前缀来限定。

XML Schema定义了elementFormDefault特性和attributeFormDefault特性,这两个特性用于确定XML实例中的局部元素是否需要前缀来限定。

2.2.3 指定模式的位置

为根据一个或多个Schema检验XML文档,用户需要指定要使用的Schema。通过用schemaLocation特性指定Schema的位置就行。

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

<purchaseOrder xmlns="http://www.Cactus.org/cactus"

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

       xsi:schemaLocation="http://www.Cactus.org/cactus

              http://www.Cactus.org/cactus/po.xsd">

如果需要的话,可以指定若干个Schema

 

XML三部曲之Schema详解

前几篇博客讨论了XML及DTD的用法,通过讨论了解到XML是一种元标记语言,通过它可以定义新的标记语言。另外,文档定义模型为XML文档提供了规范,DTD的引入虽然解决了XML文档的规范化问题,但它文件...
  • zhang_xinxiu
  • zhang_xinxiu
  • 2013年11月28日 22:16
  • 2765

XML Schema学习笔记(一)

1.SchemaXML Schema是基于XML的DTD替代品XML Schema描述XML文档的结构XML Schema语言也指XML Schema Definition(XSD)XML Schem...
  • buoymp
  • buoymp
  • 2006年09月07日 23:24
  • 969

XML Schema基本用法

Schema与DTD一样,都是对xml文件的规范和约束,但是Schema比DTD更加细粒度、数据类型更多、功能更加强大,所以现在大多数都选择Schema。Schema也是一个XML文件,因此编写Sch...
  • u013516966
  • u013516966
  • 2015年01月26日 13:37
  • 1701

使用schema校验xml

一、背景  在大型的项目开发中,我们往往要是用xml进行一些规范化的处理。这时候就需要有高手先做好上层的一些规则。这时候往往就会用到schema对xml进行一个规范化的校验  二、代码实践  ...
  • gxsenjoy
  • gxsenjoy
  • 2016年12月02日 14:53
  • 672

跟我学XML Schema(转)

中国XML论坛里的一片帖子如何写一个最简单的XML Schema文档呢? 首先,我们写出一个最简单的XML文档.hello.xml------------------- Hello World!!(一...
  • Jofee
  • Jofee
  • 2005年01月16日 03:18
  • 1584

同时使用 xml, schema 和 xslt 的例子

以前从来没有用过 schema, 这次希望能给我的 xml 文件加上 namespace, schema, 然后用 xslt 转换成 html, 没想到花了不少功夫。现在我把工作正常的结果记录下来,希...
  • jadedrip
  • jadedrip
  • 2005年03月02日 15:04
  • 1352

schema、dtd、xml之间的关系

schema的专业叫法是模式,每一个web.xml都要 ============ schema和dtd都是对xml文件的进一步约束: 1xml文件中可以用哪些元素,如引用了web-app_2.4.xs...
  • Ideality_hunter
  • Ideality_hunter
  • 2016年05月29日 15:27
  • 2895

XML学习笔记 第一记

2012-08-05 1、XML:eXtensible Markup Language,可扩展元标记语言。 2、DTD:Document Type Definition,文档类型定义,用于...
  • qinxiandiqi
  • qinxiandiqi
  • 2014年06月18日 11:07
  • 1048

xml:schema详解

XMLSchema 详解 博客分类:  XML XML数据结构正则表达式Struts  什么是Schema?  在计算机软件中,Schema这个词在不同的应用中有不同的含...
  • yippeelyl
  • yippeelyl
  • 2016年05月20日 15:13
  • 777

XML Schema学习教程(一)-XML Schema介绍

Introduction to XML Schema [XML Schema介绍]翻译:linqingfeng 英语原文: http://www.w3schools.com/schema/defaul...
  • linqingfeng
  • linqingfeng
  • 2006年05月02日 01:09
  • 2302
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:XML Schema学习笔记(一)
举报原因:
原因补充:

(最多只允许输入30个字)