zoukankan      html  css  js  c++  java
  • Web Services 应用开发学习笔记(二):XML文档类型定义

    本文内容:

      1.  什么是XML文档定义类型

      2.  DTD声明

      3.  内部DTD

      4.   外部DTD

      5.   DTD语法

     


    1.  什么是XML文档定义类型

    我们使用XML的目的是为了实现数据的交换和共享,如何能够让其他用户能够理解我们所创建的XML文档结构(包括元素,属性等),这时候就需要制定某种通用的方式来说明这个XML文档的语法规则。所以,XML1.0提供了一种机制——文档类型定义(Document Type Definition,简称DTD),并将其作为规范的一部分。就类似每个产品都有特定的功能说明书,而这个功能说明书可以简单理解成DTD。

    最后我就联想到的html所定义的标签,<h1>,<br>,<hr>等其实应该也是遵循一定的标准,有对应的文档类型定义。

    2.  DTD声明

    XML文档中通过DOCTYPE声明将XML与DTD建立关联的指令,当读到DOCTYPE指令时,它会获取相应的DTD,并根据其中定义的规则对XML文档进行校验。

    DTD声明的组成:关键字、文档的根元素名称、可选的外部标记符,以及可选的标记声明块。

    (1)语法结构:

    <?xml version=”1.0” ecoding=”UTF-8”?>

    <!DOCTYPE Stundents…>

    <Students>



    (2)语法解析:

    上述代码使用“<!DOCTYPE>”声明标记,文档的第一个元素(根元素)是Students。

    <!DOCTYPE>声明方法有两种:内部DTD声明和外部DTD声明。

    <!DOCTYPE>声明必须位于XML声明后,且在任何文档元素之前,但是,XML声明和DOCTYPE声明之间可以插入注释和处理指令。

    3.  内部DTD

    使用“<!DOCTYPE[….]>”语句进行内部声明。

    (1)语法结构:

    <?xml version=”1.0” ecoding=”UTF-8”?>

    <!DOCTYPE element-name[

    元素描述

    ]
    >



    <!—文档数据区-- >

    (2)语法解析:

    <!DOCTYPE:表示开始设定DTD,注意DOCTYPE必须大写。

    element-name:指定此DTD的根元素名称,一个XML文件只有一个根元素。

    实例:

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

    <!DOCTYPE students[

    <!ELEMENT students (student)+
    >

    <!ELEMENT student (name,age,class)>

    <!ELEMENT name (#PCDATA)>

    <!ELEMENT age (#PCDATA)>

    <!ELEMENT class (#PCDATA)>

    ]>

    <students>

    <student>

    <name>TerryChan</name>

    <age>22</age>

    <class>3</class>

    </student>

    </students>



    4.   外部DTD

    外部DTD是一个独立的XML文档的文件,实际上也是一个文本文件,只是使用.dtd作为文件扩展名。使用外部DTD可以被多个XML文档引用,操作更加方便。

    (1)语法结构:

    <!DOCTYPE type-of-doc SYSTEM/PUBLIC “dtd-name”>



    (2)语法解析:

    <!DOCTYPE:表示开始设定DTD。

    type-of-doc:指定文档类型的名称,由用户自己定义,通常与使用这个DTD文件的XML文档的根元素一致。

    SYSTEM/PUBLIC:这两个参数只能选择一个。SYSTEM是指使用私有的外部DTD文件,PUBLIC是指调用公有的外部DTD文件。

    dtd-name:存放DTD文件的路径和名称

     

    因此,引入外部DTD的XML文档的结构如下:

    <?xml version=”1.0” ecoding=”UTF-8”?>

    <!DOCTYPE 根元素名 SYSTEM/PUBLIC “DTD文件的路径和名称”>

    <!—文档数据区-- >



    实例

    students.dtd

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

    <!DOCTYPE students[

    <!ELEMENT students (student)+
    >

    <!ELEMENT student (name,age,class)>

    <!ELEMENT name (#PCDATA)>

    <!ELEMENT age (#PCDATA)>

    <!ELEMENT class (#PCDATA)>

    ]>



    students.xml

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

    <!DOCTYPE students SYSTEM “students.dtd”>

    <students>

    <student>

    <name>TerryChan</name>

    <age>22</age>

    < class >3</class>

    </student>

    </students>



     

    5.   DTD语法

    一个DTD文档包含:元素的定义规则、元素间关系的定义规则、元素可使用的属性以及可使用的试题或符号规则等。

    1. 元素的声明

    (1)元素是XML的核心,它包含了实际的文档信息,并指出这些信息的逻辑结构。元素以树形分层结构排列,可以嵌套在其他元素中。元素的名称可以是字母、数字,也可以使用标点符号,如:冒号,下划线,连字符和句号等,但是不能以数字开头,第一个字符只能是字符、下划线或冒号。     

    (2)语法结构:

    <!ELEMENT element-name element-definition>



    (3)语法解析:

    <!ELEMENT:表示开始元素设置,注意ELEMENT必须大写。

    element-name:表示要设置元素的名称。

    element-definition:表示元素之间(<元素></元素>)内容的类型。

    (4)XML中按照element-definition元素的内容可以划分为ANY类型、EMPTYL类型、#PCDATA类型、父元素类型和混合元素类型。

      a.ANY类型

                如果不需要对元素的内容进行限制,可以使用ANY元素类型。

    语法结构:

    <!ELEMENT element-name ANY>



    b.EMPTY类型

             元素中没有内容,不能包含子元素和文本,但可以有属性。

    语法结构:

    <!ELEMENT element-name EMPTY>



               实例:

    <!ELEMENT student EMPTY>



     c.#PCDATA类型

             元素中可以包含任何字符数据,但是不能包含任何子元素

             语法结构:

    <!ELEMENT element-name ( #PCDATA) >



    实例:

    <!ELEMENT name ( #PCDATA) >


    d.父元素类型

                      父元素类型只能包含子元素,并且这些子元素外没有文本。通过正则表达式规定子元素出现的顺序和次数。

                       正则表达式的元组运算:

                      

    符号

    意义

    ?

    使用“?”修饰的元素可以不出现或只出现一次

    *

    使用“*”修饰的元素可以不出现或出现多次

    +

    使用“?”修饰的元素必须至少出现一次

    无符号

    没有修饰符的元素只能出现一次

    ()

    用来给元素分组

    |

    只能在列出的对象中选择一个

    ,

    列出的对象必须按指定的顺序出现

     

                       实例:

    符号

    意义

    (A|B|C)

    只能从A,B,C中选择一个出现

    (A+)

    A必须出现,而且可以出现多次

    (B*)

    B可以不出现,如果出现,可以出现多次

    (C?)

    C最多可以出现一次,可以不出现

    (A,B,C)

    A,B,C必须出现,而且必须按顺序出现

    (A+B+C),(D|E),F

    分成三组

    e.混合元素类型

    混合元素类型是包含子元素和文本数据的混合体。

    语法结构:

    <!ELEMENT 元素名 (#PCDATA| element-name1| element-name2|…) >



    实例:

    <!ELEMENT students (#PCDATA| student)* >



    2.属性声明

    属性是对元素的补充和修饰,它能够将一些简单的特性与元素相关联。例如,在HTML标记<img>,src就是一个属性。一个元素可以有多个属性来修饰。    

    语法结构:

    <!ATTLIST 元素名

    属性名称 属性类型 取值方式

    属性名称 属性类型 取值方式

    ……

    >



    属性取值方式:

    取值

    含义

    #REQUIRE

    元素的每个实例必须包含该属性

    #IMPLIED

    元素的实例可以选择性地包含该元素

    #FIXED value

    固定取值的属性,该属性不允许被其他值替代

    默认值

    事先定义了默认值的属性

    属性类型:

    类型

    含义

    CDTAT

    纯文本,由字符组成的字符串

    ID

    以属性值的方式为文档中的某个元素定义唯一的标识

    IDREF

    属性值引用已定义的ID值,方法是把那个元素的ID标识值作为该属性的取值

    IDREFS

    IDREFS是IDREF的复数形式,取值可以使若干个ID值,这些ID的值用空格隔开

    ENTITY

    取值为一个已定义的实体

    ENTITIES

    该属性值包含了多个外部ENTITY,不同的ENTITY用空格隔开

    NMTOKEN

    表示该属性值是符合XML命名规范的名称

    NMTOKENS

    该属性值包含了多个外部NMTOKEN,不同的NMTOKEN用空格隔开

    NOTATION

    取值为一个DTD中声明的符号,此类型对于使用非XML格式的数据非常有用

     

    3.实体

    实体(ENTITY)是在XML中预先定义的,类似于程序中使用的常量,可以在多个文档中调用同一个实体,方便操作。实体有两种类型:一种是预定义的实体;另外一种是自定义的实体。

    (1)       预定义实体

    实体

    用途

    &lt;

    通常用来替换字符小于号(<)

    &gt;

    通常用来替换字符大于号(>)

    &amp;

    通常用来替换字符(&)

    &quot;

    可用来替换字符中的双引号(”)

    &apos;

    可用来替换字符中的单引号(’)

    (2)       自定义实体

    语法结构:

    <!DOCTYPE rootname[

    <!ENTITY entity-name “entity-content”
    >

    ]>



    实例:

    <!DOCTYPE Name[

    <!ENTITY Name “terrychan”
    >

    ]>

     

    作者: ForEvErNoME
    出处: http://www.cnblogs.com/ForEvErNoME/
    欢迎转载或分享,但请务必声明文章出处。如果文章对您有帮助,希望你能 推荐关注
     
     
  • 相关阅读:
    正则结合
    解决Linux下yum安装无法解析URL的问题
    Linux安装PHP和MySQL
    Windows安装PHP MongoDB扩展
    转】关于cgi、FastCGI、php-fpm、php-cgi
    Linux安装PHP MongoDB扩展
    mysql InnoDB引擎 共享表空间和独立表空间(转载)
    Mysql优化ibdata1大小
    Magento-设置产品显示的条数和默认条数
    MySql创建指定字符集的数据库
  • 原文地址:https://www.cnblogs.com/ForEvErNoME/p/2373384.html
Copyright © 2011-2022 走看看