2013-09-21 60 views
0

我想學習XML和DTD,我只是通過W3C教程去了DTD,並試圖實現使用DTD在XML配方的情況下,這是DTD文件中寫道:DTD不會驗證

<?xml version="1.0" encoding="UTF-8"?> 
<!ENTITY RECIPE (NAME,INGREDIENTS,INSTRUCTIONS) > 
<!ENTITY NAME ("Baking Powder Biscuits") > 
<!ENTITY INGREDIENTS SYSTEM "Ingredients.dtd" > 
<!ENTITY INSTRUCTIONS SYSTEM "Instructions.dtd" > 

<!ATTLIST RECIPE UNITS "16 BISCUITS" #FIXED> 

當我嘗試驗證時,解析給了我第2行中的一個錯誤,說明在decl中打開「缺少的內容」,不能解釋爲什麼錯誤,請幫助。

感謝

這是xml文件 '祕方':

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE RECIPE SYSTEM "recipe.dtd"> 

這是配方DTD

<?xml version="1.0" encoding="UTF-8"?> 
<!ENTITY RECIPE NAME INGREDIENTS,INSTRUCTIONS> 
<!ENTITY NAME "Baking Powder Biscuits" > 
<!ENTITY % INGREDIENTS SYSTEM "Ingredients.dtd" > 
<!ENTITY % INSTRUCTIONS SYSTEM "Instructions.dtd" > 

<!ATTLIST RECIPE UNITS CDATA #FIXED "16 BISCUITS" > 

這是其他DTD ingreduents:

<?xml version="1.0" encoding="UTF-8"?> 
<!ENTITY INGREDIENTS ("2 cups flour","1 tablespoon sugar", "1/2 teaspoon salt", "1/2 cup vegetable shortening", "4 teaspoon baking powder", "2/3 cup milk")> 

回答

1

你有0123的ENTITY聲明,但它看起來像它應該是一個元素聲明(基於模型和食譜ATTLIST):

<!ELEMENT RECIPE (NAME,INGREDIENTS,INSTRUCTIONS) > 

NAME實體的聲明看起來真的應該是一個實體,但你需要刪除括號:

<!ENTITY NAME "Baking Powder Biscuits"> 

另外,兩個實體聲明指向的.dtd文件應該parameter entities如果他們實際上包含附加聲明:

<!ENTITY % INGREDIENTS SYSTEM "Ingredients.dtd" > 
<!ENTITY % INSTRUCTIONS SYSTEM "Instructions.dtd" > 

您可以參考%INGREDIENTS;%INSTRUCTIONS;

RECIPE的ATTLIST也是不正確的。對於固定值,請嘗試以下操作:

<!ATTLIST RECIPE UNITS CDATA #FIXED "16 BISCUITS"> 
+0

沒有didn; t幫助:( – Snedden27

+0

@ Snedden27 - 沒有任何東西(錯誤)改變? –

+0

不,我試過你的步驟,也完全刪除了參考,但仍然有錯誤,BTW我正在使用氧氣編輯器進行驗證 – Snedden27

1

您的文檔類型定義文件不是XML文檔實例;他們不應該從XML聲明開始。一旦你從他們那裏刪除XML聲明,你就會遇到Daniel Haley發現的問題。

+0

XML聲明的好處。 –