您的位置:首页 > 其它

XML约束之DTD

2016-01-23 16:42 190 查看
一、概念:类是对象的约束,DTD是对XML文件的约束
二、编写DTD约束的两种方式:
      一】将DTD和XML文件分离
           1>引用本地文件时:SYSTEM---个人或组织,小范围内使用
                    格式:<!DOCTYPE 文档根节点    SYSTEM "DTD文件的URL">

            code:
<!DOCTYPE root SYSTEM "class.dtd">


 

                       
           2>引用公共文件时:PUBLIC----大范围内使用,例如:structs框架
                    格式:<!DOCTYPE 文档根节点    PUBLIC "DTD名称" "DTD文件的URL">
                    eg: 

                  <!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">


 

 

                                                
      二】XML中嵌入DTD
                格式:<!DOCTYPE 文档根节点 [dtd文档内容]>
                eg:
                   

          <!DOCTYPE root[
<!ELEMENT root       (student+)>
<!ELEMENT student (name, age)>
<!ELEMENT name       (#PCDATA)>
<!ELEMENT age     (#PCDATA)>
]>


 

 

                    
                                    
三、DTD语法
       一】声明XML的元素
            1>格式:<!ELEMENT 元素名称 (元素类型或者元素类型)>
                  EMPTY:用于定义单个标签元素,例如<br/> <hr/>
                   eg:
                            <!ELEMENT alias EMPTY>
                                            ||
                            <alias />
                            
                   ANY:用于表示元素内容为任意类型。【建议少用】
                
             2>语法细节:!!!
                    a.在DTD中,必须要将所有的标签全部都声明完
                    b.内容用“,”分隔,要求XML中的元素顺序必须与此内容相同
                    c.内容中的“|”,代表XML文件内容可以是其中之一
                    d.约束对应内容出现的次数:
                             +:一次或多次
                             ?:0次或1次
                             *:0次或多次
                             没有符号标识:有且只能出现一次。
                    e.也可使用圆括号( )批量设置,例:
                            <!ELEMENT MYFILE ((TITLE*, AUTHOR?, EMAIL)* | COMMENT)>
             3>code: 

<!DOCTYPE root[
<!ELEMENT root       (student+)>
<!ELEMENT student (name, age)>
<!ELEMENT name       (#PCDATA)>
<!ELEMENT age     (#PCDATA)>
]>

<root>
<student>
<name>张三</name>
<age>30</age>
</student>
<student>
<name>李四</name>
<age>31</age>
</student>
</root>


 

 

                            
      二】声明XML的属性
            1>格式:
                            <!ATTLIST 元素名
                                    属性名1    属性值类型        设置说明
                                    属性名2    属性值类型        设置说明
                                    属性名3    属性值类型        设置说明
                                    ...
                            >
             2>常用的属性值类型
                        a)CDATA:规定属性值类型为普通文本字符串
                            <!ATTLIST 商品
                                    类别 CDATA    #REQUIRED
                            >
                        b)ENUMERATED:是一组取值的列表,在 XML 文件中设置的属性值只能是这个列表中的某个值
                            eg:
                            <!ATTLIST 肉
                                    品种 ( 鸡肉 | 牛肉 | 猪肉 | 鱼肉 ) "鸡肉"
                            >

                        c)ID:只能以字母和下划线开头
                            eg:
                                <!ATTLIST 联系人
                                        编号 ID #REQUIRED
                                >
                        d)ENTITY:实体类型:为一段内容创建一个别名
                            
         3>属性值设置说明的四种情况
                        a.#REQURIED:该属性必须出现
                        b.#IMPLIED:该属性可有可无
                        c.#FIEXD "固定值":该属性可有可无,但当有该属性的时候,属性值是一个不可改变的固定值,在XML中需要为添加这个属性, 并设为此固定值。
                        d.直接使用默认值:该属性值一个可变的默认值,在XML中可以设置去改变此属性,也可以不设置此属性,自动使用此默认值。
                    
            code:
               

           !DOCTYPE root[
<!ELEMENT root (桌子+)>
<!ELEMENT 桌子    EMPTY>
<!ATTLIST 桌子
id             ID            #REQUIRED
width        CDATA        #REQUIRED
height        (50|60|70)    "60"
make        CDATA        #IMPLIED
color        CDATA        #FIXED    "白色"
weight        CDATA        "20"
>
]>
<root>
<桌子
id="t2011100901"
width="60"
height="70"
color="白色"
/>
</root>

<!-- 结果:
桌子 id="t2011100901" width="60" height="70" color="白色" weight="20" />
-->


 

 

                        
     三】实体的定义
                    
            1>引用实体【需要内嵌才有效】
                            ---当web页面出现多个相同的字符串时,在XML中引用
                    a.格式
                        定义:    <!ENTITY 实体名称 "实体内容">
                        引用:    &实体名称;
                    
                        eg:
                         

                <!DOCTYPE root[
<!ELEMENT root     (电视台+)>
<!ELEMENT 电视台  (#PCDATA)>
<!ENTITY CCTV    "中国中央电视台">
]>
<root>
<电视台>
&CCTV;
</电视台>
<电视台>
&CCTV;
</电视台>
</root>


 

 

                        
              2>参数实体【注意:此时需要将DTD与XML文件分开才有效】
                            ---当web页面出现多个相同子元素的时,在DTD中引用
                    a.格式:
                        定义:    <!ENTITY % 实体名称 "实体内容">
                        引用:    %实体名称;
                        eg:

<!ENTITY % TIP    "姓名">
<!ELEMENT    root    (客户,员工)>
<!ELEMENT     客户        (%TIP;)>
<!ELEMENT       员工        (%TIP;)>
<!ELEMENT    %TIP;        (#PCDATA)>


 

 

 四、总结:【重点】
                1》浏览器会对XML和DTD进行语法的检测,但浏览器不会检测XML是否符合DTD规则。
                2》正确的XML文件和有效的XML文件
                        正确的XML文件:语法正确的文件
                        有效的XML文件:语法和约束都正确的文件
                3》检测是否有效需要利用:validate.html的中JS脚本。【工具里面】
               
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: