DTD约束

DTD文档类型定义

DTD不是xml文档,它是xml是约束。在DTD中定义元素,定义属性,然后某个xml与这个DTD关联,这时xml中只能出现在DTD中定义的元素了。

DTD定义元素语法

<!ELEMENT 元素名 元素描述>

  • <!ELEMENT students (student+)>,定义元素students,其内容为1~N个student元素
  • <!ELEMENT students (#PCDATA)>,定义元素students,内容为纯文本
  • <!ELEMENT student(name,age,sex)>,定义元素student,内容依次为name、age、sex元素 。
  • <!ELEMENT student ANY>定义名为student元素,内容为意。
  • <!ELEMENT student EMPTY>,定义名为student元素,不能有内容,即空元素,注意空元素是可以有属性的。

子元素出现的次数

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

  • *:可以出现0~N次;
  • +:可以出现1~N次;
  • ?:可以出现0~1次;
    例如:
    <!ELEMENT student(name?,hobby*,score,sex)>

枚举类型

<!ELEMENT gfs(g1 | g2)*>多次选择。

DTD的分类

  • 内部DTD和外部DTD
  • 外部DTD分为:SYSTEM(本地的)和PUBLIC(网上的)
内部DTD:
  • 位置:内部DTD在文档声明下面,在根元素上面;
  • 语法格式:放到<!DOCTYPE 根元素名称 []>之间;
  • 只对当前XML文档有效;
<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE students[
<!ELEMENT students(student+)>
<!-- 定义元素students,其内容为1~N个student元素 -->
<!ELEMENT student(name,age,sex)>
<!-- 定义元素student,内容依次为name、age、sex元素 -->
<!ELEMENT name(#PCDATA)>
<!-- 定义元素name,内容为纯文本 -->
<!ELEMENT age(#PCDATA)>
<!-- 定义元素age,内容为文本 -->
<!ELEMENT sex(#PCDATA)>
<!-- 定义元素sex,内容为文本 -->
]>
<students>
    <student number="0001">
        <name>zhangsan</name>
        <age>23</age>
        <sex>male</sex>
    </student>
    <student number="0002">
        <name>lisi</name>
        <age>22</age>
        <sex>female</sex>
    </student>
</students>
本地 SYSTEM DTD
  • 位置:本地硬盘上;
  • 语法格式:<!DOCTYPE 根元素 SYSTEM "dtd文件路径">直接定义元素或属性即可;
  • 本地所有XML文档都可以引用这个dtd文档;
<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE students SYSTEM "students.dtd">
<students>
    <student>
        <name>zhangsan</name>
        <age>23</age>
        <sex>male</sex>
    </student>
    <student number="0002">
        <name>lisi</name>
        <age>22</age>
        <sex>female</sex>
    </student>
</students>

students.dtd

<!ELEMENT students(student+)>
<!ELEMENT student(name,age,sex)>
<!ELEMENT name(#PCDATA)>
<!ELEMENT age(#PCDATA)>
<!ELEMENT sex(#PCDATA)>
PUBLIC DTD
  • 位置:放到网络上。
  • 语法:<!DOCTYPE 根元素 PUBLIC "dtd文件" "dtd路径">
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<!DOCTYPE students PUBLIC "-//qdmmy6//DTD ST 1.0//ZH" "http://www.qdmmy6.com/xml/dtds/st.dtd">
<!-- 官网给定的名称和地址"-"表示非官方 -->
<students>
    <student>
        <name>zhangsan</name>
        <age>23</age>
        <sex>male</sex>
    </student>
</students>

DTD定义属性

语法

<!ATTLIST 元素名 属性名 属性类型 设置说明>
例如:
<!ATTLIST student number CDATA #REQUIRED>,给student元素定义属性number,类型为文本,这个默认是必须的。

属性类型

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

属性设置说明

  • #REQUIRED: 说明属性是必须的;
  • #IMPLIED: 说明属性是可选的;
  • 默认值:在不给出属性时,使用默认值;
<!ATTLIST student number ID #REQUIRED>
<!-- 为student定义属性number,类型为ID,该属性必须是必须出现的。 -->
<!ATTLIST student sex(male | female) "male">
<!-- 为student定义属性sex,类型为枚举,默认值为“male” -->
<!ATTLIST student friend IDREF #IMPLIED>

实体

定义实体:定义变量。
引用实体:使用变量。

实体分类

  • 一般实体:定义实体在DTD中,实体应用在xml中。
  • 参数实体:定义实体在DTD中,实体引用在DTD(内部DTD不太好使)中。

定义一般实体

格式:
<!ENTITY 实体名 "实体值">
<!ENTITY ch "中华人民共和国">

引用一般实体

<student number="ID_001" name="zhangsan"  country="&ch;"/>
<student number="ID_002" name="zhangsan" friend="ID_001" country="&ch;"/>

定义参数实体

格式:
<!ENTITY % 实体名 "实体">

<!ENTITY % friend "sutdent friend IDREF #IMPLIED">

引用参数实体

<!ATTLIST %friend;>

相当于转换成:

<!ATTLIST student friend IDREF #IMPLIED>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值