DTD

作者: 小明滚出去_ | 来源:发表于2017-12-18 11:13 被阅读0次

一、声明

  • 内部DOCTYPE
<!DOCTYPE 根元素 [元素声明]>
<!DOCTYPE note [
  <!ELEMENT note (to,from,heading,body)>
  <!ELEMENT to      (#PCDATA)>
  <!ELEMENT from    (#PCDATA)>
  <!ELEMENT heading (#PCDATA)>
  <!ELEMENT body    (#PCDATA)>
]>
  • 外部DOCTYPE
<!DOCTYPE 根元素 SYSTEM "文件URI">
<!DOCTYPE 根元素 PUBLIC "文件名" "文件URI">

二、XML结构

  • 元素
  • 属性
  • 实体
    &lt;  &gt;  &amp;  &quot;  &apos;
    
  • PCDATA(默认)
  • CDATA

三、DTD元素声明

  • 指定类别
    <!ELEMENT 元素名称 类别>
    
     <!ELEMENT br EMPTY>
     <!ELEMENT note ANY>
    
  • 指定内容
    <!ELEMENT 元素名称 (元素内容)>
    <!ELEMENT 元素名称 (子元素名称 1,子元素名称 2,.....)>  有序
    <!ELEMENT 元素名称 (子元素名称 1|子元素名称 2|.....)+> 无序
    
    <!ELEMENT from (#PCDATA)>
    <!ELEMENT note (to,from,heading,body)>
    
    且字段可以按正则定义:
    <!ELEMENT note (message+)>至少一次
    <!ELEMENT note (message*)>零次或多次
    <!ELEMENT note (message?)>零次或一次
    <!ELEMENT note (to,from,header,(message|body))>或关系
    
    在声明元素有子元素序列时需要按顺序声明子元素,子元素也遵循这个规则。
  • 混合内容(不推荐)
    <!ELEMENT 元素名称 (#PCDATA | 子元素1 | 子元素2 ...)*>
    
    这里的'|'不代表'或'关系,表示这些元素可以无序出现任意多次,如:
    <!DOCTYPE root [
      <!ELEMENT root (#PCDATA | a | b )* >
      <!ELEMENT a (#PCDATA | c | d)* >
      <!ELEMENT c (#PCDATA)>
      <!ELEMENT d (#PCDATA)>
      <!ELEMENT b (#PCDATA)>
    ]>
    <root>
      <b>bbbbb11111</b>
      this is some datas
      <a>
        this is aaaaaaaaaa
        <c>ccccccc</c>
        <c>ccccccc22222</c>
        <d>dddddddd</d>
      </a>
      <b>bbbbbb</b>
      <b>bbbbb2222</b>
    </root>
    

四、DTD属性声明

  • 语法
     <!ATTLIST 元素名称 属性名称 属性类型 默认值>
    
    默认属性约束是IMPLIED,需指定默认值
  • 属性类型
    CDATA —— 字符串
    (en1|en2|..) —— 枚举
    ID —— 主键id,表示该属性为唯一值
    IDREF —— 关联元素的id
    IDREFS —— 关联多个元素的id,以空格分割
    NMTOKEN —— 元素标识,比id宽松,比CDATA严格,类似CSS中的class?
    NMTOKENS —— 多个元素标识
    ENTITY —— 未解析实体
    ENTITIES —— 未解析实体列表,多个以空格分割
    NOTATION —— 属性值只能是符号名
    xml:
    
  • 默认值
    value
    #REQUIRED —— 必须值
    #IMPLIED —— 非必须值
    #FIXED value —— 固定值
    
  • 当为元素定义属性类型为ENTITY\ENTITIES时,属性值只能是未解析实体:
    先定义符号:
    <!NOTATION pdf PUBLIC "PDF" "E:/Adobe Reader.exe" >
    在定义未解析实体:
    <!ENTITY book SYSTEM "book.pdf" NDATA pdf>
    最后定义元素和属性:
    <!ELEMENT ebookstore (#PCDATA)>
    <!ATTLIST ebookstore content ENTITY "book">
    

五、DTD实体声明

  • 普通实体,只能XML文档用
    <!ENTITY 实体名 "实体值">
    XML文档中使用:  &实体名;
    
  • 参数实体,只能DTD使用,且必须先定义后使用
    <!ENTITY % 实体名 "实体值">
    DTD中使用: %实体名;
    
  • 外部实体,XML使用
    <!ENTITY 实体名 SYSTEM "uri">
    <!ENTITY 实体名 PUBLIC "name" "uri">
    
  • 外部参数实体,DTD使用
    <!ENTITY % 实体名 SYSTEM "uri">
    <!ENTITY % 实体名 PUBLIC "name" "uri">
    
  • 未解析实体
    定义外部实体时,如果uri引用的文件不是文本文件或者不符合xml规范,则需要将该实体定义为未解析实体
    <!ENTITY % 实体名 SYSTEM "uri" NDATA 符号名>
    <!ENTITY % 实体名 PUBLIC "name" "uri" NDATA 符号名>
    
    符号名必须先定义后使用

六、DTD符号声明

<!NOTATION 符号名 SYSTEM "value">
<!NOTATION 符号名 PUBLIC "id" "value">

相关文章

  • DTD概念

    DTD文档定义 DTD元素定义 DTD属性定义 DTD实体引用定义 XML和DTD 文中大写是强制的,请务必遵守。...

  • XML类别及解析XML的几种方式

    XML约束文档分为DTD,Schema两种格式 DTD DTD(Document Type Definition)...

  • DTD

    一、声明 内部DOCTYPE 外部DOCTYPE 二、XML结构 元素 属性 实体< > &...

  • DTD

    DTD(文档类型定义)的作用是定义 XML 文档的合法构建模块。 它使用一系列的合法元素来定义文档结构 XSD是结...

  • DTD

    DTD (文档类型定义) 文档类型定义(DTD)可定义合法的XML文档构建模块。它使用一系列合法的元素来定义文档的...

  • XML(二)XML约束

    XML约束 DTD DTD(Document Type Define),dtd文件中描述并规定了元素、属性和其他内...

  • 【第二天】02-HTML的标签(中)

    1.2补充关于DTD

  • XXE——参数实体攻击(CVE-2017-14949)

    XML参数实体 参数实体必须定义在单独的DTD文档中或XML文档的DTD区(但是引用只能在DTD文档中,即外部子集...

  • XML规范(3)--DTD限制

    XML元素限制 DTD (Document Type Definition):文档类型定义DTD作用:可以通过 D...

  • DTD声明

    :文档声明 定义和用法 定义:是指示浏览器使用哪个HTML版本渲染编写的代...

网友评论

      本文标题:DTD

      本文链接:https://www.haomeiwen.com/subject/brotixtx.html