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.