Bei manchen Infrastrukturen besteht die Anforderung, dass eine DCML-Datei (für den EDC Server) eine XML-konforme Struktur haben muss, weil sie sonst nicht übertragen/ausgeführt werden kann. Eine DCML-Datei ist jedoch nicht zwingend XML-konform sein, da es zusätzliche Zeichen wie "&" oder Funktionen wie [[XpahtLoop()]] etc. enthalten kann.
Insbesondere wenn in der DCML-Datei Xpath-Anweisungen angewendet werden, kann die XML-Syntax nicht immer eingehalten werden. Nachfolgend werden zwei Möglichkeiten aufgezeigt, wie trotz Xpath-Elementen die DCML-Datei XML-konform erstellt werden kann.
1. Anwendung der Block-Funktion anstelle von "&"
Vor allem das kaufmännische Und-Zeichen (&), welches im DCML zum Aneinanderreihen von mehreren Funktionen oder Zusammenfügen mehrerer Strings benötigt wird, kann aus XML-Sicht ein Syntax-Problem verursachen. Häufig kann auf das "&"-Zeichen mit Hilfe der Block-Funktion jedoch verzichtet werden.
a) Nicht XML-konformes Beispiel mit dem "&"-Zeichen:
<Value>[[XpathValue('//tables/table/date') & If(XpathValue('//tables/table/time')='', '', ', ' & XpathValue('//tables/table/time') & 'Uhr')]]</Value>
b) Gleiche Funktionalität gelöst mit der Block-Funktion ohne "&"-Zeichen und damit XML-konform:
<Value>[[Block ('', XpathValue('//tables/table/date'), If(XpathValue('//tables/table/time')='', '', Block('', ', ', XpathValue('//tables/table/time'), 'Uhr')))]]</Value>
2. Auskommentieren der Xpath-Funktionen
Bei sehr komplexen oder langen XpathLoop-Abschnitten ist es nicht möglich oder sehr unübersichtlich mit der Block-Funktion. In diesem Falle kann der Abschnitt mit Hilfe eines Tricks aus XML-Sicht auskommentiert und damit XML-konform gemacht werden,.
a) Nicht XML-konformes Beispiel mit dem "&"-Zeichen:
<Contents> [[XpathLoop('Tabellenzeile', '//tables/table/tableline', '<Content> <Id>Angebotszeile</Id> <Language>2055</Language> <Bookmark>Text</Bookmark> <ContentControls> <PlainText> <Tag>Artikel</Tag> <Text>' & Block(' ', XpathLoopValue('Tabellenzeile', '/itemName'), XpathLoopValue('Tabellenzeile', '/itemDescription'), XpathLoopValue('Tabellenzeile', '/itemPrice')) & '</Text> </PlainText> </ContentControls> </Content>')]] </Contents>
b) Gleiche Funktionalität gelöst durch Auskommentieren des XpathLoops aus XML-Sicht:
<Contents> <!--[[XpathLoop('Tabellenzeile', '//tables/table/tableline', ' -'&'-> <Content> <Id>Angebotszeile</Id> <Language>2055</Language> <Bookmark>Text</Bookmark> <ContentControls> <PlainText> <Tag>Artikel</Tag> <Text>' & Block(' ', XpathLoopValue('Tabellenzeile', '/itemName'), XpathLoopValue('Tabellenzeile', '/itemDescription'), XpathLoopValue('Tabellenzeile', '/itemPrice')) & '</Text> </PlainText> </ContentControls> </Content> <!-'&'-')]]--> </Contents>
Hinweis: Obwohl der XpathLoop aus XML-Sicht auskommentiert ist, wird er von der DCML-Engine trotzdem verarbeitet.