XML Validierung - wozu? / XML Schema / Datentypen, Designs / XML Schema: xs:unique, xs:key, xs:keyref, xs:selector, xs:field

XML Schema: xs:unique, xs:key, xs:keyref, xs:selector, xs:field

XML Schema: xs:unique, xs:key, xs:keyref, xs:selector, xs:field

➪ Auch m:n-Relationen, wie sie in RDBMS üblich sind, können in XML problemlos abgebildet werden; XML Schema bietet hier mit xs:unique, xs:key und xs:keyref effiziente Lösungsansätze.

Die spätere Auswertung erfordert 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>

pic/xsd5.png

wg / 11. Februar 2018



Fragen? Anmerkungen? Tips?

Bitte nehmen Sie Kontakt zu mir auf:

Vorname
Nachname
Mailadresse







Vielen Dank für Ihr Interesse an meiner Arbeit.


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

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

www.wilfried-grupe.de/XSD3_6.html