1、DTD概要:
1)、dtd用来干啥的:用来定义和验证xml文件格式合法性的,比如说:你要写一个xml文件,它需要指定一个根元素,然后根元素下面还会有一批的子元素,有些元素或许还有属性,那这一大批的东西都是在dtd里来定义的。
官方的解释就是:文档类型定义(DTD)可定义合法的XML文档构建模块。它使用一系列合法的元素来定义文档的结构。
2)、怎么在xml中应用dtd:
第一种方式是:直接在xml文件里写dtd定义,声明如下:
<!DOCTYPE 根元素 [元素声明]> 如下:
---------
<!DOCTYPE persons [
<!ELEMENT persons (person)>
<!ELEMENT person (name,age)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT age (#PCDATA)>
]>
----------
第二种方式是在xml引入dtd文件:
<!DOCTYPE 根元素 PUBLIC/SYSTEM "dtd路径名">
-----------
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE classroom SYSTEM "classroom.dtd">
-----------
2、DTD元素的写法:
1)、元素的写法:<!ELEMENT ...>
2)、例子:
---------
<!DOCTYPE persons [
<!ELEMENT persons (person)>
<!ELEMENT person (name,age)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT age (#PCDATA)>
]>
----------
以上 DTD 解释如下:
!DOCTYPE persons (第二行)定义此文档是 persons 类型的文档。
!ELEMENT person (第三行)定义 person 元素有2个元素:"name,age"
!ELEMENT name (第四行)定义 name 元素为 "#PCDATA" 类型
!ELEMENT age (第五行)定义 age 元素为 "#PCDATA" 类型
----------
3、DTD属性的写法:
1)、<!ATTLIST 元素名称 属性名称 属性类型 默认值>
2)、例子:
<!ATTLIST person sex CDATA "人妖">
<!ATTLIST person sex CDATA #REQUIRED> <!-- 表示该属性值是必须的 没有则xml验证不通过-->
<!ATTLIST person sex CDATA #IMPLIED> <!-- 表示该属性值不是必须的 没有则xml验证也没问题-->
<!ATTLIST person sex CDATA #FIXED "中性"> <!-- 表示该一旦元素出现该属性,值是固定的 -->
4、元素正则验证:
1)、符号:
?表示0次或1次
* 表示0次或多次
+ 表示1次或多次
a|b 表示非a即b
默认表示1次
2)、例子:
--------------------------
<!ELEMENT person (name+,age,password?,nickname*)>
以上就表示person这个元素下的子元素:name元素最少存在一个,age元素只出现一个,password元素可以不出现,出现的话最多一次,nickname可以不出现,也可以出现多次。
---------------------------
<person>
<name>傻逼1</name> <!-- name元素至少出现一次,否则xml验证不通过-->
<age>20</age> <!-- age元素一定要出现且仅能出现一次,如果有多个xml验证也不通过-->
<password>>123</password> <!-- password元素没有也无所谓-->
<nickname>sb</nickname> <!-- nickname元素没有也无所谓-->
</person>
---------------------------
5、一个完整的DTD例子:
<?xml version="1.0" encoding="UTF-8"?>
<!-- 根元素为classroom 包含name,grade,students三个子元素-->
<!ELEMENT classroom (classname,gradename,students)>
<!-- classroom有一个属性名为id 属性类型为ID类型 唯一且必须要有-->
<!ATTLIST classroom id ID #REQUIRED>
<!-- 声明子元素name-->
<!ELEMENT classname (#PCDATA)>
<!-- 声明子元素grade-->
<!ELEMENT gradename (#PCDATA)>
<!-- 声明子元素students 这个元素又包括了多个student子元素 带了+号表示至少一个或多个-->
<!ELEMENT students (student+)>
<!-- 声明子元素student 包含code(有或没有,最多出现一次),name,age三个子元素-->
<!ELEMENT student (code?,name,age)>
<!-- student有一个属性名为id 属性类型为ID类型 唯一且必须要有-->
<!ATTLIST student id ID #REQUIRED>
<!-- student有一个属性名为sex 默认值为男-->
<!ATTLIST student sex CDATA "男">
<!-- 声明子元素code-->
<!ELEMENT code (#PCDATA)>
<!-- 声明子元素name-->
<!ELEMENT name (#PCDATA)>
<!-- 声明子元素age-->
<!ELEMENT age (#PCDATA)>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE classroom SYSTEM "classroom.dtd">
<classroom id="ss">
<classname>一班</classname>
<gradename>一年级</gradename>
<students>
<student id="s1" sex="男">
<code>1111110000000</code>
<name>傻逼</name>
<age>20</age>
</student>
<student id="s2">
<name>傻帽</name>
<age>49</age>
</student>
</students>
</classroom>
6、Schema概要:
1)、什么是XML Schema:基于 XML 的 DTD 替代者。
定义可出现在文档中的元素
定义可出现在文档中的属性
定义哪个元素是子元素
定义子元素的次序
定义子元素的数目
定义元素是否为空,或者是否可包含文本
定义元素和属性的数据类型
定义元素和属性的默认值以及固定值
2)、与dtd相比优点:
XML Schema 可针对未来的需求进行扩展
XML Schema 更完善,功能更强大
XML Schema 基于 XML 编写
XML Schema 支持数据类型
XML Schema 支持命名空间
3)、XML Schema 最重要的能力之一就是对数据类型的支持。
通过对数据类型的支持:
可更容易地描述允许的文档内容
可更容易地验证数据的正确性
可更容易地与来自数据库的数据一并工作
可更容易地定义数据约束(data facets)
可更容易地定义数据模型(或称数据格式)
可更容易地在不同的数据类型间转换数据
4)、XML Schema 使用 XML 语法
5)、XML Schema 可保护数据通信:一个带有数据类型的 XML 元素可以保证通信双方都能很好的理解。
7、新建一个Schema:
1)、格式如下:
-----------------------------------
<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.example.org/01"
xmlns:tns="http://www.example.org/01"
elementFormDefault="qualified">
</schema>
-----------------------------------
2)、xml对schema的引用:
-----------------------------------
<?xml version="1.0" encoding="UTF-8"?>
<tns:classroom xmlns:tns="http://www.example.org/01"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.example.org/01 01.xsd ">
-----------------------------------
8、格式解释:
1)、<schema> 元素是每一个 XML Schema 的根元素。
2)、xmlns:xs="http://www.w3.org/2001/XMLSchema":显示 schema 中用到的元素和数据类型来自命名空间 "http://www.w3.org/2001/XMLSchema"。同时它还规定了来自命名空间 "http://www.w3.org/2001/XMLSchema" 的元素和数据类型应该使用前缀 xs
3)、targetNamespace="http://www.w3school.com.cn" :显示被此 schema 定义的元素 (note, to, from, heading, body) 来自命名空间http://www.example.org/01
4)、xmlns="http://www.example.org/01" :指出本schema默认的命名空间是http://www.example.org/01
5)、elementFormDefault="qualified" :指出任何 XML 实例文档所使用的且在此 schema 中声明过的元素必须被命名空间限定。
6)、引用schema时xmlns:tns="http://www.example.org/01" :规定了默认命名空间的声明。此声明会告知 schema 验证器,在此 XML 文档中使用的所有元素都被声明于 "http://www.example.org/01" 这个命名空间。
7)、xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" :XML Schema 实例命名空间
8)、xsi:schemaLocation="http://www.example.org/01 01.xsd ":需要使用的命名空间。
9、schema元素:
1)、简单元素:语法<element name="xxx" type="yyy"/>
-------------------------------
<element name="lastname" type="string"/>
<element name="age" type="integer"/>
<element name="dateborn" type="date"/>
-------------------------------
2)、复杂元素:
-------------------------------
第一种:只有一个属性名的元素
比如:<person age="123"/>
---------
<element name="person">
<complexType>
<attribute name="age" type="int" />
</complexType>
</element>
或者把type放到外面来定义,元素那里直接引用
---------
第二种:只包括了几个元素的元素(常见的)
比如:
<person>
<firstname>John</firstname>
<lastname>Smith</lastname>
</person>
---------
<element name="person">
<complexType>
<sequence>
<element name="firstname" tyep="string"/>
<element name="lastname" type="string"/>
</sequence>
</complexType>
</element>
---------
第三种:只包含文本的元素
<shoes country="france">35</shoes>
---------
<element name="shoes">
<complexType>
<simpleContent>
<!-- 内容被定义成String类型 -->
<extension base="int">
<!-- 属性county -->
<attribute name="county" type="string"/>
</extension>
</simpleContent>
</complexType>
</element>
---------
第四种:乱七八糟,什么都包含了的元素。
<letter>
Dear Mr.<name>John Smith</name>.
Your order <orderid>1032</orderid>
will be shipped on <shipdate>2001-07-13</shipdate>.
</letter>
以上这种元素和子元素之间还夹杂一些字符,简直就是乱七八糟
其实和第二种很像,唯一需要更改的就是<complexType mixed="true">
---------
<xs:element name="letter">
<xs:complexType mixed="true">
<xs:sequence>
<xs:element name="name" type="xs:string"/>
<xs:element name="orderid" type="xs:positiveInteger"/>
<xs:element name="shipdate" type="xs:date"/>
</xs:sequence>
</xs:complexType>
</xs:element>
---------
10、指示器:
1)、<all>
<all> 指示器规定子元素可以按照任意顺序出现,且每个子元素必须只出现一次:
--------
<xs:element name="person">
<xs:complexType>
<xs:all>
<xs:element name="firstname" type="xs:string"/>
<xs:element name="lastname" type="xs:string"/>
</xs:all>
</xs:complexType>
</xs:element>
--------
2)、<choice>
<choice> 指示器规定可出现某个子元素或者可出现另外一个子元素(非此即彼):
-------
<xs:element name="person">
<xs:complexType>
<xs:choice>
<xs:element name="employee" type="employee"/>
<xs:element name="member" type="member"/>
</xs:choice>
</xs:complexType>
</xs:element>
-------
3)、<sequence>
<sequence> 规定子元素必须按照特定的顺序出现:
-------
<xs:element name="person">
<xs:complexType>
<xs:sequence>
<xs:element name="firstname" type="xs:string"/>
<xs:element name="lastname" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
-------
4)、<maxOccurs> <minOccurs>
<maxOccurs> 指示器可规定某个元素可出现的最大次数:
<minOccurs> 指示器可规定某个元素能够出现的最小次数: minOccurs默认值是1
--------
<xs:element name="person">
<xs:complexType>
<xs:sequence>
<xs:element name="full_name" type="xs:string" minOccurs="0"/>
<xs:element name="child_name" type="xs:string" maxOccurs="10"/>
</xs:sequence>
</xs:complexType>
</xs:element>
--------
提示:如需使某个元素的出现次数不受限制,请使用 maxOccurs="unbounded" 这个声明
5)、元素组:group
Group 指示器用于定义相关的数批元素。这个相当于是一批元素的集合
--------
<xs:group name="persongroup">
<xs:sequence>
<xs:element name="firstname" type="xs:string"/>
<xs:element name="lastname" type="xs:string"/>
<xs:element name="birthday" type="xs:date"/>
</xs:sequence>
</xs:group>
<xs:element name="person" type="personinfo"/>
<xs:complexType name="personinfo">
<xs:sequence>
<xs:group ref="persongroup"/>
<xs:element name="country" type="xs:string"/>
</xs:sequence>
</xs:complexType>
--------
6)、属性组:attributeGroup
属性组通过 attributeGroup 声明来进行定义:
---------
<xs:attributeGroup name="personattrgroup">
<xs:attribute name="firstname" type="xs:string"/>
<xs:attribute name="lastname" type="xs:string"/>
<xs:attribute name="birthday" type="xs:date"/>
</xs:attributeGroup>
<xs:element name="person">
<xs:complexType>
<xs:attributeGroup ref="personattrgroup"/>
</xs:complexType>
</xs:element>
---------
11、一个完整的例子:
<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.example.org/01"
xmlns:tns="http://www.example.org/01" elementFormDefault="qualified">
<!-- 定义简单元素类型 -->
<simpleType name="stringtype" >
<restriction base="string"/>
</simpleType>
<simpleType name="idtype" >
<restriction base="ID"/>
</simpleType>
<simpleType name="sextype">
<restriction base="tns:stringtype">
<pattern value="男|女"/>
</restriction>
</simpleType>
<simpleType name="inttype" >
<restriction base="int">
<maxExclusive value="100"/>
<minExclusive value="10"/>
</restriction>
</simpleType>
<element name="classroom">
<complexType>
<sequence>
<element name="classname" type="tns:stringtype"/>
<element name="gradename" type="tns:stringtype" minOccurs="0" maxOccurs="1"/>
<element name="students">
<complexType>
<sequence>
<element name="student" maxOccurs="unbounded">
<complexType>
<sequence>
<element name="code" type="tns:stringtype" maxOccurs="1"/>
<element name="name" type="tns:stringtype"/>
<element name="age" type="tns:inttype"/>
</sequence>
<attribute name="sex" type="tns:sextype"/>
</complexType>
</element>
</sequence>
</complexType>
</element>
</sequence>
<attribute name="id" type="tns:idtype"/>
</complexType>
</element>
</schema>
<?xml version="1.0" encoding="UTF-8"?>
<tns:classroom xmlns:tns="http://www.example.org/01" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.example.org/01 01.xsd ">
<tns:classname>一班</tns:classname>
<tns:gradename>一年级</tns:gradename>
<tns:students>
<tns:student>
<tns:code>00000011111</tns:code>
<tns:name>傻逼</tns:name>
<tns:age>12</tns:age>
</tns:student>
<tns:student>
<tns:code>00000022222</tns:code>
<tns:name>傻帽</tns:name>
<tns:age>30</tns:age>
</tns:student>
</tns:students>
</tns:classroom>
分享到:
相关推荐
经典介绍DTD和Schema及区别。通过阅读此文档,读者可以对dtd和schema有一个更加清晰的认识。
详细的讲解了DTD和schema,学习DTD,schema 就它了
讲述DTD和schema,讲述DTD和schema两者的区别等等。
[实验目的]: 1、掌握使用XMLSpy软件创建DTD和Schema文档 2、掌握在XML文档如何引入DTD和Schema,并验证有效 3、掌握DTD中声明元素、属性的方法 4、掌握Schema中声明元素,属性,类型的方法
总结来说,XML基础教程包括对XML的基本概念、语法规则、树形结构的理解,以及使用DTD和Schema进行数据验证的方法。掌握这些知识对于任何涉及数据处理和交换的IT专业人员都是至关重要的。通过学习XML,开发者能够创建...
XML(可扩展标记语言,eXtensible ...了解和掌握XML、DTD和Schema,对于编写和解析符合规范的XML文档,以及确保数据的准确性和一致性至关重要。在实际开发中,根据项目需求和复杂性,选择合适的验证工具是非常重要的。
通过以上介绍,我们可以看到XML、DTD和Schema各自的特点和用途。XML是一种强大的数据格式,而DTD和Schema则是用于验证XML文档结构的有效工具。学习这些基础知识对于理解和使用XML文档非常重要。
为了确保XML文档的结构正确性与一致性,XML约束技术应运而生,主要有两种形式:DTD(Document Type Definition)和XML Schema。 **DTD(Document Type Definition)** DTD是XML的早期约束和验证机制,它定义了XML...
XML Schema 和 XML DTD 是两种用于定义XML文档结构和数据约束的语言。XML DTD(文档类型定义)是较早出现的规范,而XML Schema则在2001年成为W3C的正式推荐标准,旨在提供更强大和灵活的XML文档验证功能。 首先,...
在处理XML文档时,为了确保数据的一致性和准确性,我们通常会使用DTD(Document Type Definition)或XML Schema来定义文档的结构。这两个工具都是XML的约束机制,用于规定XML文档的元素、属性以及它们之间的关系。 ...
这个选项允许我们管理XML文件的DTD和Schema引用。 3. 在XML Catalog界面,点击右下角的“Add”按钮,开始添加DTD文件。通常,Mybatis的主要DTD文件有两个,一个是`mybatis-3-config.dtd`,另一个是`mybatis-3-...
XML(eXtensible Markup Language)是一...同时,XML DTD和XML Schema的文档参考手册,如提供的"DTD.chm"和"XmlSchema标准参考手册.chm",是学习和查阅这两种技术的重要资源,能够帮助开发者深入理解其特性和使用方法。
DTD(Document Type Definition)和Schema是XML文档的约束规则,用于定义文档的结构和格式。DTD主要用于定义文档的元素、属性和实体,而Schema则提供了更多的约束规则,例如数据类型和关系约束。 XML的解析方式 ...
* 在学习 XML 时,需要掌握定义 XML 约束、DTD 和 Schema 的使用 五、Servlet * Servlet 是一种 Java 服务器端技术,负责处理请求和响应 * 学习 Servlet 需要掌握开发环境的配置、Servlet 的访问方式、post 和 get...
为了确保XML文档的结构规范和一致性,我们需要对其进行约束和验证,这就是DTD(Document Type Definition)和Schema的作用。 DTD约束是XML文档规范的早期形式,它定义了XML文档的结构和元素之间的关系。一个DTD文件...
DTD(Document Type Definition)和Schema是XML文档的验证工具,确保XML文件遵循预定义的规则。在Spring框架中,XML配置文件是应用的核心组成部分,而Mybatis作为另一款流行的持久层框架,同样使用XML来定义SQL映射...
2. DTD和Schema:学生需编写DTD(文档类型定义)或Schema,以定义XML文档的结构和数据类型,确保文档的一致性和有效性。 3. XSLT转换:使用XSLT(可扩展样式表语言转换)将XML文档转换为XHTML,便于在Web浏览器中...
在本主题中,我们将深入探讨如何利用DTD(Document Type Definition)和XML Schema来设计一个表示图书信息的XML文档。这两种方法都是为了确保XML文档结构的合法性与一致性。 首先,DTD是XML的早期验证机制,它定义...