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



XML / XML-Datenstrukturen / XML-Struktur: mixed content

XML-Struktur: mixed content

XML-Struktur: mixed content

➪ Gegenüber den stark strukturierten XML-Dokumenten bestehen bei den schwächer strukturierten "mixed-content"-Dokumenten zwischen den einzelnen XML-Elementen deutlich weniger gegenseitige Abhängigkeiten aufgrund gemeinsamer Parentnodes oder aufgrund von Primär-/Sekundärschlüsselbeziehungen. Zudem ist mit häufigen optionalen oder xs:choice-Elementen zu rechnen. Sofern eine gegenseitige Abhängigkeit überhaupt besteht, muss diese auf anderem Wege herleitbar sein, etwa durch sequenzielle Abfolge.

Siehe auch , , , , .

Das folgende Beispiel zeigt einen Mix aus klarer Basisstruktur, die mit XPath gezielt adressiert werden kann (Abschnitt/para) und einer gemischten Abfolge aus Textinhalt und Formatierungsanweisungen (innerhalb para: text(), kursiv, fett, link), für deren systematische Auswertbarkeit eine hohe Flexibilität erforderlich ist.

Während es sich anbietet, die Abschnitt/para-Struktur durch zu verarbeiten, bleibt für die Formatierungsanweisungen innerhalb para vorrangig die Arbeit mit "xsl:template match" bzw. . So vielfältig wie die Input-Struktur dürfte auch die Programmierlogik bei deren Auswertung gestaltet werden. Auch hier empfiehlt sich eine effiziente, qualitätsbewusste Koordination der Teamarbeit, um die langfristigen Wartungskosten unter Kontrolle zu behalten.


<?xml version="1.0" encoding="iso-8859-1"?>
<Abschnitt>
  <title>Namespaces</title>
  <para>Die enorme Gestaltungsflexibilität der 
<kursiv>XML-Dokumente</kursiv> zwingt zu 
<fett>systematischer Strukturierung</fett>, 
damit die <kursiv>XML-Dokumente</kursiv> 
systematisch ausgewertet werden können.</para>
<para>Aber auch eine klare systematische 
Strukturierung von <kursiv><fett>Element- und 
Attributnamen</fett></kursiv> sowie deren 
<fett><kursiv>Datentypen</kursiv></fett> 
(etwa durch <link 
l="http://www.w3.org/2001/XMLSchema">XML-Schema</link>) 
reicht nicht immer aus, begriffliche 
Kollisionen zu vermeiden. </para>
</Abschnitt>

Oder werten Sie aus einem -Dokument einen <section>-Abschnitt aus aus:


<section>
   <title><i>tokenize</i> vs. <i>string-join</i></title>
   <p>Die <i>tokenize</i>-Funktion ist im Grunde das 
      Gegenstück zu <xref href="stringjoin.xml">string-join</xref>. 
      Während <i>string-join</i> in der Lage ist, eine Sequenz 
      mit mehreren Items in einen Einzelstring zu konvertieren, 
      wobei auch Trennzeichen eingefügt werden können (im 
      Beispiel: ";"), kann <i>tokenize</i> einen derartigen 
      <xref href="string.xml">String</xref> unter Zuhilfenahme 
      des Trennzeichens wieder in eine Sequenz konvertieren. </p>
   <p>Um das zu verdeutlichen, generieren Sie zunächst eine 
      Sequenz aus den Werten 'Meier', 'Schulze', 'Müller', 
      'Schmidt' sowie den Zahlen 1 bis 10.</p>
   <codeblock>
&lt;xsl:variable name="v1" as="xs:string+"&gt;
  &lt;xsl:for-each 
       select="('Meier', 
                'Schulze', 
                'Müller', 
                'Schmidt', 
                1 to 10)"&gt;
    &lt;xsl:value-of select="."/&gt;
  &lt;/xsl:for-each&gt;
&lt;/xsl:variable&gt;
   </codeblock>
   <p>Im nächsten Schritt konvertieren Sie die Sequenz 
      in einen String mit dem Trennzeichen ";".</p>
   <codeblock>
&lt;xsl:variable name="v2" as="xs:string"&gt;
    &lt;xsl:value-of select="string-join($v1, ';')"/&gt;
&lt;/xsl:variable&gt;
   </codeblock>
   <p>Denselben Effekt erreichen Sie übrigens auch 
      mit dem <i>separator</i>-Attribut von 
      <i>xsl:value-of</i>:</p>
   <codeblock>
&lt;xsl:value-of 
     select="'Meier', 
             'Schulze', 
             'Müller', 
             'Schmidt', 
             1 to 10" 
     separator=";"/&gt;
   </codeblock>
   <p>Zur Kontrolle können Sie sich den generierten 
      String anzeigen lassen:</p>
   <codeblock>
&lt;xsl:value-of select="$v2"/&gt;
   </codeblock>
   <p>Hier ist also der String:</p>
   <codeblock>
Meier;Schulze;Müller;Schmidt;1;2;3;4;5;6;7;8;9;10
   </codeblock>
   <p>Nun kommt <i>tokenize</i> ins Spiel, das den 
      String in eine Itemlist aufsplittet:</p>
   <codeblock>
&lt;xsl:for-each 
     select="tokenize(xs:string($v2), ';')"&gt;
  &lt;item&gt;
    &lt;xsl:value-of select="."/&gt;
  &lt;/item&gt;      
&lt;/xsl:for-each&gt;
   </codeblock>
   <p>Resultat:</p>
   <codeblock>
&lt;item&gt;Meier&lt;/item&gt;
&lt;item&gt;Schulze&lt;/item&gt;
&lt;item&gt;Müller&lt;/item&gt;
&lt;item&gt;Schmidt&lt;/item&gt;
&lt;item&gt;1&lt;/item&gt;
&lt;item&gt;2&lt;/item&gt;
&lt;item&gt;3&lt;/item&gt;
&lt;item&gt;4&lt;/item&gt;
&lt;item&gt;5&lt;/item&gt;
&lt;item&gt;6&lt;/item&gt;
&lt;item&gt;7&lt;/item&gt;
&lt;item&gt;8&lt;/item&gt;
&lt;item&gt;9&lt;/item&gt;
&lt;item&gt;10&lt;/item&gt;
   </codeblock>
</section>

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_Strukturalternativen4.html