zoukankan      html  css  js  c++  java
  • XML约束之DTD

    一、概念:类是对象的约束,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脚本。【工具里面】
                   

  • 相关阅读:
    相册框架之AssetsLibrary
    内存管理
    xcode 配置系统环境变量 Preporocessing 预编译宏的另一种写法, 系统的DEBUG 由来
    LeetCode 最大子序和
    牛客 计算数组的小和
    牛客 未排序整数数组中累加和小于等于给定值的最长子数组长度
    牛客 未排序整数数组中累加和为给定值的最长子数组长度
    AtCoder ABC 140D Face Produces Unhappiness
    AtCoder ABC 140E Second Sum
    LeetCode 求众数 II
  • 原文地址:https://www.cnblogs.com/SkyGood/p/3963799.html
Copyright © 2011-2022 走看看