Entsprechung zwischen XML-Zeichenfolge und EGL-Variable

In diesem Abschnitt wird der EGL-Datensatz beschrieben, der einer Extensible Markup Language-Zeichenfolge (XML) entspricht. Weitere Abschnitte beschreiben die Funktionen serviceLib.convertFromXML und serviceLib.convertToXML, die von Rich UI-Entwicklern verwendet werden, um XML-Daten in eine Variable oder aus einer Variablen zu konvertieren, was unter Umständen erforderlich ist, um auf einen REST-Service anderer Anbieter zugreifen zu können.

XML- und EGL-Zeichenfolgen

Sie können einen EGL-Datensatzabschnitt (Record) definieren, der als Basis für einen Datensatz (oder eine Feldgruppe aus Datensätzen) dient, der zur Verarbeitung einer XML-Zeichenfolge verwendet wird. Der Datensatzabschnitt umfasst Details, die in einem XML-Schema vorliegen - einer Sprache für die Validierung von XML-Zeichenfolgen.

Wenn Sie die Funktion XMLLib.convertToXML verwenden, schreiben Sie den Inhalt des EGL-Datensatzes in eine XML-Zeichenfolge. Wenn Sie die Funktion XMLLib.convertFromXML verwenden, schreiben Sie die XML-Zeichenfolge in einen EGL-Datensatz. Wenn die Zeichenfolge eine im Datensatz angegebene Validierungsregel nicht erfüllt, gibt die EGL-Laufzeit eine Laufzeitausnahmebedingung (RuntimeException) aus.

Es folgt ein Beispiel einer XML-Zeichenfolge, die aus Gründen der Lesbarkeit in mehreren Zeilen dargestellt wird:
<Employee>
   <EmpNo>10</EmpNo>
   <Name>Smith</Name> 
</Employee>
Im Folgenden sehen Sie einen Datensatzabschnitt (Record), der der XML-Beispielzeichenfolge entspricht:
Record Employee {XMLStructure = xmlStructureKind.sequence}
   EmpNo INT;
   Name STRING;
end

In den meisten Fällen enthält der Datensatzabschnitt eine Gruppe von Feldnamen, die jeweils (nach Zeichen und Groß-/Kleinschreibung) dem Namen eines Elements oder Attributs in der XML-Zeichenfolge entsprechen. Wenn die Namen nicht übereinstimmen, können Sie EGL-Eigenschaften verwenden, um den entsprechenden Namen des XML-Elements bzw. -Attributs anzugeben.

Die EGL-Unterstützung für XML beruht auf zwei Aspekten:
  • Zuordnung der XML-Zeichenfolge aus einem Datensatz. Wenn Sie einen Datensatz in eine XML-Zeichenfolge konvertieren, können Sie beim Erstellen der Zeichenfolge die Standardwerte akzeptieren oder Details explizit angeben, wie beispielsweise den Namen, den die EGL-Laufzeit einem Element oder Attribut in der XML-Zeichenfolge zuordnet.
  • Validierung der in einen Datensatz geschriebenen XML-Zeichenfolge. Wenn Sie eine XML-Zeichenfolge in einen Datensatz schreiben, gibt die EGL-Laufzeit in den folgenden Fällen eine Laufzeitausnahmebedingung (RuntimeException) aus:
    • Ein Element- oder Attributname stimmt nicht mit einem äquivalenten Datensatzfeldnamen überein (oder stimmt nicht mit einer Überschreibung überein, die Sie in einem Eigenschaftsfeld angeben). ODER
    • Die Struktur der XML-Zeichenfolge weicht von der Struktur des zugehörigen Datensatzes ab.

Bitte beachten Sie diese zweifache Verwendung: zum einen für die XML-Zeichenfolgezuordnung, zum anderen für die Validierung.

Es folgt ein Beispiel einer XML-Zeichenfolge mit einem Attribut:
<Sample color="green"></Sample>
Der Attributwert für color (Farbe) wird in einem zweiten Datensatz gespeichert. Die beiden Datensatzabschnitte sehen wie folgt aus:
   Record root 
    		Sample Sample? {@XMLElement {nillable = true}};
   end
   
   Record Sample {@XMlStructure = xmlStructureKind.simpleContent}
      color STRING {@XMLAttribute{}};
      value STRING;
	 	end
Die EGL-Laufzeit kann die XML-Kurzform (<Sample color="green"/>) zwar lesen, jedoch nur die Langform schreiben:
  • Die geschriebene Ausgabe sieht wie folgt aus, wenn root.Sample eine leere Zeichenfolge ("") ist:
    	<root><Sample color="green"></Sample></root>
  • Die geschriebene Ausgabe sieht wie folgt aus, wenn root.Sample null ist und wenn das Eigenschaftsfeld 'nillable' (wie nachstehend erläutert) gesetzt ist:
    <root><Sample xsi:nil="true></Sample></root>
Im Folgenden sehen Sie ein drittes Beispiel einer XML-Zeichenfolge:
<Employee>
   <EmpNo department="Sales">10</EmpNo>
   <Name>Smith</Name>
</Employee>
Die beiden Datensatzabschnitte sehen hier wie folgt aus:
Record Employee{XMLStructure = xmlStructureKind.sequence}
   EmpNo EmpNumber;
   LastName STRING;
end

Record EmpNumber {XMLStructure = xmlStructureKind.simpleContent}
  	department STRING {@XMLAttribute{}};
   	value INT;
end
Für ein Datensatzfeld sind folgende Datentypen gültig:
  • STRING oder einer der folgenden Typen, die mit STRING zuordnungskompatibel sind: FLOAT, BIN oder eines der ganzzahligen Äquivalente zu BIN (INT, SMALLINT oder BIGINT).
  • Ein Datenelement auf der Basis eines dieser Basiselementtypen (primitiven Datentypen).
  • Ein anderer nicht strukturierter Datensatzabschnitt. Die Felder dieses Abschnitts sind auf die zuvor genannten Typen oder auf einen anderen nicht strukturierten Datensatzabschnitt beschränkt. Ein Datensatzabschnitt, auf den in einem Datensatzabschnitt verwiesen wird, darf nur Felder der hier aufgeführten Typen enthalten.
  • Feldgruppen der vorstehenden Typen.

Felder des Typs ANY werden nicht unterstützt.

Ein Datensatzabschnitt kann von einem anderen Datensatzabschnitt auf einer beliebigen Verschachtelungsebene referenziert werden.

Felder mit optionaler Dateneingabe (nullfähig)

Ein Datensatzfeld im Zusammenhang mit einem XML-Element kann nullfähig sein. Dies wird durch ein Fragezeichen (?) angezeigt. Das folgende Feld EmpNo ist beispielsweise nicht nullfähig, während das Feld Name nullfähig ist:
Record Employee
   EmpNo INT;
   Name STRING?;
end
Es gelten zwei Regeln, wenn die EGL-Laufzeit eine XML-Zeichenfolge in einen Datensatz liest:
  • Ist das Feld (beispielsweise EmpNo) nicht nullfähig, löst die EGL-Laufzeit eine Laufzeitausnahmebedingung (RuntimeException) aus, wenn sie versucht, ein Element zu lesen, das fehlt oder keinen Wert aufweist.
  • Ist das Feld (beispielsweise Name) hingegen nullfähig, löst die EGL-Laufzeit keine Ausnahmebedingung aus, wenn sie versucht, ein Element zu lesen, das fehlt oder keinen Wert aufweist. Im letzteren Fall werden sämtliche Attribute in dem Element ohne Wert beibehalten.

Ausführliche Details zur unterschiedlichen Behandlung von Null durch die EGL-Laufzeit beim Schreiben eines Datensatzes in eine XML-Zeichenfolge finden Sie in den Informationen zur Eigenschaft '@XMLElement' (oder '@XMLRootElement'), Eigenschaftsfeld 'nillable'.

Eigenschaften in Datensatzabschnitten

Beim Definieren eines Datensatzabschnitts können Sie die folgenden Eigenschaften verwenden:
  • Die komplexe Eigenschaft '@XMLRootElement' stellt Details zum Namen und Datentyp des XML-Stammelements (root) bereit, das sich in der XML-Zeichenfolge auf der höchsten Ebene befindet und den meisten Inhalt umfasst.
  • Die einfache Eigenschaft 'XMLStructure' gibt die Merkmale einer Gruppe von XML-Elementen an.

Details zu diesen Eigenschaften finden Sie unter '@RootElement' und 'XMLStructure'.

Beim Deklarieren eines Datensatzes auf der Basis des Datensatzabschnitts können Sie diese Eigenschaften nicht überschreiben.

Eigenschaften in Datensatzfeldern

Beim Definieren eines Feldes in einem Datensatzabschnitt oder beim Deklarieren eines Datensatzes auf der Basis des Datensatzabschnitts können Sie die folgenden Eigenschaften verwenden:
  • Die komplexe Eigenschaft '@XMLElement' stellt Details für ein Datensatzfeld bereit, das ein XML-Element darstellt. Diese Eigenschaft ist standardmäßig aktiviert.
  • Die komplexe Eigenschaft '@XMLAttribut' stellt Details für ein Datensatzfeld bereit, das ein XML-Attribut darstellt.

Details zu diesen Eigenschaften finden Sie unter '@XMLElement' und 'XMLAttribut'.

Namespaces

Rich UI unterstützt das Lesen und Schreiben von XML-Zeichenfolgen, die Namespaces (Namensbereiche) enthalten. Sie können einen Namespace in der Eigenschaft '@RootElement', '@XMLElement' und '@XMLAttribute' referenzieren.

Wenn XML einen standardmäßigen Namespace enthält, müssen Sie den Namespace referenzieren, wenn Sie die Datensatzfelder für die einzelnen XML-Elemente in diesem Namespace definieren. Beachten Sie, dass sich XML-Attribut niemals in einem standardmäßigen Namespace befinden. Ein Attribut besitzt entweder ein Namespace-Präfix oder befindet sich in keinem Namespace.

Zusätzliche Informationen zu XML

Auf vielen Websites finden sich Hintergrundinformationen zu XML und zum gängigsten XML-Validierungsformat XSD (XML Schema). Es folgen einige Vorschläge, die zum Zeitpunkt des Schreibens dieses Themas relevant waren:
  • W3 Schools bietet XML- und XSD-Lernprogramme, auf die über die folgende Site zugegriffen werden kann, indem dort nach XML oder XSD gesucht wird:

                 http://www.w3schools.com

  • Sowohl XML als auch XSD werden in SOA for the Business Developer von Margolis und Sharpe (MC Press, Mai 2007) thematisch behandelt. Diese Informationen finden Sie auf folgender Site:

                 http://www.mc-store.com/5079.html

  • Eine detaillierte Übersicht über XML Schema wird von World Wide Web Consortium bereitgestellt:

                 http://www.w3.org/TR/xmlschema-0/

Um sich ausführlich über die verfügbaren Alternativen in EGL zu informieren, lesen Sie die Themen zu den XML-relevanten Eigenschaften. Beachten Sie auch, dass die EGL-Laufzeit in bestimmten Fällen eine Ausnahmebedingung vom Typ 'XMLProcessingException' ausgibt, wie unter 'Ausnahmedatensatz für XML' erläutert wird.


Feedback