Синтаксис DTD для ограничения SQL UNIQUE - PullRequest
1 голос
/ 20 августа 2010

Я перехожу от доступа к данным через базу данных к XML для конкретных нужд своего приложения.В настоящее время я пишу DTD для XML, ссылаясь на мою схему таблицы SQL.Я определил ограничение на 4 столбца, чтобы они были уникальными (эти 4 столбца определяют структуру каталогов на 3 шага в глубину, поэтому вместе они должны быть уникальными, например.Я знаю, что могу использовать идентификатор для поддержания уникальности атрибута, но как я могу связать это для 4 атрибутов вместе?

Спасибо,

Shripad

1 Ответ

0 голосов
/ 24 июня 2013

Используйте ID вместе с IDREF для определения этого отношения.Вот два формата:

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 => первичный ключ
  • IDREF => внешний ключ
  • IDREFS => объединения
...