Wenn Binärdaten oder ungültige Zeichen in XML-Daten aufgenommen werden müssen, werden diese am besten als Binärzeichenfolge codiert.
Codierung von Binärdaten für XML
hexBinary: <nonXMLChars>0001020304050607080B0C0E0F</nonXMLChars>
base64Binary: <nonXMLChars>AAECAwQFBgcICwwODw==</nonXMLChars>
Mit der Codierung 'base64Binary' werden die verfügbaren XML-Zeichen besser genutzt; außerdem ist ein base64-codiertes Binärfeld um ein Drittel kleiner als ein hexBinary-codiertes Feld. Weit verbreitet ist die Verwendung der Codierung 'base64Binary' für das MIME-Format und verschiedene XML-basierte Standards.
Wenn Sie Daten an Anwendungen senden, die base64-codierte Daten nicht decodieren können, und die Nachrichtengröße keine Rolle spielt, sollten Sie die einfachere hexBinary-Codierung verwenden.
Binärdaten syntaktisch analysieren
Der XMLNSC-Parser decodiert die hexBinary- oder base64Binary-codierten Daten automatisch anhand des einfachen Typs des Elements oder des Attributs, das die Binärdaten enthält. Die Nachrichtenbaumstruktur enthält dann den decodierten BLOB-Wert.
Wenn Sie die XMLNS-Domäne verwenden, müssen die Binärdaten als Zeichenfolge syntaktisch analysiert werden. Sie ist dann in der Nachrichtenbaumstruktur als CHARACTER-Wert enthalten. Werden die Daten mit 'hexBinary' codiert, können Sie mit der ESQL-Funktion CAST eine Umwandlung in einen BLOB-Wert vornehmen. Wenn die Daten mit 'base64Binary' codiert werden, ist es am einfachsten, die Funktion BASE64DECODE zu verwenden. Der Abschnitt Funktion BASE64DECODE enthält weitere Informationen hierzu.
Binärdaten generieren
Binärdaten können in der Ausgabe-XML mit der hexBinary- oder base64Binary-Codierung generieren.
Bei Verwendung von 'hexBinary' müssen Sie die BLOB-Daten mit der ESQL-Anweisung CAST in eine hexBinary-Zeichenfolge umwandeln.
-- ESQL-Code für die Generierung von base64-codierten Binärdaten
DECLARE myBLOB BLOB;
-- myBLOB mit den Binärdaten füllen
CREATE LASTCHILD OF OutputRoot.XMLNSC.message
TYPE BITOR(XMLNSC.Attribute, XMLNSC.base64Binary)
NAME myBase64Element
VALUE myBLOB;
Beachten Sie, dass sich der logische Wert in der Nachrichtenbaumstruktur nicht ändert, wenn der Feldtyp auf 'XMLNSC.base64Binary' gesetzt wird. Im Nachrichtenfluss ist es weiterhin ein großes Binärobjekt (BLOB), und wenn Sie die Zeichenfolgedarstellung abrufen, wird es als hexBinary-Zeichenfolge aufgeführt. Wenn die Nachrichtenbaumstruktur jedoch in einen Bitstrom umgewandelt wird (in einem Ausgabeknoten oder mit dem Aufruf ASBITSTREAM), erfolgt die base64-Umwandlung automatisch und die XML-Ausgabe enthält die korrekte base64-Zeichenfolge.