XML与DTD约束的例子- 电视节目表DTD

IT程序员开发必备-各类资源下载清单,史上最全IT资源,个人收藏总结!

元素定义:

       (1)在DTD文档中使用ELEMENT声明一个XML元素,语法格式如下所示:
               <!ELEMENT 元素名称 元素类型>
       (2)元素类型可以是元素内容、或类型
               如为元素内容:则需要使用()括起来,如
                    <!ELEMENT 书架 (书名,作者,售价)>
                    <!ELEMENT 书名 (#PCDATA)>
              如为元素类型,则直接书写,DTD规范定义了如下几种类型:
                     EMPTY(大写):用于定义空元素,例如<br/> <hr/>
                     ANY(大写):表示元素内容为任意类型。
                    <!ELEMENT 书架 ANY>

      (3)元素内容中可以使用如下方式,描述内容的组成关系
               用逗号分隔,表示内容的出现顺序必须与声明时一致。<!ELEMENT MYFILE (TITLE,AUTHOR,EMAIL)>
              用|分隔,表示任选其一,即多个只能出现一个
              <!ELEMENT MYFILE (TITLE|AUTHOR|EMAIL)>
      (4)在元素内容中也可以使用+、*、?等符号表示元素出现的次数:
             +: 一次或多次 (书+)
             ?: 0次或一次 (书?)
             *: 0次或多次  (书*)
      (5)也可使用圆括号( )批量设置,例
            <!ELEMENT MYFILE ((TITLE*, AUTHOR?, EMAIL)* | COMMENT)>

属性定义:

  xml文档中的标签属性需通过ATTLIST为其设置属性
  语法格式:
    <!ATTLIST 元素名
        属性名1 属性值类型 设置说明
        属性名2 属性值类型 设置说明
        ……
    >
  属性声明举例:
    <!ATTLIST 商品
      类别 CDATA #REQUIRED
      颜色 CDATA #IMPLIED
    >
  对应XML文件:
    <商品 类别="服装" 颜色="黄色">…</商品>
    <商品 类别="服装">…</商品>
  设置说明:

    #REQUIRED:必须设置该属性
    #IMPLIED:可以设置也可以不设置
    #FIXED:说明该属性的取值固定为一个值,在 XML 文件中不能为该属性设置其它值。但需要为该属性提供这个值
    直接使用默认值:在 XML 中可以设置该值也可以不设置该属性值。若没设置则使用默认值。

  举例:
    <!ATTLIST 页面作者
        姓名 CDATA #IMPLIED
        年龄 CDATA #IMPLIED
        联系信息 CDATA #REQUIRED
        网站职务 CDATA #FIXED "页面作者"
        个人爱好 CDATA "上网"
    >
  常用属性值类型

    CDATA:表示属性值为普通文本字符串。
    ENUMERATED :如 plant (Pittsburgh|Milwaukee|Chicago) "Chicago"
    ID
    ENTITY(实体)

  属性值类型-ENUMERATED

       属性的类型可以是一组取值的列表,在 XML 文件中设置的属性值只能是这个列表中的某个值(枚举)

          <?xml version = "1.0" encoding="GB2312" standalone="yes"?>

          <!DOCTYPE 购物篮 [

               <!ELEMENT 肉 EMPTY>

              <!ATTLIST 肉 品种 ( 鸡肉 | 牛肉 | 猪肉 | 鱼肉 ) "鸡肉">

         ]> 

         <购物篮>

                 <肉 品种="鱼肉"/>

                <肉 品种="牛肉"/>

               <肉/>

       </购物篮>

    属性值类型--ID

         (1) 表示属性的设置值为一个唯一值。
         (2)ID 属性的值只能由字母,下划线开始,不能出现空白字符

         <?xml version = "1.0" encoding="GB2312" ?>
         <!DOCTYPE 联系人列表[     
            <!ELEMENT 联系人列表 ANY>
            <!ELEMENT 联系人(姓名,EMAIL)>
            <!ELEMENT 姓名(#PCDATA)>
            <!ELEMENT EMAIL(#PCDATA)>
            <!ATTLIST 联系人 编号 ID #REQUIRED>
     
    
        ]>

        <联系人列表>
            <联系人 编号="1">
                <姓名>张三</姓名>
                <EMAIL>zhang@it315.org</EMAIL>
             </联系人>
            <联系人 编号="2">
                <姓名>李四</姓名>
                <EMAIL>li@it315.org</EMAIL>
            </联系人>
        </联系人列表>

    实体定义
        (1)实体用于为一段内容创建一个别名,以后在XML文档中就可以使用别名引用这段内容了。
        (2)在DTD定义中,一条<!ENTITY …>语句用于定义一个实体。
        (3)实体可分为两种类型:引用实体和参数实体。

   实体定义--引用实体

        (1)引用实体主要在 XML 文档中被应用
        (2)语法格式:
               <!ENTITY 实体名称 “实体内容” >:直接转变成实体内容
        (3)引用方式:
               &实体名称;
        (4)举例:
               <!ENTITY copyright “I am a programmer">
                  ……
               &copyright;

    实体定义--参数实体 
         (1)参数实体被 DTD 文件自身使用
         (2)语法格式:
               <!ENTITY % 实体名称 "实体内容" >
        (3)引用方式:
               %实体名称;
        (4)举例1:
              <!ENTITY % TAG_NAMES "姓名 | EMAIL | 电话 | 地址">
    
              <!ELEMENT 个人信息 (%TAG_NAMES; | 生日)>
              <!ELEMENT 客户信息 (%TAG_NAMES; | 公司名)>
        (5)举例2:
                <!ENTITY % common.attributes
                            " id  ID  #IMPLIED
                             account  CDATA  #REQUIRED "
                >
                      ...
                <!ATTLIST purchaseOrder %common.attributes;>
                <!ATTLIST item %common.attributes;>



例子:电视节目表DTD:

tvschedule.dtd文件:

<!-- 

    电视节目表DTD

-->

<!ELEMENT tvschedule (channel+)>

<!ELEMENT channel (banner,day+)>

<!ELEMENT banner (#PCDATA)>

<!ELEMENT day (date,(holiday|programslot+)+)>

<!ELEMENT date (#PCDATA)>

<!ELEMENT holiday (#PCDATA)>

<!ELEMENT programslot (time,title,description?)>

<!ELEMENT time (#PCDATA)>

<!ELEMENT title (#PCDATA)>

<!ELEMENT description (#PCDATA)>

<!ATTLIST tvschedule name CDATA #REQUIRED>

<!ATTLIST channel chan CDATA #REQUIRED>

<!ATTLIST programslot vtr  CDATA #IMPLIED>

<!ATTLIST title rating CDATA #IMPLIED>

<!ATTLIST title language CDATA #IMPLIED>


tvschedule.xml文件:

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

<!DOCTYPE tvschedule [

<!ELEMENT tvschedule (channel+)>

<!ELEMENT channel (banner,day+)>

<!ELEMENT banner (#PCDATA)>

<!ELEMENT day (date,(holiday|programslot+)+)>

<!ELEMENT date (#PCDATA)>

<!ELEMENT holiday (#PCDATA)>

<!ELEMENT programslot (time,title,description?)>

<!ELEMENT time (#PCDATA)>

<!ELEMENT title (#PCDATA)>

<!ELEMENT description (#PCDATA)>

<!ATTLIST tvschedule name CDATA #REQUIRED>

<!ATTLIST channel chan CDATA #REQUIRED>

<!ATTLIST programslot vtr  CDATA #IMPLIED>

<!ATTLIST title rating CDATA #IMPLIED>

<!ATTLIST title language CDATA #IMPLIED>

]>

<tvschedule name="CCTV1">
     <channel chan="体育">
         <banner>友谊第一,比赛第二</banner>
         <day>
            <date>星期五</date>
            <programslot>
               <time>7:00-8:00</time>
               <title rating="10%" language="chinese">中国VS美国</title>
               <description>中国与美国的决战</description>
            </programslot>
             <programslot vtr="no">
               <time>16:00-17:00</time>
               <title rating="20%">中国VS小日本</title>
               <description>中国与小日本的决战</description>
            </programslot>
         </day>  

         <day>
            <date>星期六</date>
            <programslot>
               <time>9:00-10:00</time>
               <title>美国VS小日本</title>
               <description>美国与小日本狗咬狗</description>
            </programslot>
        </day>

        <day>
            <date>星期日</date>
            <holiday>星期日休息</holiday>
        </day>     
     </channel>
</tvschedule>




你可能感兴趣的:(xml,Date,文档,email,encoding)