Анализ с саксофоном и обработка сущностей персонажа

StackOverflow https://stackoverflow.com/questions/6308697

Вопрос

Я анализирую выражение MathML с саксофоном (хотя тот факт, что он является математикой, может быть не совсем актуальным). Пример входной строки

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

Чтобы Sax Parser принял эту строку, я немного ее расширяю:

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

Теперь, когда я запускаю Sax Parser по этому поводу, я получаю исключение:

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

Однако я знаю, как это исправить. Я просто добавляю эту строку в проанализированную строку:

        <!ENTITY lambda "&#923;">

Это дает мне

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

Теперь это отлично подходит, спасибо.

Тем не менее, проблема в том, что я не могу добавить объявление сущности для каждой возможной сущности персонажа, которая может использоваться в Mathml (например, «часть», «notin» и «sum»).

Как мне переписать эту строку, чтобы ее можно было проанализировать для любой возможного персонажа, который может быть включен?

Это было полезно?

Решение

Используйте декларацию Doctype, которая относится к Mathml Dtd:

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

или местная копия того же.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top