如何编写DTD来约束字符串中的多个IDREF值?

时间:2013-01-27 17:23:30

标签: xml dtd

<Course Number="CS105A" Prerequisites="CS101A" Instructors="JC XX" Enrollment="610">
  <Title>Programming XXX</Title>
  <Description>Abstraction and its relation to programming.</Description>
</Course>

<Course Number="CS106B" Prerequisites="CS106A" Instructors="JC ER" Enrollment="620">
  <Title>Programming Abstractions</Title>
  <Description>Abstraction and its relation to programming.</Description>
</Course>

<Course Number="CS107" Prerequisites="CS106B CS105A" Instructors="JZ" Enrollment="500">
  <Title>Computer Organization and Systems</Title>
  <Description>Introduction to the fundamental concepts of computer systems.</Description>
</Course>

如何为ATTLIST属性编写Prerequisites规范,该属性可以由多个ID值组成,例如"CS106B CS105A"?以下是否有效?

<!ATTLIST Course Number ID #REQUIRED>
<!ATTLIST Course Prerequisites IDREF #IMPLIED>

3 个答案:

答案 0 :(得分:2)

如果属性(Prerequisites)的值是ID值的列表,则可以使用IDREFS作为连接字符串写入,并将空白字符作为分隔符,即{ {1}}:

id1 id2

可以validate a DTD against an XML online

答案 1 :(得分:2)

像孟璐说的那样,你应该使用IDREFS(不同的链接)。

您也不需要为元素中的每个属性分别设置属性声明(ATTLIST)。

您的声明中也遗漏了一个非常重要的!

示例:

<!ATTLIST Course 
          Number        ID     #REQUIRED
          Prerequisites IDREFS #IMPLIED>

答案 2 :(得分:0)

这是当前免费在线“数据库简介”的DTD练习之一。当然@斯坦福(http://class2go.stanford.edu/db/Winter2013/interactive_exercises/DTDExercises)。

正如所指出的那样,您可以轻松自行运行。例如,我对xmllint运行它,xmllint告诉我DTD是否通过。我按照错误路径直到它通过,然后将其作为我对此问题的答案(参考集中的#3)。