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

DTD和Schema

 
阅读更多

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及区别.ppt

    经典介绍DTD和Schema及区别。通过阅读此文档,读者可以对dtd和schema有一个更加清晰的认识。

    DTD 和SChema

    详细的讲解了DTD和schema,学习DTD,schema 就它了

    DTD和schema

    讲述DTD和schema,讲述DTD和schema两者的区别等等。

    DTD和Schema规范XML文档

    [实验目的]: 1、掌握使用XMLSpy软件创建DTD和Schema文档 2、掌握在XML文档如何引入DTD和Schema,并验证有效 3、掌握DTD中声明元素、属性的方法 4、掌握Schema中声明元素,属性,类型的方法

    XML基础教程包括DTD和Schema

    总结来说,XML基础教程包括对XML的基本概念、语法规则、树形结构的理解,以及使用DTD和Schema进行数据验证的方法。掌握这些知识对于任何涉及数据处理和交换的IT专业人员都是至关重要的。通过学习XML,开发者能够创建...

    XML、DTD、Schema

    XML(可扩展标记语言,eXtensible ...了解和掌握XML、DTD和Schema,对于编写和解析符合规范的XML文档,以及确保数据的准确性和一致性至关重要。在实际开发中,根据项目需求和复杂性,选择合适的验证工具是非常重要的。

    xml的基本实现,dtd, schema实验

    通过以上介绍,我们可以看到XML、DTD和Schema各自的特点和用途。XML是一种强大的数据格式,而DTD和Schema则是用于验证XML文档结构的有效工具。学习这些基础知识对于理解和使用XML文档非常重要。

    xml约束[dtd,Schema].zip

    为了确保XML文档的结构正确性与一致性,XML约束技术应运而生,主要有两种形式:DTD(Document Type Definition)和XML Schema。 **DTD(Document Type Definition)** DTD是XML的早期约束和验证机制,它定义了XML...

    XML Schema 与 XML DTD的技术比较与分析

    XML Schema 和 XML DTD 是两种用于定义XML文档结构和数据约束的语言。XML DTD(文档类型定义)是较早出现的规范,而XML Schema则在2001年成为W3C的正式推荐标准,旨在提供更强大和灵活的XML文档验证功能。 首先,...

    DTD_Schema.rar.rar_dtd_xml_xml schema

    在处理XML文档时,为了确保数据的一致性和准确性,我们通常会使用DTD(Document Type Definition)或XML Schema来定义文档的结构。这两个工具都是XML的约束机制,用于规定XML文档的元素、属性以及它们之间的关系。 ...

    配置Mybatis_DTD环境

    这个选项允许我们管理XML文件的DTD和Schema引用。 3. 在XML Catalog界面,点击右下角的“Add”按钮,开始添加DTD文件。通常,Mybatis的主要DTD文件有两个,一个是`mybatis-3-config.dtd`,另一个是`mybatis-3-...

    XML DTD,XmlSchema标准参考手册

    XML(eXtensible Markup Language)是一...同时,XML DTD和XML Schema的文档参考手册,如提供的"DTD.chm"和"XmlSchema标准参考手册.chm",是学习和查阅这两种技术的重要资源,能够帮助开发者深入理解其特性和使用方法。

    ml语言基础---简单介绍.pdf

    DTD(Document Type Definition)和Schema是XML文档的约束规则,用于定义文档的结构和格式。DTD主要用于定义文档的元素、属性和实体,而Schema则提供了更多的约束规则,例如数据类型和关系约束。 XML的解析方式 ...

    javaweb学习心得.doc

    * 在学习 XML 时,需要掌握定义 XML 约束、DTD 和 Schema 的使用 五、Servlet * Servlet 是一种 Java 服务器端技术,负责处理请求和响应 * 学习 Servlet 需要掌握开发环境的配置、Servlet 的访问方式、post 和 get...

    JavaWeb开发技术-DTD约束.pptx

    为了确保XML文档的结构规范和一致性,我们需要对其进行约束和验证,这就是DTD(Document Type Definition)和Schema的作用。 DTD约束是XML文档规范的早期形式,它定义了XML文档的结构和元素之间的关系。一个DTD文件...

    Spring各版本的xml约束

    DTD(Document Type Definition)和Schema是XML文档的验证工具,确保XML文件遵循预定义的规则。在Spring框架中,XML配置文件是应用的核心组成部分,而Mybatis作为另一款流行的持久层框架,同样使用XML来定义SQL映射...

    XML实验报告.doc

    2. DTD和Schema:学生需编写DTD(文档类型定义)或Schema,以定义XML文档的结构和数据类型,确保文档的一致性和有效性。 3. XSLT转换:使用XSLT(可扩展样式表语言转换)将XML文档转换为XHTML,便于在Web浏览器中...

    XML.rar_dtd xml_xml dtd_xml schema_xml 设计

    在本主题中,我们将深入探讨如何利用DTD(Document Type Definition)和XML Schema来设计一个表示图书信息的XML文档。这两种方法都是为了确保XML文档结构的合法性与一致性。 首先,DTD是XML的早期验证机制,它定义...

Global site tag (gtag.js) - Google Analytics