Ich verwende ein XSLT 2.0-Programm, um einige MathML-Dokumente zu verarbeiten. In diesen MathMLs gibt es Entitäten wie ⁡
und ⁢
, die mir "Entity nicht definiert" -Fehler geben. Gibt es eine Möglichkeit, Dokumente mit diesen Entitäten zu verarbeiten, ohne das MathML-Schema zu laden? (Weil Saxon-HE xsl:import-schema
nicht verwenden kann ...)Einheiten in XSLT 2 laden?
Und nur um klar zu sein, brauche ich nicht die Entitäten in meinem XSLT zu verwenden; Ich muss XMLs verarbeiten, die sie haben.
Es gibt eine Entity-Datei für MathML wie folgt aus:
<!ENTITY AElig "Æ" ><!--LATIN CAPITAL LETTER AE -->
<!ENTITY AMP "&#38;" ><!--AMPERSAND -->
<!ENTITY Aacute "Á" ><!--LATIN CAPITAL LETTER A WITH ACUTE —>
...
Vielleicht kann ich irgendwie Gebrauch davon?
UPDATE: mehrere Personen haben erwähnt, dass die Eingabedokumente die richtige DTD haben sollten. Also hier ist ein minimales Beispiel:
Die XSLT:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:m="http://www.w3.org/1998/Math/MathML">
<xsl:output method="text"/>
<xsl:template match="/">
<xsl:text>aaa</xsl:text>
</xsl:template>
</xsl:stylesheet>
Die MathML mit DTD-Deklaration:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE math PUBLIC "-//W3C//DTD MathML 2.0//EN"
"http://www.w3.org/Math/DTD/mathml2/mathml2.dtd">
<math xmlns="http://www.w3.org/1998/Math/MathML">
<mrow>
<mi> sin </mi>
<mo> ⁡ </mo>
<mi> x </mi>
</mrow>
</math>
Jetzt Saxon gibt mir diese Fehlermeldung:
I/O error reported by XML parser processing file:/path/to/mathml.xml: unknown protocol: classpath
Wenn Sie diese Fehler beim Lesen der Eingabe-XML erhalten, dann klingt es so, als ob Ihr XML unvollständig ist und Sie die deklarierten Entitäten benötigen. Andernfalls weiß der XML-Parser nicht, welchen Inhalt er für die Entitätsreferenz ersetzen soll. http://xmlwriter.net/xml_guide/entity_declaration.shtml –
https://Stackoverflow.com/a/9128457/14419 –
@MadsHansen Das ist eine interessante Lösung. Aber ich fürchte, ich kann es nicht benutzen. Zuallererst, damit es funktioniert, kann das enthaltene XML-Dokument keinen '' Header haben, auf den ich keine Kontrolle habe. Die MathML-Dokumente, die ich verarbeite, werden dynamisch generiert und haben den Header. Außerdem muss die Wrapper-Datei auf die enthaltene Datei anhand ihres Namens verweisen. Wenn das enthaltene XML-Dokument dynamisch generiert wird, muss ich auch die Wrapper-Datei dynamisch erzeugen, was XSLT meiner Meinung nach nicht kann. – MetroWind