2

Firefoxの場合:

<?xml version="1.0" encoding="utf-8"?>
<math display="block" xmlns="http://www.w3.org/1998/Math/MathML">
  <mi>&rho;</mi>
</math>

「未定義のエンティティ」エラーが発生します。

私はそこに何かが欠けていることを知っています。問題を修正するために何を書くべきかわかりません。すべてのUnicode文字をドキュメントに書き直さないようにしたいと思います。

編集私は次のことを試しましたが、まだ機能していません、同じエラー:

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE math [
  <!ENTITY % HTMLlat1 PUBLIC
    "-//W3C//ENTITIES Latin 1 for XHTML//EN"
    "xhtml-lat1.ent">
  %HTMLlat1;
  <!ENTITY % HTMLsymbol PUBLIC
    "-//W3C//ENTITIES Symbols for XHTML//EN"
    "xhtml-symbol.ent">
  %HTMLsymbol;
  <!ENTITY % HTMLspecial PUBLIC
    "-//W3C//ENTITIES Special for XHTML//EN"
    "xhtml-special.ent">
  %HTMLspecial;
]>
<math display="block" xmlns="http://www.w3.org/1998/Math/MathML">
  <mi>&rho;</mi>
</math>

編集クロムでは、これは次のメッセージになります:

error on line 6 at column 13: PEReference: %HTMLlat1; not found
warning on line 10 at column 15: PEReference: %HTMLsymbol; not found
warning on line 14 at column 16: PEReference: %HTMLspecial; not found

編集.entファイルをダウンロードし、参照をローカルhttp://パスまたはfile:///パスに変更しようとしましたが成功しませんでした。主題に関する同様の投稿:PHPのXMLカタログ

ブラウザのクイック回避策を編集します。

<!DOCTYPE html>
<math display="block" xmlns="http://www.w3.org/1998/Math/MathML">
  <mi>&rho;</mi>
</math>

XMLヘッダーを非表示にする必要があるため、HTMLとして理解されます。

それにもかかわらず、ドキュメントがXMLとして宣言されている間、質問はエンティティをインポートすることであったため、これは質問に答えません。

答え

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE math PUBLIC "-//W3C//DTD MathML 2.0//EN" "http://www.w3.org/Math/DTD/mathml2/mathml2.dtd">
<math display="block" xmlns="http://www.w3.org/1998/Math/MathML">
  <mi>&rho;</mi>
</math>
4

3 に答える 3

1

XHTML1およびMathML2の定義は廃止され、現在のブラウザーのHTMLパーサーに組み込まれている定義と一致していないことに注意してください。MathML3およびHTML5で使用されている現在の定義は、ここで定義されています

http://www.w3.org/2003/entities/2007doc/Overview.html

これはエディター(my :-)ドラフトで、上部にRECバージョンへのリンクがあります。

エンティティのDTD宣言の単一ファイルセットは次のとおりです。

http://www.w3.org/2003/entities/2007/htmlmathml-f.ent

一般的に言えば、ブラウザは外部参照されたDTDをフェッチしないため、XMLコンテキストでは、名前付きエンティティよりも数値参照を使用する方が適切です。

HTML(5)仕様に準拠しているブラウザは、パブリック識別子を介してxhtmlまたはmathml2 dtdを参照する場合、上記の仕様から派生した組み込みの定義セットを使用します(つまり、指定したエンティティ定義を使用しません)。

HTML仕様に対する関連バグを参照してください

https://www.w3.org/Bugs/Public/show_bug.cgi?id=13409

于 2012-12-04T22:08:56.297 に答える
1

XMLを変更してインラインDTDを含めることができる場合は、そこでエンティティを定義できます。

> <!DOCTYPE yourRootElement [
>     <!ENTITY bull "&#8226;">
>     .... ]>
于 2012-12-04T16:50:26.147 に答える
1

XML宣言の後にMathML2.0doctypeを追加します。

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE math
    PUBLIC "-//W3C//DTD MathML 2.0//EN"
           "http://www.w3.org/Math/DTD/mathml2/mathml2.dtd"
>

その理由は、エンティティ参照の処理がWebブラウザでは非常に扱いにくいためです。実際にはDTDを読み取りません。代わりに、事前定義されたエンティティの組み込みテーブルがあり、特定の文字列を使用してオンにすることができdoctypeます。これは文字列の魔法であり、たとえばMathML3.0のDoctypeを使用しても機能しません。Cf. XSLTを使用してXMLからXHTMLへ:&Sum;などのエンティティを使用 (これはMATHMLエンティティです)(特にMartin Honnenの回答に対するコメント)。

または、文字をそのまま使用するか、オーサリングシステムで文字を簡単に作成できない場合は、のような文字参照を使用し&#x3c1;ます。

于 2012-12-04T18:24:47.470 に答える