C#.NET * C++ * JAVASCRIPT * PYTHON * DIVERSES
XML * XML-SCHEMA * XPATH * XSL * XSL-FO * SVG * XQUERY * XPROC * ANT



XML / XML-Datenstrukturen / XML: Stark strukturierte Dokumente, Aufbau entspricht der SQL-Datenbankstruktur

XML: Stark strukturierte Dokumente, Aufbau entspricht der SQL-Datenbankstruktur

XML: Stark strukturierte Dokumente, Aufbau entspricht der SQL-Datenbankstruktur

➪ 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. Derartige XML-Strukturen erfordern eine andere Formulierung der XPath-Statements und der Auswertungslogik.

pic/XML_Datenstruktur_stark_Datensaetze.png

In diesem Beispiel können die gegenseitigen Abhängigkeiten weder durch hierarchische Verschachtelung oder durch eine sequenzielle Abfolge der Elemente, sondern durch die Constraints der Primär-/Sekundärschlüssel (<xs:key name="pk_idOrt">, <xs:key name="pk_idMensch">, <xs:key name="pk_idWare">, <xs:keyref name="relationOrtMensch" refer="pk_idOrt">, <xs:keyref name="relationMenschKauf" refer="pk_idMensch"> und <xs:keyref name="relationWareKauf" refer="pk_idWare">) bestimmt. Diese sind hier unverzichtbar.

pic/XML_Datenstruktur_stark_Datensaetze_Constraints.png


<xs:schema 
  xmlns:xs="http://www.w3.org/2001/XMLSchema" >
  <xs:element name="Orte">
    <xs:complexType>
      <xs:choice minOccurs="0" 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="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: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:choice>      
    </xs:complexType>
    <xs:key name="pk_idOrt">
      <xs:selector xpath=".//Ort"/>
      <xs:field xpath="id"/>
    </xs:key>
    <xs:key name="pk_idMensch">
      <xs:selector xpath=".//Mensch"/>
      <xs:field xpath="id"/>
    </xs:key> 
    <xs:key name="pk_idWare">
      <xs:selector xpath=".//Ware"/>
      <xs:field xpath="id"/>
    </xs:key> 
    <xs:keyref name="relationOrtMensch" refer="pk_idOrt">
      <xs:selector xpath=".//Mensch"/>
      <xs:field xpath="idOrt"/>
    </xs:keyref>
    <xs:keyref name="relationMenschKauf" refer="pk_idMensch">
      <xs:selector xpath=".//Kauf"/>
      <xs:field xpath="idMensch"/>
    </xs:keyref>    
    <xs:keyref name="relationWareKauf" refer="pk_idWare">
      <xs:selector xpath=".//Kauf"/>
      <xs:field xpath="idWare"/>
    </xs:keyref>
  </xs:element>
</xs:schema>

Im folgenden Beispiel bringt das erwähnte XPath-Statement


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

kein Ergebnis. Ganz abgesehen davon, dass die Felder Kauf/bez und Kauf/Gesamt hier nicht existieren, muss die Verknüpfung zum Ort "Neustadt" durch zusätzliche temporäre Variablen hergestellt werden.

Das XML-Beispieldokument


<?xml version="1.0" standalone="yes"?>
<Orte>
  <Ort>
    <id>1</id>
    <name>Neustadt</name>
  </Ort>
  <Ort>
    <id>2</id>
    <name>Darmstadt</name>
  </Ort>
  <Ort>
    <id>3</id>
    <name>Kapstadt</name>
  </Ort>
  <Mensch>
    <id>1</id>
    <name>Holzflos</name>
    <vorname>Hugo</vorname>
    <Gehalt>234.56</Gehalt>
    <idOrt>1</idOrt>
  </Mensch>
  <Mensch>
    <id>4</id>
    <name>Nixlos</name>
    <vorname>Nicole</vorname>
    <Gehalt>1234.56</Gehalt>
    <idOrt>1</idOrt>
  </Mensch>
  <Mensch>
    <id>9</id>
    <name>Sprachlos</name>
    <vorname>Stefan</vorname>
    <Gehalt>5430</Gehalt>
    <idOrt>1</idOrt>
  </Mensch>
  <Mensch>
    <id>2</id>
    <name>Sagblos</name>
    <vorname>Stefan</vorname>
    <Gehalt>321.45</Gehalt>
    <idOrt>1</idOrt>
  </Mensch>
  <Mensch>
    <id>3</id>
    <name>Sorglos</name>
    <vorname>Siggi</vorname>
    <Gehalt>987.58</Gehalt>
    <idOrt>1</idOrt>
  </Mensch>
  <Mensch>
    <id>7</id>
    <name>Herzlos</name>
    <vorname>Heini</vorname>
    <Gehalt>654.21</Gehalt>
    <idOrt>1</idOrt>
  </Mensch>
  <Mensch>
    <id>8</id>
    <name>Rhodos</name>
    <vorname>Rudi</vorname>
    <Gehalt>333.33</Gehalt>
    <idOrt>2</idOrt>
  </Mensch>
  <Mensch>
    <id>15</id>
    <name>Kolos</name>
    <vorname>Karl</vorname>
    <Gehalt>456</Gehalt>
    <idOrt>2</idOrt>
  </Mensch>
  <Mensch>
    <id>16</id>
    <name>Sinnlos</name>
    <vorname>Simone</vorname>
    <Gehalt>876.54</Gehalt>
    <idOrt>2</idOrt>
  </Mensch>
  <Mensch>
    <id>17</id>
    <name>Zeitlos</name>
    <vorname>Horst</vorname>
    <Gehalt>546.77</Gehalt>
    <idOrt>2</idOrt>
  </Mensch>
  <Mensch>
    <id>18</id>
    <name>Wunschlos</name>
    <vorname>Werner</vorname>
    <Gehalt>777.77</Gehalt>
    <idOrt>2</idOrt>
  </Mensch>
  <Mensch>
    <id>5</id>
    <name>Wasistlos</name>
    <vorname>Willi</vorname>
    <Gehalt>6789</Gehalt>
    <idOrt>3</idOrt>
  </Mensch>
  <Mensch>
    <id>10</id>
    <name>Ruhelos</name>
    <vorname>Rita</vorname>
    <Gehalt>234</Gehalt>
    <idOrt>3</idOrt>
  </Mensch>
  <Mensch>
    <id>11</id>
    <name>Schlaflos</name>
    <vorname>Susi</vorname>
    <Gehalt>321</Gehalt>
    <idOrt>3</idOrt>
  </Mensch>
  <Mensch>
    <id>12</id>
    <name>Rielos</name>
    <vorname>Lotte</vorname>
    <Gehalt>456</Gehalt>
    <idOrt>3</idOrt>
  </Mensch>
  <Mensch>
    <id>6</id>
    <name>Bodenlos</name>
    <vorname>Betty</vorname>
    <Gehalt>3450</Gehalt>
    <idOrt>3</idOrt>
  </Mensch>
  <Mensch>
    <id>13</id>
    <name>Muehelos</name>
    <vorname>Martin</vorname>
    <Gehalt>222</Gehalt>
    <idOrt>3</idOrt>
  </Mensch>
  <Mensch>
    <id>14</id>
    <name>Leinenlos</name>
    <vorname>Liane</vorname>
    <Gehalt>135</Gehalt>
    <idOrt>3</idOrt>
  </Mensch>
  <Mensch>
    <id>19</id>
    <name>Lustlos</name>
    <vorname>Ludwig</vorname>
    <Gehalt>357</Gehalt>
    <idOrt>2</idOrt>
  </Mensch>
  <Kauf>
    <id>1</id>
    <anzahl>3</anzahl>
    <idMensch>1</idMensch>
    <idWare>1</idWare>
  </Kauf>
  <Kauf>
    <id>2</id>
    <anzahl>7</anzahl>
    <idMensch>2</idMensch>
    <idWare>2</idWare>
  </Kauf>
  <Kauf>
    <id>3</id>
    <anzahl>2</anzahl>
    <idMensch>3</idMensch>
    <idWare>1</idWare>
  </Kauf>
  <Kauf>
    <id>4</id>
    <anzahl>9</anzahl>
    <idMensch>1</idMensch>
    <idWare>2</idWare>
  </Kauf>
  <Kauf>
    <id>5</id>
    <anzahl>9</anzahl>
    <idMensch>1</idMensch>
    <idWare>1</idWare>
  </Kauf>
  <Kauf>
    <id>6</id>
    <anzahl>9</anzahl>
    <idMensch>1</idMensch>
    <idWare>2</idWare>
  </Kauf>
  <Kauf>
    <id>7</id>
    <anzahl>8</anzahl>
    <idMensch>1</idMensch>
    <idWare>2</idWare>
  </Kauf>
  <Kauf>
    <id>8</id>
    <anzahl>8</anzahl>
    <idMensch>1</idMensch>
    <idWare>3</idWare>
  </Kauf>
  <Kauf>
    <id>9</id>
    <anzahl>8</anzahl>
    <idMensch>1</idMensch>
    <idWare>1</idWare>
  </Kauf>
  <Kauf>
    <id>10</id>
    <anzahl>8</anzahl>
    <idMensch>1</idMensch>
    <idWare>2</idWare>
  </Kauf>
  <Kauf>
    <id>11</id>
    <anzahl>8</anzahl>
    <idMensch>1</idMensch>
    <idWare>3</idWare>
  </Kauf>
  <Kauf>
    <id>12</id>
    <anzahl>7</anzahl>
    <idMensch>2</idMensch>
    <idWare>3</idWare>
  </Kauf>
  <Kauf>
    <id>13</id>
    <anzahl>7</anzahl>
    <idMensch>2</idMensch>
    <idWare>2</idWare>
  </Kauf>
  <Kauf>
    <id>14</id>
    <anzahl>7</anzahl>
    <idMensch>2</idMensch>
    <idWare>1</idWare>
  </Kauf>
  <Kauf>
    <id>15</id>
    <anzahl>7</anzahl>
    <idMensch>2</idMensch>
    <idWare>3</idWare>
  </Kauf>
  <Kauf>
    <id>16</id>
    <anzahl>7</anzahl>
    <idMensch>2</idMensch>
    <idWare>2</idWare>
  </Kauf>
  <Kauf>
    <id>17</id>
    <anzahl>8</anzahl>
    <idMensch>3</idMensch>
    <idWare>1</idWare>
  </Kauf>
  <Kauf>
    <id>18</id>
    <anzahl>9</anzahl>
    <idMensch>3</idMensch>
    <idWare>2</idWare>
  </Kauf>
  <Kauf>
    <id>19</id>
    <anzahl>6</anzahl>
    <idMensch>3</idMensch>
    <idWare>3</idWare>
  </Kauf>
  <Kauf>
    <id>20</id>
    <anzahl>5</anzahl>
    <idMensch>3</idMensch>
    <idWare>3</idWare>
  </Kauf>
  <Kauf>
    <id>21</id>
    <anzahl>4</anzahl>
    <idMensch>3</idMensch>
    <idWare>1</idWare>
  </Kauf>
  <Kauf>
    <id>22</id>
    <anzahl>3</anzahl>
    <idMensch>3</idMensch>
    <idWare>2</idWare>
  </Kauf>
  <Kauf>
    <id>23</id>
    <anzahl>2</anzahl>
    <idMensch>3</idMensch>
    <idWare>3</idWare>
  </Kauf>
  <Kauf>
    <id>24</id>
    <anzahl>1</anzahl>
    <idMensch>3</idMensch>
    <idWare>3</idWare>
  </Kauf>
  <Kauf>
    <id>25</id>
    <anzahl>8</anzahl>
    <idMensch>4</idMensch>
    <idWare>2</idWare>
  </Kauf>
  <Kauf>
    <id>26</id>
    <anzahl>7</anzahl>
    <idMensch>4</idMensch>
    <idWare>2</idWare>
  </Kauf>
  <Kauf>
    <id>27</id>
    <anzahl>6</anzahl>
    <idMensch>4</idMensch>
    <idWare>2</idWare>
  </Kauf>
  <Kauf>
    <id>28</id>
    <anzahl>5</anzahl>
    <idMensch>4</idMensch>
    <idWare>2</idWare>
  </Kauf>
  <Kauf>
    <id>29</id>
    <anzahl>4</anzahl>
    <idMensch>4</idMensch>
    <idWare>2</idWare>
  </Kauf>
  <Kauf>
    <id>30</id>
    <anzahl>4</anzahl>
    <idMensch>4</idMensch>
    <idWare>2</idWare>
  </Kauf>
  <Kauf>
    <id>31</id>
    <anzahl>3</anzahl>
    <idMensch>4</idMensch>
    <idWare>2</idWare>
  </Kauf>
  <Kauf>
    <id>32</id>
    <anzahl>2</anzahl>
    <idMensch>15</idMensch>
    <idWare>1</idWare>
  </Kauf>
  <Kauf>
    <id>33</id>
    <anzahl>3</anzahl>
    <idMensch>5</idMensch>
    <idWare>2</idWare>
  </Kauf>
  <Kauf>
    <id>34</id>
    <anzahl>4</anzahl>
    <idMensch>5</idMensch>
    <idWare>1</idWare>
  </Kauf>
  <Kauf>
    <id>35</id>
    <anzahl>5</anzahl>
    <idMensch>5</idMensch>
    <idWare>2</idWare>
  </Kauf>
  <Kauf>
    <id>36</id>
    <anzahl>6</anzahl>
    <idMensch>6</idMensch>
    <idWare>1</idWare>
  </Kauf>
  <Kauf>
    <id>37</id>
    <anzahl>7</anzahl>
    <idMensch>6</idMensch>
    <idWare>2</idWare>
  </Kauf>
  <Kauf>
    <id>38</id>
    <anzahl>5</anzahl>
    <idMensch>6</idMensch>
    <idWare>1</idWare>
  </Kauf>
  <Kauf>
    <id>39</id>
    <anzahl>6</anzahl>
    <idMensch>16</idMensch>
    <idWare>2</idWare>
  </Kauf>
  <Kauf>
    <id>40</id>
    <anzahl>7</anzahl>
    <idMensch>7</idMensch>
    <idWare>1</idWare>
  </Kauf>
  <Kauf>
    <id>41</id>
    <anzahl>8</anzahl>
    <idMensch>7</idMensch>
    <idWare>2</idWare>
  </Kauf>
  <Kauf>
    <id>42</id>
    <anzahl>9</anzahl>
    <idMensch>7</idMensch>
    <idWare>1</idWare>
  </Kauf>
  <Kauf>
    <id>43</id>
    <anzahl>3</anzahl>
    <idMensch>17</idMensch>
    <idWare>1</idWare>
  </Kauf>
  <Kauf>
    <id>44</id>
    <anzahl>5</anzahl>
    <idMensch>8</idMensch>
    <idWare>2</idWare>
  </Kauf>
  <Kauf>
    <id>45</id>
    <anzahl>4</anzahl>
    <idMensch>18</idMensch>
    <idWare>2</idWare>
  </Kauf>
  <Kauf>
    <id>46</id>
    <anzahl>3</anzahl>
    <idMensch>8</idMensch>
    <idWare>1</idWare>
  </Kauf>
  <Kauf>
    <id>47</id>
    <anzahl>22</anzahl>
    <idMensch>8</idMensch>
    <idWare>2</idWare>
  </Kauf>
  <Kauf>
    <id>48</id>
    <anzahl>11</anzahl>
    <idMensch>9</idMensch>
    <idWare>1</idWare>
  </Kauf>
  <Kauf>
    <id>49</id>
    <anzahl>33</anzahl>
    <idMensch>9</idMensch>
    <idWare>2</idWare>
  </Kauf>
  <Kauf>
    <id>50</id>
    <anzahl>22</anzahl>
    <idMensch>9</idMensch>
    <idWare>1</idWare>
  </Kauf>
  <Kauf>
    <id>51</id>
    <anzahl>44</anzahl>
    <idMensch>9</idMensch>
    <idWare>2</idWare>
  </Kauf>
  <Kauf>
    <id>52</id>
    <anzahl>33</anzahl>
    <idMensch>9</idMensch>
    <idWare>1</idWare>
  </Kauf>
  <Kauf>
    <id>53</id>
    <anzahl>55</anzahl>
    <idMensch>9</idMensch>
    <idWare>2</idWare>
  </Kauf>
  <Kauf>
    <id>54</id>
    <anzahl>44</anzahl>
    <idMensch>5</idMensch>
    <idWare>1</idWare>
  </Kauf>
  <Kauf>
    <id>55</id>
    <anzahl>4</anzahl>
    <idMensch>10</idMensch>
    <idWare>1</idWare>
  </Kauf>
  <Kauf>
    <id>56</id>
    <anzahl>5</anzahl>
    <idMensch>11</idMensch>
    <idWare>3</idWare>
  </Kauf>
  <Kauf>
    <id>57</id>
    <anzahl>6</anzahl>
    <idMensch>12</idMensch>
    <idWare>2</idWare>
  </Kauf>
  <Kauf>
    <id>58</id>
    <anzahl>7</anzahl>
    <idMensch>13</idMensch>
    <idWare>1</idWare>
  </Kauf>
  <Kauf>
    <id>59</id>
    <anzahl>8</anzahl>
    <idMensch>14</idMensch>
    <idWare>2</idWare>
  </Kauf>
  <Kauf>
    <id>60</id>
    <anzahl>9</anzahl>
    <idMensch>12</idMensch>
    <idWare>3</idWare>
  </Kauf>
  <Kauf>
    <id>61</id>
    <anzahl>1</anzahl>
    <idMensch>10</idMensch>
    <idWare>3</idWare>
  </Kauf>
  <Kauf>
    <id>62</id>
    <anzahl>2</anzahl>
    <idMensch>11</idMensch>
    <idWare>2</idWare>
  </Kauf>
  <Kauf>
    <id>63</id>
    <anzahl>3</anzahl>
    <idMensch>12</idMensch>
    <idWare>1</idWare>
  </Kauf>
  <Kauf>
    <id>64</id>
    <anzahl>4</anzahl>
    <idMensch>13</idMensch>
    <idWare>1</idWare>
  </Kauf>
  <Kauf>
    <id>65</id>
    <anzahl>5</anzahl>
    <idMensch>14</idMensch>
    <idWare>3</idWare>
  </Kauf>
  <Kauf>
    <id>66</id>
    <anzahl>6</anzahl>
    <idMensch>15</idMensch>
    <idWare>2</idWare>
  </Kauf>
  <Ware>
    <id>1</id>
    <bez>Hemd</bez>
    <preis>12.99</preis>
  </Ware>
  <Ware>
    <id>2</id>
    <bez>Hose</bez>
    <preis>25.99</preis>
  </Ware>
  <Ware>
    <id>3</id>
    <bez>Schuhe</bez>
    <preis>151.23</preis>
  </Ware>
</Orte>

wg / 3. April 2020



Fragen? Anmerkungen? Tipps?

Bitte nehmen Sie Kontakt zu mir auf.






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/XML_Strukturalternativen3.html