Jan Hillebrand: XSLT-ähnliche DTD

Beitrag lesen

Guten Tag.

Ich möchte einen neuen XML-Dialekt entwickeln. Eigentlich handelt es sich nur um wenige Elemente. Das ganze sollte ungefähr so funktionieren wie XSLT, sprich es gibt ein XML-Oberelement in dem HTML Elemente auftauchen können in denen wiederrum bestimmte XML Elemente enthalten sein können. Beispiel:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE pml SYSTEM "pml2.dtd">
<pml xmlns:pml="http://www.die-namespace-adresse.de/">
   pml:processing
      <pml:variable name="title">
         Dokumententitel
      </pml:variable>
      <pml:variable name="content">
         GoForRight01 =
         <pml:insert name="GoForRight01" source="system" />
      </pml:variable>
   </pml:processing>
   pml:body
      <html>
         <head>
            <title>
               <pml:insert name="title" source="pml" />
            </title>
        </head>
        <body>
           <!-- Inhalt -->
           <pml:insert name="content" source="pml" />
        </body>
      </html>
   </pml:body>
</pml>

Wenn ich das allerdings in meinem XML Editor validieren lasse gibt es einen Fehler. Dies ist auch logisch, denn in der XHTML 1.0 DTD existieren die PML Elemente ja nicht. Allerdings geht das oben gennante beispiel ja in XSLT:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
   <xsl:template match="/">
      <html>
         <xsl:apply-templates />
      </html>
   </xsl:template>
</xsl:stylesheet>

Ich konnte im Internet keine DTD für XSLT finden. Meine Frage ist, wie ich es in meiner PML DTD hinbekomme, dass das oben angeführte funktionieren würde. Rein theoretisch müsste ich ja dafür eine Änderung der XHTML DTD vorhnehmen, aber ich hoffe es gibt auch einen anderen Weg?
Ich habe mir in meinem XML Edior einmal das Model der Elemente angesehen. Zum Beispiel bei pml:variable lautet das Model

"(#PCDATA | pml:insert)*".

Bei xsl:variable lautet das Model

"(xsl:apply-templates | xsl:call-template | xsl:apply-imports | xsl:for-each | xsl:value-of | xsl:copy-of | xsl:number | xsl:choose | xsl:if | xsl:text | xsl:copy | xsl:variable | xsl:message | xsl:fallback | xsl:processing-instruction | xsl:comment | xsl:element | xsl:attribute){0-UNBOUNDED}"

Stutzig wurde ich über das {0-UNBOUNDED}. Ich hab dann versucht in meiner DTD zu schreiben

<!ELEMENT pml:variable (#PCDATA | pml:insert){0-UNBOUNDED}>
<!ATTLIST pml:variable
   [...]>

Doch dann sagte mir der Editor "The mixed content model "pml:variable" must end with ")*" when the types of child elements are constrained."

Ich stehe also weiterhin auf dem Holzweg.
Ich hoffe mir kann jemand helfen?

Vielen Dank.

Gruß,
Jan Hillebrand