XML DTD的ID和IDREF指针

时间:2013-01-22 06:22:48

标签: xml dtd idref

我收到的错误似乎无法找到很多文档。

这是XML的一个片段。

<Department Code="LING" Chair="BL">
  <Title>Linguistics</Title>
  <Course Number="LING180" Prerequisites="CS107 CS109" Instructors="DJ" Enrollment="60">
    <Title>From Languages to Information</Title>
    <Description>
      Natural language processing. Cross-listed as
      <Courseref Number="CS124"/>
    </Description>
  </Course>
  <Lecturer InstrID="DJ">
    <First_Name>Dan</First_Name>
    <Middle_Init>D.</Middle_Init>
    <Last_Name>Jurafsky</Last_Name>
  </Lecturer>
  <Professor InstrID="BL">
    <First_Name>Beth</First_Name>
    <Last_Name>Levin</Last_Name>
  </Professor>
  <Lecturer InstrID="FZ">
    <First_Name>Frank</First_Name>
    <Last_Name>Zoidberg</Last_Name>
  </Lecturer>
</Department>

这是我的DTD

<!ELEMENT Course_Catalog (Department*)>
<!ELEMENT Department (Title, Course+, Professor+, Lecturer?)>
<!ATTLIST Department Code CDATA #REQUIRED
  Chair IDREFS #REQUIRED>
<!ELEMENT Course (Title, Description)>
<!ATTLIST Course Number ID #REQUIRED
  Prerequisites IDREFS #IMPLIED
  Instructors IDREFS #REQUIRED
  Enrollment CDATA #IMPLIED>
<!ELEMENT Title (#PCDATA)>
<!ELEMENT Description (#PCDATA | Courseref)*>
<!ELEMENT Courseref EMPTY>
<!ELEMENT Courseref Course IDREF #REQUIRED>
<!ELEMENT Professor (First_Name, Middle_Initial?, Last_Name)>
<!ATTLIST Professor InstrID ID #REQUIRED>
<!ELEMENT Lecturer (First_Name, Middle_Initial?, Last_Name)>
<!ATTLIST Lecturer InstrID ID #REQUIRED>
<!ELEMENT First_Name (#PCDATA)>
<!ELEMENT Middle_Initial (#PCDATA)>
<!ELEMENT Last_Name (#PCDATA)>

我得到两个错误的错误,第一个是

 parser error : xmlParseElementDecl: 'EMPTY', 'ANY' or '(' expected

和下一个

 parser error : Content error in the external subset

这有点模糊,但我认为它与ID和IDREFS有关。正如你所看到的那样,讲师和教授都有相同的ID指针参考。部门属性主席和课程属性教师都指向InstrID。和课程元素都通过先决条件引用其他课程,并通过描述中的Courseref引用。你可以看到有很多东西被传递过来。即使我通过DTD知道,只要存在某些内容,你就无法限制哪些ID被重新引用。

但我无法弄清楚这个错误是我把它们放错了顺序还是我的ID-IDREFS错了?任何帮助都会很棒

2 个答案:

答案 0 :(得分:5)

<!ELEMENT Courseref Course IDREF #REQUIRED> 

这应该是ATTLIST而不是ELEMENT

答案 1 :(得分:2)

我正在做相同的练习,最后我得完成.. 我可以在单一视图中看到错误,这是:

 Department (Title, Course+, Professor+, Lecturer?)

我是这样做的:

Department (Title,Course*,(Professor|Lecturer)*)

因为你可以拥有:一个标题(1),一个课程(0..n),一个教授或讲师(0..n交替)