SAXでの解析とキャラクターエンティティの取り扱い
-
26-10-2019 - |
質問
私は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>
さて、これについてサックスパーサーを実行すると、例外が得られます。
[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で使用される可能性のあるすべての可能なキャラクターエンティティにエンティティ宣言を追加できないことです(たとえば、「パート」、「ノット」、「sum」)。
この文字列は、含まれている可能性のあるキャラクターエンティティに対して解析できるように、この文字列を書き直すにはどうすればよいですか?
解決
を指すDoctype宣言を使用します Mathml dtd:
<!DOCTYPE math
PUBLIC "-//W3C//DTD MathML 3.0//EN"
"http://www.w3.org/Math/DTD/mathml3/mathml3.dtd">
または同じもののローカルコピー。
所属していません StackOverflow