2018年06月24日
川俣晶の縁側ソフトウェアMagSite2開発日誌 total 1923 count

MagML仕様書 Version 0.22

Written By: 川俣 晶連絡先

MagML: MagSite Markup Language仕様書 §

 Version 0.22

 2018年06月24日

 株式会社ピーデー

 川俣晶

目的 §

 MagSite1のコンテンツ記述を楽に済ませる短縮記法を提供する。

この文書について §

 この文書はMagML自身で記述されている……はずである。

 この文書は、この文書自身で完結していない。MagSite1自身の機能、特にコンテンツに従属する画像の取り扱い機能に関する情報を含んでいない。

要求 §

  • 容易に見出しを記述できる
  • 容易にリストを記述できる
  • 容易に強調を記述できる
  • 容易にハイパーリンクを記述できる (URLを隠せる)
  • 容易にフォーマット済みテキストを記述できる (固定ピッチ。行頭空白の有効化)
  • 容易にテーブルを記述できる
  • 容易に画像表示を記述できる

概要 §

 既存の言語との互換性は意識せず、シンプルで簡単に使え、同時に拡張性に優れる言語である。XHTMLへの変換を意識している。

空白文字 §

 空白文字とは、タブ、半角空白、全角空白のいずれかの文字の1つ以上の繰り返しとする。

改行 §

 改行とは、CR, LF, CR+LFのいずれかのシーケンスとする。

マークアップの基本原則 §

 2個の連続した$記号がマークアップの開始を意味し、2個の$記号+!記号がマークアップの終わりを意味する。前者を開始マークアップ、後者を終了マークアップという。終了マークアップが出現することなく行末に達した場合は、そこに終了マークアップがあると見なす。

 終了マークアップに相当するテキストは、マークアップの外側では、そのまま記述することができる。

 マークアップの内側または外側で、$記号自身は、3個の連続した$記号によって記述することができるが、これはドル記号マークアップによって実現されるものである。

 2個の連続した$記号の次の文字から最初の空白文字、改行または文書末までの間をマークアップ名と見なす。最初の空白文字から、終了マークアップまでの間は、マークアップの内容である。マークアップの内容は、マークアップ名によって扱いが異なる。最初の空白文字が存在しない場合は、終了マークアップの手前までがマークアップ名となり、内容は存在しない。

 マークアップはネストすることができる。マークアップの内容がマークアップを含んでいても良い。

マークアップの分類 §

 マークアップは、特殊文字マークアップ、例外文字マークアップ、ブロックマークアップとインラインマークアップに分けられる。ブロックマークアップとインラインマークアップは、XHTMLのブロック要素とインライン要素に対応する概念ではあるが、同じではない。

 特殊文字マークアップは構文上特別な意味を持つ文字を記述する代替記述書式を提供するもので、文字として扱われる。特殊文字マークアップには、終了マークアップが存在しない。内容に文字列のみを含めることができるマークアップの内容に含めることができる。

 例外文字マークアップは、最終的なレンダリング時には文字に置換されるが、MagMLの構文解析上は文字としては扱われない。例外文字マークアップ、終了マークアップが存在しない。内容に文字列のみを含めることができるマークアップの内容に含めることはできない。例外文字マークアップは、インラインマークアップの特殊な形態であり、インラインマークアップが許される文脈においてのみ記述することができる。

 ブロックマークアップはそれ自身が1行を構成している必要がある。

 インラインマークアップは1行の一部として存在することができる。

 通常、インラインマークアップの内部にはインラインマークアップを記述してネストすることができるが、ブロックマークアップの内容にブロックマークアップを記述することはできない。

マークアップ名 §

ドル記号($) §

 マークアップ名$は、$記号自身を示す。1文字の$記号に置き換えられる。

 これは特殊文字マークアップである。

カンマ記号(,) §

 マークアップ名,は、,記号自身を示す。1文字の,記号に置き換えられる。

 これは例外文字マークアップである。

全角空白(z) §

 マークアップ名zは、全角空白文字を示す。1文字の全角空白文字に置き換えられる。

 これは特殊文字マークアップである。

半角空白(h) §

 マークアップ名hは、半角空白文字を示す。1文字のU+00A0に置き換えられる。これはHTMLの に相当する。

 これは特殊文字マークアップである。

円記号(y) §

 マークアップ名\は、円記号を示す。1文字のU+00A5に置き換えられる。

 これは特殊文字マークアップである。

 補足: U+005Cはバックスラッシュを示すコードであり、円記号を意味しない。しかし、フォントによって、円記号を表示する場合がある。フォントに関係なく、確実に円記号を指定するには、U+00A5を使用することができる。この意図を容易に実現するために、用意されたマークアップである。

見出しマークアップ(1, 2, 3, 4, 5) §

 半角数値の1から5までのマークアップ名は見出しを意味し、XHTMLのh2~h6要素に変換される。コンテンツのタイトルは、MagML外で指定される構造であるため、h1に対応するものは定義されない。内容は、見出しの文字列として認識される。内容には、ドル記号マークアップのみを含むことができる。

 ブロックマークアップである。

順序のないリスト(ul) §

 マークアップ名ulは、順序のないリストの開始または終了を示す。内容が文字列'start'の場合はリストの開始を示す。'end'の場合はリストの終了を示す。空内容の場合は、リストが開始されていない場合はリストの開始を示し、リストが開始されている場合は、リストの終了を示す。リストの開始から終了までの間のすべての行は、リストアイテムであると見なされ、XHTMLのli要素に変換される。順序のないリストマークアップそのものは、XHTMLのul要素に変換される。

 順序のないリストはネストすることができる。

 リストの終了が示されることなく終わった場合は文書末がリストの終了であると見なされる。

 ブロックマークアップである。

順序のあるリスト(ol) §

 マークアップ名olは、順序のあるリストの開始または終了を示す。XHTMLのol要素に変換されることを除けば、順序のないリスト(ul)とすべて同じ仕様である。

アンダーライン(_) §

 マークアップ名_は、アンダーラインを示す。XHTMLのspan要素+CSSのスタイル指定に置き換えられる。内容には、文字列とインラインマークアップのみを含むことができる。

 これはインラインマークアップである。

強い強調(*) §

 マークアップ名*は、強い強調を示す。XHTMLのstrong要素に置き換えられる。標準的にはボールド指定となる。内容には、文字列とインラインマークアップのみを含むことができる。

 これはインラインマークアップである。

強調(/) §

 マークアップ名/は、強調を示す。XHTMLのem要素に置き換えられる。標準的にはイタリック指定となる。内容には、文字列とインラインマークアップのみを含むことができる。

 これはインラインマークアップである。

打ち消し(-) §

 マークアップ名-は、打ち消しを示す。XHTMLのspan要素+CSSスタイル指定に置き換えられる。標準的には打ち消し線指定となる。内容には、文字列とインラインマークアップのみを含むことができる。

 これはインラインマークアップである。

字下げ(>) §

 マークアップ名>は、字下げの開始と終了を示す。内容が文字列'start'の場合は字下げの開始を示す。'end'の場合は字下げの終了を示す。空内容の場合は、字下げが開始されていない場合は字下げの開始を示し、字下げが開始されている場合は、字下げの終了を示す。字下げの開始から終了までの間のすべての行は、字下げされていると見なされ、XHTMLのdiv要素とCSSによる字下げ指定の組み合わせに置き換えられる。

 字下げはネストすることができる。

 字下げの終了が示されることなく終わった場合は文書末が字下げの終了であると見なされる。

 ブロックマークアップである。

ハイパーリンク(a) §

 マークアップ名aは、ハイパーリンクを示す。最初の空白文字と2番目の空白文字に挟まれた範囲をURIと見なし、2番目の空白文字からマークアップの終わりまでの範囲を見出しと見なす。そして、XHTMLの<a href="URI">見出し</a>に置き換えられる。2番目の空白文字は、テキスト意外の開始マークアップなどで代用することができる。

 編集時のプレビューなどでは、aeマークアップとしてレンダリングしても良い。

 これはインラインマークアップである。

外部ハイパーリンク(ae) §

 マークアップ名aeは、外部ハイパーリンクを示す。生成されるa要素にtarget="_blank"属性が付加される以外はaマークアップと同等である。

 これはインラインマークアップである。

フォーマット済みテキスト(pre) §

 マークアップ名preは、フォーマット済みテキストの開始と終了を示す。内容が文字列'start'の場合はフォーマット済みテキストの開始を示す。'end'の場合はフォーマット済みテキストの終了を示す。空内容の場合は、フォーマット済みテキストが開始されていない場合はフォーマット済みテキストの開始を示し、フォーマット済みテキストが開始されている場合は、フォーマット済みテキストの終了を示す。フォーマット済みテキストの開始から終了までの間のすべての行は、固定ピッチフォントでフォーマット済みと見なされ、XHTMLのpre要素またはそれに相当する表現に置き換えられる。

 フォーマット済みテキストはネストすることができない。

 フォーマット済みテキストの終了が示されることなく終わった場合は文書末がフォーマット済みテキストの終了であると見なされる。

 ブロックマークアップである。

テーブル(table) §

 マークアップ名tableは、テーブルの開始と終了を示す。内容が文字列'start'の場合はテーブルの開始を示す。'end'の場合はテーブルの終了を示す。空内容の場合は、テーブルが開始されていない場合はテーブルの開始を示し、テーブルが開始されている場合は、テーブルの終了を示す。テーブルの開始から終了までの間のすべての行は、カンマ区切りで表現されたテーブルの内容と見なされる。最初の1行のみth要素の変換され、残りの行はtd要素に変換される。また各行はtr要素でくくられる。全体はtable要素でくくられる。テーブルの内容にカンマ記号を記述したい場合は、カンマ記号マークアップを使用する。

 テーブルの内容に記述されたマークアップの内容に出現するカンマ記号は、テーブル内容の区切りとは見なされない。

 テーブルはネストすることができない。

 テーブルの終了が示されることなく終わった場合は文書末がテーブルの終了であると見なされる。

 ブロックマークアップである。

画像表示(img) §

 マークアップ名imgは画像のインライン表示を示す。内容は、最初の空白文字から2番目の空白文字までの間を、そのコンテンツに従属する画像データの名前(通常は番号を半角数字で記述したもの)と見なす。2番目の空白文字から3番目の空白文字までの間を、その画像を表示する横幅のピクセル数と見なす。横幅ピクセル数は省略でき、その場合はスケーリング無しを示す。横幅ピクセル数は、120, 300, 600, 750, 1000のいずれかの数字のみを指定できる。

 XHTMLのimg要素に置き換えられる。<img src="画像のURI" alt="画像の見出し" />に置き換えられる。

 これはインラインマークアップである。

画像メニュー表示(pm) §

 マークアップ名pmは添付ファイルの画像メニュー表示を示す。内容は、添付ファイルの番号を示す半角数字の文字列。

 サイズ別の選択リンク、見出しを含め、XHTMLのa要素とimg要素などに置き換えられる。(画像指定を文書内に含めない場合に文書末に付加される画像表示と同じ)

 これはブロックマークアップである。

添付ファイルリンク表示(fl) §

 マークアップ名flは添付ファイルリンク表示を示す。内容は、添付ファイルの番号を示す半角数字の文字列。

 (ファイル指定を文書内に含めない場合に文書末に付加されるファイル指定と同じ)

 これはブロックマークアップである。

カテゴリ(cat) §

 マークアップ名catはカテゴリ文字列を示す。内容は、カテゴリ名となる文字列。

 カテゴリは、同じカテゴリに属するコンテンツ同士をグループ化して、読者に対して親切なナビゲーションを提供するために使用される。カテゴリによって発動される具体的な機能やユーザーインターフェースは応用プログラムに依存する。

 カテゴリマークアップは、レンダリング時には本文中には存在しなかったかのように扱われる。

 これはブロックマークアップである。

YouTube(xyt) §

 マークアップ名xytはYouTubeの動画をページ内に埋め込む指定となる。

 内容は、最初の空白文字から2番目の空白文字までの間を、指定動画のIDとなる文字列と見なす。たとえば、独立した閲覧URLがhttp://www.youtube.com/watch?v=9yX4qPijnQkならば"9yX4qPijnQk"の部分に相当する文字列をIDとして記述する。

 2番目の空白文字から3番目の空白文字までの間を、その動画を表示する横幅のピクセル数と見なす。横幅ピクセル数は省略でき、その場合は425と見なされる。

 3番目の空白文字から4番目の空白文字までの間を、その動画を表示する縦幅のピクセル数と見なす。縦幅ピクセル数は省略でき、その場合は350と見なされる。

 このマークアップは、YouTubeという固有のサービスに強く依存するため、恒久的に利用可能であるという保証を示すことができない。

 これはブロックマークアップである。

WikiPedia(wikipedia) §

 マークアップ名wikipediaはWikiPediaへのリンクを埋め込む指定となる。マークアップの内容を見出しとしたWikiPediaの項目へのリンクを生成する。内容が空文字列の場合は、WikiPediaという見出しでWikiPediaの表紙へのリンクを生成する。

 対象とするWikiPediaは日本語版とする。

 これはインラインマークアップである。

Content Reference(ref) §

 マークアップ名refは同一サイト内のコンテンツへのリンクを生成する。内容はコンテンツのIDとする。

 これはインラインマークアップである。

Content Tree (ctree) §

 マークアップ名ctreeはコンテンツのツリーの生成を示す。内容は、キーワードを示す短い名前となる文字列。省略時はルート("▲")相当が指定されたものとみなされる。

 指定されたキーワードとその子キーワードに属するすべてのコンテンツの一覧表を生成する。

 これはブロックマークアップである。

ネタバレ隠し (xhide) §

 マークアップ名xhideは、ネタバレ隠しを示す。背景と同色の文字色を持つ文字で内容を記述する。通常のWebブラウザでは、文字列を選択することで内容を読むことが可能になる。内容には、文字列とインラインマークアップのみを含むことができる。

 これはインラインマークアップである。

ブロック引用 (bq) §

 マークアップ名bqは、ブロック引用を示す。XHTMLのblockquote要素に展開される。

 内容が文字列'start'の場合はブロック引用の開始を示す。'end'の場合はブロック引用の終了を示す。空内容の場合は、ブロック引用が開始されていない場合はブロック引用の開始を示し、ブロック引用が開始されている場合は、ブロック引用の終了を示す。

 ブロック引用の終了が示されることなく終わった場合は文書末がブロック引用の終了であると見なされる。

 これはブロックマークアップである。

インライン引用 (q) §

 マークアップ名qは、インライン引用を示す。XHTMLのq要素に展開される。内容には、文字列とインラインマークアップのみを含むことができる。

 これはインラインマークアップである。

Google Maps埋め込み (gm) §

 マークアップ名gmは、leafletと地理院タイルによる地図の埋め込みを示す。

 内容は以下の書式を持つ。ここで[……]は省略可能を示す。マーカー情報は必要な数だけ0回以上繰り返される。

$$gm [横サイズ],[縦サイズ],中心緯度,中心経度,[ズームレベル],[タイプ][,マーカー緯度,マーカー経度,マーカー説明,[マーカーURL],...]

 横サイズ,縦サイズはCSS表記のサイズ(例: 12em, 90%等)。

 横サイズ省略時は"100%"、縦サイズ省略時は"12em"とみなされる。

 ズームレベルは0~20の整数を指定する。省略時は"13"とみなされる。

 タイプは以下のいずれかの1文字となる。省略時は"r"とみなされる。

  • r, 地理院地図
  • a, 空中写真
  • h, 空中写真 (互換のため。利用非推奨。aと同じ)
  • b, 2007年~ (空中写真)
  • c, 2004年~ (空中写真)
  • d, 1988~1990年 (空中写真)
  • e, 1984~1986年 (空中写真)
  • f, 1979~1983年 (空中写真)
  • g, 1974~1978年 (空中写真)
  • i, 1961~1969年 (空中写真)
  • j, 1945~1950年 (空中写真)
  • k, 1936年頃 (空中写真)
  • l, 色別標高図
  • m, 陰影起伏図

 タイプ"h"は互換のためのタイプなので、オーサリング機能で新規に設定されることはない。GoogleMap対応の旧バージョンでは【ハブリッド】であり、動作が異なる。【ハブリッド】に対応するマップはサポートされていない。

 ズーム倍率の範囲は収録範囲はマップの種類やズーム倍率事に異なる。あるマップで表示できるエリアが他のマップで表示できるとは限らない。これらの制約は地理院タイルの制約であるため、解消は地理院タイルの拡張が前提である。

 マーカーURLが空文字列ではない場合、ピン説明はリンクとして生成される。

 内容にカンマ記号自身を文字として記述する場合はカンマ記号マークアップを使用することができる。

 これはブロックマークアップである。

Google Maps埋め込みライン付き (gml) §

 マークアップ名gmlは、leafletと地理院タイルによる地図の埋め込みを示す。ただし、gmマークアップと異なり、指定されたマーカー間をラインで結ぶ描画を行う。

 内容の詳細はgmマークアップと同等である。

 これはブロックマークアップである。

Google Maps埋め込みポイント指定 (gmp) §

 マークアップ名gmpは、leafletと地理院タイルによる地図の埋め込みにより、特定の1つのポイントのみを示す。

 中心緯度,中心経度で指定されるポイントに名無しのマーカーが1つだけ表示される。

$$gmp [横サイズ],[縦サイズ],中心緯度,中心経度,[ズームレベル],[タイプ]

 内容の詳細はgmマークアップに準じる。

倍サイズテキスト (ltx) §

 マークアップ名btは、倍サイズテキストを示す。内容のテキストは2倍のサイズで表示される。

 内容が文字列'start'の場合はブロック引用の開始を示す。'end'の場合はブロック引用の終了を示す。空内容の場合は、ブロック引用が開始されていない場合はブロック引用の開始を示し、ブロック引用が開始されている場合は、ブロック引用の終了を示す。

 ブロック引用の終了が示されることなく終わった場合は文書末がブロック引用の終了であると見なされる。

 これはブロックマークアップである。

色づけテキスト (cl) §

 マークアップ名clは、色づけテキストを示す。文書埋め込みstyle属性のCSSのcolorに展開される。

 内容は、最初の空白文字から2番目の空白文字までの間を、CSS表記の色指定とみなす。2番目の空白文字以降を内容本文とみなす。

 このマークアップはネストできる。

 これはインラインマークアップである。

xhtmlマークアップ (xhtml) §

 マークアップ名xhtmlは、XHTMLの文書フラグメントをMagML文書内に埋め込みを示す。

 内容は無い。

 ターミネータ行は"$$xhtml"だけが記述された行とする。このケースにおいて、ターミネータ行はマークアップのように見えるがマークアップではない。

 このマークアップの次行から、ターミネータ行の手前までの範囲の文字列は、そのままXML文書フラグメントとしてチェックされる。実際に文書がレンダリングされる際には、そのまま無修正で文書に埋め込まれる。ただし、最終段階での変換によってHTML形式で出力される可能性があり得る。

 ターミネータ行が示されることなく終わった場合は文書末がXHTML文書フラグメントの終了であると見なされる。

 これはブロックマークアップである。

 結果が等価であれば、これはマークアップとして処理せず、構文解析レベルで処理しても良い。

flashマークアップ (flash) 【obsolete】 §

 マークアップ名flashは、Flashオブジェクトの挿入を示す。内容は、カンマ区切りで以下の情報を記述する。

$$flash そのコンテンツに従属するファイル番号[,[横ピクセル数],[縦ピクセル数][,[付加パラメータ]]]

 全ての番号、数は半角数字で指定する。

 付加パラメータはqurl=test.xmlのように記述し、これがFlashのSWFファイルのURIの末尾に"?"を介して付加される。

 このマークアップはbaseパラメータに添付ファイルのルートURIが指定されるので、Flashオブジェクトより参照される相対URIは、このルートURIに対する相対URIとなる。

 横ピクセル数が指定されないとき、550が補われる。

 縦ピクセル数が指定されないとき、400が補われる。

 付加パラメータが指定されないとき、空文字列が補われる。

 このマークアップが対象とするファイルは、flマークアップの対象となるファイルのうち、拡張子が.swfのものである。拡張子が.swfのファイルは、flマークアップ、flashマークアップのどちらで扱っても良い。

 これはインラインマークアップである。

fhideマークアップ (fhide) §

 マークアップ名fhideは指定添付ファイルに関するリンクを生成しないことを示す。内容は、添付ファイルの番号を示す半角数字の文字列。flashマークアップの付加パラメータによってファイルを参照する際、それに対するリンクを生成しないために使用する。

 これはブロックマークアップである。

超クイズマークアップ (superq) 【obsolete】 §

 マークアップ名superqは指定添付ファイルを「超クイズ」の問題データと見なし、これを用いた超クイズを生成する。内容は、カンマ区切りで以下の情報を記述する。

$$superq 問題ファイル番号[,[横ピクセル数],[縦ピクセル数]]

 全ての番号、数は半角数字で指定する。

 横ピクセル数が指定されないとき、550が補われる。

 縦ピクセル数が指定されないとき、400が補われる。

 これはインラインマークアップである。

ASIN参照マークアップ (asin) §

 マークアップ名asinはASINコードをドキュメントに埋め込むことを示す。内容は、ASINコードの文字列。

 このマークアップは通常レンダリングされず、MagMLレンダラの外部に情報を提供する。

 これはブロックマークアップである。

代表ASIN参照マークアップ (asinr) §

 代表ASIN参照マークアップは、ASIN参照マークアップと同等である。ただし、コンテンツのタイトルに、ASINコードで参照されるアイテムの「タイトル」+「著者」+「出版社」を連結する。

 代表ASIN参照マークアップは1つの文書に複数含まれてよく、それらは全て処理される。

 これはブロックマークアップである。

ValueCommerce参照マークアップ (vc) §

 マークアップ名vcはValueCommerceの商品IDをドキュメントに埋め込むことを示す。内容は、ecCode,productCodeの文字列。

$$vc ecCode,productCode

 このマークアップは通常レンダリングされず、MagMLレンダラの外部に情報を提供する。

 これはブロックマークアップである。

isbn参照マークアップ (isbn) §

 マークアップ名isbnは13桁のISBNコードをドキュメントに埋め込むことを示す。内容は、ISBNコードの文字列。

 このマークアップは通常レンダリングされず、MagMLレンダラの外部に情報を提供する。

 これはブロックマークアップである。

未知マークアップ名の処理 §

 未知のマークアップ名が出現した場合、適切なエラーメッセージに置き換えた上で処理を継続する。処理は中断されない。

トグル動作についての注意 §

 内容に文字列'start'または'end'を指定するマークアップで、これらを指定しなかった場合、既に'start'が指定されていた場合は'end'を。そうではない場合は'start'が指定されたものと見なす。その際、「既に'start'が指定されていた場合」とは、ネストの1つ上のマークアップが同じマークアップの'start'相当の機能を持っている場合を意味する。ネストの階層の中間に他のマークアップが挟まる場合は、「既に'start'が指定されていた場合」とは見なされない。

変更履歴 §

日付 バージョン 内容
2003年8月24日 - バージョン番号も付かない最初のアイデアメモ
2003年9月1日 0.01 とりあえず、形にしてみたもの
2003年9月1日 0.02 画像データの番号を名前に変更
2003年10月7日 0.03 (このバージョンは不適切であるためキャンセルされた)
2003年10月7日 0.04 ドル記号マークアップをドル記号3個に置き換え。改行を追加
2003年10月9日 0.05 マークアップ終了をドル記号2個+!記号に置き換え
2003年10月9日 0.06 timgを削除。pmとflを追加
2003年10月11日 0.07 ハイパーリンクマークアップの2番目の空白文字の代用規定を追加
2003年10月14日 0.08 imgマークアップの横幅ピクセル数の制限を追加記述
2003年10月14日 0.09 トグル動作についての注意を追加
2003年10月16日 0.10 特殊文字マークアップを追加
2005年03月27日 0.11 catマークアップの追加
2006年08月07日 0.12 xytマークアップの追加
2006年08月08日 0.13 wikipediaとrefマークアップの追加
2006年08月10日 0.14 aeマークアップの追加
2007年04月12日 0.15 olとctreeと-マークアップの追加
2007年11月25日 0.16 例外文字マークアップ、q,bqマークアップを追加
2007年12月02日 0.17 gm,gmp,gml,ltx,clマークアップを追加
2008年08月17日 0.18 xhtml,flash,fhide,superqマークアップを追加
2008年08月18日 0.19 asinマークアップ,asinrマークアップを追加
2015年03月13日 0.20 flash, superqマークアップをobslete
2017年06月27日 0.21 vc,isbnマークアップを追加
2018年06月24日 0.22 GoogleMapからleaflet+地理院タイルに変更

end.