2010-08-20 17 views
1

Je passe de l'accès aux données via une base de données au format XML pour répondre à mes besoins spécifiques. J'écris actuellement une DTD pour le XML en me référant à mon schéma de table SQL. J'ai défini une contrainte sur 4 colonnes pour qu'elles soient uniques (Ces 4 colonnes définissent une structure de répertoires à 3 pas de profondeur donc ensemble elles doivent être uniques par exemple dir1/dir2/dir3/dirA et dir1/dir2/dir3/dirB). Je sais que je peux utiliser un identifiant pour maintenir l'unicité d'un attribut, mais comment puis-je lier ceci pour 4 attributs ensemble?Syntaxe DTD pour la contrainte SQL UNIQUE

Merci,

Shripad

+0

question subsidiaire: une raison quelconque vous avez choisi une DTD sur un XSD? –

+0

Nous utilisons DTD pour définir un schéma pour une autre application, sauf que je n'ai pas de raison particulière. –

+0

Hmm Je pense que l'utilisation de XSD est assez simple; Je vais essayer. Merci de votre suggestion. –

Répondre

0

Utilisez un ID avec un IDREF pour définir cette relation. Voici deux formats:

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> 

Voici quelques analogues pour une référence rapide:

  • ID => clé primaire
  • IDREF => clé étrangère
  • IDREFS => rejoint