【问题标题】:XML DTD's ID and IDREF pointersXML DTD 的 ID 和 IDREF 指针
【发布时间】:2015-12-04 16:55:56
【问题描述】:

我收到一个错误,我似乎找不到太多文档。

这是 XML 的 sn-p。

<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 指针引用。 Department 属性 Chair 和 Course 属性 Instructors 都指向 InstrID。和 Course ELEMENT 都通过 Prerequisites 引用其他 Courses 并在 Description 中通过 Courseref 引用。正如你所看到的,有很多东西被传递。即使我通过 DTD 知道,只要那里有东西,你就不能真正限制引用的 ID。

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

【问题讨论】:

  • 错误信息是否标识了 DTD 中的一行?
  • 标记为作业,因为这是来自斯坦福“数据库简介”课程。 (还有一个可用于帮助的课程论坛。这可能会帮助课程中遇到相同问题的其他人。class2go.stanford.edu/db/Winter2013/forums

标签: xml dtd idref


【解决方案1】:
<!ELEMENT Courseref Course IDREF #REQUIRED> 

这应该是 ATTLIST 而不是 ELEMENT

【讨论】:

  • 我要坐在一个黑暗的房间里,永远不会出来......就像我一读到它,我就捂着自己的脸!谢谢你的摇滚袜
  • 嘿,发生在我们所有人身上的频率比我们愿意承认的要多:-)
【解决方案2】:

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

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

我是这样弄的:

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

因为您可以拥有:头衔 (1)、课程 (0..n)、教授或讲师(0..n 交替)

【讨论】:

  • 如果一个部门没有一个老师或一个课程,那么它就不是一个部门,是吗? Department (Title, Course+, (Professor | Lecturer )+ ) 似乎是要走的路,但两者都会验证给定的 XML。
猜你喜欢
  • 2019-10-25
  • 1970-01-01
  • 2012-08-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-14
  • 1970-01-01
  • 2014-07-11
相关资源
最近更新 更多