質問

私はSAXでMATHML式を解析しています(ただし、MathMLであるという事実は完全に関連していない可能性があります)。入力文字列の例はです

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

Saxパーサーがこの文字列を受け入れるために、私はそれを少し拡張します:

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

さて、これについてサックスパーサーを実行すると、例外が得られます。

[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で使用される可能性のあるすべての可能なキャラクターエンティティにエンティティ宣言を追加できないことです(たとえば、「パート」、「ノット」、「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