zoukankan      html  css  js  c++  java
  • 关于XML的DTD概述

    1 DTD概述

    1.1 什么是DTD

    DTD(Document Type Definition),文档类型定义,用来约束XML文档。或者可以把DTD理解为创建XML文档的结构!例如可以用DTD要求XML文档的根元素名为<students>,<students>中可以有1~N个<student>,<student>子元素为<name>、<age>和<sex>,<student>元素还有number属性。

    DTD不是XML文档,它是XML文档的约束文件!就像法律与人一样!

    展示DTD文档

    <!ELEMENT students (student+)> 定义元素students,其内容为1~N个student元素。
    <!ELEMENT student (name,age,sex)> 定义元素student,内容依次为name、age、sex元素
    <!ELEMENT name (#PCDATA)> 定义元素name,内容为文本
    <!ELEMENT age (#PCDATA)> 定义元素age,内容为文本
    <!ELEMENT sex (#PCDATA)> 定义元素sex,内容为文本

    1.2 DTD分类

    内部DTD:在XML文档内部嵌入DTD,只对当前XML文档有效

    外部DTD:独立的DTD文件,扩展名为.dtd;

    • 本地DTD:DTD文件在本地,不在网络上。自己项目,或本公司内部使用的;
    • 公共DTD:DTD文件在网络上,不在本地。都是大公司或组织发布的,共大家使用!

    1.3 内部DTD

    <!DOCTYPE 根元素名称[

    DTD内容

    ]>

    内部DTD:

    <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
    <!DOCTYPE students [
    <!ELEMENT students (student+)>
    <!ELEMENT student (name, age, sex)>
    <!ELEMENT name (#PCDATA)>
    <!ELEMENT age (#PCDATA)>
    <!ELEMENT sex (#PCDATA)>
    ]>
    <students>
        <student>
            <name>zhangSan</name>
            <age>23</age>
            <sex>male</sex>
        </student>
    </students>

    l  位置:内部DTD在文档声明下面,在根元素上面;

    l  语法格式:放到“<!DOCTYPE 根元素名称 [”和“]>”之间;

    l  只对当前XML文档有效;

    <!DOCTYPE students[

                           DTD约束内容

    ]>

    1.4 SYSTEM DTD

    <!DOCTYPE 根元素名称 SYSTEM “xxx.dtd”>

    本地DTD

    <?xml version="1.0" encoding="utf-8" standalone="no" ?>
    <!DOCTYPE students SYSTEM "students.dtd "> dtd文件路径
    <students>
        <student>
            <name>zhangSan</name>
            <age>23</age>
            <sex>male</sex>
        </student>
    </students>

    students.dtd

    <!ELEMENT students (student+)>
    <!ELEMENT student (name, age, sex)>
    <!ELEMENT name (#PCDATA)>
    <!ELEMENT age (#PCDATA)>
    <!ELEMENT sex (#PCDATA)>

    l  位置:本地硬盘上;

    l  语法格式:直接定义元素或属性即可;

    l  本地所有XML文档都可以引用这个dtd文件;

    <!DOCTYPE 根元素名称 SYSTEM “dtd路径”>

    1.5       公共DTD

    <!DOCTYPE students PUBLIC “描述信息例如:版本作者语言等等” “网络上DTD的路径”>

    <?xml version="1.0" encoding="utf-8" standalone="no" ?>
    <!DOCTYPE students PUBLIC "-//qdmmy6//DTD ST 1.0//ZH" "http://www.qdmmy6.com/xml/dtds/st.dtd">
    <students>
        <student>
            <name>zhangSan</name>
            <age>23</age>
            <sex>male</sex>
        </student>
    </students>

    <!DOCTYPE 根元素名称 PUBLIC “信息” “位置”>

    公共DTD是说,DTD由某个公司或权威组织发布的,供大家使用的DTD。其格式如下:

    <!DOCTYPE 根元素 PUBLIC "DTD名称" "DTD网址">

    当然你需要知道要使用的DTD的名称和网址。如果某个机构公布了DTD,那么一定也会公布DTD的名称和网址。

    2 DTD语法之定义元素(了解)

    2.1 定义元素语法

    定义元素语法:<!ELEMENT 元素名 元素描述>

    l  <!ELEMENT name (#PCDATA)>,定义名为name的元素,内容为文本类型。

    l  <!ELEMENT student (name,age,sex)>,定义名为student元素,内容依次为name、age、sex元素;

    l  <!ELEMENT student ANY>,定义名为student元素,内容任意;

    l  <!ELEMENT student EMPTY>,定义名为student元素,不能有内容,即空元素,注意空元素是可以有属性的。<student  />

    2.2 子元素出现次数

    可以使用*、+、?来指定子元素出现的次数

     *:可以出现0~N次;

    l  +:可以出现1~N次;

    l  ?:可以出现0~1次。

    例如:<!ELEMENT student(name,age?,hobby*,grade+) >,定义student元素,第一子元素为name,必须且仅能出现一次,age是可有可无的,hobby可以出现0~N次,grade可以出现1~N次。

    2.3 枚举类型子元素

    <!ELEMENT student (name | age | sex)>,表示student子元素为name、age、sex其中之一,必须仅且能选择其一。<!ELEMENT men (wife|girlfriend)*>

                   

    2.4 练习

    l  根元素为students,可以包含1~N个student元素;

    l  student元素依次包含:name、age、sex元素;

    l  name、age、sex元素的内容类型为文本内容;

    l  要求SYSTEM外部DTD。

    3 DTD语法之定义属性

    3.1 定义属性的语法

    <!ATTLIST 元素名 属性名 属性类型 设置说明>

    例如:<!ATTLIST student number CDATA #REQUIRED>,给student元素定义属性number,类型为文本,这个默认是必须的。

    3.2 属性设置说明

    l  #REQUIRED:说明属性是必须的;

    l  #IMPLIED:说明属性是可选的;

    l  默认值:在不给出属性值时,使用默认值。

    3.3 属性的类型

    l  CDATA:文本类型;

    l  Enumerated:枚举类型;

    l  ID:ID类型,ID类型的属性用来标识元素的唯一性,即元素的ID属性值不能与其他元素的ID属性值相同;

    l  IDREF:ID引用类型,用来指定另一个元素,与另一个元素建立关联关系,IDREF类型的属性值必须是另一个元素的ID。

    <!ELEMENT students (student+) > 定义students,可以包含1~N个student元素
    <!ELEMENT student EMPTY> 定义student元素,该元素为空元素,即不能有元素体
    <!ATTLIST student number ID #REQUIRED> 为student定义属性number,类型为ID,该属性是必须出现的。
    <!ATTLIST student name CDATA #REQUIRED> 为student定义属性name,类型为字符串,该属性是必须的。
    <!ATTLIST student sex (male | female) "male" > 为student定义属性sex,类型为枚举,可选值为male或female,默认值为male
    <!ATTLIST student friend IDREF #IMPLIED>  为student定义属性friend,类型为IDREF,该属性是可选的。
    <?xml version="1.0" ?>
    <!DOCTYPE students SYSTEM "students.dtd">
    
    <students>
        <student number="itcast_001" name="zhangSan"/>
        <student number="itcast_002" name="liSi" sex="male"/>
        <student number="itcast_003" name="wangWu" sex="female" friend="itcast_002"/>
    </students> 
    4 DTD语法之定义实体(了解)

    4.1 什么是实体

    有时在XML中会出现很多相同的内容,例如“北京传智播客教育科技有限公司”,这个名称太长了,我们希望把这个值与一个“符号”绑定,然后在需要这个名称时使用它绑定的“符号”即可。这个符号就是实体了。例如:“&传智;”!

    其中“传智”是实体名,而“北京传智播客教育科技有限公司”是实体值,XML被解析时,所有实体会被替换成实体名。

    4.2 实体分类(了解)

    实体分为两种:一般实体和参数实体。

    l  一般实体:在XML文档中使用;

    l  参数实体:在DTD使用。

    4.3 一般实体(了解)

    l  定义一般实体:<!ENTITY 实体名 “实体值”>,例如:<!ENTITY 大美女 “白冰”>;

    l  一般实体引用:&实体名;,例如<xxx>&大美女;</xxx>。

    <?xml version="1.0" encoding="utf-8" standalone="no" ?>
    <!DOCTYPE students SYSTEM "a.dtd">
    
    <students>
        <student number="itcast_001" name="zhangSan"/>
        <student number="itcast_002" name="liSi" sex="male"/>
        <student number="itcast_003" name="wangWu" sex="female" friend="itcast_002"/>
        <student number="itcast_004" name="&itcast;" />引用一般实体
    </students>
    <!ELEMENT students (student+) >
    <!ELEMENT student EMPTY>
    <!ATTLIST student number ID #REQUIRED>
    <!ATTLIST student name CDATA #REQUIRED>
    <!ATTLIST student sex (male | female) "male">
    <!ATTLIST student friend IDREF #IMPLIED>
    <!ENTITY itcast "北京传智播客教育科技有限公司"> 定义一般实体

    4.4 参数实体(了解)

    l  定义参数实体:<!ENTITY % 实体名 "实体值">,“%”与实体名之间的空格是必须的;

    • 例如:<!ENTITY % friend "student friend IDREF #IMPLIED">

    l  参数实体引用:%实体名;;

    • 例如:<!ATTLIST %friend;>

    参数实体是在DTD内部使用,而不是在XML中使用。

    在内部DTD中使用参数实体会有诸多限制。

    <?xml version="1.0" encoding="utf-8" standalone="no" ?>
    <!DOCTYPE students SYSTEM "a.dtd">
    
    <students>
        <student number="itcast_001" name="zhangSan"/>
        <student number="itcast_002" name="liSi" sex="male"/>
        <student number="itcast_003" name="wangWu" sex="female" friend="itcast_002"/>
        <student number="itcast_004" name="&itcast;"/>
    </students>
    <!ELEMENT students (student+) >
    <!ELEMENT student EMPTY>
    <!ATTLIST student number ID #REQUIRED>
    <!ATTLIST student name CDATA #REQUIRED>
    <!ATTLIST student sex (male | female) "male">
    <!ENTITY % friend "<!ATTLIST student friend IDREF #IMPLIED>"> 定义参数实体
    %friend; 参数实体引用
    <!ENTITY itcast "北京传智播客教育科技有限公司">
  • 相关阅读:
    如何用Python爬虫实现百度图片自动下载?
    通俗易懂的分析如何用Python实现一只小爬虫,爬取拉勾网的职位信息
    04 整合IDEA+Maven+SSM框架的高并发的商品秒杀项目之高并发优化
    03 整合IDEA+Maven+SSM框架的高并发的商品秒杀项目之web层
    selenium缺少chromedriver解决方法
    python三大神器之fabric(2.0新特性)
    Facebook ATC弱网环境搭建
    Ubuntu 安装网卡驱动
    python三大神器之virtualenv
    python三大神器之pip
  • 原文地址:https://www.cnblogs.com/DreamDrive/p/4184361.html
Copyright © 2011-2022 走看看