初学XML(2) DTD(Document type defintnion)文档类型定义

一:DTD(Document type defintnion)文档类型定义
  A:作用:
    验证一个XML文档是否合法有效(ISO9001)
  B:如何来约束XML文档
    1:如何来约束XML文档元素
       元素出现次数的约束:
         +  代表该元素至少出现一次 也可以出现多次
         *  代表该元素可出现可不出现 出现的时候可以是多次
         ?  代表带元素可以不出现 但是出现的时候只能是一次
       元素的类型
        (#PCDATA) 代表该元素没有子元素 但是有元素内容
        EMPTY     代表该元素既没有子元素  也没有元素内容
         ANY      带表该元素包含了在文档中出现的其他任何子元素
                  一般修饰根元素
       格式:
        <!ELEMENT 元素名称 出现次数 类型以及关系>
    2:如何来约束XML文档属性
       格式:
        <!ATTLIST 属性所在的元素名称 属性名称 属性类型
                  属性约束>
        属性的类型:
          CDATA 代表该属性可以包含字符数据
          ID    代表该属性的值是唯一的
          IDREF 指向文档中出现的一个属性
          IDREFS指向文档中出现的多个属性
       属性的约束:
          #REQUIRED   代表该属性必须出现
          #IMPLIED    代表该属性的可以不出现
          #FIXED  值  代表该属性只能取某一个值
          默认值      有新值的时候取新值  否则取默认值
       
   3:实体
      就是一个调用关系
      请牢记系统的5个实体  &lt -- < , &gt -- > , &amp; -- & , &quot -- " , &apos -- '
 3.1 DTD中的内部实体
    在XML的文档中的表现形式??
    语法: <!ENTITY entity-name "entity-value">
    DTD 示例:
       <!ENTITY writer "王俊">
       <!ENTITY copyright "Copyright XML1.0">
    XML 示例:
       <author> &writer; &copyright;</author>
 3.2 DTD中的外部实体
    外部实体指内容在XML文档之外的实体。
    SYSTEM 关键字用于指定所有在文档之外的实体。
    语法: <!ENTITY entity-name SYSTEM "URI/URL">
    例: 将实体引用替换成指定的文档内容.
    DTD:   <!ENTITY writer SYSTEM "http://www.xml101.com/entities/entities.xml">
    XML:   <author>&writer;</author>
 3.3 DTD 中的参数实体
    只能在DTD文档中出现。
    DTD 示例:
       <!ENTITY %p "a">
          <!ELEMENT roster ((%p;)+)>
       <!ELEMENT %P; (name,age,address)>
    其中p是参数实体,a是p的省略值. 根据p 的不同,DTD中roster子元素也不同。
    这种用法一般用于 两个不同元素的XML文件共同关联一个DTD文件。
    XML 示例:
      一个文件是:  <!ENTITY %p "student">
      别一个文件是:<!ENTITY %p "teacher">
    student 和 teacher 分别为两个文件中的roster的子元素。

       <?xml version="1.0" encoding="UTF-8"?>

<!ELEMENT TVGuide (Channel+)>
<!ELEMENT Channel (Name,Program+)>
<!ELEMENT Name (#PCDATA)>
<!ELEMENT Program (Start,Duration,Series,Title,Description?,CastList?,Writers?,Director?,Producer?)>
<!ELEMENT Start (#PCDATA)>
<!ELEMENT Duration (#PCDATA)>
<!ELEMENT Series (#PCDATA)>
<!ELEMENT Title (#PCDATA)>
<!ELEMENT Description (#PCDATA)>
<!ELEMENT CastList (CastMember+)>
<!ELEMENT Writers (Writer)>
<!ELEMENT Writer (Name)>
<!ELEMENT Director (Name)>
<!ELEMENT Producer (Name)>
<!ELEMENT CastMember (Character,Actor)>
<!ELEMENT Character (Name)>
<!ELEMENT Actor (Name)>

<!ATTLIST TVGuide Start CDATA #REQUIRED end CDATA #REQUIRED>
<!ATTLIST Program rating CDATA #IMPLIED flag CDATA #IMPLIED type CDATA #FIXED "document">


例子:  一个简单的  introduce.dtd 文件和 introduce.xml文件.
--------xml文件---------
<?xml version="1.0" encoding="GB2312"?>
<!DOCTYPE school SYSTEM "introduce.dtd">
<school>

<!--<class>-->
 <student stuID="s001"> 
<!--因为dtd文件中的属性设为ID(唯一的属性值),因此值的数字前面一定要加字母,否则出错。如 错误 [333] 正确 [s333] -->
  <name>wangjun</name>
  <age>28</age>
  <address>应城</address>
 </student>
 <student stuID="s1003">
  <name>duping</name>
  <age>22</age>
  <address>仙桃</address>
 </student>
 <student stuID="s005">
  <name>chenjie</name>
  <age>26</age>
  <address>武汉</address>
 </student>
<!--</class>-->
</school>

---------------dtd文件--------------
<?xml version="1.0" encoding="UTF-8"?>
<!ELEMENT school (student+)>
<!ELEMENT student (name,age,address)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT age (#PCDATA)>
<!ELEMENT address (#PCDATA)>
<!ATTLIST student stuID ID #REQUIRED>
====================over========================

posted @ 2008-02-16 22:13  wj-conquer  阅读(380)  评论(0编辑  收藏  举报