什么是XML约束
约束 简单来说就是规定xml的书写规则
*作为框架的使用者(程序员)的学习要求
1.能够在xml中引用约束文档
2.能够读懂约束文档
约束技术分类
1.DTD 一种简单的约束技术(.dtd)
2.SCHEMA:一种复杂的约束技术(.xsd)
------------下面来对两种约束技术分别做详细的介绍-------------
DTD约束
dtd文件格式:
<!ELEMENT students (student*)> //(student*)表示students的子标签出现0或者多次 (student+)表示子标签出现1或者多次
<!ELEMENT student (name age sex)> //子标签student的子标签
<!ELEMENT name (#PCDATA)> //#PCDATA表示字符串
<!ELEMENT age (#PCDATA)> //#PCDATA表示字符串
<!ELEMENT sex (#PCDATA)> //#PCDATA表示字符串
<!ATTLIST student number ID #REQUIRED> //表示必须要写number属性,#REQUIRED表示属性必须写
引入dtd文档到xml文件中
*内部dtd文档 将约束文档定义到xml文档中
*外部dtd文档 将约束文档定义在外部的dtd文档中
<!DOCTYPE 根签名字 SYSTEM "dtd文件相对于xml文档路径">//本地
<!DOCTYPE 根签名字 PUBLIC "dtd路径URL">//网络
Schema约束
- Schema约束文件
Schema约束文件
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.w3school.com.cn"
xmlns="http://www.w3school.com.cn"
elementFormDefault="qualified">
<xs:element name="note">
<xs:complexType>
<xs:sequence>
<xs:element name="to" type="xs:string"/>
<xs:element name="from" type="xs:string"/>
<xs:element name="heading" type="xs:string"/>
<xs:element name="body" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
下面进行对Schema约束文档相关片段进行解释
* <schema> 元素是每一个 XML Schema 的根元素:
<schema> 元素可包含属性。
* xmlns:xs="http://www.w3.org/2001/XMLSchema"
显示 schema 中用到的元素和数据类型( 例如<xs:sequence>)来自命名空间 "http://www.w3.org/2001/XMLSchema"。
同时它还规定了来自命名空间 "http://www.w3.org/2001/XMLSchema" 的元素和数据类型应该使用前缀 xs:
* targetNamespace="http://www.w3school.com.cn"
显示被此 schema 定义的元素 (note, to, from, heading, body)
来自命名空间: "http://www.w3school.com.cn"。
*elementFormDefault="qualified"
指出任何 XML 实例文档所使用的且在此 schema 中声明过的元素必须被命名空间限定。
``
- **被约束文档**
- 此 XML 文档(被约束文档)含有对 XML Schema 约束文档的引用:
```bash
<?xml version="1.0"?>
<note xmlns="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>
</note>
被约束文件相关片段的解释
xmlns="http://www.w3school.com.cn" 规定了默认命名空间的声明。
此声明会告知 schema 验证器,在此 XML 文档中使用的所有元素都被声明于
"http://www.w3school.com.cn" 这个命名空间。
一旦您拥有了可用的 XML Schema 实例命名空间:
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
您就可以使用 schemaLocation 属性了。此属性有两个值。
第一个值是需要使用的命名空间。第二个值是供命名空间使用的 XML schema 的位置:
xsi:schemaLocation="http://www.w3school.com.cn note.xsd"
XML Schema 可定义 XML 文件的元素。
简易元素指那些只包含文本的元素。它不会包含任何其他的元素或属性。
简单元素
简易元素
定义简易元素的语法:
<xs:element name="xxx" type="yyy"/>此处 xxx 指元素的名称,yyy 指元素的数据类型。
XML Schema 拥有很多内建的数据类型。
最常用的类型是:
xs:string
xs:decimal
xs:integer
xs:boolean
xs:date
xs:time
复杂元素
XML Schema 可定义 XML 文件的元素
复合元素包含了其他的元素及/或属性。
在 XML Schema 中,我们有两种方式来定义复合元素:
1. 通过命名此元素,可直接对"employee"元素进行声明,就像这样:
<xs:element name="employee">
<xs:complexType>
<xs:sequence>
//指示器 <sequence>中。这意味着子元素必须以它们被声明的次序出现。
<xs:element name="firstname" type="xs:string"/>
<xs:element name="lastname" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
2 .通过type属性
"employee" 元素可以使用 type 属性,这个属性的作用是引用要使用的复合类型的名称:
<xs:element name="employee" type="personinfo"/>
<xs:complexType name="personinfo">
<xs:sequence>
<xs:element name="firstname" type="xs:string"/>
<xs:element name="lastname" type="xs:string"/>
</xs:sequence>
</xs:complexType>
- List item
如果想要对Schema约束进行更深入的了解,可以去搜索W3CSchool,查看XMLSchema相关章节知识