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.