【发布时间】:2014-12-15 21:32:44
【问题描述】:
所以我已经编写了这个 xml 文档,但是我没有编写一个有效的 DTD。我知道问题在于 ID(学生姓名“DB”)在文档中出现了两次,因此它不是唯一的。但是如何更改我的 DTD 以允许 ID 执行此操作?我在这个领域真的很绿所以这可能是一个愚蠢的问题。
<?xml version="1.0" standalone="no"?>
<!DOCTYPE COURSES [
<!ELEMENT COURSES (COURSE*)>
<!ELEMENT COURSE (PROFESSOR+, STUDENT+)>
<!ATTLIST COURSE name ID #REQUIRED>
<!ELEMENT PROFESSOR EMPTY>
<!ATTLIST PROFESSOR name ID #REQUIRED>
<!ELEMENT STUDENT (NOTES*)>
<!ATTLIST STUDENT name ID #REQUIRED>
<!ATTLIST STUDENT enrolled IDREFS #IMPLIED>
<!ELEMENT NOTES (#PCDATA)>
]>
<COURSES>
<COURSE name="Architecture">
<PROFESSOR name="Andersson"/>
<STUDENT name="JB" enrolled="Architecture">
<NOTES>2nd BaSC</NOTES>
</STUDENT>
<STUDENT name="DB" enrolled="Architecture"/>
</COURSE>
<COURSE name="Mechanics">
<PROFESSOR name="Geerts"/>
<STUDENT name="DB" enrolled="Mechanics"/>
</COURSE>
</COURSES>
【问题讨论】:
-
这真的取决于你的语义。 ID 表示它是唯一的属性。您可以改用 CDATA。 xmlwriter.net/xml_guide/attlist_declaration.shtml
-
如果教授教授多门课程,您可能会遇到与教授相同的问题。您是否考虑过将教授、学生和课程分成各自独立的结构?这样您就可以使用 IDREF/IDREFS 作为对只需要创建一次的教授/学生/课程的引用。
-
如果您想要我所说的拆分示例,请告诉我,我会添加一个。
标签: xml validation dtd