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


XML: Aufbau entspricht der SQL-Datenbankstruktur

Obwohl die Inhalte des folgenden XML Dokuments sachlich identisch sind mit dem vorher dargestellten Beispiel, ist doch deren struktureller Aufbau ein völlig anderer, was auch eine aufwändigere Programmierlogik der XPath-Statements erfordert, die die XML Input Dokumente auswertbar machen sollen.

Im folgenden Beispiel bringt das vorhin erwähnte XPath-Statement "/ROOT/Ort[name='Neustadt']/Mensch/Kauf[bez='Hemd']/Gesamt" kein Ergebnis. Ganz abgesehen davon, daß die Felder "Kauf/bez" und "Kauf/Gesamt" hier nicht existieren, muß die Verknüpfung zum Ort "Neustadt" ziemlich aufwändig durch zusätzliche temporäre Variablen hergestellt werden. Dazu später mehr.

<ROOT>
  <Ort>
    <id>1</id>
    <name>Neustadt</name>
  </Ort>
  <Mensch>
    <id>1</id>
    <name>Holzflos</name>
    <vorname>Hugo</vorname>
    <Gehalt>234.56</Gehalt>
    <idOrt>1</idOrt>
  </Mensch>
  <Ware>
    <id>1</id>
    <bez>Hemd</bez>
    <preis>12.99</preis>
  </Ware>
  <Kauf>
    <id>1</id>
    <anzahl>3</anzahl>
    <idMensch>1</idMensch>
    <idWare>1</idWare>
  </Kauf>
</ROOT>

Eine veränderte Situation liegt vor, wenn die Struktur des XML-Input-Dokuments dem Ergebnis der Datenbankabfragen entspricht, wenn also die komplexen XML Elemente im Grunde genommen Datensätze darstellen. Solchermaßen veränderte Strukturen machen die Formulierung der XPath-Statements (und deren Pflege) nicht unbedingt einfacher.

pic/Datenbank_ADONET_Schema_2.png

<xs:schema id="ROOT" 
  xmlns:xs="http://www.w3.org/2001/XMLSchema" 
  xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
 <xs:element name="ROOT" 
  msdata:IsDataSet="true" 
  msdata:UseCurrentLocale="true">
  <xs:complexType>
   <xs:choice maxOccurs="unbounded">
    <xs:element name="Ort">
     <xs:complexType>
      <xs:sequence>
       <xs:element name="id" type="xs:int" />
       <xs:element name="name" type="xs:string" />
      </xs:sequence>
     </xs:complexType>
    </xs:element>
    <xs:element name="Mensch">
     <xs:complexType>
      <xs:sequence>
       <xs:element name="id" type="xs:int" />
       <xs:element name="name" type="xs:string" />
       <xs:element name="vorname" type="xs:string" />
       <xs:element name="Gehalt" type="xs:string" />
       <xs:element name="idOrt" type="xs:int" />
      </xs:sequence>
     </xs:complexType>
    </xs:element>
    <xs:element name="Ware">
     <xs:complexType>
      <xs:sequence>
       <xs:element name="id" type="xs:int" />
       <xs:element name="bez" type="xs:string" />
       <xs:element name="preis" type="xs:double" />
      </xs:sequence>
     </xs:complexType>
    </xs:element>
    <xs:element name="Kauf">
     <xs:complexType>
      <xs:sequence>
       <xs:element name="id" type="xs:int" />
       <xs:element name="anzahl" type="xs:int" />
       <xs:element name="idMensch" type="xs:int" />
       <xs:element name="idWare" type="xs:int" />
      </xs:sequence>
     </xs:complexType>
    </xs:element>
   </xs:choice>
  </xs:complexType>
 </xs:element>
</xs:schema>

qrpic/XML_Strukturalternativen5.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