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


XML: Hierarchischer Aufbau

Der einfachste Ansatz ist das folgende XML Dokument: ein Rootelement Orte hat mehrere Childelemente Ort (jeweils mit id und name); jeder Ort hat mehrere Child-Elemente Mensch (mit id, name, vorname, Gehalt und idOrt), und jeder Mensch kann darüberhinaus noch mehrere Childelemente Kauf haben (mit den Childelementen idMensch, anzahl, bez, preis und Gesamt, die jeweils nur einmal auftreten können).

<?xml version="1.0" standalone="yes"?>
<Orte>
  <Ort>
    <id>1</id>
    <name>Neustadt</name>
    <Mensch>
      <id>1</id>
      <name>Holzflos</name>
      <vorname>Hugo</vorname>
      <Gehalt>234.56</Gehalt>
      <idOrt>1</idOrt>
      <Kauf>
        <idMensch>1</idMensch>
        <anzahl>3</anzahl>
        <bez>Hemd</bez>
        <preis>12.99</preis>
        <Gesamt>38.97</Gesamt>
      </Kauf>
    </Mensch>
  </Ort>
</Orte>

Diese komfortable hierarchische Struktur läßt sich gut mit XPath auswerten. Sie verdeutlicht das Zusammenspiel von XPath mit XSLT und deren jeweiligen Funktionen sehr gut. In diesem Beispiel lassen sich XPath-Statements wie

   /Orte/Ort[name='Neustadt']/Mensch/Kauf[bez='Hemd']/Gesamt 

auf einfache Weise nachvollziehen. Sie erbringt eine Elementliste sämtlicher Gesamt-Felder von Menschen, die in Neustadt wohnen und sich ein oder mehrere Hemden gekauft haben.

Das XML Dokument entspricht einem XML Schema, das Constraints (Beziehungen von Primär- und Fremdschlüsseln) sichtbar macht.

pic/Datenbank_ADONET_Schema.png

<?xml version="1.0" standalone="yes"?>
<xs:schema id="Orte" xmlns="" 
 xmlns:xs="http://www.w3.org/2001/XMLSchema" 
 xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
 <xs:element name="Orte" 
   msdata:IsDataSet="true" msdata:Locale="de-DE">
  <xs:complexType>
   <xs:choice maxOccurs="unbounded">
    <xs:element name="Ort">
     <xs:complexType>
      <xs:sequence>
       <xs:element name="id" type="xs:int" minOccurs="0" />
       <xs:element name="name" type="xs:string" minOccurs="0" />
       <xs:element name="Mensch" minOccurs="0" maxOccurs="unbounded">
        <xs:complexType>
         <xs:sequence>
          <xs:element name="id" type="xs:int" minOccurs="0" />
          <xs:element name="name" type="xs:string" minOccurs="0" />
          <xs:element name="vorname" type="xs:string" minOccurs="0" />
          <xs:element name="Gehalt" type="xs:string" minOccurs="0" />
          <xs:element name="idOrt" type="xs:int" minOccurs="0" />
          <xs:element name="Kauf" minOccurs="0" maxOccurs="unbounded">
           <xs:complexType>
            <xs:sequence>
             <xs:element name="idMensch" type="xs:int" minOccurs="0" />
             <xs:element name="anzahl" type="xs:int" minOccurs="0" />
             <xs:element name="bez" type="xs:string" minOccurs="0" />
             <xs:element name="preis" type="xs:double" minOccurs="0" />
             <xs:element name="Gesamt" type="xs:double" minOccurs="0" />
            </xs:sequence>
           </xs:complexType>
          </xs:element>
         </xs:sequence>
        </xs:complexType>
       </xs:element>
      </xs:sequence>
     </xs:complexType>
    </xs:element>
   </xs:choice>
  </xs:complexType>
  <xs:unique name="Mensch_Constraint1" 
   msdata:ConstraintName="Constraint1">
   <xs:selector xpath=".//Mensch" />
   <xs:field xpath="id" />
  </xs:unique>
  <xs:unique name="Constraint1">
   <xs:selector xpath=".//Ort" />
   <xs:field xpath="id" />
  </xs:unique>
  <xs:keyref name="relationOrtMensch" 
   refer="Constraint1" msdata:IsNested="true">
   <xs:selector xpath=".//Mensch" />
   <xs:field xpath="idOrt" />
  </xs:keyref>
  <xs:keyref name="relationMenschKauf" 
   refer="Mensch_Constraint1" msdata:IsNested="true">
   <xs:selector xpath=".//Kauf" />
   <xs:field xpath="idMensch" />
  </xs:keyref>
 </xs:element>
</xs:schema>

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