Note
このドキュメントは2026-02-27 02:56にPLaMo Translation Modelを使用して自動翻訳されました。
FEP-dc88: 数学コンテンツのフォーマット仕様
概要
本FEPでは、ActivityPubにおける投稿コンテンツ内で数学を表現するためのフォーマット手法を提案する。さらに、数式を含むコンテンツをサポートしない実装向けに、そのような数式をプレーンテキストに変換・サニタイズする方法についても規定する。
要件
本仕様書中で使用される「MUST」「MUST NOT」「REQUIRED」「SHALL」「SHALL NOT」「SHOULD」「SHOULD NOT」「RECOMMENDED」「MAY」「OPTIONAL」の各用語は、[RFC-2119]に従って解釈するものとする。ここで言う「実装」とは、[ActivityPub]で定義されるActivityPub準拠クライアント、サーバー、または連合対応サーバーを指し、数学的にフォーマットされたコンテンツの生成または処理を行うものを指す。
歴史
記述形式による数学表現は、その発展が数千年にわたって継続的に行われてきた表記体系に大きく依存している。これほどまでに普遍的でありながら、数学記号は決して固定的なものではない。数学者は[LaTeX]などの複雑な組版システムを多用し、意図した通りにテキストを配置している。
[Mathstodon]をはじめとする複数のfediverseインスタンスが、数学関連の議論を行う場として登場してきた。これは主に、数学的記述とそのフォーマット伝達の難しさに起因するものであり、多くのインスタンスでは[LaTeX]ベースの独自の組版実装を提供している。しかし、TeX系フォーマットのレンダリングには多大なコストがかかり、セキュリティ上の問題や各実装固有の癖による課題も存在する。このため、複数のインスタンス間で互換性のないTeX系実装が乱立する事態が生じている。
近年、[MathML Core]はすべての主要なWebブラウザで標準化され、ActivityPub標準と整合性のある方法で、異なるfediverse実装間における数学的表現の伝達を可能にする代替手段として登場した。
数学コンテンツのフォーマット手法
実装は、[Activity Streams]オブジェクトのsummaryまたはcontentプロパティにおいて、mediaTypeがtext/HTML(デフォルト値)である場合、数学的なフォーマットを適用することができる。このフォーマットは必ず1つ以上の最上位レベルの<math>要素内に配置しなければならず、以下「数式要素」と称する。
数式要素には以下の要件を満たす必要がある:
- 1つの<semantics>子要素を必ず含むこと
- その他の子要素を一切持たないこと
- <semantics>要素には[MathML Core]仕様に準拠した式を最初の子要素として含めること
- 少なくとも1つの<annotation>要素を含むこと
- <annotation>要素のencodingプロパティは"application/x-tex"とすることが望ましいが、"text/plain"も許容され、数学的内容のプレーンテキスト記述(可能な限り著者が使用した形式)を含めなければならない
- 実装は、その他の意味情報を持つ追加の<annotation>または<annotation-xml>要素を含めてもよい
数式要素内に含まれるすべての要素は、[MathML Core]で定義されたMathML Core要素でなければならない。ただし、<annotation>要素内に包含される要素はこの限りではない。
数学的にフォーマットされたテキストのサニタイズ処理
実装は、ユーザーへの表示前に受信した数学的フォーマットをサニタイズする必要がある。実装が入力された数学的フォーマットをサニタイズする方法には、以下の2つの方法がある。
数式要素のサニタイズ処理
実装はユーザーに表示する前に、数式要素をサニタイズすることができる。この場合、[MathML Core]で定義されていないMathML Core要素はすべて削除しなければならない。また、意味情報を持たない属性([Semantic Attributes]参照)も任意で削除できる。ただし、[Semantic Attributes]やMathMLコア要素を削除することは許されず、代わりに数式要素全体をテキストに置き換える必要がある。
数式要素のテキストへの置換
実装は数式要素を完全に除去し、[Formatting Mathematics]セクションで規定されているように、<annotation>要素内にエンコーディング"application/x-tex"を持つテキストを挿入することができる。この場合、"text/plain"形式の注釈にフォールバックする必要がある。入力された数学的コンテンツが[Formatting Mathematics]仕様に従ってフォーマットされていない場合は、数式要素を完全に削除しなければならない。
実装は、<annotation>要素内のテキストを任意でデリミタで囲んでもよい。この際、例えば数式要素にdisplay="block"属性がある場合には$$と$$を、displaystyle="inline"の場合はTeX組版システムに合わせて$と$を選択することができる。
使用例
{"@context": ["https://www.w3.org/ns/activitystreams", {"@language": "en"}],
"type": "Note",
"id": "http://postparty.example/p/2415",
"content": "I have a truly marvelous proof that
<math>
<semantics>
<mrow>
<msup><mi>x</mi><mi>n</mi></msup>
<mo>+</mo>
<msup><mi>y</mi><mi>n</mi></msup>
<mo>≠</mo>
<msup><mi>z</mi><mi>n</mi></msup>
</mrow>
<annotation encoding=\"application/x-tex\">x^n+y^n\\ne z^n</annotation>
</semantics>
</math>
which this note is too small to contain!",
"source": {
"content": "I have a truly marvelous proof that \\(x^n+y^n\\ne z^n\\) which this note is too small to contain!",
"mediaType": "text/markdown+math"}}
このオブジェクトのsourceコンテンツは、contentフィールドに対する有効なサニタイズ処理結果を示している。
意味属性
| 要素 | 属性 | 値 |
|---|---|---|
| all | mathvariant |
normal |
| all | displaystyle, scriptlevel |
すべての値が許容される |
<math> |
display |
すべての値が許容される |
<mfrac> |
linethickness |
0, 1 |
<mspace> |
width, height, depth |
すべての値が許容される |
<mo> |
form stretchy, symmetric, largeop, movablelimits, lspace, rspace, minsize, |
すべての値が許容される |
参考文献
- [ActivityPub] Christine Lemmer Webber, Jessica Tallon, ActivityPub, 2018
- [ActivityStreams] James M Snell, Evan Prodromou, ActivityStreams 2.0, 2017
- [Activity Vocabulary] James M Snell, Evan Prodromou, Activity Vocabulary, 2017
- [LaTeX] LaTeX開発者チーム, The LaTeX Project
- [MathML Core] David Carlisle, Frédéric Wang, MathML Core W3C Candidate Recommendation Snapshot, 2023
- [Mathstodon] Mathstodon管理者チーム, About Mathstodon, 最終参照日:2023年
- [RFC-2119] S. Bradner, RFCで要件レベルを示すためのキーワード使用ガイドライン, 1997
著作権
CC0 1.0 Universal(CC0 1.0)パブリックドメイン献呈
法律の範囲内で、本Fediverse Enhancement Proposalの著者らは、当該作品に対するすべての著作権および関連する権利を放棄している。