Analyse mit SAX- und Handhabung von Charaktereinheiten
-
26-10-2019 - |
Frage
Ich analysiere einen MathML -Ausdruck mit SAX (obwohl die Tatsache, dass es sich um MathML handelt, möglicherweise nicht vollständig relevant ist). Eine Beispieleingangszeichenfolge ist
<math xmlns='http://www.w3.org/1998/Math/MathML'>
<mrow>
<mo>λ</mo>
</mrow>
</math>
Damit der SAX -Parser diese Zeichenfolge akzeptiert, erweitere ich sie ein wenig:
<?xml version="1.0"?>
<!DOCTYPE doc_type [
<!ENTITY nbsp " ">
<!ENTITY amp "&">
]>
<body>
<math xmlns='http://www.w3.org/1998/Math/MathML'>
<mrow>
<mo>λ</mo>
<mrow>
</math>
</body>
Jetzt, wenn ich den SAX -Parser dazu leite, bekomme ich eine Ausnahme:
[Fatal Error] :5:86: The entity "lambda" was referenced, but not declared.
org.xml.sax.SAXParseException: The entity "lambda" was referenced, but not
declared.
at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source)
Ich weiß jedoch, wie ich das beheben kann. Ich füge diese Zeile einfach der analysierenden Zeichenfolge hinzu:
<!ENTITY lambda "Λ">
Das gibt mir
<?xml version="1.0"?>
<!DOCTYPE doc_type [
<!ENTITY nbsp " ">
<!ENTITY amp "&">
<!ENTITY lambda "Λ">
]>
<body>
<math xmlns='http://www.w3.org/1998/Math/MathML'>
<mrow>
<mo>λ</mo>
<mrow>
</math>
</body>
Jetzt ist es gut, danke.
Das Problem ist jedoch, dass ich keine Entitätserklärung für jede mögliche Charaktereinheit hinzufügen kann, die in MathML verwendet werden könnte (z. B. "Teil", "Notin" und "Summe").
Wie schreibe ich diese Zeichenfolge um, damit sie für eine mögliche Zeicheneinheit analysiert werden kann, die möglicherweise enthalten sein könnte?
Lösung
Verwenden Sie eine DocType -Erklärung, die sich auf die bezieht Mathml dtd:
<!DOCTYPE math
PUBLIC "-//W3C//DTD MathML 3.0//EN"
"http://www.w3.org/Math/DTD/mathml3/mathml3.dtd">
oder eine lokale Kopie desselben.