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


CDATA-Sections und XML Schema-Validierung

Häufig validieren Datenempfänger ihre XML-Dokumente "sehr scharf" gegen ein XML Schema. Mitunter sind in den XML Dokumenten jedoch CDATA-Sections enthalten, die Inhalte "maskieren", einer XSD-Validierung entziehen und so eine geforderte, eindeutige Strukturdefinition aushebeln.

Hierzu möchte ich ein einfaches Beispiel geben. Das folgende XML Schema definiert ein Root-Element Person mit drei xs:string-Childnodes "Vorname", "Nachname" und "info".

<xs:schema 
  xmlns:xs="http://www.w3.org/2001/XMLSchema" 
  attributeFormDefault="unqualified"
  elementFormDefault="unqualified" version="1.0" >
  <xs:element name="Person" type="PersonTYP"/>
  <xs:complexType name="PersonTYP">
    <xs:sequence>
      <xs:element ref="Vorname" />        
      <xs:element ref="Nachname" />
      <xs:element ref="info" />
    </xs:sequence>
  </xs:complexType>
  <xs:element name="Vorname" type="xs:string" />
  <xs:element name="Nachname" type="xs:string" />
  <xs:element name="info" type="xs:string" />
</xs:schema>

Das folgende XML Dokument übernimmt "Vorname" und "Nachname", weist der "info" aber einen zusätzlichen Childnode "Hobby" zu, das im XML Schema nicht vorgesehen ist; ihre Existenz im XML Dokument sollte daher zu einem Validierungs-Fehler führen.

<Person 
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
  xsi:noNamespaceSchemaLocation="Person.xsd">
  <Vorname>Vorname</Vorname>  
  <Nachname>Nachname</Nachname>
  <info><Hobby>XML</Hobby></info>
</Person>

Der Validierungsfehler läßt auch nicht auf sich warten:

Element 'info' ist Simple Type und 
darf daher keine Elementinformationselemente 
[untergeordnete Elemente] haben. 
Person.xml is not a valid XML document

Dagegen geht die CDATA-"Maskierung" glatt durch:

<Person 
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
  xsi:noNamespaceSchemaLocation="Person.xsd">
  <Vorname>Vorname</Vorname>  
  <Nachname>Nachname</Nachname>
  <info><![CDATA[ <Hobby>XML</Hobby>]]> </info>
</Person>

Alternativ denkbar wäre, die Daten ohne CDATA-Section als Text mit Entitäten einzubinden; auch hier würde eine Validierung gegen das vorher beschriebene XML Schema problemlos durchlaufen:

<Person 
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
  xsi:noNamespaceSchemaLocation="Person.xsd">
  <Vorname>Vorname</Vorname>  
  <Nachname>Nachname</Nachname>
  <info>&lt;Hobby&gt;XML&lt;/Hobby&gt;</info>
</Person>

In beiden Fällen stellen sich aus meiner Sicht einige Fragen:

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