2013-04-08 90 views
3

我是自學XML,這是我寫的第一個DTD。以下是DTD後面的XML數據。我對DTD的理解是否正確?

<?xml version="1.0" encoding="unicode" ?> 
<!DOCTYPE people SYSTEM "validator.dtd"> 

<people> 
    <student> 
     <name>John</name> 
     <course>Computer Technology</course> 
     <semester>6</semester> 
     <scheme>E</scheme> 
    </student> 

    <student> 
     <name>Foo</name> 
     <course>Industrial Electronics</course> 
     <semester>6</semester> 
     <scheme>E</scheme> 
    </student> 
</people> 

和DTD

<!ELEMENT people (student)*> 
<!ELEMENT student (name,course,semester,scheme)> 
<!ELEMENT name (#PCDATA)> 
<!ELEMENT course (#PCDATA)> 
<!ELEMENT semester (#PCDATA)> 
<!ELEMENT scheme (#PCDATA)> 

這裏是我的DTD的理解爲止。
我有一個名爲people的根,裏面有student。現在,因爲我有*,那麼我可以在裏面有zero or more的學生。但我想它應該更改爲+(一個或多個),因爲它更有意義?

裏面student是名稱,課程學期和計劃。當我在結束括號後忽略任何符號時,這意味着每個標籤只能在學生標籤內出現一次。這意味着學生不能有超過一個名稱,超過一個學期等

最後,名稱,課程,學期和計劃有#PCDATA這意味着數據將被其他人解析和不排除符號這裏有所作爲?

+2

「unicode」不是有效的編碼名稱。使用實際編碼的名稱,如「UTF-8」。 – mzjn 2013-04-08 20:01:39

回答

1

你說:

當我在右括號後留出的任何符號則 意味着每個標籤都可以在學生 標籤內只出現一次。

我只會補充說,每個標籤必須出現一次;除非您有?*,否則它們不是可選的。此外,它們必須以該順序出現(因爲您使用了,)。

#PCDATA表示解析字符數據,它基本上是解析器將解析的文本。例如,文本「Sample &text;」將被解析,並且&text;實體引用將被解析。

對於#PCDATA,您確實需要符號(發生指示符)的唯一時間是混合內容(文本和元素)。它也必須是*

<!ELEMENT elem (#PCDATA|anotherElem)*> 
相關問題