dtd入门、定义元素、实体

本文介绍XML文件及其约束的重要性,详细讲解DTD(文档类型定义)的基本用法,包括DTD的引入方式、如何定义元素及属性等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

xml的约束

为什么需要约束?比如现在定义一个person的xml文件,只想要这个文件里面保存人的信息,比如name,age等,但是如果在xml文件中写了一个标签<猫>,发现可以正常显示,因为符合语法规范,但是猫肯定不是人的信息,xml的标签是自定义的,需要技术来规定xml中只能出现的元素,这个时候需要约束。
Xml的约束的技术:dtd的约束 和 schema约束

dtd的快速入门

  • 创建一个文件,后缀名为 .dtd

步骤:
1) 看xml中有多少个元素,有几个元素,在dtd文件中写几个<!ELEMENT>,判断元素是简单元素还是复杂元素。
复杂元素:有子元素的元素

<!ELEMENT 元素名称(子元素)>

简单元素,没有子元素
<!ELEMENT 元素名称(#PCDATA)>

2) 需要在xml文件中引入dtd文件
<!DOCTYPE 根元素名称 SYSTEM “dtd文件的路径”>
3) 打开xml文件使用浏览器打开的,浏览器只负责校验xml的语法,不负责检查约束。
如果想要校验xml的约束,需要使用工具(myeclipse工具)

 打开myeclipse工具,创建一个项目day5,在day5的src目录下面创建一个xml文件和一个dtd文件,当xml中引入dtd文件之后,比如只能出现name age,多写了一个a,会提示报错。

dtd的三种引入方式

1) 引入外部的dtd文件
<!DOCTYPE 根元素名称 SYSTEM “dtd文件的路径”>
2) 使用内部的dtd文件

<!DOCTYPE 根元素名称 [
<!ELEMENT person (name,age)>
<!ELEMENT name(#PCDATA)>
<!ELEMENT age (#PCDATA)>

]>

3) 使用外部的dtd文件(网络上的dtd文件)
<!DOCTYPE 根元素名称 PUBLIC “DTD名称” “DTD文档的URL” >

后面学到的框架struts2使用配置文件,使用的dtd文件。

使用dtd定义元素

语法:<!ELEMENT 元素名称 约束>

  • 简单元素:没有子元素的元素

1) <!ELEMENT age (#PCDATA)>
2) #PCDATA:约束name是字符串类型
3) EMPTY:元素为空(没有内容)

4) ANY:任意

  • 复杂元素:
    1) <!ELEMENT person (name,age)>子元素只能出现一次
    2) 表示子元素出现的次数:
    +:表示一次或者多次
    ?:表示零次或者一次
    *:表示零次或者多次
    3) 子元素直接使用逗号进行隔开,表示元素出现的顺序。
    4) 子元素直接使用|隔开 表示元素只能出现其中的任意一个。

使用dtd定义属性

<!ATTLIST 元素名称 属性类型 属性的约束>

属性类型:

  • -CDATA:字符串

<!ATTLIST birthday ID1 CDATA #REQUIRED>

  • 枚举:

表示只能在一定的范围内出现值,但是只能每次出现其中的一个
红绿灯效果(aa|bb|cc)

<!AATLIST age ID2 (AA|BB|CC) #REQUIRED>

  • ID:
    ID值只能是字母或者下划线开头
    <!AALIST name ID3 ID #REQUIRED>

属性的约束:

  • REQUIRED :属性必须存在
  • IMPLTED:属性可有可无
  • FIXED:表示一个固定值
  • 直接值:不写属性,直接使用直接值,写了属性,直接使用设置的值

定义属性实例:

<!ATTLIST 页面作者
    姓名 CDATA #IMPLIED
    年龄 CDATA #IMPLIED
    联系信息 CDATA #REQUIED
    网站职务 CDATA #FIXED “页面作者”
    个人爱好 CDATA “上网”
>

实体的定义:

<!ENTITY TEST "HAHAHAHAH">
引用方式:&TEST;

代码实例:

<?xml version="1.0" encoding="UTF-8"?>

<!--直接引入dtd方式-->
<!DOCTYPE person [
 <!ELEMENT person (name+,age?,sex*,school,birth)>
 <!ELEMENT name (#PCDATA)>
 <!ATTLIST name
    ID1 CDATA #REQUIRED  
 >
 <!ELEMENT age (#PCDATA)>
 <!ATTLIST age
    ID2 (18|19|20) #IMPLIED
 >
 <!ELEMENT sex EMPTY>
  <!ATTLIST sex
    ID3 ID #FIXED "nan"
 >
 <!ELEMENT school ANY>
  <!ATTLIST school
    ID3 ID  "mmm"
 >
 <!ELEMENT birth (#PCDATA)>

 <!ENTITY TEST "HAHAHAHAH">
 ]>

<person>
 <name ID1="aaa">&TEST;</name>
 <age ID2="18">18</age>
 <sex ID3="nan"></sex>
 <school>ddd</school>
 <birth>2000</birth>
</person>

“`

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值