Thomas J.S.: Zwei DTD's für ein Ausgabedokument erzeugen

Beitrag lesen

Hallo,

ich transformiere derzeit XML mit einer XSLT-Transfomation in SVG und habe dabei folgendes Problem bzw. Frage:
Ist es möglich ein XSLT-Stylesheet zu erzeugen, das 2 DTD's auf ein SVG Dokument angewendet werden?

Du kannst immer nur eine DTD verwenden. (die internete Untermenge ist keine 2. DTD)

Im XSLT-Stylesheet deklariere ich im xsl:output doctype-public und doctype-system. Allerdings kann man keine weiteren DTD's angeben.

In SVG ist es dies möglich, indem man in die neuen Attribute zum Beispiel wie folgt anfügt und den Namensraum im svg-Element deklariert:
<!DOCTYPE svg
  PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-flat-20030114.dtd"
[<!ATTLIST svg
xmlns:attrib CDATA #IMPLIED

]>

So sollte das SVG durch XSLT erzeugt werden, was mir bis jetzt noch nicht gelungen ist.

Das ginge nur z.B. so:

<xsl:output method="xml" indent="yes" encoding="iso-8859-1" />

<xsl:template match="/">
 <xsl:text disable-output-escaping="yes">
 <![CDATA[
  <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-flat-20030114.dtd"
   [<!ATTLIST svg
   xmlns:attrib CDATA #IMPLIED
   >
  ]>
 ]]>
 </xsl:text>

<!-- aber hier dann den Rest mit <svg> ... erzeugen -->
</xsl:template>

Oder ohne "disable-output-escaping" und CDATA, dann musst du zumindest die < als &lt; notieren.

Grüße
Thomas