XML三部曲之三—Schema

前端之家收集整理的这篇文章主要介绍了XML三部曲之三—Schema前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。



一、定义

可扩展标记语言结构,全称XMLSchemaXML Schema Definition(缩写XSD)。作用是定义一份XML文档的合法组件群,与DTD的作用一样,XML Schema定义了:

可出现在文档里的元素;

可出现在文档里的属性

哪些元素是子元素;

子元素的顺序;

子元素的数量

一个元素应是否能包含文本,或应该是空的;

元素和属性的数据类型;

元素和属性的默认值和固定值。

二、优缺点

优点(比DTD更强大)

1支持数据类型

描述允许的文档内容

验证数据的正确性

与来自数据库的数据一并工作

地定义数据约束

定义称数据格式

在不同的数据类型间转换数据

2、它使用 XML语法

不必学习新的语言

可使用 XML 编辑器来编辑 Schema 文件

可使用 XML 解析器来解析 Schema 文件

可通过 XML DOM 来处理 Schema

可通过 XSLT 来转换 Schema

3、可保护数据通信

当数据从发送方被发送到接受方时,其要点是双方应有关于内容的相同的"期望值"。

通过 XML Schema,发送方可以用一种接受方能够明白的方式来描述数据。

一种数据,比如 "03-11-2004",在某些国家被解释为11月3日,而在另一些国家为当作3月11日。

但是一个带有数据类型的 XML元素,比如:<datetype="date">2004-03-11</date>,可确保对内容一致的理解,这是因为 XML的数据类型 "date" 要求的格式是 "YYYY-MM-DD"

4、可扩展性

由 XML 编写。您可以:

在其他 Schema 中重复使用您的 Schema

创建由标准类型衍生而来的您自己的数据类型

在相同的文档中引用多重的 Schema

5、可捕获到错误

即使文档的形式良好,仍然不能保证它们不会包含错误

缺点

XML Schema语言特别冗长,DTD可以简洁且容易编辑。

W3C XML Schema没有实现大部分提供的数据元素到文档的DTD能力。

三、未来发展

XML Schema可能很快就会替代文档类型定义DTD在大多数的网络应用程序中被广泛使用。

针对将来的变化是可扩展的;

内容比文档类型定义DTD丰富,作用也更大;

是以XML语言编写而成的;

支持数据类型;

支持名称空间;

四、简单实例

<span style="font-size:18px;"><span style="color:#000099;"><strong>一个简单的 XML 文档:
</strong></span>
下面为 "news.xml" 的 XML 文档:
<?xml version="1.0"?>
<news>
    <to>George</to>
    <from>John</from>
    <heading>Reminder</heading>
    <body>Don't forget the meeting!</body>
</news>

<strong><span style="color:#000099;">DTD 文件</span></strong>

名为 "news.dtd" 的 DTD 文件,它对上面那个 XML文档的元素进行了定义:
    <!ELEMENTnews (to,from,heading,body)>
    <!ELEMENT to (#PCDATA)>
    <!ELEMENT from (#PCDATA)>
    <!ELEMENT heading (#PCDATA)>
    <!ELEMENT body (#PCDATA)>
第 1 行定义news 元素有四个子元素:"to,body"。
第 2-5 行定义了 to,body 元素的类型是 "#PCDATA"。

<strong><span style="color:#000099;">XML Schema</span></strong>

名为 "news.xsd" 的 XML Schema 文件,它定义了上面那个 XML文档的元素:
<?xmlversion="1.0"?>
<xs:schemaxmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.w3school.com.cn"
xmlns="http://www.w3school.com.cn"
elementFormDefault="qualified">
<xs:element name="news">
    <xs:complexType>
     <xs:sequence>
        <xs:elementname="to" type="xs:string"/>
        <xs:elementname="from"type="xs:string"/>
        <xs:elementname="heading" type="xs:string"/>
        <xs:elementname="body" type="xs:string"/>
      </xs:sequence>
    </xs:complexType>
</xs:element>
</xs:schema>
 
(1)targetNamespace表明此schema (note,to,body)定义的元素来自          于"http://www.w3schools.com"命名空间。
(2)显示 schema中用到的元素和数据类型来自命名空间 "http://www.w3.org/2001/XMLSchema"。
(3)elementFormDefault:指出任何 XML 实例文档所使用的且在此schema 中声明过的元素必须被命名空间限定。

<span style="color:#000099;"><strong>对 DTD 的引用
</strong></span>
<?xml version="1.0"?>
<!DOCTYPE news SYSTEM "http://www.w3school.com.cn/dtd/note.dtd">
<news>
   <to>George</to>
   <from>John</from>
   <heading>Reminder</heading>
   <body>Don't forget the meeting!</body>
</news>

<span style="color:#000099;"><strong>对 XML Schema 的引用</strong></span>

<?xml version="1.0"?>
<news>
mlns="http://www.w3school.com.cn"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.w3school.com.cn note.xsd">
    <to>George</to>
    <from>John</from>
    <heading>Reminder</heading>
    <body>Don't forget the meeting!</body>
</news></span>

注:

1规定了默认命名空间的声明。此声明会告知schema 验证器,在此 XML 文档中使用的所有元素都被声明于 "http://www.w3school.com.cn" 这个命名空间。

2拥有了可用的 XML Schema实例命名空间:xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

可以使用 schemaLocation属性了。此属性有两个值。第一个值是需要使用的命名空间。第二个值是供命名空间使用的 XML schema 的位置:

注意:

IE不能验证XML是否符合Schema

可使用Eclipse检查schema

原文链接:https://www.f2er.com/xml/298442.html

猜你在找的XML相关文章