2017-06-02 26 views
3

我有這樣的XML文檔:的標記聲明包含或指向文檔類型聲明必須得到很好的形成

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE catalog SYSTEM "plantdtd.dtd"> 
<catalog> 
<title>Flowers of the week</title> 
<plant id="A1"> 
    <name>Aloe vera</name> 
    <climate>tropical</climate> 
    <height>60-100cm</height> 
    <usage>medicinal</usage> 
    <image>aloevera.jpg</image> 
</plant> 
<plant id="A2"> 
    <name>Orchidaceae</name> 
    <height>8-12in</height> 
    <usage>medicinal</usage> 
    <usage>decoration</usage> 
    <image>Orchidaceae.jpg</image> 
</plant> 
</catalog> 

我寫了一個DTD這樣的:

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


<!DOCTYPE catalog SYSTEM "file:/home/p10398/plantdtd.dtd" 
[ 
<!ELEMENT catalog(title,plant+)> 
<!ELEMENT title(#PCDATA)> 
<!ELEMENT plant(name,climate,height,usage,image)+> 
<!ELEMENT name(#PCDATA)> 
<!ELEMENT climate(#PCDATA)> 
<!ELEMENT height(#PCDATA)> 
<!ELEMENT usage(#PCDATA)> 
<!ELEMENT image(#PCDATA)> 
]> 

蔭得到這個錯誤:

致命錯誤: 公共ID:null 系統ID:file:/home/p14524/plantdtd.dtd 行號:4 列號:3 消息:文檔類型 聲明中包含或指向的標記聲明必須格式良好。

有人能解釋whay蔭收到此錯誤?或正確的DTD?

編輯和更新: 啊!謝謝丹尼爾。 現在前面的錯誤消失了。 我的新DTD是

<!ELEMENT catalog (title,plant+)> 
<!ELEMENT title (#PCDATA)> 
<!ELEMENT plant (name,climate,height,usage,image)> 
<!ELEMENT name (#PCDATA)> 
<!ELEMENT climate (#PCDATA)> 
<!ELEMENT height (#PCDATA)> 
<!ELEMENT usage (#PCDATA)> 
<!ELEMENT image (#PCDATA)> 

<!ATTLIST plant id ID #REQUIRED> 

蔭得到這個新的錯誤:

行號:18 列編號:9 消息:的元素類型 「植物」 必須匹配「的內容(姓名,氣候,高度,使用,圖像)」。

回答

1

您需要從DTD刪除DOCTYPE。聲明中的元素名稱後面還應該有空格。

新DTD

<!ELEMENT catalog (title,plant+)> 
<!ELEMENT title (#PCDATA)> 
<!ELEMENT plant (name,climate,height,usage,image)+> 
<!ELEMENT name (#PCDATA)> 
<!ELEMENT climate (#PCDATA)> 
<!ELEMENT height (#PCDATA)> 
<!ELEMENT usage (#PCDATA)> 
<!ELEMENT image (#PCDATA)> 

現在,DTD是有效的,你會驗證XML時看到了一些錯誤。

首先是您需要聲明plant元素的id屬性。我建議<!ATTLIST plant id ID #REQUIRED>

第二是climate從第二plant失蹤。我不確定這是XML錯誤還是DTD錯誤。 plant的元素聲明並沒有太多意義,儘管因爲它是這些順序中的5個元素的一次或多次。如果您需要幫助,請描述plant應包含哪些內容,並且我可以幫助您編寫正確的聲明。

+0

你能否檢查我的問題和回答的最新更新。 –

+0

@RaviRishie - 那個錯誤就是我在我的答案的最後一段所談論的。你的第二個'植物'不符合'(名稱,氣候,高度,用法,圖像)',因爲它沒有'climate'元素。那個元素應該是可選的嗎?我也看到它現在有兩個'usage'元素。也許你更願意使用'<!ELEMENT植物(名字,氣候?,高度?,用法*,圖像*)>'或什麼? –

+1

謝謝兄弟!它的工作很好提到在這裏發生 –