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.
<Employee>
<EmpNo>10</EmpNo>
<Name>Smith</Name>
</Employee>
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.
- 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.
<Sample color="green"></Sample>
Record root
Sample Sample? {@XMLElement {nillable = true}};
end
Record Sample {@XMlStructure = xmlStructureKind.simpleContent}
color STRING {@XMLAttribute{}};
value STRING;
end
- 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>
<Employee>
<EmpNo department="Sales">10</EmpNo>
<Name>Smith</Name>
</Employee>
Record Employee{XMLStructure = xmlStructureKind.sequence}
EmpNo EmpNumber;
LastName STRING;
end
Record EmpNumber {XMLStructure = xmlStructureKind.simpleContent}
department STRING {@XMLAttribute{}};
value INT;
end
- 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)
Record Employee
EmpNo INT;
Name STRING?;
end
- 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
- 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
- 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
- W3 Schools bietet XML- und XSD-Lernprogramme, auf die über die folgende Site zugegriffen werden kann, indem dort nach XML oder XSD gesucht wird:
- 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:
- Eine detaillierte Übersicht über XML Schema wird von World Wide Web Consortium bereitgestellt:
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.