DTD 和 XML 示例
DTD and XML examples
这是我的 DTD 规则应该有以下 属性:
书有标题、发行年份、一位或多位作者、一个或多个评级 (0-5)、任意数量的评论。
<!ELEMENT books (book+)>
<!ELEMENT book (title, author+,year,rating+,review*)>
<!ELEMENT title (#PCDATA)>
<!ELEMENT author (#PCDATA)>
<!ELEMENT year (#PCDATA)>
<!ELEMENT rating (0|1|2|3|4|5)>
<!ELEMENT review (#PCDATA)>
这是我的例子XML:
<?xml version="1.0" standalone="no" ?>
<!DOCTYPE books SYSTEM "books.dtd">
<books>
<book>
<title>book1</title>
<author>bob</author>
<year>2000</year>
<rating>2</rating>
<rating>3</rating>
</book>
<book>
<title>book2</title>
<author>alice</author>
<year>2001</year>
<rating>4</rating>
<rating>5</rating>
</book>
<book>
<title>book3</title>
<author>john</author>
<year>2002</year>
<rating>5</rating>
<rating>0</rating>
<review>not bad</review>
</book>
</books>
但我总是收到此错误 。
<!ELEMENT rating (0|1|2|3|4|5)>
在 DTD 中和关于您的 XML 是不正确的。这意味着您希望评分元素包含名为“0”(<0>
)或“1”、“2”等的元素。很遗憾,标签名称不能以数字开头。
要实现你想做的事情通常是用一个属性来完成的。将 rating 元素声明为空,并在列表中的值中选择一个属性,如下所示:
<!ELEMENT rating EMPTY>
<!ATTLIST rating
rank (0|1|2|3|4|5) #REQUIRED >
您的 XML 实例将变为:
<?xml version="1.0" standalone="no" ?>
<!DOCTYPE books SYSTEM "books.dtd">
<books>
<book>
<title>book1</title>
<author>bob</author>
<year>2000</year>
<rating rank="2" />
<rating rank="3" />
</book>
<book>
<title>book2</title>
<author>alice</author>
<year>2001</year>
<rating rank="4" />
<rating rank="5" />
</book>
<book>
<title>book3</title>
<author>john</author>
<year>2002</year>
<rating rank="5 />
<rating rank="0" />
<review>not bad</review>
</book>
</books>
如果您确实希望将评级设置为文本内容,则无法使用 DTD 限制其值,但可以使用 XML 架构。
这是我的 DTD 规则应该有以下 属性: 书有标题、发行年份、一位或多位作者、一个或多个评级 (0-5)、任意数量的评论。
<!ELEMENT books (book+)>
<!ELEMENT book (title, author+,year,rating+,review*)>
<!ELEMENT title (#PCDATA)>
<!ELEMENT author (#PCDATA)>
<!ELEMENT year (#PCDATA)>
<!ELEMENT rating (0|1|2|3|4|5)>
<!ELEMENT review (#PCDATA)>
这是我的例子XML:
<?xml version="1.0" standalone="no" ?>
<!DOCTYPE books SYSTEM "books.dtd">
<books>
<book>
<title>book1</title>
<author>bob</author>
<year>2000</year>
<rating>2</rating>
<rating>3</rating>
</book>
<book>
<title>book2</title>
<author>alice</author>
<year>2001</year>
<rating>4</rating>
<rating>5</rating>
</book>
<book>
<title>book3</title>
<author>john</author>
<year>2002</year>
<rating>5</rating>
<rating>0</rating>
<review>not bad</review>
</book>
</books>
但我总是收到此错误
<!ELEMENT rating (0|1|2|3|4|5)>
在 DTD 中和关于您的 XML 是不正确的。这意味着您希望评分元素包含名为“0”(<0>
)或“1”、“2”等的元素。很遗憾,标签名称不能以数字开头。
要实现你想做的事情通常是用一个属性来完成的。将 rating 元素声明为空,并在列表中的值中选择一个属性,如下所示:
<!ELEMENT rating EMPTY>
<!ATTLIST rating
rank (0|1|2|3|4|5) #REQUIRED >
您的 XML 实例将变为:
<?xml version="1.0" standalone="no" ?>
<!DOCTYPE books SYSTEM "books.dtd">
<books>
<book>
<title>book1</title>
<author>bob</author>
<year>2000</year>
<rating rank="2" />
<rating rank="3" />
</book>
<book>
<title>book2</title>
<author>alice</author>
<year>2001</year>
<rating rank="4" />
<rating rank="5" />
</book>
<book>
<title>book3</title>
<author>john</author>
<year>2002</year>
<rating rank="5 />
<rating rank="0" />
<review>not bad</review>
</book>
</books>
如果您确实希望将评级设置为文本内容,则无法使用 DTD 限制其值,但可以使用 XML 架构。