dtd

1DTD - XML 建立主組件羣(blocks
    <body>....</body>之類的標籤是XMLHTML文件的主組件羣(blocks)。

1.1XML文件的組件羣
    DTD來看,所有的XML文件(和HTML文件)都是由接下來的簡單組件羣組成的:Elements元素;Attributes 屬性;Entities實體;PCDATA 被解析的字符數據(Parsed Character Data);CDATA 字符數據值(Character Data)。下面是每個組件羣的簡短解釋。

1.2元素(Elements
    元素是XMLHTML文件的主組件羣(main building blocks)。HTML元素的實例是"body" "table"XML元素實例是"note" "message"。元素可以包括文本、其它元素或者空值。空值html元素的實例是"hr", "br" "img"
例如:
<body>body text in between</body>
<message>some message in between</message>

1.3屬性(Attributes
    屬性提供關於元素的額外信息(extra information about elements)。屬性總是置於元素的開始標籤裏面。屬性一般是以名稱(name/值(value這樣的形勢一對對的出現。下面的“img”元素就是關於源文件的補充信息:
<img src="computer.gif" />
   
元素名稱是“img”。屬性名稱“src”。屬性值是"computer.gif"。因爲元素自身是空值,所以它是以“/”結束的。

1.4實體(Entities
    實體是對於定義普通文件(define common text)的變量。實體參數是定義實體的參數。很多人都知道HTML實體參數:"&nbsp;"。這裏的"no-breaking-space"實體是在HTML中用來在文本中插入一個額外空間的。當XML剖析器解析文件時,實體就會得到擴展。下面(表1)的實體是在XML中預定的:

1

字符

字符實體

&

&amp;&#38;

'

&apos;&#39;

>

&gt;&#62;

<

&lt;&#60;

"

&quot;&#34;

1.5 PCDATA
    PCDATA的意思是被解析的字符數據。把字符數據當作XML元素的開始標籤與結束標籤之間的文本。剖析器會分析PCDATA文本。文本中的標籤會被當作標示的字體,實體將會擴展。

1.6 CDATA
    CDATA也是字符數據的意思。剖析器不會解析CDATA文本。文本中的標籤不會作爲標示字體,實體也將不會得到擴展。

2.元素定義
2.1元素聲明
    元素聲明語法如下:
<!ELEMENT name content>
   
其中,name是一個標準的XML標記的名字。Centent
由以下三種之一組成:
關鍵字
EMPTY
關鍵字
ANY
描述包含在本元素中的子元素的順序和重複次數的內容模型。

2.2元素內容類型(Element Content Model
    元素內容通常有五種類型:EMPTYANY#PCDATA、子元素型和混合型。


2.2.1 EMPTY類型
    EMPTY用於定義空元素,該元素只可能有屬性而不會有字符數據或子元素。其形式爲<swt/><swt></swt>。聲明空元素的語法如下:
<!ELEMENT emptyelement EMPTY>

2.2.2 ANY類型
    該元素可以包含DTD中定義的其他任何元素或已編譯的字符數據。聲明該元素的語法如下:
<!ELEMENT anyelement ANY>

2.2.3 #PCDATA類型
    不包含其它任何元素而只包含字符數據的元素,用關鍵字#PCDATA進行定義,它代表已編譯的字符數據(parsed character dataPCDATA可以包含除標記以外的一切字符,包括數字、字母和符號等。被定義爲包含PCDATA的元素不能包含任何其它子元素。示例如下:
<!ELEMENT title(#PCDATA)>

2.2.4 子元素類型
    元素可以包含一系列的子元素,子元素內容模型用於指定某個元素可以包含哪些子元素,如:
<!ELEMENT message(header,body,signature,footer)>//message元素包含四個子元素,依次是headerbodysignaturefooter元素。
    根據子元素間的關係,子元素內容模型可以有兩種可能的結構:序列和選擇。
序列。其所有子元素必須出現且僅出現一次,這種結果成爲序列。使用序列時應注意,首先,序列中不能出現
#PCDATA;其次,子元素自身還可以包含其它子元素。
選擇。元素間的選擇可以進行如下聲明:
<!ELEMENT elem(subelem1|subelem2|subelem3)>//將子元素用豎線進行分隔,表明elem元素的子元素爲subelem1subelem2subelem3三者之一,但不能同時包含其中的兩個或三個子元素。
    序列和選擇這兩種結構可以結合使用。

2.2.5 混合類型
    若某元素既包含子元素又包含已編譯的字符數據,則該元素具有混合內容。其聲明如下:
<!ELEMENT pick(#PCDATA|one|two|three)*>
   
爲避免產生錯誤,混合內容元素的聲明必須遵循這一格式。即採用單一的一組可選項,以#PCDATA開始,後面是混合內容中可能出現的子元素類型,每種只需聲明一次。除此之外,“*”
必須放在右括號之後。下面的聲明是錯誤的:
<!ELEMENT pick(one|#PCDATA|two*|three)>

2.3元素出現次數指示符(Element Occurrence Indicator見表2

2

符號

代表標記出現的次數

不出現或只出現一次

*

不出現或可出現多次

+

必須出現一次以上

無符號

只能出現一次

  

3.屬性定義
3.1
屬性聲明
   
屬性聲明的語法如下:
<!ATTLIST Element_name Attribute_name Type Defualt_value>
   
其中,ATTLIST關鍵字用來定義元素所具有的屬性,Element_name是元素名,Attribute_name是該元素所具有的屬性名,Type是屬性的類型,Defualt_value是屬性的默認值。注意:在一個給定的元素中不能有兩個屬性同名;若屬性值中含有雙撇號,則該屬性值應用單撇號括起來。如:
<job comments=’He said,”I can paint only red door” ’>Door Painter</job>

3.2 屬性類型
   
XML中共有10種屬性類型(attribute-type):(見表3

3

屬性值類別

描述

CDATA

屬性值僅僅是一般的文字。與#PCDATA元素聲明類似。

<!ATTLIST AnElem attr CDATA #REQUIRED>

Enumerated

列出該屬性的取值範圍,一次只能有一個屬性值能夠賦予屬性。

<!ATTLIST play position (center|forward|defense) ”center”>

NMTOKEN

表示屬性值只能由字母或下劃線_開始,之後是字母、數字、下劃線、短橫線或圓點,且不能含有空格。

NMTOKENS

表示屬性值能夠由多個nmtoken組成,每個nmtoken之間用空格隔開。

ID

ID類型用於標識文檔中的元素。該屬性在xml文件中是唯一的。同時,每個元素最多隻能具有一個ID類型的屬性。

<!ALLTIST author authorID ID #REQUIRED >

IDREF/ IDREFS

IDREF表示該屬性值是參考了另一個id屬性;IDREFS表示該屬性值是參考了多個id屬性,這些id屬性的值用空格隔開。

DTD定義:

<!ELEMENT bookInfo(publishers,authors,books)>

<!ELEMENT publishers(publisher+)>

<!ELEMENT publisher(pname,address)>

<!ATTLIST publisher publisherID ID #REQUIRED>

<!ELEMENT pname(#PCDATA)>

<!ELEMENT address(#PCDATA)>

<!ELEMENT authors(author+)>

<!ELEMENT author(aname,age,sex)>

<!ATTLIST author authorID ID #REQUIRED>

<!ELEMENT aname(#PCDATA)>

<!ELEMENT age(#PCDATA)>

<!ELEMENT sex(#PCDATA)>

<!ELEMENT books(book*)>

<!ELEMENT book(title,price,year)>

<!ATTLIST book publisher IDREF #REQUIRED

author IDREFS #REQUIRED>

<!ELEMENT title(#PCDATA)>

<!ELEMENT price(#PCDATA)>

<!ELEMENT year(#PCDATA)>

對應的XML文檔:

<bookInfo>

<publishers>

<publisher publisherID=”p001”>

<pname>tsinghua university press</pname>

<address>Beijing</address>

</publisher>

<publisher publisherID=”p002”>

<pname>electronic industy press</pname>

<address>Beijing</address>

</publisher>

</publishers>

<authors>

<author authorID=”a001”>

<aname>Mary</aname>

<age>34</age>

<sex>male</sex>

</author>

<author authored=”a002”>

<aname>Tom</aname>

<age>39</age>

<sex>female</sex>

</author>

</authors>

<books>

<book publisher=”p001” author=”a001 a002”>

<title>XML</title>

<price>22</price>

<year>2007</year>

</book>

</books>

</bookInfo>

ENTITY

表示該屬性的設定值是一個外部實體(entity),如一個圖片文件。

ENTITYS

該屬性值包含了多個外部entity,不同的entity之間用空格隔開。

NOTATION

屬性值是在DTD中聲明過的notation(聲明用什麼應用軟件解讀某些二進制文件,如圖片)。

<!NOTATION gif SYSTEM “GIF_Viewer”>

<!NOTATION jpg SYSTEM “JPG_Viewer”>

<!NOTATION png SYSTEM “PNG_Viewer”>

<!ELEMENT img #PCDATA>

<!ATTLIST img src CDATA #REQUIRED

NOTATIONpng|jpg|gif#REQUIRED >

//其中,type屬性的值可以爲pngjpggif之一,且每個值均與一個相應的<!NOTATION>聲明相對應。

3.3 屬性默認值
   
屬性聲明可以給屬性指定一個默認值,使得當在XML文檔中未明確地指定該屬性的值時,XML處理器會將此默認值作爲該屬性的值。屬性的默認值可用#REQUIRED#IMPLIED#FIXED和字符串定義,見表4

4

屬性內定值

描述

#REQUIRED

表示在標記中必須出現此屬性。

#IMPLIED

標記中可以不出現此屬性。即該屬性不是必須使用。

#FIXED

屬性的值是固定的某個值。

字符串

標記中如沒有指定屬性的值,那麼此字符串就是此屬性的值。

發佈了42 篇原創文章 · 獲贊 2 · 訪問量 4344
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章