xml-DOCTYEP

DTD是什么?Document Type Definition——文档类型定义。

在做自定义标签的时候,写标签库定义文件tld时,要写一大段东东:<!DOCTYPE ...... >。当时只知道拷贝、粘贴,也没有去想这是什么东西。今天才知道,这玩意儿叫DTD。是为了规范xml文档元素编写的。

DTD的语法规定,DTD的所有关键字都是大写的,如DOCTYPE,ELEMENT等,它分为两种。

1、内部DTD。注意的是在元素名后面一定要有空格,否则就不是格式良好的
<!DOCTYPE 根元素名 [
   <!ELEMENT 元素名 (元素类型定义)>
]>

如对下面这个xml文档的类型定义:
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE poem [
  <!ELEMENT poem (title,author,line+)>
  <!ELEMENT title (#PCDATA)>
  <!ELEMENT author (#PCDATA)>
  <!ELEMENT line (#PCDATA)>

]>
<poem>
 <title>静夜思</title>
 <author>李白</author>
 <line>床前明月光,</line>
 <line>疑事地上霜.</line>
 <line>举头望明月,</line>
 <line>低头思故乡.</line>
</poem>

2、外部DTD
如果吧DTD放在xml文档内部,一方面会带来xml文档变大,一些程序可能不需要DTD信息;另一方面不利于DTD共用,也许会有不同的xml文档共用这个DTD。这就是外部DTD存在的原因。

定义外部DTD的语法:
<!DOCTYPE  根元素名 SYSTEM "外部DTD文件的URI">(SYSTEM表示DTD文件是私有的。引号不能少)
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<?xml-stylesheet href="simple1.css" type="text/css" ?>
<!-- 外部DTD -->
<!DOCTYPE poem SYSTEM "poem.dtd">

<poem>
 <title>静夜思</title>
 <author>李白</author>
 <line>床前明月光,</line>
 <line>疑事地上霜.</line>
 <line>举头望明月,</line>
 <line>低头思故乡.</line>
 <commet>李白是中国最伟大的诗人!</commet>
</poem>
-----------------------------相同目录下的poem.dtd内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<!ELEMENT poem (title,author,line+,commet)>
<!ELEMENT title (#PCDATA)>
<!ELEMENT author (#PCDATA)>
<!ELEMENT line (#PCDATA)>
<!ELEMENT commet  (#PCDATA)>

如果想引用一个公共的DTD文档,又该如何呢?
<!DOCTYPE  根元素名 PUBLIC "DTD的名称" "外部DTD文件的URI">(PUBLIC表示DTD文件是公共的,注意在PUBLIC之后,还多了一个DTD的名称。引号不能少)
下面是taglib的DTD:
<!DOCTYPE taglib PUBLIC
"-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"
    "
http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">
分析一下这个外部DTD声明:
1、关键字DOCTYPE,PUBLIC。
2、根元素名:taglib。所以每一个标签库定义文件都是以taglib为根元素的,否则就不会验证通过。
3、紫色的字
"-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN",这是公共DTD的名称。这个东西命名是有些讲究的。首先它是以"-"开头的,表示这个DTD不是一个标准组织制定的。(如果是ISO标准化组织批准的,以“ISO”开头,如果不是ISO的标准化组织批准的,以“+”开头。)。接着就是双斜杠“//”,跟着的是DTD所有者的名字,很明显这个DTD是sun公司定的。接着又是双斜杠“//”,然后跟着的是DTD描述的文档类型,可以看出这份DTD描述的是jsp 标签库1.2版本的格式。再跟着的就是“//”和ISO 639语言标识符。
4、绿色的字"
http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd",表示这个DTD的位置。
疑问:是不是xml分析器都会到java.sun.com上去找这个dtd呢?答案是否定的,xml分析器首先会以某种机制查找公共DTD的名称,查到了,则以此为标准,如果查不到,再到DTD位置上去找。

最后定义一个自己的DTD:
<!DOCTYPE family "-//songzenghui//DTD family 1.0//ZH" "http://net.vicp.songzenghui/dtd/family.dtd"
>

 
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值