zoukankan      html  css  js  c++  java
  • XML——DTD

    XML约束之DTD:
    ★XML都是用户自定义的标签,若出现小小的错误,软件程序将不能正确地获取文件中的内容而报错。(如:Tomcat)
    ★XML技术中,可以编写一个文档来约束一个XML的书写规范,这个文档称之为约束。
    ★两个概念:
                格式良好的XML:遵循XML语法的XML
                有效的XML:遵循约束文档的XML
    ★总之:约束文档定义了在XML中允许出现的元素名称、属性及元素出现的顺序等等。


    常用的约束技术:
    XML DTD
    XDR
    SOX
    XML Schema



    DTD快速入门:
    DTD(Document Type Definition):文档类型定义。
    作用:约束XML的书写规范
    文件清单:book.xml
    <?xml version="1.0" encoding="GBK"?>
    <!DOCTYPE 书架 SYSTEM "book.dtd">     //加入约束
    <书架>
            <书>
                    <书名>浪潮之巅</书名>
                    <作者>吴军</作者>
                    <售价>39.00元</售价>
            </书>
            <书>
                    <书名>数学之美</书名>
                    <作者>吴军</作者>
                    <售价>28.00元</售价>
            </书>
    </书架>
    //约束
    文件清单:book.dtd 
    <?xml version="1.0" encoding="UTF-8" ?>
    <!ELEMENT 书架 (书+)>
            <!ELEMENT 书 (书名,作者,售价)>
            <!ELEMENT 书名 (#PCDATA)>
            <!ELEMENT 作者 (#PCDATA)>
            <!ELEMENT 售价 (#PCDATA)>

    验证XML的有效性:
    ★如何根据DTD中定义的内容来验证XML书写是否正确呢?
    答:需要软件程序,即解析器

    ★根据能否对XML文档进行约束模式校验,可以将解析器分为两类:
    非校验解析器,如IE
    校验解析器

    编程校验XML文档的正确性:
    IE5以上浏览器内置了XML解析工具:Microsoft.XMLDOM,开发人员可以编写javascript代码,利用这个解析工具装载xml文件,并对xml文件进行dtd验证。
    创建xml文档解析器对象
    var xmldoc = new ActiveXObject("Microsoft.XMLDOM");
    开启xml校验
    xmldoc.validateOnParse = "true";
    装载xml文档
    xmldoc.load("book.xml");
    获取错误信息
    xmldoc.parseError.reason; 
    xmldoc.parseError.line

    book.xml   //编码不能系统默认 book.dtd   //编码不能系统默认 test.html
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE 书架 SYSTEM "book.dtd">
    <书架>
            <书>
                    <书名>浪潮之巅</书名>
                    <作者>吴军</作者>
                    <售价>39.00元</售价>
            </书>
            <书>
                    <书名>数学之美</书名>
                    <作者>吴军</作者>
                    <售价>28.00元</售价>
            </书>
    </书架>

    <?xml version="1.0" encoding="UTF-8" ?>
    <!ELEMENT 书架 (书+)>
            <!ELEMENT 书 (书名,作者,售价)>
            <!ELEMENT 书名 (#PCDATA)>
            <!ELEMENT 作者 (#PCDATA)>
            <!ELEMENT 售价 (#PCDATA)>

    结果:
    <script type="text/javascript">
    //创建xml文档解析器对象
    var xmldoc = new ActiveXObject("Microsoft.XMLDOM");
    //开启xml校验
    xmldoc.validateOnParse = "true";
    //装载xml文档
    xmldoc.load("book.xml");
    //获取错误信息
    var reason=xmldoc.parseError.reason; 
    var line=xmldoc.parseError.line
    document.write("reason = "+reason+"line = "+line);
    </script>

    编写DTD的方式:
    DTD约束文档可以在XML文档中直接定义,也可以作为单独的文档进行编写(单独的文档必须以UTF-8编码进行保存) 。
    在XML文档中编写DTD示例
    book.xml

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <!DOCTYPE 书架 [
            <!ELEMENT 书架 (书+)>
            <!ELEMENT 书 (书名,作者,售价)>
            <!ELEMENT 书名 (#PCDATA)>
            <!ELEMENT 作者 (#PCDATA)>
            <!ELEMENT 售价 (#PCDATA)>
    ]>
    <书架>
            <书>
                    <书名>浪潮之巅</书名>
                    <作者>吴军</作者>
                    <售价>39.00元</售价>
            </书>
    </书架>

    引入外部DTD文档:
    ★XML使用DOCTYPE声明语句来指明它所遵循的DTD文档,有两种形式:
         当引用的DTD文档在本地时,采用如下方式:
         <!DOCTYPE 根元素 SYSTEM “DTD文档路径”>
    如:<!DOCTYPE 书架 SYSTEM “book.dtd”>
        当引用的DTD文档在公共网络上时,采用如下方式:
       <!DOCTYPE 根元素 PUBLIC “DTD名称” “DTD文档的URL”>
    如:<!doctype html public "-/w3c/dtd html 4.01/en" "http://www.w3.org/tr/html4/strict.dtd">

    DTD语法细节(看懂即可):
    DTD文档的语法主要涉及以下内容的定义:
    定义元素 定义属性1
    ★在DTD文档中使用ELEMENT关键字来声明一个XML元素。
    ★语法:<!ELEMENT 元素名称 使用规则>
       ☞使用规则:
          ☀(#PCDATA):指示元素的主体内容只能是普通的文本.(Parsed Character Data)
          ☀EMPTY:用于指示元素的主体为空。比如<br/>     //没东西,但是可以有属性
          ☀ANY:用于指示元素的主体内容为任意类型。
          ☀(子元素):指示元素中包含的子元素
       ☞定义子元素及描述它们的关系:
          ☀如果子元素用逗号分开,说明必须按照声明顺序去编写XML文档。
    如: <!ELEMENT FILE (TITLE,AUTHOR,EMAIL)
          ☀如果子元素用“|”分开,说明任选其一。
    如:<!ELEMENT FILE (TITLE|AUTHOR|EMAIL)
          ☀用+、*、?来表示元素出现的次数
             ▪如果元素后面没有+*?:表示必须且只能出现一次
             ▪+:表示至少出现一次,一次或多次
             ▪*:表示可有可无,零次、一次或多次
             ▪?:表示可以有也可以无,有的话只能有一次。零次或一次
          ☀如: <!ELEMENT MYFILE ((TITLE*, AUTHOR?, EMAIL*) | COMMENT)>
    ★在DTD文档中使用ATTLIST关键字来为一个元素声明属性。
    ★语法:
    <!ATTLIST 元素名
                    属性名1 属性值类型 设置说明
                    属性名2 属性值类型 设置说明
                    …
    >
    ★例如:
    <!ATTLIST 商品
                    类别 CDATA #REQUIRED
                    颜色 CDATA #黄色
                    种类 (鸡肉|牛肉|猪肉|鱼肉)"鸡肉"
    >
    对应的XML为:<商品 类别=“服装” 颜色=“黄色”/>    //种类属性不写默认是鸡肉,显示写出来必须是枚举里面的值;如果上面没有"鸡肉"就不能不写

    定义属性2 定义属性示例
    ★属性值类型:
       ☀CDATA:表示属性的取值为普通的文本字符串
       ☀枚举:只能从枚举列表中任选其一,如 (鸡肉|牛肉|猪肉|鱼肉)
       ☀ID : 表示属性的取值不能重复


    ★设置说明
       ☀#REQUIRED:表示该属性必须出现
       ☀#IMPLIED:表示该属性可有可无
       ☀#FIXED : 表示属性的取值为一个固定值。语法:#FIXED "固定值"
       ☀直接值:表示属性的取值为该默认值
    <!ATTLIST 页面作者
                 姓名 CDATA #IMPLIED
                 年龄 CDATA #IMPLIED
                 联系信息 CDATA #REQUIRED
                 网站职务 CDATA #FIXED "页面作者"
                 个人爱好 CDATA "上网"
    >

    <?xml version = "1.0" encoding="utf-8" standalone="yes"?>
    <!DOCTYPE 购物篮 [
        <!ELEMENT 购物篮 (肉+)>
            <!ELEMENT 肉 EMPTY>
            <!ATTLIST 肉 品种 ( 鸡肉 | 牛肉 | 猪肉 | 鱼肉 ) "鸡肉">
    ]>
    <购物篮>
            <肉 品种="鱼肉"/>
            <肉 品种="牛肉"/>
            <肉/>
    </购物篮>
    定义属性示例 定义实体
    ★ID表示属性的设置值为一个唯一值。
    <?xml version = "1.0" encoding="GB2312" ?>
    <!DOCTYPE 联系人列表[
            <!ELEMENT 联系人列表 ANY>
            <!ELEMENT 联系人(姓名,EMAIL)>
            <!ELEMENT 姓名(#PCDATA)>
            <!ELEMENT EMAIL(#PCDATA)>
            <!ATTLIST 联系人 编号 ID #REQUIRED>
    ]>
    <联系人列表>
            <联系人 编号=“a">
                    <姓名>张三</姓名>
                    <EMAIL>zhang@it315.org</EMAIL>
         </联系人>
            <联系人 编号=“b">
                    <姓名>李四</姓名>
                    <EMAIL>li@it315.org</EMAIL>
            </联系人>
    </联系人列表>
    ★定义实体就是为一段内容指定一个名称,使用时通过这个名称就可以引用其所代表的内容
    ★在DTD文档中使用ENTITY关键字来声明一个实体。
    ★实体可分为:引用实体和参数实体,两者的语法不同

    定义引用实体 定义参数实体(了解)
    概念:在DTD中定义,在XML中使用
    语法:<!ENTITY 实体名称 "实体内容">
    引用方式(注意是在XML中使用):&实体名称;

    <?xml version = "1.0" encoding="utf-8" standalone="yes"?>
    <!DOCTYPE 购物篮 [
        <!ELEMENT 购物篮 (菜)>
            <!ENTITY 菜 "进口蔬菜">
            <!ELEMENT 菜 (#PCDATA)>

    ]>
    <购物篮>
            <菜>&菜;</菜>
    </购物篮>
    概念:在DTD中定义,在DTD中使用
    语法:<!ENTITY % 实体名称 “实体内容”>  //注意,这里有空格,怎么使用不会
    引用方式(注意是在DTD中使用):%实体名称;

    //内部子集中参数实体不能用在标记声明中

  • 相关阅读:
    OS-lab4
    OS-lab3
    OS-lab2
    OS-lab1
    OO第四单元总结
    OO第三单元总结
    OO第二单元总结
    HTTP_POST
    实习日志1(2020.7.27-2020.9.31)
    Web app ------ 从Servlet读取Json数据并显示,生成历史数据曲线图
  • 原文地址:https://www.cnblogs.com/meihao1203/p/9181659.html
Copyright © 2011-2022 走看看