zoukankan      html  css  js  c++  java
  • 有效的XML: DTD(文档类型定义)介绍(转)

    文档类型定义和命名空间

      有效(Valid)的XML文档

      首先,XML文档是个格式正规的(Well-formed)XML文档;(见格式正规的XML:语法 属性 实体 处理指令 样式单 CDATA节)。

      其次,需要满足DTD的要求,这样的XML文档称为有效的(Valid)XML文档

     

    DTD

      DTD,即文档类型定义——Document Type Definition。

      DTD用来描述XML文档的结构,

      一个DTD文档包含:

      元素(ELEMENT)的定义规则;

      元素之间的关系规则;

      属性(ATTLIST)的定义规则;

      可使用的实体(ENTITY)或符号(NOTATION)规则。

     

    DTD文档与XML文档实例的关系

      类与对象;

      数据库表结构与数据记录;

      有了DTD,每个XML文件可以携带一个自身格式的描述。

      有了DTD,不同组织的人可以使用一个通用DTD来交换数据。

      应用程序可以使用一个标准DTD校验从外部世界接收来的XML数据是否有效。

      可以使用DTD校验自己的XML数据。

     

    如何生成DTD文档

      DTD文档有三种应用形式:

      1.内部DTD文档

    <!DOCTYPE 根元素[定义内容]>

      2.外部DTD文档

    <!DOCTYPE 根元素 SYSTEM "DTD文件路径">

      3.内外部DTD文档结合

    <!DOCTYPE 根元素 SYSTEM "DTD文件路径" [定义内容]>

     

    内部DTD 

       一个内部DTD的例子:

      上半部分是DTD,下面是XML文档,文档要符合DTD。

    复制代码
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE poem [
        <!ELEMENT poem (author, title, content)>
        <!ELEMENT author (#PCDATA)>
        <!ELEMENT title (#PCDATA)>
        <!ELEMENT content (#PCDATA)>
    ]>
    <!--为元素poem定义了三个子元素author title content,
    这三个元素必须要出现并且必须按照这个顺序
    少元素不行,多元素也不行
    -->
    <!--指明author,title,content里面的内容是字符串类型-->
    <poem>
        <author>王维</author>
        <title>鹿柴</title>
        <content>空山不见人,但闻人语声。返景入深林,复照青苔上。</content>
    </poem>
    复制代码

       

      上面的文档就是格式良好,并且有效的。

      详见其中的注释。

      #PCDATA(Parsed Character Data) ,可解析的字符数据,即字符串。

      上面部分是DTD,在下面编写XML文档时,如果不符合其DTD规范,用XMLSpy做检查的时候,是well-formed的,但是却不是valid的。

      比如根元素写:

    <Students>
    </Students>

     

      Validate检查的时候就会报错,根元素和DTD中的poem不符。

     

    外部DTD

      上面是一个内部DTD的例子,下面用一个外部的DTD:

      首先,新建一个DTD文档,文件名叫dtd_1.dtd,内容如下:

    <?xml version="1.0" encoding="UTF-8"?>
    <!ELEMENT poem (author, title, content)>
    <!ELEMENT author (#PCDATA)>
    <!ELEMENT title (#PCDATA)>
    <!ELEMENT content (#PCDATA)>

      然后,新建一个XML文档。

      如果只写XML元素内容,那么它是一个格式良好的,却不是有效的文档,因为找不到DTD。

      需要加入外部DTD文件的名称(同一个路径下只给出文件名即可)。

    复制代码
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE poem SYSTEM "dtd_1.dtd">
    <poem>
        <author>王维</author>
        <title>鹿柴</title>
        <content>空山不见人,但闻人语声。返景入深林,复照青苔上。</content>
    </poem>
    复制代码


     

    内外部DTD结合

          DTD的内容也可以有些放在外部,有些放在内部,如下:

      文件dtd_2.dtd

    <?xml version="1.0" encoding="UTF-8"?>
    <!ELEMENT author (#PCDATA)>
    <!ELEMENT title (#PCDATA)>

      XML文档:

    复制代码
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE poem SYSTEM "dtd_2.dtd"[
    <!ELEMENT poem (author, title, content)>
    <!ELEMENT content (#PCDATA)>
    ]>
    <poem>
        <author>王维</author>
        <title>鹿柴</title>
        <content>空山不见人,但闻人语声。返景入深林,复照青苔上。</content>
    </poem>
    复制代码

    http://www.cnblogs.com/mengdd/archive/2013/05/28/3102893.html

  • 相关阅读:
    crontab自动备份MySQL数据库并删除5天前备份
    使用ShowDoc在线管理API接口文档
    概率计算(抽奖活动、命中率)
    保护隐私?找回已记住的秘密?你的余额宝、淘宝还安全吗?
    自制公众平台Web Api(微信)
    我为什么期待M#?
    在.net中为什么第一次执行会慢?
    记”Uri.IsWellFormedUriString”中的BUG
    公司ERP系统重构那些事
    Koala Framework是什么?我为什么要写这个框架?
  • 原文地址:https://www.cnblogs.com/softidea/p/4932204.html
Copyright © 2011-2022 走看看