Pregunta

Estoy analizando una expresión de MATHML con SAX (aunque el hecho de que sea MATHML puede no ser completamente relevante). Una cadena de entrada de ejemplo es

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

Para que el analizador de saxo acepte esta cadena, la expanio un poco:

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

Ahora, cuando ejecuto el analizador de saxo en esto, obtengo una excepción:

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

Sin embargo, sé cómo solucionar eso. Simplemente agrego esta línea a la cadena que se analiza:

        <!ENTITY lambda "&#923;">

Esto me da

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

Ahora, analiza bien, gracias.

Sin embargo, el problema es que no puedo agregar una declaración de entidad para cada entidad de carácter posible que podría usarse en MATHML (por ejemplo, "parte", "Notin" y "suma").

¿Cómo reescribo esta cadena para que pueda analizarse para cualquier entidad de personajes posible que pueda incluirse?

¿Fue útil?

Solución

Use una declaración de doctype que se refiera a la MATHML DTD:

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

o una copia local de la misma.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top