SQL UNIQUE约束的DTD语法

时间:2010-08-20 16:34:24

标签: sql xml xsd dtd idref

我正在从通过数据库访问数据转向XML以满足我的应用程序特定需求。我目前正在通过引用我的SQL表模式为XML编写DTD。我已经将4列的约束定义为唯一(这4列定义了3步深的目录结构,因此它们必须是唯一的,例如.dir1 / dir2 / dir3 / dirA和dir1 / dir2 / dir3 / dirB)。我知道我可以使用ID来维护属性的唯一性,但是如何将4个属性绑定在一起呢?

谢谢,

Shripad

1 个答案:

答案 0 :(得分:0)

使用IDIDREF来定义此关系。这有两种格式:

<强> DTD

  <!DOCTYPE lab_group [
  <!ELEMENT lab_group (student_name)*>
  <!ELEMENT student_name (#PCDATA)>
  <!ATTLIST student_name student_no ID #REQUIRED>
  <!ATTLIST student_name tutor_1 IDREF #IMPLIED>
  <!ATTLIST student_name tutor_2 IDREF #IMPLIED>
  <!ATTLIST student_name tutor_3 IDREF #IMPLIED>
  <!ATTLIST student_name tutor_4 IDREF #IMPLIED>
  ]>

<强> XSD

  <xs:element name="student_name">
   <xs:key name="ID">
     <xs:selector xpath="student_no"/>
     <xs:field xpath="@id"/>
   </xs:key>
   <xs:keyref name="IDREF" refer="ID">
     <xs:selector xpath="//student_name/@tutor_1|//student_name/@tutor_2|//student_name/@tutor_3|//student_name/@tutor_4"/>
     <xs:field xpath="@ref"/>
   </xs:keyref>
  </xs:element>

以下是一些类似的快速参考:

  • ID =&gt;主键
  • IDREF =&gt;外键
  • IDREFS =&gt;加入