码迷,mamicode.com
首页 > 其他好文 > 详细

DTD文档类型定义文件简介

时间:2015-08-13 23:39:51      阅读:503      评论:0      收藏:0      [点我收藏+]

标签:

dtd

基本概念: dtd ( document type definition  文档类型定义),该文件一般和xml文件配合使用, 主要的用处是约束 xml.

除了 dtd 技术外, 还有一个schema的技术也可以用于约束xml文件的书写规范.

现在请看一个问题:

<stu id="a&quot;0&apos;0&apos;1&lt;" >
<name>杨过</name>
<sex></sex>
<age>30</age>
<介绍>我是好人</介绍>
<面积>100平</面积>
</stu>

xml过于自由。

快速入门案例

基本语法是:

<!ELEMENT 元素名 类型>

<?xml version="1.0" encoding="utf-8"?>
<!--引入dtd去约束该xml文件-->
<!DOCTYPE 班级 SYSTEM "myClass2.dtd">
<班级>
    <学生>
        <名字>周星驰</名字>
        <年龄>23</年龄>
        <介绍>学习刻苦</介绍>
    </学生>
    <学生>
        <名字>林青霞</名字>
         <年龄>32</年龄>
        <介绍>是一个好学生</介绍>
    </学生>
</班级>
myClass2.dtd
<!ELEMENT 班级 (学生+)>
<!ELEMENT 学生 (名字,年龄,介绍)>
<!ELEMENT 名字 (#PCDATA)>
<!ELEMENT 年龄 (#PCDATA)>
<!ELEMENT 介绍 (#PCDATA)>

完成校验的html编写

<html>
<head>
<!--自己编写一个简单的解析工具,去解析xml dtd 是否配套-->
<script language="javascript">
<!--
    var xmldoc = new ActiveXObject("Microsoft.XMLDOM");
    xmldoc.validateOnParse = "true";//开启校验
    xmldoc.load("myClass2.xml");//指定校验哪个xml文件
    document.writeln("错误信息是:"+xmldoc.parseError.reason+"<br/>");  
    document.writeln("错误的行是:"+xmldoc.parseError.line);

//-->
</script>
</head>
<body>
</body>
</html>

dtd的细节

(1)    dtd 的分类

内部 dtd

外部 dtd

内部DTD文档:  <!DOCTYPE 根元素  [定义内容]>

外部DTD文档:  <!DOCTYPE 根元素  SYSTEM "DTD文件路径">

(2) 在xml中引入dtd 有两种方法

  1. 引入本地 dtd

<!DOCTYPE 根元素 SYSTEM ‘地址’>

  1. 引入公共的 dtd

<!DOCTYPE 根元素 PUBLIC  ‘地址’>

 (2)<!ELEMENT 元素名 类型>

类型:EMPTY, ANY , #PCDATA

(3) dtd的修饰符

技术分享

(4) 属性的细节

 基本语法

<!ATTLIST 元素名

属性名 类型  特点

.....

> 

l 类型有 五种:

CDATA   表示可以放入文本

ID          表示属性的值,不能重复,同时不要用数字开头.

IDREF/IDREFS    当一个元素的属性值,需要去引用另外一个ID ,则使用IDREF,如果希望引用多个,则使用IDREFS,请用空格隔开.

Enumerated     表示属性的值,只能是例举出了 比如

<!ATTLIST 学生

   地址 CDATA #FIXED "北京"

   学号 ID #REQUIRED

   大哥 IDREFS #REQUIRED

   性别 (男|女) #REQUIRED

> 

ENTITY  后面再说

 属性的特点有四种

#REQUIRED  表示必须有

#IMPLIED 表示可以有

#FIXED “值” 表示如果有,则必须是什么

Default “值” 表示如果不指定,则默认.

 实体(ENTITY)

 就是实体用于为一段内容创建一个别名,以后在XML文档中就可以使用别名引用这段内容了

java :

String str=”你好”;

定义str,在别的地方,我们使用str就可以访问到  ‘你好’

(1)  分类

   1,引用实体

案例

在 dtd 中定义:

<!ENTITY mycopy "我的公司版权">

说明:最好把定义放在dtd的最后

在xml中使用

&mycopy;

  2,参数实体

 基本语法

<!ENTITY  %  实体名字 ”实体内容”>

引用

%实体名字;

举例:

<!ELEMENT 班级 (学生*)>

<!ENTITY % myname "名字">

<!ELEMENT 学生 (%myname;,介绍,年龄)>

<!ATTLIST 学生

   地址 CDATA #FIXED "北京"

   学号 ID #REQUIRED

   大哥 IDREFS #REQUIRED

   性别 (男|女) #REQUIRED

> 

<!ELEMENT %myname; (#PCDATA)>

<!ELEMENT 年龄 (#PCDATA)>

<!ELEMENT 介绍  (#PCDATA)>

<!ENTITY mycopy "我的公司版权">

 

学习dtd的目标:一般公司很少让程序员自己写 dtd,要求程序员看的懂dtd,同时可以根据给出的dtd,写出对应的xml

实际案例: 

一个产品目录

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)>

xml编写案例:

<?xml version="1.0" encoding="utf-8"?>

<!DOCTYPE CATALOG SYSTEM ‘product.dtd‘>

<CATALOG>

<PRODUCT NAME="康师傅矿泉水" CATEGORY="HandTool" PARTNUM="abc" PLANT="Milwaukee"   INVENTORY="Backordered">

<SPECIFICATIONS WEIGHT="800" POWER="600" >这里是细节</SPECIFICATIONS>

<PRICE>110</PRICE>

</PRODUCT>

</CATALOG> 

CDATA 的意思是字符数据(character data)

PCDATA 的意思是被解析的字符数据(parsed character data)。

PDATA 是会被解析器解析的文本。这些文本将被解析器检查实体以及标记。

DTD文档类型定义文件简介

标签:

原文地址:http://www.cnblogs.com/malinghan/p/4728763.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!