XML之DTD

作者: hemiao3000 | 来源:发表于2019-06-19 12:32 被阅读0次

    DTD声明元素属性

    使用DTD的ATTLIST关键字可以为XML声明元素的属性。

    <!ATTLIST price unit CDATA "RMB">

    price
    : 表示要声明属性所在的元素

    unit
    : 表示属性名称

    CDATA
    : 表示属性的类型

    RMB
    : 表示属性默认值,unit省略不写时默认为RMB。

    在DTD声明列举属性值

    如果希望属性值是一系列固定值之一,可以使用列举属性值。

    使用DTD的ATTLIST关键字声明属性时,“|” 可以为属性列举具体的属性值,在XML中使用该属性时,其值必须为列举的值之一。

    <!ATTLIST price unit (元|角|分) "元">

    (元|角|分)
    : 列举price属性值为元,或角,或分。

    "元"
    : 表示未明确写出该属性时,其属性值为元。

    内部定义DTD

    XML 的使用规则是由使用者自己来定义的,如果其他人想使用这个XML就要遵守其使用规则,这个规则可以通过 DTD 来定义。

    在定义 XML 文档结构时,使用DOCTYPE可以声明DTD。

    如果DTD编写错误,使用浏览器打开XML文件,也会报错。

    <?xml version="1.0" encoding="UTF-8"?>
    
    <!DOCTYPE book[
        <!ELEMENT book (name, publisher, author, ISBN, price, url)>
        <!ELEMENT name (#PCDATA)>
        <!ELEMENT publisher (#PCDATA)>
        <!ELEMENT author (#PCDATA)>
        <!ELEMENT ISBN (#PCDATA)>
        <!ELEMENT price (#PCDATA)>
        <!ELEMENT url (#PCDATA)>
    ]>
    
    <book>
        <name>&lt;&lt;Java范例完全自学手册&gt;&gt;</name>
        <publisher>人民邮电出版社</publisher>
        <author>张三&amp;李四</author>
        <ISBN>987115201027</ISBN>
        <price>59.80</price>
        <url><![CDATA[http://www.baidu.com]]></url>
    </book>
    

    DOCTYPE
    : 表示声明 DTD 的关键字。

    ELEMENT
    : 用于声明 XML 元素。


    使用外部 DTD

    一般会把DTD单独定义成一个DTD文档,XML通过引用的方式使用DTD的定义。

    <!DOCTYPE book SYSTEM "simple_demo.dtd">

    使用DOCTYPE表示DTD时,SYSTEM表示引用一个外部DTD,在SYSTEM后面添写DTD的URL地址。

    book
    : 表示是XML的根节点

    simple_demo.dtd
    : 表示DTD文件的名称

    <?xml version="1.0" encoding="UTF-8"?>
    
    <!ELEMENT book (name, publisher, author, ISBN, price, url)>
    <!ELEMENT name (#PCDATA)>
    <!ELEMENT publisher (#PCDATA)>
    <!ELEMENT author (#PCDATA)>
    <!ELEMENT ISBN (#PCDATA)>
    <!ELEMENT price (#PCDATA)>
    <!ELEMENT url (#PCDATA)>
    

    SYSTEM的位置既可以定义为SYSTEM,又可以定义为PUBLIC,当定义为PUBLIC时,表示引用的DTD是由权威机构定制的,供特定行业或公众使用。


    使用DTD定义XML元素

    XML的基本单位是元素,所以在DTD中声明元素也是最基本的,ELEMENT用于DTD元素的声明,在声明的同时还可以定义元素的使用情况。

    使用DTD的ELEMENT关键字可以声明XML元素。

    <!ELEMENT name (#PCDATA)>

    name
    : 表示XML元素的名称

    根据上述定义,book元素只能包含name元素、publisher元素、author元素、ISBN元素、price元素、url元素。

    在定义DTD时,如果不想给某个元素的约束太强,让它包含任意内容,可以把元素定义成ANY。

    <!ELEMENT book ANY>

    如果希望元素内容没有任何内容,则可以定义为EMPTY。

    <!ELEMENT name EMPTY>


    DTD声明重复元素

    定义DTD时,默认子元素只能在父元素里出现一次。

    如果希望父元素内部能出现多个子元素,声明时要在子元素的谋面添加“+”。

    <!ELEMENT book (name, publisher, author+, ISBN, price, url)>

    • 使用 “+” 表示XML子元素在其父元素里至少出现一次,也可以出现多次。
    • 使用 “*” 表示XML子元素可以在其父元素中出现零次或多次。
    • 使用 “?” 表示该元素只能出现零次或一次。

    DTD声明选择性元素

    使用 “|” 元素时,“|” 前后的两个元素在父元素中有且只有一个出现。

    <!ELEMENT book (name, publisher, author+, ISBN, price, (tel|phone))>

    在DTD里把 “|” 和 “*” 混合在一起使用,可使定义的元素更灵活。

    <!ELEMENT book (name|publisher|author|ISBN|price|tel|phone)*>

    相关文章

      网友评论

          本文标题:XML之DTD

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