• xml约束技术之dtd


    DTD(文档类型定义)的作用是定义 XML 文档的合法构建模块。这篇文章作简单介绍下DTD的用法。想学习完整的请点击下面w3c的教程。

    1.DTD官方教程

    2.xml约束技术:

    DTD约束:语法相对简单,功能也相对简单。先出现
    Schema约束:语法相对复杂,功能也相对强大。采用和xml语法类似的编写方式,Schema约束出现就是为了替换DTD约束。

    3.DTD简介:

      文档类型定义(DTD)可定义合法的XML文档构建模块。它使用一系列合法的元素来定义文档的结构。DTD 可被成行地声明于 XML 文档中,也可作为一个外部引用。

    3.1导入DTD的方式:

    1.内部导入:

    #导入方式:
    <!DOCTYPE root-element [element-declarations]>
    #实例:
    <?xml version="1.0"?>
    <!DOCTYPE note [
    <!ELEMENT note (to,from,heading,body)>
    <!ELEMENT to (#PCDATA)>
    <!ELEMENT from (#PCDATA)>
    <!ELEMENT heading (#PCDATA)>
    <!ELEMENT body (#PCDATA)>
    ]>
    <note>
    <to>Tove</to>
    <from>Jani</from>
    <heading>Reminder</heading>
    <body>Don't forget me this weekend</body>
    </note>
    
    
    1. (第二行)定义此文档是 note(根标签) 类型的文档。
    2. (第三行)定义 note 元素有四个元素(标签):"to、from、heading,、body"
    3. (第四行)定义 to 元素为 "#PCDATA" 类型
    4. (第五行)定义 frome 元素为 "#PCDATA" 类型
    5. (第六行)定义 heading 元素为 "#PCDATA" 类型
    6. (第七行)定义 body 元素为 "#PCDATA" 类型

    2.外部导入方式:
      本地文件:

    #导入方式:
     <!DOCTYPE note SYSTEM "note.dtd">
    #note.dtd文件内容:
    <!ELEMENT note (to,from,heading,body)>
    <!ELEMENT to (#PCDATA)>
    <!ELEMENT from (#PCDATA)>
    <!ELEMENT heading (#PCDATA)>
    <!ELEMENT body (#PCDATA)>
    

      公共的外部导入:一般项目采用公共外部导入,比如ssh的xml文件基本上就是采用了这种方式

    #导入方式:
     <!DOCTYPE 根元素 PUBLIC "http://rlovep.com/peace.dtd">
    #如hibernate.cfg.xml:
    <!DOCTYPE hibernate-configuration PUBLIC
    "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
    "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
    

    3.2DTD语法:

      1.约束标签
     语法:

     <!ELEMENT 元素名称 类别>  或 <!ELEMENT 元素名称 (元素内容)>
    

     类别:

    1. 空标签: EMPTY。 表示元素一定是空元素.例如:<bb/>:
    2. 普通字符串: (#PCDATA)。表示元素的内容一定是普通字符串(不能含有子标签)。例如:
    3. 任何内容: ANY。表示元素的内容可以是任意内容(包括子标签) 例如:

     元素内容:

    顺序问题:
    <!ELEMENT 元素名称 (子元素名称 1,子元素名称 2,.....)>: 按顺序出现子标签
    
    次数问题:
    标签  :  必须且只出现1次。
    标签+ : 至少出现1次
    标签*  : 0或n次。
    标签? : 0 或1次。
    声明"非.../既..."类型的内容
    

      2.约束属性:
     语法:

    <!ATTLIST 元素名称 属性名称 属性类型 默认值>
    

     属性类型:

    CDATA :表示普通字符串
    (en1|en2|..): 表示一定是任选其中的一个值
    ID:表示在一个xml文档中该属性值必须唯一。值不能以数字开头
    

     默认值:

    #REQUIRED 属性值是必需的
    #IMPLIED   属性不是必需的
    #FIXED value 属性不是必须的,但属性值是固定的
    

    3.3测试如下,请细看注释:

    <?xml version="1.0"?>
    <!DOCTYPE note [
    <!ELEMENT note (to,from+,heading*,body?,(br|b))>
    <!--带有子序列的元素,需要按照先后顺序出现;
        to只能出现一次
        from最少出现一次
        heading次数随意
        body出现零次或者一次
        非出现br就出现b
    -->
    <!--元素约束-->
    <!ELEMENT to (#PCDATA)><!--pcdata元素-->
    <!ELEMENT from ANY><!--任何内容的元素-->
    <!ELEMENT heading (#PCDATA)>
    <!ELEMENT body (#PCDATA)>
    <!ELEMENT br EMPTY><!--空元素-->
    <!ELEMENT b EMPTY><!--空元素-->
    <!--属性约束-->
    <!ATTLIST to number CDATA #REQUIRED><!--必须有属性值出现,且属性值类型为字符串-->
    <!ATTLIST from length CDATA "10"><!--默认属性值,不写出属性时属性值为10-->
    <!--假如您不希望强制作者包含属性,并且您没有默认值选项的话,请使用关键词 #IMPLIED。-->
    <!ATTLIST heading length CDATA #IMPLIED>
    <!ATTLIST body length CDATA #FIXED "123"><!--属性拥有固定的值,并不允许作者改变这个值-->
    <!ATTLIST br type (check|cash) "cash"><!--属性值可以为check和cash中的一个-->
    ]>
    <note>
    <to number="1234">Tove</to>
    <from>Jani</from>
    <heading length="10">Reminder</heading>
    <body length="123">Don't forget me this weekend</body>
    <br type="check"/>
    </note>
    
  • 相关阅读:
    算法常识——二叉堆
    关于c++ 感想
    算法常识——树的遍历
    算法常识——非线性结构
    算法常识——基础的数据结构
    算法常识——结构与复杂度
    重温网络编程——常识(三)
    重温网络编程——协议(二)
    重温网络编程(一)
    RemoteViews 整理
  • 原文地址:https://www.cnblogs.com/onepeace/p/4907311.html
Copyright © 2020-2023  润新知