XML学习笔记之文档类型定义(DTD) 和实体(ENTITY)

文档类型定义  (document type definition )DTD
是规范的一部分。
1 为何需要DTD

xml文件不仅遵循xml的语法规则,而且受到dtd的约束
DTD的优越性:正式而精确的定义词汇表。
DTD的作用:将你掌握的知识提供给程序,同时获得文件资料。

只需要使用DTD和验证有效性的解析器,文档语法、词汇表以及指定值中的任何错误都逃不过解析器的眼镜。

2 编写DTD :通用原则

xml文档由元素和相应的属性组成。元素的内容是通过其他元素或xml标准中规定的基本类型进行定义的。
DTD比较能够定义文档中的所有元素,元素可以设置的属性,以及元素之间的关系。
DTD与xml关联的方式
1 DOCTYPE标记
  DOCTYPE声明必须位于xml声明之后,且在任何文档元素之前。但是XML声明和DOCTYPE声明之间可以插入诠释和处理指令。
  DOCTYPE声明包括关键字DOCTYPE。文档根元素名称,以及内容声明结构。
  e.g 
 

   xml version="1.0"  ?>
   
DOCTYPE Catelog ... >


  第一行表明该文档符合XML1.0,第二行说明该文档使用Catelog词汇表,Catelog是根元素。
 
  关键字SYSTEM 解析器将根据给出的URL寻找DTD
  关键字PUBLIC 根据URI寻找DTD

DTD的四种标记声明
 ELEMENT    xml元素类型声明
 ATTLIST    特定元素类型可设置的属性&属性的允许值声明
 ENTITY     可重用的内容声明
 NOTATION   不要解析的外部内容的格式声明。

实体 ENTITY
 
 
 预定义实体    
    <                   ⁢
    >                   >
    &                   &
    '(单引号)      '
    "(双引号)     "
 
 通用实体
  定义一个可重用的 copyright
  调用 需要前面加 & 后面+分号,比如©right;
  当实体引用在解析过程中被替换为置换文本时,其结果必须 是格式正规的xml
  通用实体的外部形式
  e.g 

ENTITY myEntity SYSTEM "http://www.wror.com.boilper/copyright.txt" >


  
  属性值中不能引用可解析的外部实体
  实体不能包含直接或间接的对自身的引用

 参数实体
  仅仅在DTD中使用的解析实体成为参数实体。这样能够简便的引用或修改DTD中常用的结构。但是扩展结构时,仍然需要编辑DTD。
  参数实体声明:ENTITY关键字、百分号、名称和替换字。
  e.g

   ENTITY %peopleParameters  "age CDATE #IMPLIED weight CDATA  #IMPLIED height CDATA #REQUIRED" >

  CDATA代表字符数据。
 
  在DTD中,所有参数实体必须在引用之前进行声明。所以DTD内部子集不能引用在外部子集中声明的参数实体,因为解析器首先读取内部子集。
 
  引用参数实体时,需要在实体名称前面增加百分号,其后加分号。
  e.g

     ATTLIST InsuredPerson
    %peopleParameters;
    carrier  CDATA #REQUIRED
>

 以上代码等价于  

  ATTLIST InsuredPerson
    age         CDATA  #IMPLIED
    weight     CDATA  #IMPLIED
    height     CDATA   #REQUIRED    
    carrier     CDATA   #REQUIRED 
>

  这种类型的替换形式—在声明中进行替换—只能用于DTD外部子集。在内部子集中,参数实体引用只能位于其他声明之间;因此这类实体引用的置换文本必须是一个完整的声明,否则将影响DTD格式的正规性。

  参数实体遵循文档规则,用置换文本取代实体引用后,要复合文档规则。
  参数实体的置换文本也可以位于外部文中中
  e.g

  ENTITY %myParam SYSTEM "http://www.worx.com/Wroxdecls.ent"  >

你可能感兴趣的:(XML学习笔记之文档类型定义(DTD) 和实体(ENTITY))