Home
Über mich
Blog
Veröffentlichungen
IT-Trainings
Impressum


XML Schema: Design relationale DB: keys, keyrefs

Auch m:n-Relationen, wie sie in RDBMS üblich sind, können in XML problemlos abgebildet werden; DTD und XML Schema bieten hier mit unique, key und keyref effiziente Lösungsansätze. Die spätere Auswertung erfordert freilich eine exakte Navigation im Quelldokument; auch hier bietet etwa XSL/XPath über xsl:variable und xsl:key praktikable Ansätze. Bei diesem m:n-Design stellt sich freilich die Frage nach dem Motiv. Wenn die Daten ohnehin im Grunde genommen Datensätze darstellen, ist es vermutlich sinnvoller, die Datenhaltung von vornherein in RDBMS abzubilden und hier von deren Features Transaktionssicherheit, Multi-User-Zugriff zu profitieren. Dennoch sind Beispiele denkbar: etwa wenn RDBMS-Abfrageergebnisse über mehrere verknüpfte Datenbanktabellen zur Datensicherung in XML gespeichert werden sollen, etwa für spätere Verlaufskontrollen. (Nicht selten wird das XML-Dokument dann auch in der RDBMS in einem Datensatz gespeichert.) - Besondere Relevanz hat der Ansatz spätestens beim Datenaustausch, wenn plattformneutral m:n-Relationen übermittelt werden sollen.

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" 
  elementFormDefault="qualified" attributeFormDefault="unqualified">
  <xs:element name="Orte">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="Ort" maxOccurs="unbounded"/>
        <xs:element ref="Person" maxOccurs="unbounded"/>
      </xs:sequence>
    </xs:complexType>
    <xs:key name="IDORT">
      <xs:selector xpath="./Ort"></xs:selector>
      <xs:field xpath="id"></xs:field>
    </xs:key>
    <xs:keyref name="RELORTPerson" refer="IDORT">
      <xs:selector xpath="./Person"></xs:selector>
      <xs:field xpath="idOrt"></xs:field>
    </xs:keyref>
  </xs:element>
  <xs:element name="Ort">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="id"/>
        <xs:element ref="name"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="Person">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="id"/>
        <xs:element ref="name"/>
        <xs:element ref="vorname"/>
        <xs:element ref="alter" 
                    minOccurs="0" 
                    maxOccurs="1"/>
        <xs:element ref="idOrt" 
                    minOccurs="1" 
                    maxOccurs="1"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="id" 
              type="xs:nonNegativeInteger"/>
  <xs:element name="name" 
              type="xs:string"/>
  <xs:element name="vorname" 
              type="xs:string"/>
  <xs:element name="alter" 
              type="xs:nonNegativeInteger"/>
  <xs:element name="idOrt" 
              type="xs:nonNegativeInteger"/>
</xs:schema>

qrpic/XSD3_6.jpg

wg / 30. September 2017




Fragen? Anmerkungen? Tips?

Bitte nehmen Sie Kontakt zu mir auf (info10@wilfried-grupe.de).



Vielen Dank für Ihr Interesse an meiner Arbeit.


V.i.S.d.P.: Wilfried Grupe * Klus 6 * 37643 Negenborn

Mobil: 0151. 750 360 61 * eMail: info10@wilfried-grupe.de