0

我正在尝试学习 XML 和 DTD,我刚刚浏览了 W3c 的 DTD 教程,并尝试使用 DTD 在 XML 中实现一个配方场景,这就是在 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 中缺少 open quot,无法理解有什么问题,请帮忙。

谢谢

这是 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 成分:

<?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")>
4

2 回答 2

1

您有一个 ENTITY 声明RECIPE,但它看起来应该是一个 ELEMENT 声明(基于模型和 RECIPE 的 ATTLIST):

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

NAMEENTITY 声明看起来确实应该是一个 ENTITY,但您需要删除括号:

<!ENTITY NAME "Baking Powder Biscuits">

此外,如果两个指向 .dtd 文件的 ENTITY 声明实际上包含附加声明,则它们应该是参数实体:

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

%INGREDIENTS;您可以使用and引用它们%INSTRUCTIONS;

RECIPE 的 ATTLIST 也不正确。对于固定值,试试这个:

<!ATTLIST RECIPE UNITS CDATA #FIXED "16 BISCUITS">
于 2013-09-22T03:37:00.450 回答
1

您的文档类型定义文件不是 XML 文档实例;它们不应以 XML 声明开头。从其中删除 XML 声明后,您将遇到 Daniel Haley 指出的问题。

于 2013-09-26T19:29:13.467 回答