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>&lambda;</mo>
     </mrow>
</math>

Damit der SAX -Parser diese Zeichenfolge akzeptiert, erweitere ich sie ein wenig:

<?xml version="1.0"?>
     <!DOCTYPE doc_type [
          <!ENTITY nbsp "&#160;">
          <!ENTITY amp "&#38;">
]>
<body>
     <math xmlns='http://www.w3.org/1998/Math/MathML'>
          <mrow>
               <mo>&lambda;</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 "&#923;">

Das gibt mir

<?xml version="1.0"?>
     <!DOCTYPE doc_type [
          <!ENTITY nbsp "&#160;">
          <!ENTITY amp "&#38;">
          <!ENTITY lambda "&#923;">
]>
<body>
     <math xmlns='http://www.w3.org/1998/Math/MathML'>
          <mrow>
               <mo>&lambda;</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?

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top