DTD约束和Schema约束

1.DTD概述

文档类型定义(Document Type Definition)是一套为了进行程序间的数据交换而建立的关于标记符的语法规则。它是标准通用标记语言(SGML)和可扩展标记语言(XML)1.0版规格的一部分,文档可根据某种DTD语法规则验证格式是否符合此规则。文档类型定义也可用做保证标准通用标记语言、可扩展标记语言文档格式的合法性,可通过比较文档和文档类型定义文件来检查文档是否符合规范,元素和标签使用是否正确。文件实例提供应用程序一个数据交换的格式。其中,内部放到xml中,文档声明下,根元素上,以 “<!DOCTYPE 根元素名称[” 开头,以 “]” 结束

简而言之,DTD就是用来约束XML文档的,使其在一定的规范下使用,除了DTD技术外,还有Schema技术,也是用于约束XML文档的。

2.DTD的分类

DTD分为内部DTD和外部DTD,其中外部DTD又可以分为SYSTEM(本地的)的PUBLIC(网上的)

内部DTD

  • 放到xml中,文档声明下,根元素上,以“<!DOCTYPE 根元素名称[开头,以]”结束
  • 内部DTD只对当前×ml文件有效。

外部DTD

SYSTEM DTD
放到当前计算机中

语法:<!DOCTYPE 根元素 SYSTEM “dtd文件路径”>

PUBLIC DTD
放到网络上

语法:<!DOCTYPE 根元素 PUBLIC “dtd名称” “dtd路径”>

3.DTD语法之定义元素

定义元素语法:<!ELEMENT NAME CONTENT>

解释:

ELEMENT:关键字(必须大写)。

NAME:元素名称。

CONTENT:元素类型(元素描述),有四种,都必须大写。

1.EMPTY-该元素不能包含子元素和文本,但可以有属性(空元素)

2.ANY-该元素可以包含任何在DTD中定义的元素内容

3.#PCDATA-可以包含任何字符数据,但是不能在其中包含任何子元素

4.其它类型(组合),可以是子元素,子元素与修饰符组合,基本元素与子元素与修饰符组合。

案例:

<!ELEMENT 班级 (学生+,作者)>

<!ELEMENT 学生 (名字,年龄,介绍)>

<!ELEMENT 作者 (a,b,c)> -->子元素内容,必修按顺序出现

<!ELEMENT 名字 (#PCDATA)> -->文本内容

<!ELEMENT 年龄 (ANY)> -->对内容不做限制

<!ELEMENT 介绍 (EMPTY)> -->空元素

子元素出现次数

可以使用*+?来指定子元素出现的次数:

  • *:可以出现0~N次
  • +:可以出现1~N 次
  • ?:可以出现0~1次

4.DTD语法之定义属性

(1)定义属性的语法

<!ATTLIST 元素名 属性名 属性类型 设置说明>

<!ATTLIST student number CDATA #REQUIRED>

(2)属性设置说明

  • 给student元素定义属性number,类型为文本
  • #REQUIRED说明属性是必须的
  • #IMPLIED说明属性是可选的
  • 在不给出属性时,使用默认值——可选的

(3)属性的类型

  • CDATA:文本类型;
  • Enumerated:枚举类型;
  • ID:ID类型,ID类型的属性用来标识元素的唯一性,即元素的ID属性值不能与其他元素的ID属性值相同;
  • IDREF:ID引用类型,用来指定另一个元素,与另一个元素建立关联关系,IDREF类型的属性值必须是另一个元素的ID。

5.实体

实体分类

一般实体:定义在DTD中,实体引用在xml

参数实体:定义实体在DTD中,实体引用还在DTD(内部DTD不太好使)中。

(1)定义实体:定义变量

语法:

<!ENTITY 实体名 “实体值”>

<!ENTITY itcast "北京"

(2)引用实体:使用变量

<student number="ID_9012" name="wnagwu" friend="ID_4567" school="&itcast;"/>

(3)定义参数实体

<!ENTITY % 实体名 “实体值”> <!ENTITY % friend "student friend IDREF #IMPLIED">

(4)引用参数实体

<!ATTLIST %friend;>

转换成

<!ATTLIST student friend IDREF #IMPLIED>

6.Schema约束

与DTD作用相同,区别:

  • DTD约束文件扩展名dtd
  • Schema约束文件扩展名xsd
  • DTD不是xml
  • Schema本身就是xml
  • Schema要比DTD强大很多倍,它有更加详细的类型
1.填写xml文档的根元素

2.引入xsi前缀. 

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

3.引入xsd文件命名空间.

xsi:schemaLocation="http://www.itcast.cn/xml  student.xsd"

4.为每一个xsd约束声明一个前缀,作为标识

xmlns="http://www.itcast.cn/xml" 
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
添加DTD约束: 1. 在xml文件的开头添加以下代码: ```xml <!DOCTYPE 根元素名 SYSTEM "dtd文件路径"> ``` 其中,根元素名是xml文件中根元素的名称,dtd文件路径是DTD文件所在的路径。 2. 创建一个名为dtd文件的文件,然后在文件中定义DTD。例如: ```xml <!ELEMENT 根元素名 (子元素名1, 子元素名2, 子元素名3)> <!ELEMENT 子元素名1 (#PCDATA)> <!ELEMENT 子元素名2 (#PCDATA)> <!ELEMENT 子元素名3 (#PCDATA)> ``` 其中,根元素名是xml文件中根元素的名称,子元素名1、子元素名2和子元素名3是根元素的子元素名称,#PCDATA表示文本节点。 添加Schema约束: 1. 在xml文件的开头添加以下代码: ```xml <根元素名 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="schema文件路径"> ``` 其中,根元素名是xml文件中根元素的名称,schema文件路径是Schema文件所在的路径。 2. 创建一个名为schema文件的文件,然后在文件中定义Schema。例如: ```xml <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="根元素名"> <xs:complexType> <xs:sequence> <xs:element name="子元素名1" type="xs:string"/> <xs:element name="子元素名2" type="xs:string"/> <xs:element name="子元素名3" type="xs:string"/> </xs:sequence> </xs:complexType> </xs:element> </xs:schema> ``` 其中,根元素名是xml文件中根元素的名称,子元素名1、子元素名2和子元素名3是根元素的子元素名称,xs:string表示该元素的类型为字符串。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值