精华内容
参与话题
问答
  • XML文件中的DTD是什么

    万次阅读 2018-05-25 22:52:55
    常用的约束技术:XML DTDDTD约束快速入门 DTD(Document Type Definition),全称为文档类型定义。 book.xml[html] view plain copy<span style="font-size:18px;"><?xml ...

    常用的约束技术:XML DTD


    DTD约束快速入门
        DTD(Document Type Definition),全称为文档类型定义。
       book.xml
    [html] view plain copy
    1. <span style="font-size:18px;"><?xml version="1.0" ?>  
    2. <!DOCTYPE书架  SYSTEM "book.dtd">  
    3. <书架>  
    4.     <>  
    5.         <书名>葵花宝典</书名>  
    6.         <作者>东方不败</作者>  
    7.         <售价>59.00元</售价>  
    8.     </>  
    9.     <>  
    10.         <书名>九阳神功</书名>  
    11.         <作者>张无忌</作者>  
    12.         <售价>57.00元</售价>  
    13.     </>  
    14. </书架>  
    15. </span>  
       book.dtd
    [html] view plain copy
    1. <span style="font-size:18px;"><!ELEMENT 书架 (书+)>  
    2.     <!ELEMENT 书 (书名,作者,售价)>  
    3.     <!ELEMENT 书名 (#PCDATA)>  
    4.     <!ELEMENT 作者 (#PCDATA)>  
    5.     <!ELEMENT 售价 (#PCDATA)>  
    6. </span>  
    复杂标签:<!ELEMENT 标签名 (子节点)>
    简单标签:<!ELEMENT 标签名 (#PCDATA)>
    引入DTD:<!DOCTYPE 根节点 SYSTEM  "dtd的地址">

     (4)将DTD与XML文档关联的三种形式
       DTD约束既可以作为一个单独的文件编写,也可以在XML文件内编写。
    • 使用内部DTD 。<!DOCTYPE 根节点  [DTD的代码]>
    • 使用外部DTD。<!DOCTYPE 根节点 "DTD的地址">
    • 使用网络DTD。<!DOCTYPE 根节点 PUBLIC  "DTD的名称"  "DTD的地址">
          常见的使用网络DTD约束有Struts2的框架。
      在XML文件内编写DTD
    [html] view plain copy
    1. <span style="font-size:18px;"><?xml version="1.0" encoding="UTF-8" standalone="yes"?>  
    2. <!DOCTYPE 书架 [  
    3.     <!ELEMENT 书架 (书+)>  
    4.     <!ELEMENT 书 (书名,作者,售价)>  
    5.     <!ELEMENT 书名 (#PCDATA)>  
    6.     <!ELEMENT 作者 (#PCDATA)>  
    7.     <!ELEMENT 售价 (#PCDATA)>  
    8. ]>  
    9. <书架>  
    10.     <>  
    11.         <书名>Java就业培训教程</书名>  
    12.         <作者>张孝祥</作者>  
    13.         <售价>39.00元</售价>  
    14.     </>  
    15.     ...  
    16. </书架>  
    17. </span>  
    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约束语法细节

    (1)DTD-定义元素
    在DTD文档中使用ELEMENT关键字来声明一个XML元素。
    语法:<!ELEMENT 元素名称  使用规则>
    使用规则:
    • (#PCDATA)指示元素的主题内容只能是普通的文本。
    • EMPTY:用于指示元素的主体为空。比如<br/>
    • ANY:用于指示元素的主题内容为任意类型。
    • (子元素):指示元素中包含的子元素。
    定义子元素及描述它们的关系:
      1) 如果子元素用逗号隔开,必须按照声明顺序去编写XML文档。
         例如:<!ELEMENT FILE(TITLE, AUTHOR, EMAIL)>
      2)如果子元素用"|" 分开,说明任选其一。
         例如:<!ELEMENT FILE(TITLE|AUTHOR|EMAIL)>
      3)用+、*、? 来表示元素出现的次数。
         如果元素后面没有+*?表示必须且只能出现一次。
         +:表示至少出现一次,一次或多次。
         *:表示可有可无,零次、一次或多次。
         ?:表示可以有也可以无,有的话只能出现一次。零次或一次。
        如:<!ELEMENT MYTITLE((TITLE*,AUTHOR?,EMAIL))*|COMMIT> 
    (2)元素内容的类型


    (3)元素ELEMENT定义

    DTD属性(ATTLIST)定义

    <!ATTLIST 元素名称
        属性名 属性类型  约束
        属性名 属性类型  约束
        ......
    >
    属性声明举例:
    <!ATTLIST 商品
     类别 CDATA  #REQUIRED  必须的
     颜色 CDATA  #IMPLIED       可选的
    >
    对应的XML为:<商品 类别="服装" 颜色="黄色" />

    属性值类型:
    • CDATA:表示属性的取值为普通的文本字符串。
    • ENUMERATED(DTD没有此关键字):表示枚举,只能从枚举列表中任选其一,如(鸡肉|牛肉|猪肉|鱼肉)
    • ID:表示属性的取值不能重复(不能只写数字)
    设置说明:
    • #REQUIRED:表示该属性必须出现
    • #IMPLIED:表示该属性可有可无。
    • #FIXED:表示该属性的取值为一个固定值。语法:#FIXED "固定值"
    • 直接值:表示属性的取值为默认值。
    约束的四种形式:

    DTD 定义属性示例一:
    <!ATTLIST 页面作者
       姓名   CDATA    #IMPLIED
       年龄   CDATA    #IMPLIED
       联系信息  CDATA  #REQUIRED
       网站职务  CDATA  #FIXED  "页面作者"
       个人爱好  CDATA  "上网"
    >
    DTD 定义属性示例二:
    属性的类型可以是一组取值的列表,在XML文件中设置的属性值只能是这个列表中的某个值(枚举)
    <?xml version = "1.0" encoding="GB2312" standalone="yes"?>
    <!DOCTYPE 购物篮 [
    <!ELEMENT 肉 EMPTY>
    <!ATTLIST 肉 品种 ( 鸡肉 | 牛肉 | 猪肉 | 鱼肉 ) "鸡肉">
    ]> 
    <购物篮>
    <肉 品种="鱼肉"/>
    <肉 品种="牛肉"/>
    <肉/>
    </购物篮>
    DTD 定义属性示例三:
    ID属性的值只能由字母,下划线开始,不能出现空白字符。表示属性的设置值是一个唯一值。
    [html] view plain copy
    1. <span style="font-size:18px;"><?xml version = "1.0" encoding="GB2312" ?>  
    2.   
    3. <!DOCTYPE 联系人列表[  
    4.     <!ELEMENT 联系人列表 ANY>  
    5.     <!ELEMENT 联系人(姓名,EMAIL)>  
    6.     <!ELEMENT 姓名(#PCDATA)>  
    7.     <!ELEMENT EMAIL(#PCDATA)>  
    8.     <!ATTLIST 联系人 编号 ID #REQUIRED>  
    9. ]>  
    10.   
    11. <联系人列表>  
    12.     <联系人 编号=“p1">  
    13.         <姓名>张三</姓名>  
    14.         <EMAIL>zhang@it315.org</EMAIL>  
    15.      </联系人>  
    16.     <联系人 编号=“p2">  
    17.         <姓名>李四</姓名>  
    18.         <EMAIL>li@it315.org</EMAIL>  
    19.     </联系人>  
    20. </联系人列表></span>  

    实体的引入

    实体定义:

    • 实体用于为一段内容创建一个别名,以后在XML文档中就可以使用别名引用这段内容了。
    • 在DTD定义中,一条<!ENTITY …>语句用于定义一个实体。
    • <!ENTITY 别名 “值”>
    • 在元素中引用  &别名;
    定义引用实体:
    • 概念:在DTD中定义,在XML中使用
    • 语法:<!ENTITY 实体名称 “实体内容”>
    • 引用方式(注意是在XML中使用):&实体名称;
    DTD中定义:
    <!ENTITY copyright “版权所有”>
    XML中引用:
    &copyright;


    综合实例如下:
    [html] view plain copy
    1. <?xml version="1.0" encoding="UTF-8"?>  
    2. <!DOCTYPE TVSCHEDULE [  
    3.     <!ELEMENT TVSCHEDULE (CHANNEL+)>  
    4.     <!ELEMENT CHANNEL (BANNER,DAY+)>  
    5.     <!ELEMENT BANNER (#PCDATA)>  
    6.     <!ELEMENT DAY (DATE,(HOLIDAY|PROGRAMSLOT+)+)>  
    7.     <!ELEMENT HOLIDAY (#PCDATA)>  
    8.     <!ELEMENT DATE (#PCDATA)>  
    9.     <!ELEMENT PROGRAMSLOT (TIME,TITLE,DESCRIPTION?)>  
    10.     <!ELEMENT TIME (#PCDATA)>  
    11.     <!ELEMENT TITLE (#PCDATA)>   
    12.     <!ELEMENT DESCRIPTION (#PCDATA)>  
    13.       
    14.     <!ATTLIST TVSCHEDULE NAME CDATA #REQUIRED>  
    15.     <!ATTLIST CHANNEL CHAN CDATA #REQUIRED>  
    16.     <!ATTLIST PROGRAMSLOT VTR CDATA #IMPLIED>  
    17.     <!ATTLIST TITLE RATING CDATA #IMPLIED>  
    18.     <!ATTLIST TITLE LANGUAGE CDATA #IMPLIED>  
    19. ]>  
    20.   
    21. <TVSCHEDULE NAME="">  
    22.     <CHANNEL CHAN="">  
    23.         <BANNER>CCAV</BANNER>  
    24.         <DAY>  
    25.             <DATE>2014-11-17</DATE>  
    26.             <PROGRAMSLOT>  
    27.                 <TIME>19:00</TIME>  
    28.                 <TITLE>新闻联播</TITLE>  
    29.             </PROGRAMSLOT>  
    30.         </DAY>  
    31.     </CHANNEL>  
    32. </TVSCHEDULE>  

    展开全文
  • DTD的定义、规则和编写

    千次阅读 2008-07-10 00:21:00
    http://zhangjunhd.blog.51cto.com/113473/18777DTD 文档类型定义 (Documnet Type Definition)是一套关于标记符的语法规则。它是XML1.0版规格得一部分,是XML文件的验证机制,属于XML文件组成的一部分。 DT
    版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://zhangjunhd.blog.51cto.com/113473/18777
    DTD 文档类型定义 (Documnet Type Definition)是一套关于标记符的语法规则。它是XML1.0版规格得一部分,是XML文件的验证机制,属于XML文件组成的一部分。 DTD 是一种保证XML文档格式正确的有效方法,可以通过比较XML文档和DTD文件来看文档是否符合规范,元素和标签使用是否正确。一个DTD文档包含:元素 的定义规则,元素间关系的定义规则,元素可使用的属性,可使用的实体或符号规则。本文详述DTD的定义、规则和编写。
    author: ZJ 07-2-28 Blog: http://zhangjunhd.blog.51cto.com/
    1.DTD - XML 建立主组件群(blocks)       像<body>....</body>之类的标签是XML和HTML文件的主组件群(blocks)。
    1.1XML文件的组件群       从DTD来看,所有的XML文件(和HTML文件)都是由接下来的简单组件群组成的:Elements元素;Attributes 属性;Entities实体;PCDATA 被解析的字符数据(Parsed Character Data);CDATA 字符数据值(Character Data)。下面是每个组件群的简短解释。
    1.2元素(Elements)       元素是XML和HTML文件的主组件群(main building blocks)。HTML元素的实例是"body" 和"table"。XML元素实例是"note" 和"message"。元素可以包括文本、其它元素或者空值。空值html元素的实例是"hr", "br" 和"img"。   例如:   <body>body text in between</body> <message>some message in between</message>
    1.3属性(Attributes)       属性提供关于元素的额外信息(extra information about elements)。属性总是置于元素的开始标签里面。属性一般是以“名称(name)/值(value)”这样的形势一对对的出现。下面的“img”元 素就是关于源文件的补充信息:   <img src="computer.gif" />      元素名称是“img”。属性名称“src”。属性值是"computer.gif"。因为元素自身是空值,所以它是以“/”结束的。
    1.4实体(Entities)       实体是对于定义普通文件(define common text)的变量。实体参数是定义实体的参数。很多人都知道HTML实体参数:"&nbsp;"。这里的"no-breaking-space" 实体是在HTML中用来在文本中插入一个额外空间的。当XML剖析器解析文件时,实体就会得到扩展。下面(表1)的实体是在XML中预定的:
    1
    字符
    字符实体
    &
    &amp;&#38;
    '
    &apos;&#39;
    >
    &gt;&#62;
    <
    &lt;&#60;
    "
    &quot;&#34;
    1.5 PCDATA       PCDATA的意思是被解析的字符数据。把字符数据当作XML元素的开始标签与结束标签之间的文本。剖析器会分析PCDATA文本。文本中的标签会被当作标示的字体,实体将会扩展。
    1.6 CDATA       CDATA也是字符数据的意思。剖析器不会解析CDATA文本。文本中的标签不会作为标示字体,实体也将不会得到扩展。
    2.元素定义 2.1元素声明       元素声明语法如下:   <!ELEMENT name content>       其中,name是一个标准的XML标记的名字。Centent由以下三种之一组成:   ①关键字EMPTY;   ②关键字ANY;   ③描述包含在本元素中的子元素的顺序和重复次数的内容模型。
    2.2元素内容类型(Element Content Model)       元素内容通常有五种类型:EMPTY、ANY、#PCDATA、子元素型和混合型。
    2.2.1 EMPTY类型       EMPTY用于定义空元素,该元素只可能有属性而不会有字符数据或子元素。   其形式为<swt/>或<swt></swt>。声明空元素的语法如下:   <!ELEMENT emptyelement EMPTY>
    2.2.2 ANY类型     该元素可以包含DTD中定义的其他任何元素或已编译的字符数据。声明该元素的语法如下:            <!ELEMENT anyelement ANY>
    2.2.3 #PCDATA类型       不包含其它任何元素而只包含字符数据的元素,用关键字#PCDATA进行定义,它代表“已编译的字符数据(parsed character data)”。PCDATA可以包含除标记以外的一切字符,包括数字、字母和符号等。被定义为包含PCDATA的元素不能包含任何其它子元素。示例如下:   <!ELEMENT title(#PCDATA)>
    2.2.4 子元素类型       元素可以包含一系列的子元素,子元素内容模型用于指定某个元素可以包含哪些子元素,如:   <!ELEMENT message(header,body,signature,footer)>//message元素包含四个子元素,依次是header、body、signature和footer元素。       根据子元素间的关系,子元素内容模型可以有两种可能的结构:序列和选择。    ①序列。其所有子元素必须出现且仅出现一次,这种结果成为序列。使用序列时应注意,首先,序列中不能出现#PCDATA;其次,子元素自身还可以包含其它子元素。    ②选择。元素间的选择可以进行如下声明:    <!ELEMENT elem(subelem1|subelem2|subelem3)>//将子元素用竖线进行分隔,表明elem元素的子元素为subelem1、subelem2和subelem3三者之一,但不能同时包含其中的两个或三个子元素。     序列和选择这两种结构可以结合使用。
    2.2.5 混合类型       若某元素既包含子元素又包含已编译的字符数据,则该元素具有混合内容。其声明如下:   <!ELEMENT pick(#PCDATA|one|two|three)*>       为避免产生错误,混合内容元素的声明必须遵循这一格式。即采用单一的一组可选项,以#PCDATA开始,后面是混合内容中可能出现的子元素类型,每种只需声明一次。除此之外,“*”必须放在右括号之后。   下面的声明是错误的:   <!ELEMENT pick(one|#PCDATA|two*|three)>
    2.3元素出现次数指示符(Element Occurrence Indicator)   见表2
    2
    符号
    代表标记出现的次数
    不出现或只出现一次
    *
    不出现或可出现多次
    +
    必须出现一次以上
    无符号
    只能出现一次
    3.属性定义 3.1属性声明       属性声明的语法如下:   <!ATTLIST Element_name Attribute_name Type Defualt_value>       其中,ATTLIST关键字用来定义元素所具有的属性,Element_name是元素名,Attribute_name是该元素所具有的属性 名,Type是属性的类型,Defualt_value是属性的默认值。注意:在一个给定的元素中不能有两个属性同名;若属性值中含有双撇号,则该属性值 应用单撇号括起来。  如: <job comments=’He said,”I can paint only red door” ’>Door Painter</job>
    3.2 属性类型       在XML中共有10种属性类型(attribute-type):(见表3)
    3
    属性值类别
    描述
    CDATA
    属性值仅仅是一般的文字。与#PCDATA元素声明类似。
    <!ATTLIST AnElem attr CDATA #REQUIRED>
    Enumerated
    列出该属性的取值范围,一次只能有一个属性值能够赋予属性。
    <!ATTLIST play position (center|forward|defense) ”center”>
    NMTOKEN
    表示属性值只能由字母或下划线_开始,之后是字母、数字、下划线、短横线或圆点,且不能含有空格。
    NMTOKENS
    表示属性值能够由多个nmtoken组成,每个nmtoken之间用空格隔开。
    ID
    ID类型用于标识文档中的元素。该属性在xml文件中是唯一的。同时,每个元素最多只能具有一个ID类型的属性。
    <!ALLTIST author authorID ID #REQUIRED >
    IDREF/ IDREFS
    IDREF表示该属性值是参考了另一个id属性;IDREFS表示该属性值是参考了多个id属性,这些id属性的值用空格隔开。
    DTD定义:
    <!ELEMENT bookInfo(publishers,authors,books)>
    <!ELEMENT publishers(publisher+)>
    <!ELEMENT publisher(pname,address)>
    <!ATTLIST publisher publisherID ID #REQUIRED>
    <!ELEMENT pname(#PCDATA)>
    <!ELEMENT address(#PCDATA)>
    <!ELEMENT authors(author+)>
    <!ELEMENT author(aname,age,sex)>
    <!ATTLIST author authorID ID #REQUIRED>
    <!ELEMENT aname(#PCDATA)>
    <!ELEMENT age(#PCDATA)>
    <!ELEMENT sex(#PCDATA)>
    <!ELEMENT books(book*)>
    <!ELEMENT book(title,price,year)>
    <!ATTLIST book publisher IDREF #REQUIRED
    author IDREFS #REQUIRED>
    <!ELEMENT title(#PCDATA)>
    <!ELEMENT price(#PCDATA)>
    <!ELEMENT year(#PCDATA)>
    对应的XML文档:
    <bookInfo>
    <publishers>
    <publisher publisherID=”p001”>
    <pname>tsinghua university press</pname>
    <address>Beijing</address>
    </publisher>
    <publisher publisherID=”p002”>
    <pname>electronic industy press</pname>
    <address>Beijing</address>
    </publisher>
    </publishers>
    <authors>
    <author authorID=”a001”>
    <aname>Mary</aname>
    <age>34</age>
    <sex>male</sex>
    </author>
    <author authored=”a002”>
    <aname>Tom</aname>
    <age>39</age>
    <sex>female</sex>
    </author>
    </authors>
    <books>
    <book publisher=”p001” author=”a001 a002”>
    <title>XML</title>
    <price>22</price>
    <year>2007</year>
    </book>
    </books>
    </bookInfo>
    ENTITY
    表示该属性的设定值是一个外部实体(entity),如一个图片文件。
    ENTITYS
    该属性值包含了多个外部entity,不同的entity之间用空格隔开。
    NOTATION
    属性值是在DTD中声明过的notation(声明用什么应用软件解读某些二进制文件,如图片)。
    <!NOTATION gif SYSTEM “GIF_Viewer”>
    <!NOTATION jpg SYSTEM “JPG_Viewer”>
    <!NOTATION png SYSTEM “PNG_Viewer”>
    <!ELEMENT img #PCDATA>
    <!ATTLIST img src CDATA #REQUIRED
    NOTATIONpng|jpg|gif#REQUIRED >
    //其中,type属性的值可以为pngjpggif之一,且每个值均与一个相应的<!NOTATION>声明相对应。
    3.3 属性默认值     属性声明可以给属性指定一个默认值,使得当在XML文档中未明确地指定该属性的值时,XML处理器会将此默认值作为该属性的值。属性的默认值可用#REQUIRED、#IMPLIED、#FIXED和字符串定义,见表4。
    4
    属性内定值
    描述
    #REQUIRED
    表示在标记中必须出现此属性。
    #IMPLIED
    标记中可以不出现此属性。即该属性不是必须使用。
    #FIXED
    属性的值是固定的某个值。
    字符串
    标记中如没有指定属性的值,那么此字符串就是此属性的值。
      示例:   ①属性值为字符数据,默认值为numeric,在未指定其他值时使用该值。   <!ELEMENT year (#PCDATA)> <!ATTLIST year format CDATA “numeric”>   ②属性有一默认值numeric,并且必须使用该值作为属性的值。   <!ELEMENT year (#PCDATA)> <!ATTLIST year format CDATA #FIXED “numeric”>   ③属性无默认值,但它必须出现在year元素中。   <!ELEMENT year (#PCDATA)> <!ATTLIST year format CDATA #REQUIRED>   ④属性值为numeric或character,而numeric为默认值。   <!ELEMENT year (#PCDATA)> <!ATTLIST year format (numeric|character) ”numeric”>   ⑤属性值为numeric或character,在此处numeric被固定为唯一的实际值。   <!ELEMENT year (#PCDATA)> <!ATTLIST year format (numeric|character) #FIXED”numeric”>   ⑥属性必须有一个值,numeric或character。   <!ELEMENT year (#PCDATA)> <!ATTLIST year format (numeric|character) #REQUIRED >
    4.DOCTYPE声明       DTD可以是一个完全独立的文件,也可以在XML文件中直接设定。所以,DTD分为外部DTD(在XML文件中调用另外已经编辑好的DTD)和内部DTD(在XML文件中直接设定 DTD)两种。
    4.1内部DOCTYPE声明       如果DTD被包含在XML源文件中,它将通过以下语法格式来在"DOCTYPE"中定义:   <!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>       其中,<!DOCTYPE note    (在第2行) 定义这是一个类型为note的文档。此名(note)必须与XML文档的根元素名相同。
    4.2外部DOCTYPE声明       如果DTD在XML源文件的外部,它将通过以下语法格式来在"DOCTYPE"中定义:   <!DOCTYPE root-element SYSTEM "filename">   示例:此例XML文档与例1相同,但是使用的是外部的DTD   <?xml version="1.0"?>   <!DOCTYPE note SYSTEM "note.dtd">   <note>     <to>Tove</to>     <from>Jani</from>     <heading>Reminder</heading>     <body>Don't forget me this weekend!</body>   </note>  文件note.dtd包含定义的DTD   <!ELEMENT note (to,from,heading,body)>   <!ELEMENT to (#PCDATA)> <!ELEMENT from (#PCDATA)>   <!ELEMENT heading (#PCDATA)> <!ELEMENT body (#PCDATA)>       关键字SYSTEM表示外部DTD是个人的非标准化的DTD,这与PUBLIC不同,它表示该DTD是一个公用的DTD。   格式如下: <!DOCTYPE note PUBLIC “-//Big Dog//DTDsustomer_support//EN//” “http://www.bigdog.net/xml/customer.dtd”>       名称的各个部分是:   ①名称以加号或减号开头。加号表示该DTD已经通过标准组织的批准。减号表示该DTD未经标准化。   ②//Big Dog//DTD表示编写和维护该DTD的个人或组织。 ③sustomer_support是对此DTD的描述,//EN//表示该DTD所用的语言,是英语。
    5.实体       实体是用于定义普通文本快捷方式的变量。实体参数就是反映实体特征的参数。实体可以声明为内部实体或外部实体。
    5.1内部实体声明   Syntax: <!ENTITY entity-name "entity-value">
      DTD Example:   <!ENTITY writer "Donald Duck."> <!ENTITY copyright "Copyright W3Schools."> XML example: <author>&writer;&copyright;</author>
    5.3 在实体中使用标记字符的限制       限制1:任何标记字符必须被双重定义。   考虑下面的例子:   <!ENTITY name”black&#38;white”>   XML example: <text>This is not a &name;choice.</text>      希望此实体用“This is not a black &white choice”来替换“&name;”。现在考虑实际上所发生的如下过程。   ①XML处理器看到实体引用&name;并寻找替换文本。   ②找到“black&#38;white”,并替换为“black &white”。   ③XML处理器插入替换文本,结果代码是:   <text>This is not a black & white choice.</text>   ④处理器试图分析“&”,结果报告一个错误,因为“&”未被声明为一个实体。 解决方法是:使用标记字符的双重转义,这将会避免此问题的发生,例如:    <!ENTITY name”Harry&#38;#38;Fred&amp;amp;Joe”> XML example: <text>The job was left to &name; to fix.</text>      希望此实体用“The job was left to Harry&Fred&Joe”来替代“&name;”。现在考虑实际上所发生的如下过程。   ①XML处理器看到实体引用&name;并寻找替换文本。   ②找到“Harry&#38;#38;Fred&amp;amp;Joe”,并替换为“Harry&#38;Fred&amp;Joe”。 ③XML处理器插入替换文本,结果代码是: <text>The job was left to Harry&#38;Fred&#amp;Joe.</text>  ④然后处理器顺利的分析“&#38;”和“&#amp;”,得到: <text> The job was left to Harry&Fred&Joe</text>
      限制2:如果在替换文本中打开某一元素而不关闭它是错误的。  考虑下面的例子:   <!ENTITY unsafe”&#38#60;emph&#62;Harry and Joe”>   XML example:   <text>The job was left to &unsafe;to finish.</text>   结果是:   <text>The job was left to <emph>to finish.</text>//这是非法的。
    5.4 参数实体 DTD Example:   <?xml version=”1.0” standalone=”no”?>   <!DOCTYPE message[   <!ELEMENT message(header,body,(signature|footer))>   <!ELEMENT header(date,form+,to+,subject,banner?)>   <!ELEMENT body (paragraph*)>   <!ATTLIST body studentid IDREFS #REQUIRED>   <!ELEMENT paragraph(#PCDATA)>   <!ATTLIST paragraph size NMTOKENS #REQUIRED>   <!ELEMENT signature(#PCDATA)>   <!ELEMENT footer ANY>   <!ATTLIST footer studentwhich IDREF #REQUIRED>   <!ELEMENT from(#PCDATA)>   <!ATTLIST from student ID #REQIIRED>   <!ELEMENT to(#PCDATA)>   <!ATTLIST to relationship CDATA #IMPLIED>   <!ELEMENT subject(#PCDATA)>   <!ELEMENT banner(#PCDATA)>    <!ENTITY % date SYSTEM “message.ent”> %date; ]>   XML example:   <message>    <header>         <date>             <day>25</day>             <month type=”character”>December</month>          <year format=”numeric”>2010</year>        </date>        <from student=”a123”>Me</from>       <from student=”a456”>My friend</from>      <to>You</to>      <to relationship=”very close”>Your family</to>    <to relationship=”not so close”>Your friends</to>      <subject>Happy New Year</subject>     <banner></banner> </header>   <body>      <paragraph size=”one line”>Best wishes</paragraph>     <paragraph size=”two lines”>Hope</paragraph>   </body>   <footer>         <day>A new day</day>        <from student=”a3344”>Stalle’s helper</from>   </footer>  </message>       其中,date元素及其子元素的定义被放在一个单独的文件中,文件名为message.ent,   内容为:   <!ELEMENT date(day,month,year)>   <!ELEMENT day(#PCDATA)>   <!ELEMENT month(#PCDATA)>   <!ATTLIST month type(numeric|character)#REQUIRED>   <!ELEMENT year(#PCDATA)>   <!ATTLIST year format(numeric|character)”numeric”>     DTD中的下面两行代码使得上面的代码片断在分析时被包含到DTD中。   <!ENTITY % date SYSTEM “message.ent”> %date;     第一行用于引用文件message.ent中date的元素定义。符号”%”两边的空格是必须的。第二行以正常形式使用一个实体饮用,使它被文件的内容所替代。
    展开全文
  • DTD详解

    千次阅读 2016-01-19 11:38:37
    DTD详解 基本概述  文档类型定义(Document Type Definition)是一套为了进行程序间的数据交换而建立的关于标记符的语法规则。它是标准通用标记语言(SGML)和可扩展标记语言(XML)1.0版规格的一部分,文档可...

    DTD详解

    基本概述

        文档类型定义(Document Type Definition)是一套为了进行程序间的数据交换而建立的关于标记符的语法规则。它是标准通用标记语言(SGML)和可扩展标记语言(XML)1.0版规格的一部分,文档可根据某种DTD语法规则验证格式是否符合此规则。文档类型定义也可用做保证标准通用标记语言、可扩展标记语言文档格式的合法性,可通过比较文档和文档类型定义文件来检查文档是否符合规范,元素和标签使用是否正确。文件实例提供应用程序一个数据交换的格式。

    PS:简而言之,DTD就是用来约束XML文档的,使其在一定的规范下使用,除了DTD技术外,还有Schema技术,也是用于约束XML文档的。

    参考文档:DTD http://www.w3school.com.cn/dtd/index.asp

    参考文档:Schema http://www.w3school.com.cn/schema/index.asp

     

    DTD原理图

    PS:通过DTD约束,XML就能在DTD的约束下进行自定义了,不过DTD有个缺点,那就是不能对数据进行数值约束这种范围约束。

     

    DTD文档的声明及引用

    内部DTD文档

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

    外部DTD文档

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

    内外部DTD文档结合

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

    定义内容

    ]>

    注意事项:

    1、定义关键字一定要大写,例如:DOCTYPEELEMENTATTLIST

    2

    当引用的文件在本地时,采用如下方式:

    <!DOCTYPE 文档根结点 SYSTEM "DTD文件的URL">

    例如: <!DOCTYPE 书架 SYSTEM book.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 NAME CONTENT>

    解释:

    ELEMENT:关键字(必须大写)

    NAME:元素名称。

    CONTENT:元素类型,有四种,都必须大写。

        1EMPTY-该元素不能包含子元素和文本,但可以有属性(空元素)

        2ANY-该元素可以包含任何在DTD中定义的元素内容

        3#PCDATA-可以包含任何字符数据,但是不能在其中包含任何子元素

        4、其它类型(组合),可以是子元素,子元素与修饰符组合,基本元素与子元素与修饰符组合。

     

    案例:

    <!ELEMENT 班级 (学生+,作者)>

    <!ELEMENT 学生 (名字,年龄,介绍)>

    <!ELEMENT 作者 (#PCDATA)>

    <!ELEMENT 名字 (#PCDATA)>

    <!ELEMENT 年龄 (#PCDATA)>

    <!ELEMENT 介绍 (#PCDATA)>

     

    修饰符

    符号 

    用途 

    示例

    示例说明

    (  )

    用来给元素分组 

    (古龙|金庸|梁羽生),(王朔|余杰)

    分成两组

    |

    在列出的对象中选择一个 

    (男人|女人) 

    表示男人或者女人必须出现,而且只能选一个 

    +

    该对象最少出现一次,可以出现多次 (1或多次)

    (成员+ 

    表示成员必须出现,而且可以出现多个成员

    *

    该对象允许出现零次到任意多次(0到多次)

    (爱好* 

    爱好可以出现零次到多次

    ?

    该对象可以出现,但只能出现一次 (01)

    (菜鸟? 

    菜鸟可以出现,也可以不出现,如果出现的话,最多只能出现一次 

    ,

    对象必须按指定的顺序出现 

    (西瓜,苹果,香蕉) 

    表示西瓜、苹果、香蕉必须出现,并且按这个顺序出现 


    DTD属性

    基本语法

    <!ATTLIST 元素名称

    属性名称    类型    属性特性

    属性名称    类型    属性特性…...

    >

    解释:

    ATTLIST:属性列表,(必须大写)。

    元素名称:对应的元素的名称。

    属性:属性能够有多个,其格式是名称 类型 属性特性

    类型:


    PS:常用的有CDATA(字符型),枚举(枚举格式是(1|2|3...))ID(ID不能重复,不能以数字开头)IDREF(引用另一个ID)IDREFS(可以引用多个ID值,以空格隔开)

     

    属性特性有:


    案例:

    <!ELEMENT 班级 (学生+,作者)>
    <!ATTLIST 班级
    	班次 CDATA "1班"
    	编号 ID #REQUIRED
    >
    <!ELEMENT 学生 (名字,年龄,介绍)>
    <!ELEMENT 作者 (#PCDATA)>
    <!ATTLIST 学生
    	地址 CDATA #IMPLIED
    	授课方式 CDATA #FIXED "面授"
    	学号 ID #REQUIRED
    	班级编号 IDREF #REQUIRED
    	朋友 IDREFS #IMPLIED
    >
    <!ELEMENT 名字 (#PCDATA)>
    <!ELEMENT 年龄 (#PCDATA)>
    <!ELEMENT 介绍 (#PCDATA)>

    实体

        实体有引用实体和参数实体两种,引用实体一般是在XML使用,参数实体一般是在DTD中使用。

    基本语法

    <!ENTITY 实体名称 “实体内容” > // 引用实体

    <!ENTITY % 实体名称 "实体内容" > // 参数实体

    解释:

    1、引用实体可以在引用了DTDXML文件中,使用&实体名称;来使用实体内容。

    2、不知道是不是我的电脑原因,外部DTD中不能用引用实体,如果用将引用实体定义放在内部DTD中,则可以使用。

    3、参数实体在DTD中使用,使用%实体名称;使用

    4、可以将那些重复使用的值定义成实体,这样能减少代码的冗余度。

    5、在外部DTD中,引用实体最好放在DTD底部,参数实体最好放在DTD顶部。

     

    案例:

    <!ENTITY % sex "男|女">
    <!ELEMENT 班级 (学生+,作者)>
    <!ELEMENT 学生 (名字,年龄,介绍)>
    <!ELEMENT 作者 (#PCDATA)>
    <!ATTLIST 学生
    	性别 (%sex;) #REQUIRED
    >
    <!ELEMENT 名字 (#PCDATA)>
    <!ELEMENT 年龄 (#PCDATA)>
    <!ELEMENT 介绍 (#PCDATA)>
    <!ENTITY writer "Switch">

    综合案例1

    XML3.dtd

    <!ENTITY % sex "男|女">
    <!ELEMENT 班级 (学生+,作者)>
    <!ATTLIST 班级
    	班次 CDATA "1班"
    	编号 ID #REQUIRED
    >
    <!ELEMENT 学生 (名字,年龄,介绍)>
    <!ELEMENT 作者 (#PCDATA)>
    <!ATTLIST 学生
    	地址 CDATA #IMPLIED
    	授课方式 CDATA #FIXED "面授"
    	学号 ID #REQUIRED
    	班级编号 IDREF #REQUIRED
    	朋友 IDREFS #IMPLIED
    	性别 (%sex;) #REQUIRED
    >
    <!ELEMENT 名字 (#PCDATA)>
    <!ELEMENT 年龄 (#PCDATA)>
    <!ELEMENT 介绍 (#PCDATA)>

    XML3.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <!-- 引入DTD -->
    <!DOCTYPE 班级 SYSTEM "XML3.dtd"
    [<!ENTITY writer "Switch">]>
    <班级 编号="C1" 班次="1班">
    	<学生  地址="湖南" 授课方式="面授" 学号="n1" 班级编号="C1" 朋友="n2" 性别="男">
    		<名字>张三</名字>
    		<年龄>20</年龄>
    		<介绍>不错</介绍>
    	</学生>
    	<学生 授课方式="面授" 学号="n2" 班级编号="C1" 朋友="n1 n3" 性别="女">
    		<名字>李四</名字>
    		<年龄>18</年龄>
    		<介绍>很好</介绍>
    	</学生>
    	<学生 授课方式="面授" 学号="n3" 班级编号="C1" 朋友="n2" 性别="男">
    		<名字>王五</名字>
    		<年龄>22</年龄>
    		<介绍>非常好</介绍>
    	</学生>
    	<作者>&writer;</作者>
    </班级>

    综合案例2

    XML4.dtd

    <!ENTITY AUTHOR "John Doe">
    <!ENTITY COMPANY "JD Power Tools, Inc.">
    <!ENTITY EMAIL "jd@jd-tools.com">
    
    <!ELEMENT CATALOG (PRODUCT+)>
    
    <!ELEMENT PRODUCT
    (SPECIFICATIONS+,OPTIONS?,PRICE+,NOTES?)>
    <!ATTLIST PRODUCT
    NAME CDATA #IMPLIED
    CATEGORY (HandTool|Table|Shop-Professional) "HandTool"
    PARTNUM CDATA #IMPLIED
    PLANT (Pittsburgh|Milwaukee|Chicago) "Chicago"
    INVENTORY (InStock|Backordered|Discontinued) "InStock">
    
    <!ELEMENT SPECIFICATIONS (#PCDATA)>
    <!ATTLIST SPECIFICATIONS
    WEIGHT CDATA #IMPLIED
    POWER CDATA #IMPLIED>
    
    <!ELEMENT OPTIONS (#PCDATA)>
    <!ATTLIST OPTIONS
    FINISH (Metal|Polished|Matte) "Matte" 
    ADAPTER (Included|Optional|NotApplicable) "Included"
    CASE (HardShell|Soft|NotApplicable) "HardShell">
    
    <!ELEMENT PRICE (#PCDATA)>
    <!ATTLIST PRICE
    MSRP CDATA #IMPLIED
    WHOLESALE CDATA #IMPLIED
    STREET CDATA #IMPLIED
    SHIPPING CDATA #IMPLIED>
    
    <!ELEMENT NOTES (#PCDATA)>

    XML4.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE CATALOG SYSTEM "XML4.dtd">
    <CATALOG>
    	<PRODUCT NAME="C'estbon" CATEGORY="Shop-Professional" INVENTORY="Backordered" PARTNUM="10" PLANT="Chicago">
    		<SPECIFICATIONS POWER="0" WEIGHT="555ml">SPECIFICATIONS</SPECIFICATIONS>
    		<OPTIONS>OPTIONS</OPTIONS>
    		<PRICE>2</PRICE>
    		<NOTES>NOTES</NOTES>
    	</PRODUCT>
    </CATALOG>

    展开全文
  • 什么是DTD?怎样使用?

    千次阅读 2017-07-20 19:34:34
    DTD:文档类型定义(Document Type Definition)是一套关于标记符的语法规则。 一个 XHTML 文档有三个主要的部分: DOCTYPEHeadBody 基本的文档结构是这样的: 1 2 3 4 5 6 ...

    DTD:文档类型定义(Document Type Definition)是一套关于标记符的语法规则。

    一个 XHTML 文档有三个主要的部分:

    • DOCTYPE
    • Head
    • Body

    基本的文档结构是这样的:


    1
    2
    3
    4
    5
    6
    7
    <!DOCTYPE ...>
    <html>
    <head>
    <title>... </title>
    </head>
    <body> ... </body>
    </html>


    在信息的高速交流中,不同领域之间的信息交换越来越紧密,如何才能保证这些不同领域之间的信息可以更容易且更有效率地交换成为我们首要关注的问题。为了解决这个问题,就需要不同的领域来针对领域的特性制定共同的信息内容模型(content model),然后再通过这个共同的内容模型来标识信息。而DTD就是一种内容模型。 DTD(文档类型定义)可以定义合法的XML文档结构,它使用一系列合法元素来定义文档的结构。DTD分为内部DTD和外部DTD,所谓内部DTD是指该DTD在某个文档的内部,只被该文档使用。外部DTD是指该DTD不在文档内部,可以被其他所有的文档来共享。DTD文档与XML文档实例的关系可以看成是类和对象的关系。 DTD的优势 每一个XML文档都可携带一个DTD,用来对该文档格式进行描述,测试该文档是否为有效的XML文档。既然DTD有外部和内部之分,当然就可以为某个独立的团体定义一个公用的外部DTD,那么多个XML文档就都可以共享使用该DTD,使得数据交换更为有效。甚至在某些文档中还可以使内部DTD和外部DTD相结合。在应用程序中也可以用某个DTD来检测接收到的数据是否符合某个标准。 对于XML文档而言,虽然DTD不是必须的,但它为文档的编制带来了方便。加强了文档标记内参数的一致性,使XML语法分析器能够确认文档。如果不使用DTD来对XML文档进行定义,那么XML语法分析器将无法对该文档进行确认。元素的定义
    根元素的声明 每个XML文档都只有一个根元素,其它的子元素都包含在该根元素中。因此在DTD中对根元素的声明是必不可少的。


    为什么使用 DTD?

    通过 DTD,您的每一个 XML 文件均可携带一个有关其自身格式的描述。

    通过 DTD,独立的团体可一致地使用某个标准的 DTD 来交换数据。

    而您的应用程序也可使用某个标准的 DTD 来验证从外部接收到的数据。

    您还可以使用 DTD 来验证您自身的数据。


    展开全文
  • 在XML文件开头都会有.dtd的标记,那dtd是什么呢,有什么用? DTD为英文Document Type Definition,中文意思为“文档类型定义”。DTD肩负着两重任务:一方面它帮助你编写合法的代码,另一方面它让浏览器正确地...
  • DTD简介

    2016-06-05 21:26:29
    DTD简介  什么是DTD?  文档类型定义(DTD)可定义合法的XML文档构建模块,它使用一系列合法的元素来定义文档的结构。  DTD可被成行地声明于XML文档中,也可作为一个外部引用。  DTD的作用  DTD声明的...
  • DTD

    2020-06-20 10:47:10
    1.什么是DTD? 文档类型约束(定义) 2.什么是XML? XML:可扩展标记语言 HTML:超文本标记语言(固定) 3.XML的两种文档约束 DTD,schma 4.XML格式要求(合法XML) 1)有且只有一个根节点; 2)由开始标签和结束标签...
  • DTD

    2019-06-11 09:40:00
    DTD 1.DTD简介 (1)DTD,Document Type Definition,文档类型定义. (2)DTD用于约束xml的文档格式,保证xml是一个有效的xml. (3)DTD可以分为两种,内部DTD,外部DTD. 2.使用内部DTD (1)...
  • DTD

    2019-05-31 23:57:07
    DTD 1. 什么是DTD? 文档类型定义(约束) 2. 什么是XML HTML:超文本标记语言(用来显示数据) XML:可扩展标记语言(用来传输和存储数据) 3.两种文档的约束XML** DTD和Schema 4.XML格式要求(合法XML) 有且...
  • DTD

    千次阅读 2011-09-27 20:27:09
    DTD是一套关于标记的语法规则,它定义了文档的逻辑结构,规定了文档中所使用的元素、实体、元素的属性、元素与实体之间的关系。DTD告诉你可以在哪些文档中使用哪些标记,各标记出现的次序,哪些标记出现在哪些标记中...
  • DTD

    2011-11-29 13:08:56
    DTD全称为Document Type Definition,即文档类型定义。DTD是一套关于标记符的语法规则,它是XML 1.0版规范的一部分,也是XML文档的一个组成部分,它为XML文档提供了验证机制。DTD是一种保证XML文档格式正确的有效...
  • DTD约束

    千次阅读 2018-06-01 22:33:05
    什么是DTD约束: DTD(Document Type Definition)文档类型定义,用来约束xml文档。规定xml文档中元素的名称,子元素的名称及顺序,元素的属性等等。DTD语法: 文档声明: 1、内部DTD,在xml文档内部嵌入DTD,只对...
  • J2EE进阶(十九)Nested exception: java.io.FileNotFoundException: http://hibernate.org/dtd/hibernate-mapping-3.0.dtd  在调试过程中,莫名奇妙的出现了“Nested exception:java.io.FileNotFoundException: ...
  • XML语法以及DTD的详解

    万次阅读 2016-10-17 22:36:56
    XML简介: ...它被设计的宗旨是传输数据,而非显示数据。XML标签没有被预定义,需要用户自行定义标签。XML技术是W3C组织(World Wide Web Consortium万维网联盟)发布的,目前遵循的是W3C组织于2000年发布XML1.0规范。...
  • XML——XML文件约束之DTD详解

    万次阅读 多人点赞 2016-05-29 16:54:15
    本文介绍了XML文件约束的概念,重点介绍了使用DTD约束XML文件,介绍了DTD的引用方式以及定义元素和属性的语法
  • DTD中的实体Entity

    千次阅读 2016-07-21 13:16:51
    W3School ...实体是用于定义引用普通文本或特殊字符的快捷方式的变量。...DTD 例子: XML 例子: &writer;©right; 注释: 一个实体由三部分构成: 一个和号 (&), 一个实体名称, 以及一
  • DTD语法详解

    万次阅读 2011-04-26 09:43:00
    DTD语法详解
  • xml基础、DTD验证、Schema验证

    千次阅读 2016-04-22 11:06:36
    一、xml基础详解: 1、概述:  xml:即可扩展标记语言,xml是互联网数据传输的重要工具,它可以跨越互联网任何的平台,不受编程语言和操作系统的限制,可以说它是一个拥有互联网最高级别通行证的数据携带者...
  • DTD规范XML文档

    千次阅读 2015-09-03 19:07:05
    DTD是Document Type Definition (文档类型定义)的缩写。DTD指定XML文档必须遵守一系列规则。 DTD分为外部DTD和内部DTD两种: 1)使用内部DTD格式: ]> 2)引用外部DTD格式: ... --------------- 引用...
  • XML DTD入门

    千次阅读 2006-02-22 10:05:00
    DTD实际上可以看作一个或多个XML文件的模板,这些XML文件中的元素、元素的属性、元素的排列方式/顺序、元素能够包含的内容等,都必须符合DTD中的定义。XML文件中的元素,即我们所创建的标记,是根据我们应用的实际...

空空如也

1 2 3 4 5 ... 20
收藏数 473,734
精华内容 189,493
关键字:

dtd