Datenbanken I – Portalanwendungen, Schnittstellen

(Auszug aus "Schematron - Effiziente Business Rules für XML-Dokumente", Kapitel 8)

Im Bereich der Datenbankenanwendungen werden XML-Dateien oft als Austauschformat zwischen verschiedenen Systemen benutzt. Das folgende Beispiel zeigt die Verwendung von XML bei einem Online-Portal. Dabei werden Daten auf XML-Basis dazu benutzt, damit Händler über das Portal Bücher verkaufen können. Ein Reporting-Tool soll alle im Portal aufgeführten Händler auflisten und deren Umsätze pro Währung und Konto gruppieren. Zudem soll jedes verkaufte Buch aufgeführt werden. Die prinzipielle Struktur eines solchen Dokumentes sieht folgendermaßen aus:

Datenbankschema eines Online-Portals für Bücher

Abbildung: Datenbankschema eines Online-Portals für Bücher

Im Kopf des Berichtes sehen wir einige Metainformationen wie das Ausgabedatum, den Berichtnamen oder das Rechnungsdatum. Des Weiteren enthält das Dokument verschiedene Gruppierungsebenen, die jeweils einen Container pro Ebene aufweisen (z.B.: <buchGrp1>). Jeder dieser Container besitzt dann noch einen Gruppierungsschlüssel (z.B. <buchKeyGrp1>).

In der letzten Ebene werden dann ohne weitere Gruppierungen Angaben zu den verkauften Büchern gemacht (<ISBN-10>, <ISBN-13>, <name>, <autorNachname>, <verlag>, <mwst> und <preis>).

Nach einer Gruppierung wird jeweils die Summe des Umsatzes ermittelt (z.B. die Summe pro Konto <sumPreisKonto> oder die Summe pro Händler <sumPreisHaendler>). Der Vorteil eines solchen Aufbaus ist, dass die XML-Datei ohne weitere Konvertierungsschritte in Excel importiert werden kann.

Die folgende Abbildung zeigt eine solche Darstellung:

Import von XML nach Excel

Abbildung: Import von XML nach Excel

Dennoch ergeben sich auch bei solchen komplexen und gut durchdachten Strukturen immer wieder typische Probleme, die mit impliziten Bedingungen der Inhalte zusammenhängen. Im folgenden Beispiel zeigen wir einige dieser inhaltlichen Abhängigkeiten:

<buch xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="buch.xsd">
  <berichtKopf>
    <berichtname>Buchverkauf</berichtname>
    <ausgabedatum>2008-11-25</ausgabedatum>
    <rechnungsdatum>2008-11-24</rechnungsdatum>
  </berichtKopf>
  <buchGrp>
    <buchKeyGrp>
      <haendler>Buch Kosmos</haendler>
    </buchKeyGrp>
    <buchGrp1>
      <buchKeyGrp1>
        <waehrung>EUR</waehrung>
      </buchKeyGrp1>
      <buchGrp2>
        <buchKeyGrp2>
          <konto>1</konto>
        </buchKeyGrp2>
        <buchRec>
          <ISBN-10>389667367X</ISBN-10>
          <ISBN-13>978-3896673671</ISBN-13>
          <name>Der Katalane</name>
          <autorNachname>Gordon</autorNachname>
          <verlag>Blessing</verlag>
          <mwst>7</mwst>
          <preis>19.95</preis>
        </buchRec>
        <buchRec>
          <ISBN-10>3442369762</ISBN-10>
          <ISBN-13>978-3442369768</ISBN-13>
          <name>Hals über Kopf</name>
          <autorNachname>Reichs</autorNachname>
          <verlag>Blanvalet</verlag>
          <mwst>7</mwst>
          <preis>8.95</preis>
        </buchRec>
        <buchRec>
          <ISBN-10>3886808637</ISBN-10>
          <ISBN-13>978-3886808632</ISBN-13>
          <name>Außer Dienst: Eine Bilanz</name>
          <autorNachname>Schmidt</autorNachname>
          <verlag>Siedler</verlag>
          <mwst>7</mwst>
          <preis>22.95</preis>
        </buchRec>
        <sumPreisKonto>41.85</sumPreisKonto>
      </buchGrp2>
      <buchGrp2>
        <buchKeyGrp2>
          <konto>2</konto>
        </buchKeyGrp2>
        <buchRec>
          <ISBN-10>3886808637</ISBN-10>
          <ISBN-13>978-3886808632</ISBN-13>
          <name>Außer Dienst: Eine Bilanz</name>
          <autorNachname>Schmidt</autorNachname>
          <verlag>Siedler</verlag>
          <mwst>7</mwst>
          <preis>22.95</preis>
        </buchRec>
        <sumPreisKonto>22.95</sumPreisKonto>
      </buchGrp2>
      <sumPreisWaehrung>74.80</sumPreisWaehrung>
    </buchGrp1>
    <sumPreisHaendler>
      <waehrung>CHF</waehrung>
      <preis>74.80</preis>
    </sumPreisHaendler>
  </buchGrp>
  <sumPreis>
    <waehrung>EUR</waehrung>
    <preis>74.80</preis>
  </sumPreis>
</buch>

Implizite Regeln

Das Element <sumPreisKonto> muss die Summe aller <preis>-Elemente beinhalten, die sich in dessen Elternelement <buchGrp2> (Konto-Container) befinden. Das folgende Pattern zeigt die Überprüfung dieser Summenbildung:

<pattern id="sum">
  <rule context="sumPreisKonto">
    <assert test="format-number(sum(parent::*/.//preis),'###0.00')=.">Die Summe stimmt an dieser Stelle nicht. Sie müsste <value-of select="format-number(sum(parent::*/.//preis),'###0.00')"/> lauten.</assert>
  </rule>
</pattern>

Im folgenden Beispiel soll nun überprüft werden, ob ein Händler in Währungen gehandelt hat, die nicht der Währung der jeweiligen Gesamtsumme entsprechen. Hier hat der Händler in EUR gehandelt, in der Summe wird aber CHF als Währung angegeben.

<buchGrp1>
  <buchKeyGrp1>
    <waehrung>EUR</waehrung>
  </buchKeyGrp1>
  <buchGrp2>
  …
    <sumPreisHaendler>
      <waehrung>CHF</waehrung>
      <preis>74.80</preis>
    </sumPreisHaendler>

Das folgende Pattern gibt einen Hinweis auf diese Unstimmigkeit:

<pattern id="waehrung">
  <rule context="sumPreisHaendler">
    <assert test="parent::buchGrp/buchGrp1/buchKeyGrp1/waehrung=current()/waehrung">Es werden hier unterschiedliche Währungen verwendet.</assert>
  </rule>
</pattern>

Eine weitere Regel beschreibt einen impliziten Sachverhalt, der sich nur durch Kenntnis der Geschäftsabläufe erklären lässt. In diesem Beispiel soll der Grundsatz gelten, dass <konto>2</konto> für Nicht-Euro-Geschäfte verwendet werden darf. Das folgende Pattern überprüft diesen Sachverhalt:

<pattern id="konto">
  <rule context="konto[text()='2']">
    <report test="ancestor::buchGrp1/*/waehrung='EUR'">Im Konto 2 darf die Währung nicht EUR sein!</report>
  </rule>
</pattern>

   

<< zurück vor >>

 

 

 

Tipp der data2type-Redaktion:
Zum Thema Schematron bieten wir auch folgende Schulungen zur Vertiefung und professionellen Fortbildung an:

Copyright © dpunkt.verlag GmbH 2011
Für Ihren privaten Gebrauch dürfen Sie die Online-Version ausdrucken. Ansonsten unterliegt dieses Kapitel aus dem Buch "Schematron - Effiziente Business Rules für XML-Dokumente" denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.

dpunkt.verlag GmbH, Ringstraße 19B, 69115 Heidelberg, fon 06221-14830, fax 06221-148399, hallo(at)dpunkt.de