Domanda

Io sono l'analisi di un'espressione MathML con SAX (anche se il fatto che si tratta di MathML potrebbe non essere del tutto pertinente). Un esempio di stringa di input è

<math xmlns='http://www.w3.org/1998/Math/MathML'>
     <mrow>
          <mo>&lambda;</mo>
     </mrow>
</math>

Affinché il parser SAX di accettare questa stringa, ho espandere un po ':

<?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>

Ora, quando faccio funzionare il parser SAX su questo, ottengo un'eccezione:

[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)

Tuttavia, so come risolvere questo. Ho semplicemente aggiungere questa riga alla stringa viene analizzata:

        <!ENTITY lambda "&#923;">

Questo mi dà

<?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>

Ora, analizza bene, grazie.

Tuttavia, il problema è che non posso aggiungere una dichiarazione di entità per ogni entità carattere possibile che possono essere utilizzati nella MathML (per esempio, "parte", "notin", e "somma").

Come faccio a riscrivere questa stringa in modo che possa essere analizzato per qualsiasi entità carattere possibile che potrebbe essere incluso?

È stato utile?

Soluzione

Utilizzare una dichiarazione DOCTYPE che si riferisce alla MathML DTD :

<!DOCTYPE math 
    PUBLIC "-//W3C//DTD MathML 3.0//EN"
           "http://www.w3.org/Math/DTD/mathml3/mathml3.dtd">

o una copia locale dello stesso.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top