zoukankan      html  css  js  c++  java
  • XML 3 —— DTD

    • 有效的(valid)XML文档。首先XML文档是个格式正规的XML 文档,然后有需要满足DTD的要求,这样的XML文档称为有效的XML文档。
    • #PCDATA (Parsed Character Data),可解析的字符数据。
    • 关于普通实体与参数实体
      • 普通实体是在dtd中定义,xml中使用,使用的时候格式为,&address;
      • 参数实体是在dtd中定义,dtd中使用,定义的时候使用%,使用的时候也需要使用%,%address;
      • 外部普通实体的定义方式是:<!ENTITY address SYSTEM "http://www.shengsiyuan.com/xml.xml"> 表示使用http://www.shengsiyuan.com/xml.xml网址的内容来替换掉address ,而不是使用http://www.shengsiyuan.com/xml.xml_字符串本身来替换掉address。
      • 外部参数实体:,<!ENTITY % address SYSTEM "http://www.shengsiyuan.com/xml.xml">,使用的时候: %address;

    文档类型定义——(Document Type Definition)

    DTD用来描述XML文档的结构,一个DTD文档包含

    • 元素(ELEMENT)的定义规则
    • 元素之间的关系规则
    • 属性(ATTLIST)的定义规则
    • 可使用的实体(ENTITY)或符号(NOTATION)规则

    什么是DTD、为什么要用DTD

    • DTD文档与XML文档实例的关系
      • 类与对象
      • 数据库表结构与数据记录
    • 有了DTD,每个XML文件可以携带一个自身格式的描述
    • 有了DTD,不同组织的人可以使用一个通用DTD用来交换数据
    • 应用程序可以使用一个标准DTD校验从外部世界接受来的XML数据是否有效
    • 可以使用DTD校验自己的XML数据

    如何生成一个DTD文档

    • DTD文档的声明和引用
      • 内部DTD文档
        • <!DOCTYPE 根元素 [定义内容]>
      • 外部DTD文档
        • <!DOCTYPE 根元素 SYSTEM "DTD文件路径">
      • 内外部DTD文档结合
        • <!DOCTYPE 根元素 SYSTEM "DTD文件路径"[定义内容]>
    • poem.xml
      • <?xml version="1.0" encoding="UTF-8"?>
        <!DOCTYPE poem SYSTEM "dtd_1.dtd">
        <poem>
            <author>王维</author>
            <title>鹿柴</title>
            <content>空山不见人</content>
        </poem>
    • dtd_1.dtd

      • <?xml version="1.0" encoding="UTF-8"?>
        <!ELEMENT ENTER_NAME_OF_ROOT_ELEMENT_HERE EMPTY>
        <!ELEMENT poem (author+, title*, content?)>
        <!ELEMENT author (#PCDATA)>
        <!ELEMENT title (#PCDATA)>
        <!ELEMENT content (#PCDATA)>

    元素的定义 

    语法

    <!ELEMENT NAME CONTENT>
    • ELEMENT 关键字
    • NAME 元素名称
    • CONTENT 元素类型
      • EMPTY 元素不能包含子元素和文本,但可以有属性 ——(空元素)
        • <!-- EMPTY示例——空元素 -->
          <!ELEMENT 人 EMPTY>
          <家庭>
              <人 名字="匹诺曹" 性别="男" 年龄="6"/>
          </家庭>
          
          <!-- 错误示例 -->
          <家庭>
              <>匹诺曹</>
              <><大人>匹诺曹爸爸</大人></>
          </家庭>
      • ANY 元素可以包含任何在DTD中定义的元素内容,如果将根元素设置为ANY类型后,元素出现次数和顺序将不受限制。
        • <!-- ANY示例 -->
          <!ELEMENT 人 ANY>
          <家庭>
              <>匹诺曹</>
              <><大人>匹诺曹爸爸</大人></>
          </家庭>
      • #PCDATA 可以包含任何字符数据,但是不能再其中包含任何子元素
        • <!-- #PCDATA示例 -->
          <!ELEMENT 人 (#PCDATA)>
          <家庭>
              <人 性别="男" 年龄="6">匹诺曹</>
          </家庭>
          
          <!-- 错误示例 -->
          <家庭>
              <><大人>匹诺曹爸爸</大人></>
          </家庭>
      • 纯元素类型 置包含子元素,并且这些子元素外没有文本
      • 混合类型 包含子元素和文本数据的混合体
        • <!-- 组合类型示例 -->
          <!ELEMENT家庭(人+, 家电*)>
          <家庭>
              <人 名字="郭大路" 性别="男" 年龄="25"/>
              <人 名字="李寻欢" 性别="男" 年龄="38" 爱好="作个教育家和伟人"/>
              <家电 名称="彩电" 数量="3"/>
          </家庭>

     修饰符号

    符号 用途 示例 示例说明
    () 用来给元素分组 (古龙|金庸|梁羽生),(郦丹萍|王羿),我 分成三组
    | 在列出的对象中选择一个 (男人|女人) 表示男人或者女人必须出现,两者选一
    + 该对象最少出现一次,可以出现多次(1次或多次) (成员+) 表示成员必须出现,而且可以出现多个成员
    * 该兑现允许出现零到任意多次(0到多次) (爱好*) 爱好可以出现零到多次
    ? 该对象可以出现,但只能出现一次(0到1次) (菜鸟?) 菜鸟可以出现,也可以不出现,如果出现的话,最多只能出现一次
    , 对象必须按指定的顺序出现 (西瓜,苹果,香蕉) 表示西瓜、苹果、香蕉必须出现,并且按这个顺序出现

    属性的定义

    • 语法
      • <!ATTLIST /元素名称
            属性名称 类型 属性特点
            ......
        >
    • 类型
      • CDATA
        • 属性值可以是任何字符(包括数字和中文)
        • <!ATTLIST 木偶 
              姓名 CDATA #REQUIRED
          >
          <!ATTLIST 木偶 姓名="匹诺曹"/>
          <!ATTLIST 木偶 姓名="PiNuoCao"/>
          <!ATTLIST 木偶 姓名="123"/> 
        • 注意这里CDATA与CDATA节的区别,#PCDATA与CDATA的区别
      • ID
        • 表明 该属性的取值必须是唯一的
        • <!ELEMENT 公司职员 ANY>
          <!ATTLIST 公司职员
              编号 ID #REQUIRED
              姓名 CDATA #REQUIRED
          >
          
          <!-- 正确示例 -->
          <公司职员 编号="Z001" 姓名="张三"/>
          <公司职员 编号="Z002" 姓名="李四"/>
      • IDREF/IDREFS
        • IDREF属性的值指向文档中其它地方声明的ID类型的值
        • IDREFS同IDREF,但是可以具有由空格分开的多个引用。
        • <!ELEMENT 家庭(人+)>
          <!ELEMENT 人 EMPTY>
          <!ATTLIST 人
              relID ID #REQUIRED
              parentID IDREFS #IMPLIED
              name CDATA #REQUIRED
          >
          <家庭>
              <人 relID="P_1" name="爸爸"/>
              <人 relID="P_2" name="妈妈"/>
              <人 relID="P_3" parentID="P_1 P_2" name="儿子"/>
          </家庭>
      • NMTOKEN/NMTOKENS
        • NMTOKEN是CDATA的一个子集,表示属性值必须是英文字母、数字、句号、破折号、下划线或冒号,属性值不能含有空格。
        • NMTOKENS与NMEOKEN类似,包含多个由空格分隔的字符。
        • <?xml version="1.0" encoding="UTF-8"?>
          <!DOCTYPE poem[
              <!ELEMENT ENTER_NAME_OF_ROOT_ELEMENT_HERE EMPTY>
              <!ELEMENT poem (title, content)>
              <!ELEMENT title (#PCDATA)>
              <!ELEMENT content (#PCDATA)>
              <!ATTLIST title author NMTOKEN #REQUIRED>
          ]>
          <poem>
              <title author="wangwei">鹿柴</title>
              <content>空山不见人</content>
          </poem>
      • Enumerated
        • 事先定义好一些值,属性的值必须在所列出的值的范围内
        • <!ATTLIST person
              婚姻状态(single|married|divorced|widowed) #IMPLIED>
          <!ATTLIST person 性别(男|女) #REQUIRED>
      • ENTITY/ENTITIES
      • NOTATION
      • NOTATIONS
    • 属性特点
      • #REQUIRED
        • 元素的所有实例都必须有该属性的值(not null)
        • 语法
          • <!ATTLIST 元素名 属性名 属性类型 #REQUIRED>
        • 示例
          • <!ATTLIST person number CDATA #REQUIRED>
            <person number="5677" />
      • #IMPLIED
        • 元素的实例中可以忽略该属性(null)
        • 语法
          • <!ATTLIST 元素名 属性名 属性类型 #IMPLIED>
        • 示例
          • <!ATTLIST contact fax CDATA #IMPLIED>
            <person number="555-667788" />
      • FIXED value
        • 元素实例中该属性的值必须为指定的固定值
        • 语法
          • <!ATTLIST 元素名 属性名 属性类型 #FIXED"value">
        • 示例
          • <!ATTLIST sender company CDATA #FIXED"Microsoft">
            <sender company="Microsoft"/>
      • Default value
        • 为属性提供一个默认的值
        • 语法
          • <!ATTLIST 元素名 属性名 属性类型 "value">
        • 示例
          • <!ATTLIST hello payment type CDATA "check">
            <hello payment="check"/>

     实体

    • 内部实体
      • 语法
        • <!ENTITY  实体名 "实体值">
      • 示例
        • <!ENTITY writer "Donald Duck.">
          <!ENTITY copyright "Copyright W3Schools.">
          
          <author>&writer;&copyright;</author>
    • 外部实体
      • 语法
        • <!ENTITY 实体名 SYSTEM "URI/URL">
      • 示例
        • <!ENTITY writer SYSTEM "http://www.w3schools.com/entities/entities.xml">
          <!ENTITY copyright SYSTEM "http://www.w3schools.com/entities/entities.dtd">
          
          <author>&writer;&copyright; </author>

    实体类型

    实体类型有普通实体、外部实体、参数实体、外部参数实体

    类型 普通实体 参数实体
    使用场合 用在XML文档中 只用在DTD中元素和属性的声明中
    声明方式 内部 <!ENTITY  实体名 "文本内容"> <!ENTITY % 实体名 "文本内容">
    外部 <!ENTITY  实体名 SYSTEM "外部文件URL地址"> <!ENTITY  % 实体名 SYSTEM "外部文件URL地址">
    引用方式 &实体名; %实体名
  • 相关阅读:
    python第三十二课——队列
    python第三十二课——栈
    python提示警告InsecureRequestWarning
    关于requests.exceptions.SSLError: HTTPSConnectionPool
    python第三十一课--递归(3.递归的弊端)
    01 redis特点及安装使用
    22 nginx配置与集群
    21-nginx单机1W并发优化
    20-ab压力测试及nginx性能统计模块
    19 大网站的优化思路
  • 原文地址:https://www.cnblogs.com/stu-jyj3621/p/14330620.html
Copyright © 2011-2022 走看看