zoukankan      html  css  js  c++  java
  • XML中的DTD语法

    DTD(Document Type Definition),全称为文档类型定义。

    文件清单:book.xml

    <?xml version="1.0" ?>
    <!DOCTYPE 书架 SYSTEM "book.dtd">
    <书架>
        <>
            <书名>Java就业培训教程</书名>
            <作者>张孝祥</作者>
            <售价>39.00元</售价>
        </>
        <>
            <书名>JavaScript网页开发</书名>
            <作者>张孝祥</作者>
            <售价>28.00元</售价>
        </>
    </书架>

    文件清单:book.dtd

    <!ELEMENT 书架 (书+)>
        <!ELEMENT 书 (书名,作者,售价)>
        <!ELEMENT 书名 (#PCDATA)>
        <!ELEMENT 作者 (#PCDATA)>
        <!ELEMENT 售价 (#PCDATA)>

    验证XML的有效性

    IE5以上浏览器内置了XML解析工具:Microsoft.XMLDOM,开发人员可以编写javascript代码,利用这个解析工具装载xml文件,并对xml文件进行dtd验证。

    var xmldoc = new ActiveXObject("Microsoft.XMLDOM");//创建xml文档解析器对象
    xmldoc.validateOnParse = "true";//开启xml校验
    xmldoc.load("book.xml");//装载xml文档
    //获取错误信息
    xmldoc.parseError.reason;  
    xmldoc.parseError.line;

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

    在XML文档中编写DTD示例

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <!DOCTYPE 书架 [
        <!ELEMENT 书架 (书+)>
        <!ELEMENT 书 (书名,作者,售价)>
        <!ELEMENT 书名 (#PCDATA)>
        <!ELEMENT 作者 (#PCDATA)>
        <!ELEMENT 售价 (#PCDATA)>
    ]>
    <书架>
        <>
            <书名>Java就业培训教程</书名>
            <作者>张孝祥</作者>
            <售价>39.00元</售价>
        </>
        ...
    </书架>

    引入外部DTD文档

    XML使用DOCTYPE声明语句来指明它所遵循的DTD文档,有两种形式:

    当引用的DTD文档在本地时,采用如下方式: <!DOCTYPE 根元素 SYSTEM “DTD文档路径”> 如:<!DOCTYPE 书架 SYSTEM “book.dtd”>

    当引用的DTD文档在公共网络上时,采用如下方式: <!DOCTYPE 根元素 PUBLIC “DTD名称” “DTD文档的URL”> 如:<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">

    DTD元素定义

    语法如下:

    <!ELEMENT 元素名称 元素类型>     

    元素类型:

    (#PCDATA):指示元素的主体内容只能是普通的文本.(Parsed Character Data)

    EMPTY:用于指示元素的主体为空。比如<br/>

    ANY:用于指示元素的主体内容为任意类型。

    (子元素):指示元素中包含的子元素

    对于子元素

    ----可以定义子元素的名称,比如:

    <!ELEMENT 元素名称 (子元素1,子元素2,子元素3)> 表示3个子元素只能出现一次,并且按照此顺序出现;

    <!ELEMENT 元素名称 (子元素1|子元素2|子元素3)> 表示3个子元素中只能出现一个;

    我们还可以定义子元素的个数,比如:

    (1)+:1次或多次;比如 (name+)表示此name元素只能出现1次或多次。

    (2)?:0次或1次;比如(name?)表示此name元素只能出现0次或1次。

    (3)*:0次或多次;比如(name*)表示此name元素任意出现几次。

    (4)无:只能一次;比如(name)表示此name元素只能出现1次。

    如: <!ELEMENT MYFILE ((TITLE*, AUTHOR?, EMAIL)* | COMMENT)>

    DTD属性定义

    <!ATTLIST 标签名

        属性名1        属性类型        属性说明

        属性名2        属性类型        属性说明

    >

    例如:

    <!ATTLIST 商品

       类别 CDATA #REQUIRED

       颜色 CDATA #IMPLIED >

    对应的XML为:<商品 类别=“服装” 颜色=“黄色”/>

    属性类型可以是

    (1)CDATA:最普通的字符串;

    (2)ENUMERATED (DTD没有此关键字),表示枚举,即(值1|值2|值3),需要括号,只能在其中选择一个值

    (3)ID:属性值需要以字母或下划线开头,取值不能重复;

    属性说明可以是

    (1)#REQUIRED:必须设置;

    (2)#IMPLED:可选值,表示该属性可有可无;

    (3)#FIXED:固定值,通常语法为:#FIXED  "固定值"

    (4)直接值:表示属性的取值为该默认值

    定义属性示例

    <!ATTLIST 页面作者 
             姓名 CDATA #IMPLIED 
             年龄 CDATA #IMPLIED 
             联系信息 CDATA #REQUIRED 
             网站职务 CDATA #FIXED "页面作者" 
             个人爱好 CDATA "上网"
           > 
    <?xml version = "1.0" encoding="GB2312" standalone="yes"?>
    <!DOCTYPE 购物篮 [
        <!ELEMENT 肉 EMPTY>
        <!ATTLIST 肉 品种 ( 鸡肉 | 牛肉 | 猪肉 | 鱼肉 ) "鸡肉">
    ]> 
    <购物篮>
        <肉 品种="鱼肉"/>
        <肉 品种="牛肉"/>
        </>
    </购物篮>
    <?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实体定义

    定义实体就是为一段内容指定一个名称,使用时通过这个名称就可以引用其所代表的内容。

    在DTD文档中使用ENTITY关键字来声明一个实体。

    实体可分为:引用实体和参数实体,两者的语法不同

    定义引用实体

    概念:在DTD中定义,在XML中使用

    语法:<!ENTITY 实体名称 “实体内容”>

    引用方式(注意是在XML中使用):&实体名称;  注意:最后的“;”一定需要

    DTD中定义:
        <!ENTITY copyright "思梦科技">
    XML中引用:
        &copyright;

    定义参数实体(了解)

    概念:在DTD中定义,在DTD中使用

    语法:<!ENTITY % 实体名称 “实体内容”>

    引用方式(注意是在DTD中使用):%实体名称;

    DTD中定义:
        <!ENTITY % TAG_NAMES "姓名|EMAIL|电话|地址">
    DTD中引用:
        <!ELEMENT 个人信息 (%TAG_NAMES;|生日)>
       <!ELEMENT 客户信息 (%TAG_NAMES;|公司名)>

    根据XML自动生成DTD

    因为一般我们写的XML基本都是没有DTD的,如果要自己写DTD,又很麻烦,因此我们可以通过工具来自动生成:trang

    功能:能够完成如下转换:

    (1)XML ---> DTD

    (2)XML --->XSchema

    (3)DTD--->XSchema

    使用方法:

    java -jar trang.jar -I xml -O dtd input.xml output.dtd 即可;

    -I xml 表示输入为xml;

    -O dtd表示输出为dtd文件;

    input.xml表示输入文件;

    output.dtd表示输出文件;

  • 相关阅读:
    The difference of the line-height:2 and line-height:2em
    Damao眼中的新媒体
    Damao教你如何使用MacDown
    SF Pro 项目中的css hack
    刷新一次,图片更换一次
    Markdown 初体验
    docker 部署gitlab 构建CI/CD流水线
    c#面向对象问题 WPF简单数据驱动
    WebApi的创建和调试(简单步骤)
    C语言实现的贪吃蛇小游戏
  • 原文地址:https://www.cnblogs.com/lm970585581/p/7699555.html
Copyright © 2011-2022 走看看