引进外部DTD方式Q?/strong>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE OrganizationChart SYSTEM "dtdTest.dtd" >
<OrganizationChart>
<Name>TooneQINC.</Name>
<Office>zhuhai</Office>
</OrganizationChart>
对应DTD内容为:(x)
<?xml version="1.0" encoding="UTF-8"?>
<!ELEMENT OrganizationChart (Name,Office)>
<!ELEMENT Name (#PCDATA)>
<!ELEMENT Office (#PCDATA)>
在文档类型声明时Q用间质SYSTEM或PUBLIC来指出外部DTD文g的位|,使用SYSTEM关键字的声明语法如下Q?br />
<!DOCTYPE 根元素的名字 SYSTEM "外部DTD文g的URI">
SYSTEM关键字表C文档用的是私有的DTD文gQ?#8220;外部DTD文g的URI”可以是相对URI或者绝对URI。例如上面的例子使用的就是相对URIQ?br />
<!DOCTYPE OrganizationChart SYSTEM "dtdTest.dtd" >
使用PUBLIC关键字的声明语法如下Q?br />
<!DOCTYPE 根元素的名字 PUBLIC "DTD的名? "外部DTD文g的URI">
PUBLIC关键字用于声明公qDTDQƈ且这个DTDq有一个名Uͼ"DTD的名U?也称为公共标识符(public identifier)。这个DTD可以存放在某个公q地方QXML处理E序?x)根据名U按照某U方式去(g)索DTDQ如果XML处理器不能根据名U检索到DTDQ就?x)?外部DTD文g的URI"来查找该DTD。例如Java web开发的web.xml中的DTD声明Q版本不同会(x)E有不同Q我们只x它的l构Q:(x)
<!DOCTYPE web-app PUBLIC '-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN'
'http://java.sun.com/dtd/web-app_2_3.dtd'>
DTD名称与XML名称略有不同Q他们只能包含ASCII字母和数字符受空根{回车符、换行符和一些标点符P(x)-'()+,/:=?;!#@*$_%.
公共DTD名称要遵守一些约定。如果一DTD是ISO标准Q它的名U要以字W串"ISO"开始。如果是一个非ISO的标准组l批准的DTDQ它的名字以加号Q+Q开始。如果不是标准组l批准的DTDQ它的名UCq字W(Q)(j)开始。这些开始字W或字符串后接双斜杠Q?/Q和DTD所有者的名字Q比如上面例子的Sun MicrosystemsQInc.Q,之后是另一个双斜杠和DTD描述的文档类型,接着优势一个双斜杠后接ISO 639语言标识W,如EN表示pQZH表示中文。例如:(x)
<!DOCTYPE OrganizationChart PUBLIC "-//Jason Chen//DTD organization chart 1.0//ZH" "dtdTest.dtd">
在上一章我们提刎ͼ如果我们的文档不依赖于外部文档,在XML声明中,可以通过standalone="yes"来声明这个文档是独立的文档。如果文档依赖于外部文档Q可以通过standalone="no"来声明。当我们使用外部DTD文gӞ需要将属性standalone的D|ؓ(f)"no"?br />
在实际应用中Q很用standalone属性,它的主要用途是作ؓ(f)XML处理器行业其他应用程序的标志Q表C是否需要获取外部内宏V如果文档依赖于外部文档Q即使我们不使用standalone属?XML处理器也能很好地q行处理?br />
DTD的结构:(x)
DTD的结构一般由以下四种声明构成Q?br />
1、元素类型声?br />
2、属性列表声?br />
3、实体声?br />
4、记号声?br />
一个典型的文档cd定义文g?x)吧所要创建的XML文档的元素结构、属性类型、实体引用等预先q行定义?br />
下面分别介绍q四U声明?br />
1、元素类型声明:(x)
一个DTD不仅要告诉XML处理器它所对应的文档根元素Q而且q要告知处理器,文档的内容和l构Q描q清楚文档结构中的每一个细节?br />
元素cd声明不但说明?jin)每一个文档中可能存在的元素,l出?jin)元素的名称Q而且l出?jin)元素的具体cd?br />
一个XML元素可以为空Q也可以只包含字W数据,q可以有若干个子元素Q而这些子元素同时又可以拥有它们的子元素?br />
元素cd声明采用如下的语法格式:(x)
<!ELEMENT 元素名称 元素内容说明>
元素内容说明可以指明五种可能的元素内容Ş式:(x)QPCDATA、子元素、合内宏VEMPTY和ANY?br />
下面详细说明每一U元素内容说明?br />
#PCDATA:
关键?PCDATA说明元素包含字符数据?br />
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE OrganizationChart [
<!ELEMENT OrganizationChart (Name,Office)>
<!ELEMENT Name (#PCDATA)>
<!ELEMENT Office (#PCDATA)>
]>
<OrganizationChart>
<Name>TooneQINC.</Name>
<Office>ZhuHai</Office>
</OrganizationChart>
子元素:(x)
当一个元素只包含子元素,而没有字W数据时Q则U此元素cdh元素型内容(element contentQ?br />
在该cd的元素声明时Q通过内容模型来指定在其内容上的约束。内Ҏ(gu)型是军_子元素类型和子元素出现顺序的一U简单语法?br />