DTD——描述xml的文档结构

一、DTD——描述xml的文档结构
 1.DTD是用来校验xml文件的,DTD的全称Document Type Defintion,用来描述xml的文档结构,一个DTD文档包含:
  1>.元素(ELENENT)的定义
  2>.无素之间的无素关系
  3>.属性(ATTLIST)的定义规则
  4>.可以使用实体(ENTITY)或等符号(NOTATION)规则
 
 2.如何生成一个DTD文档
  1>.DTD和xml的关系:类似于类和对象之间的关系,一个类可以new多个对象,DTD是抽象的,而xml是具体的.
  2>.DTD文档的声明及引用
   1.内部DTD文档<!DOCTYPE 根元素[定义内容],例如:innerDTD.xml    

  <?xml version="1.0" encoding="gb2312" ?>
    <!DOCTYPE poem[  <--根元素的名称
    <!ELEMENT poem(author,title,content)>  <--子元素的名称及顺序
    <!ELEMENT author(#PCDATA)>  <--子元素的数据类型
    <!ELEMENT title(#PCDATA)> 
    <!ELEMENT content(#PCDATA)> 
    ]>  <---标签结束
    
    <poem>
     <author>王维</author>
     <title>鹿柴</title>
     <content>
       空山不见人,但闻人语声。
       返景入深林,复照青苔上。
     </content>
    </poem>

   2.外部DTD文档<!DOCTYPE 根元素 SYSTEM "DTD文件路径">例如:    

   outer.xml 
   <?xml version="1.0" encoding="gb2312" ?>
   <!DOCTYPE poem SYSTEM "outer.dtd">
   <poem>
     <author>王维</author>
     <title>鹿柴</title>
     <content>
       空山不见人,但闻人语声。
       返景入深林,复照青苔上。
     </content>
    </poem>
    
   outer.dtd 
    <?xml version="1.0" encoding="gb2312" ?> 
    <!ELEMENT poem(author,title,content)>
    <!ELEMENT author(#PCDATA)>
    <!ELEMENT title(#PCDATA)> 
    <!ELEMENT content(#PCDATA)>   

   3.内部DTD文档结合<!DOCTYPE 根元素 SYSTEM "DTD文件路径">例如:      

  mixed.xml
    <?xml version="1.0" encoding="gb2312" ?> 
    <!DOCTYPE poem SYSTEM "mixed.xml" [
     <!ELEMENT poem(author,title,content)>
     <!ELEMENT author(#PCDATA)>
    ]>
    <poem>
     <author>王维</author>
     <title>鹿柴</title>
     <content>
       空山不见人,但闻人语声。
       返景入深林,复照青苔上。
     </content>
    </poem>
    
   mixed.dtd
    <?xml version="1.0" encoding="gb2312" ?> 
    <!ELEMENT title(#PCDATA)> 
    <!ELEMENT content(#PCDATA)> 

     3>.元素的定义
   1.语法:<!ELEMENT NAME CONTENT> 
       ELEMENT:关键字
       NAME:元素名称
       CONTENT:元素类型
       
   2.CONTENT:元素类型
       EMPTY:该元素不能包含子元素和文本,但可以有属性-(空无素)。
       ANY:该元素可以包含任何在DTD中定义的元素内容,
        将根元素设为ANT类后,元素出现的次数和顺序不受限制(很少使用)。
       #PCDATA:可以包含任何元素字符数据,但是不能在其中包含任务子元素(使用比较多)。
       纯元素类型:只包含子元素,并且子元素中没有文本(使用比较多)。
       混合类型:包含子元素和文本数据的混合体(很少使用)。
       
       组合类型示例:<!ELEMNT 家庭 (人+,家电*)> 如:
       <家庭>
        <人 名字="李白" 性别="男" 年龄="25" />
        <人 名字="杜甫" 性别="男" 年龄="26" 爱好="吟诵" />
        <家电 名称="彩电" 数量="3" />
       </家庭>
       
       符号 用途                                                     示例                                                            说明
       ()  用来给元素分组                                  (李白|杜甫),(李小龙),金庸                 分成三组
       
       |   在列出的对象中选择一个                     (男|女)                                                    表示男或女必须出现,两者选一
       
       +   该对象至少出现一次,                       (成员+)                                                       表示成员必须出现,而且可以出现多个成员
          可以出现多次(1或者N次)      
       *   该对象允许出现零次到任意多次        (爱好*)                                                        爱好可以出现零到多次
       ?   该对象可以出现,                               (菜鸟?)                                                       菜鸟可以出现可以不出现,如果出现的话,最多出现一次
          但只能出现0到1次
       ,   对象必须按指定的顺序出现                 (北京,天津,重庆,上海)                     表示北京,天津,重庆,上海必须出现,按照这个顺序出现
       
  4>.属性的定义      
   1.语法:<!ATTLIST 元素名称 属性名称 类型 属性特点> 
    类型:CDATE      任何字符数据(包括数字和中文)
         NMTOKEN   是一个CDATE的字集,表示属性值必须是英文字母、数字、句号、破折号、下划线或冒号,属性值不能含有空格。
         NMTOKENS  和NMTOKEN类似,包含多个由空格分隔的字符。
       ID        表示该属性的取值必须是唯一的。
       IDREF/IDREFS   IDREF引用其它的ID。
       NMTOKEN/NMTOKENS 事先定义好一些值,属性的值,必须在所列出的的值的范围内。
         例如:<!ATTLIST person 婚姻状态(single|married|divorced|widowed) #IMPLIED>
       Enumberated
       ENTITY/ENTITES
       NOTATION
       NOTATIONS
    属性特点:
      #REQUIRED    必须的  元素的所有的实例都必须有该属性的值(这个属性值必须要出现)
      #IMPLIED   可选的  元素的实例中可以忽略该属性(NULL)。<!ATTLIST content fax CDATE #IMPLIED> 表示fax属性可有可无。
      #FIXED value 确定值  <!ATTLIST sender company CDATE #FIXED "Microsoft">  属性值必须为Microsoft
      Default value 
      
   5>.实义实体
    1.内部实体 语法:<!ENTITY 实体名 "实体值">
    2.外部实体 语法:<!ENTITY 实体名 SYSTEM "URI/URL"> 例如:
     DTD示例:<!ENTITY struts SYSTEM "http://struts.apache.org/dtds/struts-2.3.dtd">
     XML示例:<author>&struts</author>
     
    3.实体类型:普通实体、外部实体、参数实体、外部参数实体
    
     类型   普通实体                    参数实体    
     使用场合 用在xml文档中                 只用在DTD中元素和属性中声明
     
     声
     明 内部  <!ENTITY 实体名 "文本内容">          <!ENTITY %实体名 "文本内容">
     方
     式 外部  <!ENTITY 实体名 SYSTEM "外部文件URL地址">   <!ENTITY% 实体名 SYSTEM "外部文件URL地址">
     引用方式 &实体名;                   %实体名;
    
    4.普通实体:普通实体是指在xml中用的。参数实体:参数实体是指在xml中用的。
    例如:
     <!ENTITY %地址 "街道,城市,邮政,国家">
     <!ELEMENT 联系人(人名,电话,%地址;)>
 
   4>.命令空间(Namespace)
     1.命令空间:避免元素名冲突
     2.使用URL做为XML的Namespace
     3.命名空间的语法定义:xmlns:[prefix="URL"]
     4.元素和属性都可以做为应用命名空间
     5.加前缀决解元素名冲突,例如:           

      <h:table xmlns:h="http://www.w3c.org/TR/html4">
       <h:td>Apples<h:td />
       <h:td>Bananas<h:td />     
      </h:table>
      
      <f:table xmlns:h="http://www.w3schools.com/furniture">
       <f:name>African Coffe Table<f:name />
       <f:width>Bananas<f:width />     
       <f:length>120<f:length />     
      </f:table>


     6.总结
      1.一个有效的XML文件必须是结构正规的。结构正规的XML文档不一定是有效的。
      2.DTD包含一套用来描述并限制XML文档的语法规则。
       1.元素定义规则
       2.元素之间的关系规则
       3.属性的定义
       4.可使用的实体或符号规则
      3.命令空间:避免元素名冲突
      4.在XML中,使用全球唯一的URL作为Namespace
      

你可能感兴趣的:(xml,Microsoft,table,System,文档,encoding)