Zwei DTD's für ein Ausgabedokument erzeugen
Andi
- xsl
Hallo zusammen,
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?
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.
Hintergrund zu der ganze Sache ist folgender. Ich erzeuge innerhalb des SVG's Elemente, die ich für ein JavaScript benötige. Da diese Elemente nicht im SVG-Namensraum enthalten sind, bekomme ich bei der Validierung eine Fehlermeldung. Daher wollte ich einen weiteren Namensraum angeben, die diese Elemente mit den zugehörigen Attributen enthalten.
Ich versucht die Elemete auszukommentieren, dann greift das JavaScript jedoch nicht mehr darauf zu. Aber vielleicht es es einfacher das JAvaScript umzuprogrammieren als 2 DTD's zu erzeugen?
Beste Grüße
Andi
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 < notieren.
Grüße
Thomas
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 < notieren.
Grüße
Thomas
Besten Dank,
hab schon ein paar CData Blöcke bei mir in dem XSLT, nur habe ich sie in diesem Fall immer an die falsche Stelle gesetzt...
Als Ergebnis bekomme ich nun jedoch zweimal
<!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
>
<!ATTLIST path
attrib:font-family CDATA #IMPLIED
attrib:name CDATA #IMPLIED
>
]>
<!DOCTYPE svg
PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-flat-20030114.dtd">
Wo wird denn der Doctype definiert? Denn, wenn man ihn beim xsl:output herausnimmt, wird er trotzdem 2x aufgeführt? Kann es sein, das der doctype durch das svg-Element automatisch gesetzt wird?
Beste Grüße
Andi
»
Besten Dank,
hab schon ein paar CData Blöcke bei mir in dem XSLT, nur habe ich sie in diesem Fall immer an die falsche Stelle gesetzt...
Als Ergebnis bekomme ich nun jedoch zweimal
<!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
>
<!ATTLIST path
attrib:font-family CDATA #IMPLIED
attrib:name CDATA #IMPLIED
>
]><!DOCTYPE svg
PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-flat-20030114.dtd">
Wo wird denn der Doctype definiert? Denn, wenn man ihn beim xsl:output herausnimmt, wird er trotzdem 2x aufgeführt? Kann es sein, das der doctype durch das svg-Element automatisch gesetzt wird?Beste Grüße
Andi
Hallo nochmal,
habe meinen Fehler gefunden. Jetzt funktionierts. Besten Dank nochmals!