Question

Je suis une expression MathML analyse syntaxique SAX (bien que le fait qu'il soit MathML ne peut pas être tout à fait pertinent). Une chaîne d'entrée de l'exemple est

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

Pour que l'analyseur SAX pour accepter cette chaîne, j'étendre un peu:

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

Maintenant, quand je lance l'analyseur SAX à ce sujet, je reçois une exception:

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

Cependant, je sais comment résoudre ce problème. J'ajoute simplement cette ligne à la chaîne en cours d'analyse:

        <!ENTITY lambda "&#923;">

Cela me donne

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

Maintenant, il analyse très bien, je vous remercie.

Cependant, le problème est que je ne peux pas ajouter une déclaration d'entité pour chaque entité de caractère possible qui pourrait être utilisé dans MathML (par exemple, « partie », « Notin » et « somme »).

Comment puis-je réécrire cette chaîne afin qu'il puisse être analysé pour toute entité de caractères possibles qui pourraient être inclus?

Était-ce utile?

La solution

Utilisez une déclaration DOCTYPE qui fait référence à la MathML DTD :

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

ou une copie locale du même.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top