1

我几乎完成了为我的 XML 文件创建 DTD,但我不确定如何完成最后一部分。这是 XML 文件:

<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE library SYSTEM "library.dtd">
<library>

<authors>
  <author aid="a1">Bill Evjen</author>
  <author aid="a2">Michael Kay</author>
  <author aid="a3">Kevin Goldberg</author>
  <author aid="a4">Michael Morrison</author>
</authors>

<books>

<book bookID="b001" author="a2">
  <title>XSLT 2.0 and XPath 2.0 Programmer's Reference</title>
  <stock>4</stock>
  <publisher>John Wiley</publisher>
  <year>2009</year>
  <use type="advanced" />
  <use type="reference" />
</book>
<book bookID="b002" author="a1 a2">
  <title>Professional XML (Programmer to Programmer) </title>
  <stock>2</stock>
  <publisher>John Wiley</publisher>
  <year>2007</year>
  <use type="professional" />
  <use type="advanced" />
  <use type="reference" />
</book>
<book bookID="b003" author="a3">
  <title>XML: Visual QuickStart Guide</title>
  <stock>3</stock>
  <publisher>Peachpit Press</publisher>
  <year>2008</year>
  <use type="introductory" />
  <use type="reference" />
</book>
<book bookID="b004" author="a4">
  <title>Sams Teach Yourself XML in 24 Hours</title>
  <stock>5</stock>
  <publisher>SAMS</publisher>
  <year>2005</year>
</book>

</books>

</library>

这是我的 DTD,我评论了我无法弄清楚的那一行:

<!-- DTD for the scot ski example -->
<!ELEMENT library (authors | books)*>
<!ELEMENT authors (author)*>
<!ELEMENT author (#PCDATA) >
<!ATTLIST author aid CDATA #REQUIRED>

<!ELEMENT books (book)*>
<!ELEMENT book (title, stock, publisher, year, use*)>
<!ATTLIST book bookID ID #REQUIRED>
<!ATTLIST book author (authors) #REQUIRED ><!-- How to do this correctly -->


<!ELEMENT title (#PCDATA) >
<!ELEMENT stock (#PCDATA) >
<!ELEMENT publisher (#PCDATA) >
<!ELEMENT year (#PCDATA) >
<!ELEMENT use (#PCDATA) >
<!ATTLIST use type ( advanced | reference | introductory | professional) #REQUIRED  >

我已经尝试了一段时间并尝试从在线示例中学习,但我被卡住了,我看不出如何正确地做到这一点。

4

1 回答 1

1

在另一个元素中使用一个 Element 子元素作为属性”听起来有点奇怪。您可以引用属性中的其他元素。这是我认为你想要的:

<!ELEMENT library (authors | books)*>
<!ELEMENT authors (author)*>
<!ELEMENT author (#PCDATA) >
<!ATTLIST author aid ID #REQUIRED>   <!-- 'aid' is of type ID -->

<!ELEMENT books (book)*>
<!ELEMENT book (title, stock, publisher, year, use*)>
<!ATTLIST book bookID ID #REQUIRED
               author IDREFS #REQUIRED >   <!-- 'author' is of type IDREFS -->

<!ELEMENT title (#PCDATA) >
<!ELEMENT stock (#PCDATA) >
<!ELEMENT publisher (#PCDATA) >
<!ELEMENT year (#PCDATA) >
<!ELEMENT use (#PCDATA) >
<!ATTLIST use type ( advanced | reference | introductory | professional) #REQUIRED > 

IDREFS类型的属性用于引用文档中其他元素的 ID 值。

于 2013-04-07T16:11:30.693 回答