私はSAXでMathML式を解析しています(ただし、MathMLであるという事実は完全には関連していない可能性があります)。入力文字列の例は次のとおりです。
<math xmlns='http://www.w3.org/1998/Math/MathML'>
<mrow>
<mo>λ</mo>
</mrow>
</math>
SAXパーサーがこの文字列を受け入れるために、少し拡張します。
<?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パーサーを実行すると、例外が発生します。
[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で使用される可能性のあるすべての文字エンティティ(たとえば、「part」、「notin」、「sum」)にENTITY宣言を追加できないことです。
この文字列を書き直して、含まれている可能性のある文字エンティティを解析できるようにするにはどうすればよいですか?