学习java&XML第二天熟悉一下DTD

学习java&XML第二天熟悉一下DTD

DTD(Document Type Definition)文件类型描述

第一点要注意的: DTD中的关键字必须全部大写!

一、DTD的位置
      
DTD可以放在xml文档里面:

出自《XML入门》
<? xml version = "1.0" encoding="GB2312" standalone = "yes" ?>
<! DOCTYPE 联系人列表[
        <!ELEMENT 联系人列表 (联系人)*
>
        
<! ELEMENT 联系人 (姓名,ID,公司,EMAIL,电话,地址) >
        
<! ELEMENT 地址 (街道,城市,省份) >
        
<! ELEMENT 姓名 (#PCDATA) >
        
<! ELEMENT ID (#PCDATA) >
        
<! ELEMENT 公司 (#PCDATA) >
        
<! ELEMENT EMAIL (#PCDATA) >
        
<! ELEMENT 电话 (#PCDATA) >
        
<! ELEMENT 街道 (#PCDATA) >
        
<! ELEMENT 城市 (#PCDATA) >
        
<! ELEMENT 省份 (#PCDATA) >
    ]>
< 联系人列表 >
...................................

放在里面的时候,应该注意“standalone = "yes"”
也可以放在外面,放在外面有两种形式,一种是引用本地文件,如:

<? xml version = "1.0" encoding="GB2312" standalone = "no" ?>
<! DOCTYPE 联系人列表 SYSTEM "fclml.dtd" >
< 联系人列表 >  
..................

引用的格式是:<!DOCTYPE 根元素名 SYSTEM "外部DTD文件的URL">
另外一种是引用公共的文档定义,如:
<! DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.1//EN" "http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd" >
格式为:<!DOCTYPE 根元素 PUBLIC "DTD名称" "外部DTD的URL">
其中DTD名称解释为:
这个DTD标识的命名规则和XML文件的命名规则稍有不同。具体地说,DTD名称只能包含字母、数字、空格和下面的符号: _%$#@()+:=/!*;?。同时,DTD名称还必须符合一些标准的规定。例如,ISO标准的DTD以“ISO”三个字母开头;被改进的非ISO标准的DTD以加号“+”开头;未被改进的非ISO标准的DTD以减号“-”开头。
所以说struts的配置文件就是“未被改进的非ISO标准的DTD文档”

二、DTD的内容
DTD文档的内容总结下来有几个比较重要也比较常用的:参数实体定义、元素定义和属性定义
1、参数实体定义
   实体实际上在XML当中充当宏定义或者别名之类的意思,也可以理解成public static String......
   参数实体是专门用在DTD当中的,你可以在下面两项元素定义和属性定义中引用参数实体。
   其定义方式如下:
   <!ENTITY % 实体名 "实体内容"> 注意,在XML中的实体定义是没有%的
   或者是:
   <!ENTITY % 实体名 SYSTEM "外部文件名">
   引用方式:
   %实体名
    例子:
   <!ENTITY % Boolean "(true|false|yes|no)">表示定义了一个Boolean 的参数实体,值是"(true|false|yes|no)"
   在struts的配置文件的DTD中有如下描述:
   <!ATTLIST form-bean      dynamic        %Boolean;       #IMPLIED>
   也就定义了form-bean这个元素的dynamic属性可以取得值是true、false、yes、no其中之一。

2、元素定义
   用来定义元素的格式以及元素的子孙等。
   定义形式:    
   <!ELEMENT 元素名 元素内容描述>
   元素定义这里由于篇幅有限,仅列几个例子
      1、<!ELEMENT 联系人列表 ANY>表示联系人列表这个元素的格式及其子孙都不受限制。
      2、<!ELEMENT 姓名(#PCDATA)>表示姓名这个元素只能包含文本数据
      3、<!ELEMENT 联系人(姓名 EMAIL)>表示联系人这个元素只能包含姓名和EMAIL两种子孙,顺序不限,并且姓名只能由一个,EMAIL也只能由一个。
      4、<!ELEMENT 联系人(姓名,EMAIL)>表示联系人这个元素只能包含姓名和EMAIL两种子孙,有顺序的限制,并且姓名只能由一个,EMAIL也只能由一个。
      5、<!ELEMENT 联系人(姓名,EMAIL +)>表示联系人必须有且仅有一个姓名子孙,有一个到多个EMAIL子孙,其中,如果 +换作 * ,则表示零个或者多个。
      6、<!ELEMENT 联系人(姓名,EMAIL)+>表示联系人有一组到多组子孙,每组中有且仅有一对姓名和EMAIL
      7、<!ELEMENT 联系人(姓名,(电话 |EMAIL))>表示联系人有一组到多组子孙,每组中第一个元素一定是姓名,第二个元素要么是电话,要么是EMAIL,两者选一个。
      8、<!ELEMENT 联系人 EMPTY>联系人这个元素不包含任何子孙,也不包含文本。

3、属性定义
      格式:
<!ATTLIST 元素名 (属性名 属性类型 缺省值)*>
       例子:
      
1、<!ATTLIST 页面作者
        姓名 #CDATA #IMPLIED
        年龄 #CDATA #IMPLIED
        联系信息 #CDATA #REQUIRED
        网站职务 #CDATA #FIXED "页面作者"
        个人爱好 #CDATA "上网">
      其中,定义了页面作者这个元素的属性可以有“姓名”,“年龄”,“联系信息”,“网站职务”和“个人爱好”
      并且,姓名和年龄是纯文本,可以没有,联系信息必须有,网站职务一定是“页面作者”,个人爱好如果不填,则默认是上网。

      2、<!ATTLIST 肉 类型( 鸡肉 | 牛肉 | 猪肉 | 鱼肉 ) "鸡肉">元素肉可以有“类型”属性,类型属性可以选择 鸡肉 | 牛肉 | 猪肉 | 鱼肉其中一个,默认是“鸡肉”
      3、<!ATTLIST 联系人 编号 ID #REQUIRED>联系人元素有且必须有编号属性,其类型是ID型的,ID型或者是IDREF型的属性值必须是一个有效的XML名称,它由字母、数字或下划线开始,名字中不能出现空白符。类似Html中的ID。
      4、另外类型NMTOKEN和NMTOKENS还有NOTATION类型我还不是太明白,那位明白的不妨给出^_^。

你可能感兴趣的:(学习java&XML第二天熟悉一下DTD)