XML知识2--DTD

一。简介

DTD 指定:可以在文档中存在的元素、那些元素可以具有的属性、在元素内部元素的层次结构以及元素在整个文档中出现的顺序。

虽然 DTD 不是必需的,但它们确实带来方便。DTD 适合三个基本用途。它能:

  • 对标记编制文档
  • 加强标记参数内部的一致性
  • 使 XML 语法分析器能够确认文档

二。DTD的一个例子

以下面这个xml为例:

  1. <?xml version="1.0" encoding="UTF-8"?> 
  2. <books> 
  3.        <book show="yes"> 
  4.               <title>Dom4j Tutorials</title> 
  5.        </book> 
  6.        <book show="yes"> 
  7.               <title>Lucene Studing</title> 
  8.        </book> 
  9.        <book show="no"> 
  10.               <title>Lucene in Action</title> 
  11.        </book> 
  12.        <owner>O'Reilly</owner> 
  13. </books> 

在xml文件中加入验证声明,如下(以book.dtd作为验证文件)

  1. <?xml version="1.0" encoding="UTF-8"?> 
  2. <!DOCTYPE books PUBLIC "//UNKNOWN/" "book.dtd">
  3. <books> 
  4.        <book show="yes"> 
  5.               <title>Dom4j Tutorials</title> 
  6.        </book> 
  7.        <book show="yes"> 
  8.               <title>Lucene Studing</title> 
  9.        </book> 
  10.        <book show="no"> 
  11.               <title>Lucene in Action</title> 
  12.        </book> 
  13.        <owner>O'Reilly</owner> 
  14. </books> 

编写book.dtd如下:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!ELEMENT books (book*,owner)>
  3. <!ELEMENT book (title)>
  4. <!ATTLIST book
  5.     show CDATA #REQUIRED
  6. >
  7. <!ELEMENT title (#PCDATA)>
  8. <!ELEMENT owner (#PCDATA)>

这个时候如果在book.xml中将owner元素挪到book元素下面,验证就会报错:)

 

三。语法详解(book.dtd):

 1.<!ELEMENT books (book*,owner)>

 1)作用:声明了根元素books,并且其中可以包含0--n个book元素,有且只有一个owner元素。

  

 2)其中用到的符号含义如下:

符号 代表标记出现的次数
不出现或只出现一次
* 不出现或可出现多次
+ 必须出现一次以上
无符号 只能出现一次

 

3)其他例子:(假设A、B、C 和 D 是在下例中代表元素的变量。)

 

元素必须有正好一个 A 、至少一个 B (由加号表示)、零个或多个 C (由星号表示)以及零个或一个 D (由问号表示):

<!ELEMENT element (A, B+, C*, D?)>

元素可能有 ABC 之一:

<!ELEMENT element (A | B | C)>

元素不包含任何内容:

<!ELEMENT element EMPTY>

元素可以包含在 DTD 中列出的任何元素:

<!ELEMENT element ANY>

元素可能包含经过语法分析的字符数据或另一个元素( element2 )。星号(*)表示混合内容模型 — 其中元素可以包含不同类型的属性。

<!ELEMENT element (#PCDATA|element2)*>

 

2.<!ATTLIST book
    show CDATA #REQUIRED
>

1)作用:声明了book元素下的属性列表。 show属性必须出现

 

2)用到的符号:

属性内定值 描述
#required 表示在标记中必须出现此属性。
#implied 标记中可以不出现此属性。
#fix 属性的值是固定的某个值。
字符串 标记中如没有指定属性的值,那么此字符串就是此属性的值。

 

3)其他例子

下例表明其元素是一个包含三个属性的空标记:属性 1( att1 )是一个可选属性,属性 2( att2 )是带有固定值 "A" 的属性,属性 3( att3 )是必需的文本属性。

   <!ELEMENT element EMPTY>
     
        
        <!ATTLIST element
     att1 ID #IMPLIED
     att2 CDATA #FIXED "A"
     att3 CDATA #REQUIRED>

      
      

可以看到在 XML 文档中使用的这个元素如下:

<element att2="A" att3="MustHave"/>

属性 CDATA 表示包括的信息应该是文本。 ID 属性表明必须填入唯一的标识。每个元素只能有一个 ID 属性。另外, CDATA 表示 att2att3 可能包含任何字符串。

 

3.更多的属性字段:

属性值类别 描述
cdata 属性值仅仅是一般的文字。
enumerated 列出该属性的取值范围,一次只能有一个属性值能够赋予属性。
nmtoken 表示属性值只能由字母、数字、下划线、.、:、-这些符号组成。
nmtokens 表示属性值能够由多个nmtoken组成,每个nmtoken之间用空格隔开。
id 该属性在xml文件中是唯一的,常用来表示人的身份证号码。
idref 表示该属性值是参考了另一个id属性。
idrefs 表示该属性值是参考了多个id属性,这些id属性的值用空格隔开。
entity 表示该属性的设定值是一个外部的entity,如一个图片文件。
entities 该属性值包含了多个外部entity,不同的entity之间用空格隔开。
notation 属性值是在dtd中声明过的notation(声明用什么应用软件解读某些二进制文件,如图片)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值