• DTD -- XML验证


    DTD(文档类型定义)的作用是定义 XML 文档的合法构建模块。

    DTD 可被成行地声明于 XML 文档中,也可作为一个外部引用。

    DTD简介

    内部的 DOCTYPE 声明

    假如 DTD 被包含在您的 XML 源文件中,它应当通过下面的语法包装在一个 DOCTYPE 声明中:

    <?xml version="1.0"?>
    <!DOCTYPE note [
    <!ELEMENT note (to,from,heading,body)>
    <!ELEMENT to (#PCDATA)>
    <!ELEMENT from (#PCDATA)>
    <!ELEMENT heading (#PCDATA)>
    <!ELEMENT body (#PCDATA)>
    ]>
    <note>
    <to>Tove</to>
    <from>Jani</from>
    <heading>Reminder</heading>
    <body>Don't forget me this weekend</body>
    </note>

    !DOCTYPE note (第二行)定义此文档是 note 类型的文档。

    !ELstrongENT note (第三行)定义 note 元素有四个元素:"to、from、heading,、body"

    !ELstrongENT to (第四行)定义 to 元素为 "#PCDATA" 类型

    !ELstrongENT from (第五行)定义 frome 元素为 "#PCDATA" 类型

    !ELstrongENT heading (第六行)定义 heading 元素为 "#PCDATA" 类型

    !ELstrongENT body (第七行)定义 body 元素为 "#PCDATA" 类型

    外部文档声明

    假如 DTD 位于 XML 源文件的外部,那么它应通过下面的语法被封装在一个 DOCTYPE 定义中:

    <!DOCTYPE root-element SYSTEM "filename">

    以下是 XML 文档,这个XML文档和上面的 XML 文档相同,但是拥有一个外部的 DTD: 

    <?xml version="1.0"?>
    <!DOCTYPE note SYSTEM "note.dtd">
    <note>
    <to>Tove</to>
    <from>Jani</from>
    <heading>Reminder</heading>
    <body>Don't forget me this weekend!</body>
    </note>

    这是包含 DTD 的 "note.dtd" 文件:

    <!ELEMENT note (to,from,heading,body)>
    <!ELEMENT to (#PCDATA)>
    <!ELEMENT from (#PCDATA)>
    <!ELEMENT heading (#PCDATA)>
    <!ELEMENT body (#PCDATA)>

    为什么使用 DTD?

    通过 DTD,您的每一个 XML 文件均可携带一个有关其自身格式的描述。

    通过 DTD,独立的团体可一致地使用某个标准的 DTD 来交换数据。

    而您的应用程序也可使用某个标准的 DTD 来验证从外部接收到的数据。

    您还可以使用 DTD 来验证您自身的数据。

    DTD - XML 构建模块

    XML 文档构建模块

    所有的 XML 文档(以及 HTML 文档)均由以下简单的构建模块构成:

    Elements :元素

    Attributes :属性

    Entities :实体

    PCDATA :

      意思是被解析的字符数据(parsed character data)。

      可把字符数据想象为 XML 元素的开始标签与结束标签之间的文本。

      PCDATA 是会被解析器解析的文本。这些文本将被解析器检查实体以及标记。

      文本中的标签会被当作标记来处理,而实体展开

      不过,被解析的字符数据不应当包含任何 &、< 或者 > 字符;需要使用 &amp;、&lt; 以及 &gt; 实体来分别替换它们。

    CDATA :

      意思是字符数据(character data)。

      CDATA 是不会被解析器解析的文本。在这些文本中的标签不会被当作标记来对待,其中的实体也不会被展开

    DTD - 元素

    在一个 DTD 中,元素通过元素声明来进行声明。

    声明一个元素

    在 DTD 中,XML 元素通过元素声明来进行声明。元素声明使用下面的语法:

    <!ELEMENT element-name category><!ELEMENT element-name (element-content)>

    空元素

    空元素通过类别关键词EMPTY进行声明:

    <!ELEMENT element-name EMPTY>
    
    实例:
    
    <!ELEMENT br EMPTY>
    
    XML example:
    
    <br />

    只有 PCDATA 的元素

    只有 PCDATA 的元素通过圆括号中的 #PCDATA 进行声明:

    <!ELEMENT element-name (#PCDATA)>
    
    实例:
    
    <!ELEMENT from (#PCDATA)>

    带有任何内容的元素
    通过类别关键词 ANY 声明的元素,可包含任何可解析数据的组合:

    <!ELEMENT element-name ANY>
    
    实例:
    
    <!ELEMENT note ANY>

    带有子元素(序列)的元素
    带有一个或多个子元素的元素通过圆括号中的子元素名进行声明:

    <!ELEMENT element-name (child1)><!ELEMENT element-name (child1,child2,...)>
    
    实例:
    
    <!ELEMENT note (to,from,heading,body)>

    当子元素按照由逗号分隔开的序列进行声明时,这些子元素必须按照相同的顺序出现在文档中。在一个完整的声明中,子元素也必须被声明,同时子元素也可拥有子元素。"note" 元素的完整声明是:

    <!ELEMENT note (to,from,heading,body)>
    <!ELEMENT to (#PCDATA)>
    <!ELEMENT from (#PCDATA)>
    <!ELEMENT heading (#PCDATA)>
    <!ELEMENT body (#PCDATA)>

    声明只出现一次的元素

    <!ELEMENT element-name (child-name)>
    
    实例:
    
    <!ELEMENT note (message)>

    上面的例子声明了:message 子元素必须出现一次,并且必须只在 "note" 元素中出现一次。


    声明最少出现一次的元素

    <!ELEMENT element-name (child-name+)>
    
    实例:
    
    <!ELEMENT note (message+)>

    上面的例子中的加号(+)声明了:message 子元素必须在 "note" 元素内出现至少一次。


    声明出现零次或多次的元素

    <!ELEMENT element-name (child-name*)>
    
    实例:
    
    <!ELEMENT note (message*)>

    上面的例子中的星号(*)声明了:子元素 message 可在 "note" 元素内出现零次或多次。

    声明出现零次或一次的元素

    <!ELEMENT element-name (child-name?)>
    
    实例:
    
    <!ELEMENT note (message?)>

    上面的例子中的问号(?)声明了:子元素 message 可在 "note" 元素内出现零次或一次。

    声明"非.../既..."类型的内容

    实例:
    
    <!ELEMENT note (to,from,header,(message|body))>

    上面的例子声明了:"note" 元素必须包含 "to" 元素、"from" 元素、"header" 元素,以及非 "message" 元素既 "body" 元素。

    声明混合型的内容

    实例:
    
    <!ELEMENT note (#PCDATA|to|from|header|message)*>

    上面的例子声明了:"note" 元素可包含出现零次或多次的 PCDATA、"to"、"from"、"header" 或者 "message"。

    DTD - 属性

    DTD - 实体

  • 相关阅读:
    js 读取XML
    JavaScript DOM 交换节点笔记
    JDBC学习总结 -- JDBC 快速入门 教程
    SQL 语句易错点讲解
    JAVA 他人博客收藏 (To be continue)
    <<MYSQL必知必会>> 入坑指南
    OpenGL 纹理学习总结
    BZOJ 3456 NTT图的计数 容斥
    洛谷1002 容斥原理+dfs OR DP
    51nod1565 FFT
  • 原文地址:https://www.cnblogs.com/hf8051/p/4846432.html
Copyright © 2020-2023  润新知