初学DTD

  href="file:///D:/SYSTEM~2/myTemp/msohtml1/01/clip_filelist.xml" rel="File-List" />

Document Type Definition

 

目录

DTD综述:... 2

DTD的引入:... 3

DTD中声明XML元素:... 4

DTD中声明XML属性:... 6

DTD中定义XML的实体:... 8

 


DTD综述:

DTD就是Document Type Definition的缩写,它主要对与之相关联的XML文档中的元素属性实体记号进行定义,以确保关联的文档在修改时能够维持文档结构和内容的合法性。但是XML SchemaDTD的作用是一样的,更为可观的是,XML Schema能够提供对数据类型和名词空间的支持。所以,在不久的将来,DTD应该会被XML Schema所取代。就我个人对DTD的使用感觉而言,这并非一个很好的XML结构观察工具,因为DTDXML中的各个部分的定义显得松散而凌乱,完全没有学到XML的层次感,并不适合用于非常复杂的XML文档。


DTD的引入:

一个DTD文档可以定义在与之相关的XML文档的内部也可以作为一个单独的文件被一个或是多个XML文档所关联:

1. 引入内部DTD
    
<?xml version="1.0"  encoding=”UTF
  
   -8”
   standalone=”Yes”?>
  
<!DOCTYPE note [   //DOCTYPE后空格接该XML的根节点
   
  <!ELEMENT note (to,from,heading,body)>
  
  <!ELEMENT to      (#PCDATA)>
  
  <!ELEMENT from    (#PCDATA)>
  
  <!ELEMENT heading (#PCDATA)>
  
  <!ELEMENT body    (#PCDATA)>
  
]>
  
<note>
  
  <to>Tove</to>
  
  <from>Jani</from>
  
  <heading>Reminder</heading>
  
  <body>Don't forget me this weekend</body>
  
</note>
  

  
    
  
2. 引入外部DTD
    
<?xml version="1.0"?>
  
<!DOCTYPE note SYSTEM "note.dtd">  //SYSTEM是关键字,还有PUBLIC
  
<note>
  
<to>Tove</to>
  
<from>Jani</from>
  
<heading>Reminder</heading>
  
<body>Don't forget me this weekend!</body>
  
</note>
  
概念:DTDDocument Type Definition 的缩写,它定义了与之相关的XML文档所有合法的元素和属性。
  

  
    
  

  
    
  

  
    
  

  
    
  

DTD中声明XML元素:

DTD中一共可以把元素分为五种类型:
   
 1.   
 空元素
    
<!ELEMENT element-name EMPTY>
  
Example:
  
<!ELEMENT br EMPTY>
  
XML example:
  
<br />
  

  
    
  
 2.   
 已解析的字符内容的元素
    
<!ELEMENT element-name (#PCDATA)>
  
Example:
  
<!ELEMENT from (#PCDATA)>
  

  
    
  
 3.   
 任意内容的元素
    
<!ELEMENT element-name ANY>
  
Example:
  
<!ELEMENT note ANY>
  

  
    
  
 4.   
 内容为子元素的元素
    
<!ELEMENT element-name (child1,child2,...)>
  
Example:
  
<!ELEMENT note (to,from,heading,body)>
  
注意:子元素必须按其在父元素中出现的顺序依次出现
   

  
    
  
 4.1 
  每个子元素出且仅出现一次:
    
<!ELEMENT element-name (child1,child2,...)>
  
Example:
  
<!ELEMENT note (to,from,heading,body)>
  

  
    
  
 4.2 
  每个子元素至少出现一次:
    
<!ELEMENT element-name (child1+,child2+,...)>
  
Example:
  
<!ELEMENT note (to+,from+,heading+,body+)>
  

  
    
  
 4.3 
  每个子元素可以出现任意次(包括不出现):
    
<!ELEMENT element-name (child1*,child2*,...)>
  
Example:
  
<!ELEMENT note (to*,from*,heading*,body*)>
  

   
     
   
 4.4 
  只可能不出现或是出现一次的元素:
    
<!ELEMENT element-name (child1,child2,...)>
  
Example:
  
<!ELEMENT note (to,from,heading,body)>
  

   
     
   
 4.5 
  不可同时出现的子元素:
    
<!ELEMENT element-name (child1 | child2 | ,...)>
  
Example:
  
<!ELEMENT note (tofrom,(heading | body)>
  

  
    
  
 5.   
 混合内容的元素
    
Example:
  
<!ELEMENT note (#PCDATA|to|from|header|message)*>
  

  
    
  

DTD中声明XML属性:

通用的语法格式:
   
<!ATTLIST element-name attribute-name attribute-type default-value>
  
DTD example:
  
<!ATTLIST payment type CDATA "check">
  
XML example:
  
<payment type="check" />
  

  
    
  
属性的类型(attribute-type)有如下几种:
   

Type

Description

CDATA

字符串值,如 “check”

(en1|en2|..)

只能从en1enn中任选一值

ID

ID类型的属性是全局唯一的

IDREF

它的取值必须是前面已经出现过的ID

IDREFS

它的取值必须是前面已经出现过的ID值们,用空格分隔

NMTOKEN

The value is a valid XML name

NMTOKENS

The value is a list of valid XML names

ENTITY

The value is an entity

ENTITIES

The value is a list of entities

NOTATION

The value is a name of a notation

xml:

The value is a predefined xml value


  
    
  
属性自身的属性(default-value): 
  

Value

Explanation

Example

Default Value

属性的默认值
       
DTD:
      
<!ELEMENT square EMPTY>
      
<!ATTLIST square width CDATA "0">
      
Valid XML:
      
<square width="100" />
      

#REQUIRED

属性必须在XML文档中出现

DTD:
      
<!ATTLIST person number CDATA #REQUIRED>
      
Valid XML:
      
<person number="5677" />
      
Invalid XML:
      
<person />
      

#IMPLIED

属性可以不在XML文档中出现

DTD:
      
<!ATTLIST contact fax CDATA  #IMPLIED>
      
Valid XML:
      
<contact fax="555-667788" />
      
Valid XML:
      
<contact />
      

 

#FIXED value

属性的值固定了

DTD:
      
<!ATTLIST sender company CDATA #FIXED "Microsoft">
      
Valid XML:
      
<sender company="Microsoft" />
      
Invalid XML:
      
<sender company="W3Schools" />
      

 


DTD中定义XML的实体:

实体可以分为一般实体参数实体,而一般实体又可以分为内部实体外部实体
   
 1.    
 一般实体
   
 1.1   
 内部实体
    
定义的语法:<!ENTITY entity-name "entity-value">
   
DTD Example:
  
<!ENTITY writer "Donald Duck.">
  
<!ENTITY copyright "Copyright W3Schools.">
  
XML example:
  
<author>&writer;&copyright;</author>
  

  
    
  
 1.2   
 外部实体
    
定义的语法:<!ENTITY entity-name SYSTEM "URI/URL">
  
DTD Example:
  
<!ENTITY writer SYSTEM "http://www.w3schools.com/entities.dtd">
  
<!ENTITY copyright SYSTEM "http://www.w3schools.com/entities.dtd">
  
XML example:
  
<author>&writer;&copyright;</author>
  
外部已分析实体的写法:
   
<?xml  version=”
  
   1.0”
   encoding=”TF
  
   -8”
  >
  
entity-value
   
注意,version属性是可选的,没有standalone的属性,只有entity-value的内容才会用来替换。
   

  
    
  
 2.   
 参数实体
    

参数实体不能在XML文档中出现,只能在单独的DTD文档中被定义和使用(部的DTD不能定义和使用)。它能出现在所有tag出现的同阶位置,而且在DTD中以% y-name;的形式被引用。

定义的语法:<!ENTITY  % y-name "entity-value">

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值