XML之自定义DTD约束

XML之自定义DTD约束

1.什么是DTD

         文档类型定义(DocumentType Definition,简称DTD)。

2.DTD有什么用

1)DTD定义了XML文档内容的结构,保证XML以一致的格式存储数据。

2)XML允许用户创建自己的DTD约束。

3)通过DTD约束,XML解析器可以检查XML文档内容的有效性。

3.DTD语法

DTD文件是以dtd为后缀

3.1.约束元素

3.1.1.元素类型

和java语法意义,元素也是有类型区分的,元素有以下几种类型:

1)EMPTY(空元素),元素不包含任何数据(就是空标签<img />),但是可以有属性。

2)#PCDATA(只有PCDATA的元素),PCDATA是指被解析器解析的文本(字符串内容),不能包含其他类型的元素。例如(<p>这是字符串,不包含其他标签</p>)

3)ANY(任何内容都可以)。

3.1.2.元素出现顺序和数量

项目

书写语法

描述

顺序出现

<!ELEMENT name (a, b)>

子元素a、b必须同时出现,且a必须在b之前出现

选择出现

<!ELEMENT name (a|b)>

子元素a、b只能有一个出现,要么是a,要么是b

只出现一次

<!ELEMENT name (a)>

子元素a只能且必须出现一次

一次或多次

<!ELEMENT name (a)+>

子元素a要么出现一次,要么出现多次

零次或多次

<!ELEMENT name (a)*>

子元素a可以出现任意次(包括不出现,即出现零次)

零次或一次

<!ELEMENT name (a)?>

子元素a可以出现一次或不出现

3.1.3.元素格式

<!ELEMENT 元素名称 元素类型>

3.1.3.1定义一个空元素


使用


3.1.3.2定义一个#PDATA元素

使用


3.1.3.3定义一个ANY元素

使用

3.2.约束属性

3.2.1.属性值类型

1)CDATA,属性值为普通文本字符串。

2)ENUMERATED,属性值的类型是一组取值的列表,XML文件中设置的属性值只能是这个列表中的某一个值。就好比java中的枚举类型,只能是其中的某个枚举值。

3)ID,表示属性值必须唯一。

3.2.2.设置说明

1)#REQUIRED,必须设置该属性。

2)#IMPLIED,该属性可以设置也可以不设置。

3)#FIXED,该属性的值为固定的。

4)使用默认值。

3.2.3.属性格式
<!ATTLIST 元素名 属性名 属性值类型 设置说明>
3.2.3.1定义属性约束


4.引入自定义DTD

4.1内联

内联,意思就是在XML文件内部定义DTD约束。使用<!DOCTYPE 根标签[   ]>标签包裹。


<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE department[
        <!ELEMENT department (user+)>
        <!ATTLIST department name CDATA #REQUIRED>
        <!ATTLIST department code (001 | 002 | 003) #IMPLIED>

        <!ELEMENT user (#PCDATA)>
        ]>
<!--引入自定义的test约束-->
<!--<!DOCTYPE department SYSTEM "test.dtd">-->
<department name="产品部" code="001">
    <user>这是一个user元素</user>
</department>

4.2外部引用(本地)

将约束写在一个dtd文件中,通过<!DOCTYPE 文档根结点 SYSTEM "DTD文件的URL">

DTD文件

<!ELEMENT department (user)>
<!ATTLIST department name CDATA #REQUIRED>
<!ATTLIST department code (001 | 002 | 003) #IMPLIED>
<!ELEMENT user (#PCDATA)>

XML文件

<?xml version="1.0" encoding="UTF-8"?>
<!--引入自定义的test约束-->
<!DOCTYPE department SYSTEM "test.dtd">
<department name="产品部" code="001">
    <user>这是一个user元素</user>
</department>

4.3外部引用(公用)

<!DOCTYPE 文档根结点 PUBLIC"DTD名称" "DTD文件的URL">

例如:<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD WebApplication 2.3//EN" s"http://java.sun.com/dtd/web-app_2_3.dtd">


  • 5
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
假设我们有一个下面这样的XML文件: ```xml <?xml version="1.0" encoding="UTF-8"?> <bookstore> <book category="Children"> <title lang="en">Harry Potter</title> <author>J.K. Rowling</author> <year>2005</year> <price>29.99</price> </book> <book category="Web"> <title lang="en">Learning XML</title> <author>Erik T. Ray</author> <year>2003</year> <price>39.95</price> </book> </bookstore> ``` 我们可以为这个XML文件添加一个DTD约束,让它符合特定的规范。下面是一个简单的例子: ```xml <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE bookstore [ <!ELEMENT bookstore (book+)> <!ELEMENT book (title, author, year, price)> <!ATTLIST book category CDATA #REQUIRED> <!ELEMENT title (#PCDATA)> <!ELEMENT author (#PCDATA)> <!ELEMENT year (#PCDATA)> <!ELEMENT price (#PCDATA)> ]> <bookstore> <book category="Children"> <title lang="en">Harry Potter</title> <author>J.K. Rowling</author> <year>2005</year> <price>29.99</price> </book> <book category="Web"> <title lang="en">Learning XML</title> <author>Erik T. Ray</author> <year>2003</year> <price>39.95</price> </book> </bookstore> ``` 在上面的例子中,我们使用了`<!DOCTYPE>`元素来定义DTD约束。`<!ELEMENT>`元素用来定义XML元素的结构,`<!ATTLIST>`元素用来定义XML元素的属性,`(#PCDATA)`表示元素内容为文本类型。注意,DTD约束必须位于XML文件的第一行,紧随XML声明之后。 这是一个非常简单的例子,实际上,DTD约束可以包含更多的定义,比如实体、命名空间等。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值