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


Arbeiten mit optionalen Elementen

Arbeiten mit optionalen Elementen

Es gibt Developer, die die Arbeit mit optionalen Elementen (analog optionale Attribute) im XML Input entspannt und sorgenfrei betrachten. Ja, es stimmt: optionale Elemente können fehlen. Und wenn sie nicht da sind (die Elemente, nicht die Developer), werden sie auch nicht verarbeitet. Logisch.

Es kann aber Situationen geben, in denen zulässiges Fehlen zu realen Fehlern führt. Werden fehlende Elemente programmiertechnisch genauso behandelt, als wären sie real vorhanden, lauert darin das Risiko eines nachhaltigen Informationsverlustes. Das möchte ich an folgenden Beispielen zeigen:

Gehen wir von folgendem XML Dokument aus, das jedem "Ort"-Element ein "id"-, ein "name"-, und optional ein "PLZ"-Element zuweist. Nur eines der "Ort"-Elemente weist das Childelement "PLZ" auf, die beiden anderen nicht. Die Problematik besteht darin, auch jene "Ort"-Elemente im Fokus zu behalten, die nicht über das optionale Childnode "PLZ" verfügen.

<Orte>
  <Ort>
    <id>1</id>
    <name>Neustadt</name>
  </Ort>
  <Ort>
    <id>2</id>
    <name>Darmstadt</name>
    <PLZ>61000</PLZ>
  </Ort>
  <Ort>
    <id>3</id>
    <name>Kapstadt</name>
  </Ort>
</Orte>

Würden wir dieses XML Dokument gegen das folgende XML Schema Dokument validieren, dann erhielten wir keine Fehlermeldung: alles ist gut.

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema 
  xmlns:xs="http://www.w3.org/2001/XMLSchema" 
  elementFormDefault="qualified" 
  attributeFormDefault="unqualified">
  <xs:element name="Orte">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="Ort" maxOccurs="unbounded"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="Ort">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="id"/>
        <xs:element ref="name"/>
        <xs:element ref="PLZ" minOccurs="0"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="id" 
              type="xs:nonNegativeInteger"/>
  <xs:element name="name" 
              type="xs:string"/>
  <xs:element name="PLZ" 
              type="xs:string"/>
</xs:schema>

qrpic/optionaleElemente.jpg

wg / 15. 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