Анализ с саксофоном и обработка сущностей персонажа
-
26-10-2019 - |
Вопрос
Я анализирую выражение MathML с саксофоном (хотя тот факт, что он является математикой, может быть не совсем актуальным). Пример входной строки
<math xmlns='http://www.w3.org/1998/Math/MathML'>
<mrow>
<mo>λ</mo>
</mrow>
</math>
Чтобы Sax Parser принял эту строку, я немного ее расширяю:
<?xml version="1.0"?>
<!DOCTYPE doc_type [
<!ENTITY nbsp " ">
<!ENTITY amp "&">
]>
<body>
<math xmlns='http://www.w3.org/1998/Math/MathML'>
<mrow>
<mo>λ</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 "Λ">
Это дает мне
<?xml version="1.0"?>
<!DOCTYPE doc_type [
<!ENTITY nbsp " ">
<!ENTITY amp "&">
<!ENTITY lambda "Λ">
]>
<body>
<math xmlns='http://www.w3.org/1998/Math/MathML'>
<mrow>
<mo>λ</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">
или местная копия того же.