xml(2)

来源:互联网 发布:心知天气~查气压 编辑:程序博客网 时间:2024/05/18 02:45
 

Xml(2)

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

       DTD是XML文件的验证机制,定义好DTD,就可以使用XML解析器对编写好的XML文档进行DTD检查,判断XML文档内容是否为有效的XML文档内容。

二.使用DTD的好处

用DTD提供统一格式。

用DTD验证数据有效性

根据DTD编写文档样式单

三.导入DTD

Ø       内部DTD

<? xml version=”1.0” encoding=”GB2312” standalone=”yes” ?>

<! DOCTYPE 根元素名称 [

   <! ELEMENT  子元素名称 (#PDATA)>

]>

 

Ø       外部DTD

<!DOCTYPE  根元素名  SYSTEM " DTD-URL ">

<!DOCTYPE  Book  SYSTEM  “http://www.crazyit.org/dtd/book.dtd”>

 

Ø       公用DTD

<!DOCTYPE  根元素名  PUBLIC  " DTD-NAME “  “DTD-URL”>

四DTD对元素的声明

1.       格式

<!ELEMENT    元素名   元素内容>

Ø       元素声明以“<!”开始,以“>”结束

Ø       元素声明指令“ELEMENT”为关键字,必须大写

Ø       元素名:为当前元素指定的元素名称

Ø       元素内容: 元素名后面的内容用来指定元素的内容类型,它可以分为EMPTY(空)、子元素类型,混合型、ANY(任意)和#PCDATA 5种类型。

空元素型:<!ELEMENT     元素名     EMPTY>

任意元素型:<!ELEMENT   元素名   ANY>

字符串型:<!ELEMENT   元素名   #PCDATA>

混合内容元素:<!ELEMENT 父元素名 (#PCDATA|子元素1|子元素2|子元素3…..)*>

注意:

Ø       #PCDATA必须放在最前面

Ø       #PCDATA和各子元素之间只能用竖线(|)分割

Ø       子元素1,子元素2和子元素3之间的竖线(|)并不是表示互斥,而只是表  示这些元素能无序的重复出现,而且次数不受限制

Ø       不要试图在各个子元素之后添加?,*。+等表示频率的修饰符

五DTD对属性的声明

<! ATTLIST 元素名 属性名 属性类型  [属性限定条件] [默认值]>

对属性的限定条件

v      #REQUIRED: 必须的属性,意味着必须为该元素提供该属性

 

v      #IMPLIED: 该属性是可有可无的

 

v      #FIXED: 该属性的值是固定的,定义是必须制定固定值。使用该元素时无需为其分配该属性,XML处理器会自动为给属性增加固定值

七.定义属性的类型

属性类型

含义

CDATA

值为字符串数据

(en1|en2|..)

此值是枚举列表中的一个值

ID

该属性值必须是有效地标识符,在XML文档时唯一的

IDREF

值为另外一个元素的 id属性值

IDREFS

值必须引用自多个已经有的ID属性值,多个ID属性值用空格隔开

NMTOKEN

值为合法的 XML 名称

NMTOKENS

值为多个合法的 XML 名称的列表

ENTITY

值是一个外部实体,如图片支持

ENTITIES

值是一个实体列表,多个实体之间以空格隔开

NOTATION

该属性值是在DTD中声明过的符号,这个是过期的,不要使用

八.字符类型

CDATA   是简单的纯文本字符类型,是最常用的类型,将简单的文本用做属性值。可以包括任何字符串,但不允许使用“<”,“>”,“&”,“””,“‘”。如果需要使用必须使用实体引用。属性值和元素内容都可以是文本类型,但是定义的方法不同

<! ATTLIST  Student  name CDATA   #REQUIRED>

九.枚举类型

<?xml version="1.0" encoding="GB2312"?>

<!ELEMENT 购物车 (肉* , 水果*)>

<!ELEMENT 肉 EMPTY>

<!ELEMENT 水果 EMPTY>

<!ATTLIST 肉 类型 (鸡肉|牛肉|猪肉|鱼肉) #REQUIRED>

<!ATTLIST 水果 类型 (苹果|梨|桔子) #REQUIRED>

<?xml version="1.0" encoding="GB2312"?>

<!DOCTYPE 购物车 SYSTEM "enumerated.dtd">

<购物车>

            <肉 类型="猪肉"/>

            <肉 类型="鸡肉"/>

            <水果 类型="苹果"/>

            <水果 类型="梨"/>

</购物车>

十.ID、IDREF、IDREFS类型

1.ID类型

<?xml version="1.0" encoding="GB2312"?>

<!ELEMENT beans (bean|object)*>

<!ELEMENT bean (property*)>

<!ELEMENT object EMPTY>

<!ELEMENT property EMPTY>

<!ATTLIST bean id ID #REQUIRED>

<!ATTLIST object id ID #REQUIRED>

<!ATTLIST property name CDATA #REQUIRED>

<!ATTLIST property ref IDREF #IMPLIED>

<!ATTLIST property set IDREFS #IMPLIED>

 

<?xml version="1.0" encoding="GB2312"?>

<!DOCTYPE beans SYSTEM "idandidref.dtd">

<beans>

         <bean id="chin"/>

            <object id="cat"/>

            <object id="_jerfied-cat"/>

            <bean id="foo">

              <property ref="chin" name="man"/>

            </bean>

            <bean id="bar">

              <property set="cat _jerfied-cat" name="pet"/>

            </bean>

</beans>

十一。实体的定义

所谓实体引用就是用一个字符串代替另一个字

符串。定义实体有如下作用:

Ø       提高代码的服用,方便修改,维护XML文档

Ø       使用某些特殊的符号,这些特殊的符号可能会使XML解析器混淆

Ø       减少字符输入量,如果某个字符串特别长,而且需要经常使用,则可以定义为实体

1.       普通实体定义

普通实体是在XML文档里使用的实体,语法如下

<! ENTITY    实体名     “实体值”>

   使用实体的语法如下:

&实体名;

2.       参数实体

<! ENTITY    % 实体名     “实体值”>

%实体名;

3.       外部普通实体

<! ENTITY    实体名  SYSTEM  “实体值所在文件的URI”>

<! ENTITY   实体名  PUBLIC “公用实体标识名”  “实体值所在文件的URI”>