<html xmlns="http://www.w3.org/1999/xhtml"><head></head><body><section><h1>プロトコル要素の人間可読性</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="1" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[1]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">プロトコル要素</anchor>等には主として<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">人間可読</anchor>なものとそうでないものがあります。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="2" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[2]</anchor-end> その<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">人間可読</anchor>な度合いや<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">言語</anchor>等に関わる操作の適用可能性の程度にも色々なレベルがあり、
各種仕様でいろいろな概念が定義されています。</p><figure class="middle list"><figcaption><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="7" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[7]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">人間可読</anchor>な<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">プロトコル要素</anchor>を表す概念</figcaption><ul><li><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Language-Sensitive</anchor></li><li><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ローカル化可能文字列</anchor></li><li><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">翻訳可能属性</anchor></li><li><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">directionality-capable attribute</anchor></li></ul></figure><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="15" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[15]</anchor-end> 
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">引数 (HTTP)</anchor> では<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">人間可読なテキスト</anchor>の構文を規定する仕様に対する要求があります。</p><section><h1>人間可読属性値</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="4" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[4]</anchor-end> 
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">SGML</anchor> や <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">XML</anchor> 
は<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">属性値</anchor>を<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">文字列</anchor>としており、
<weak xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">(<anchor>応用</anchor>依存ではない形の)</weak>
複雑な構造を記述できません。
<dfn>人間可読属性値</dfn>は<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">悪い習慣</anchor>といわれていました。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="5" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[5]</anchor-end> 
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">人間可読属性値</anchor>は避けて (<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">子要素</anchor>を使って) 
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">要素の内容</anchor>とするべきといわれていました。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="6" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[6]</anchor-end> 
ところがそれでは<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">著者</anchor>にとっても処理するプログラムにとっても扱いにくさが極端に増すので、
あまり好まれませんでした。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="8" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[8]</anchor-end> 
(<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTML</anchor> でいう) <code>ruby</code> や <code>bdo</code> 
のような<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">国際化</anchor>に関係する<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">要素</anchor>を<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">属性値</anchor>で記述できないため、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">国際化</anchor>の専門家を称する人々が特に主張していました。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="11" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[11]</anchor-end> 
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">人間可読属性値</anchor>を避けるべきという考え方自体が、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTML</anchor> の <code>ruby</code> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">要素</anchor>に至る機能開発の中で生まれてきたと思われます。
(<code>ruby</code> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">要素</anchor>の当初の設計は、
専用の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">要素</anchor>ではなく<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">振り仮名</anchor>を<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">属性</anchor>に記述するというものでした。)</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="9" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[9]</anchor-end> 
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Atom 1.0</anchor> の <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Language-Sensitive</anchor> はそのような時代の産物で、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">人間可読</anchor>な内容をすべて<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">要素の内容</anchor>として記述しています。
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Atom</anchor> は基本的に<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">属性</anchor>を使わず<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">子要素</anchor>で親要素を説明する形で統一されて設計されているので、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">人間可読属性値</anchor>を避ける方針がうまくなじんでいます。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="10" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[10]</anchor-end> 
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTML</anchor> は<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">人間可読属性値</anchor>を避けるべきという考え方が生まれる前に作られた構造が多く、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">人間可読属性値</anchor>がよく使われます。
先例を踏襲するということで新たに作られたものもあります。
後に<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">翻訳可能属性</anchor>といわれるようになりました。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="12" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[12]</anchor-end> 
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTML</anchor> で最も象徴的なのが <code>title<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">title=&quot;&quot;</title></code> 属性です。
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">要素</anchor>についての追加情報を記述できるものです。
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTML</anchor> では文書のメインの内容というべきテキストが<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">要素の内容</anchor>に記述される設計なので、
文書の主たる表示とは別に表示されるべき 
<code>title<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">title=&quot;&quot;</title></code> 
の文字列が<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">属性値</anchor>でなく<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">子要素</anchor>で記述されるとなると、
多少の違和感があります。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="13" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[13]</anchor-end> 
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">SVG</anchor> は
<code>title<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">title=&quot;&quot;</title></code>
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">属性</anchor>に相当するものを
<code>title</code>
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">子要素</anchor>としています。
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">SVG</anchor>
では<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">要素の内容</anchor>は親要素を補足する子要素になることが多いので、
<code>title</code>
が<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">子要素</anchor>になっていてもあまり違和感がありません。
ただし
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTML</anchor>
との整合性を欠いているという欠点
<weak xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">(言語設計の美しさだけでなく、実装の共通化にも支障があり、現に <anchor>SVG</anchor> でも誤って <code xmlns="http://www.w3.org/1999/xhtml">title<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">title=&quot;&quot;</title></code> 属性を認識する実装があった。)</weak>
がある上、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">SVG文書</anchor>全体の題名の 
<code>title</code>
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">要素</anchor>と
<weak xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">(若干機能性が異なるにも関わらず)</weak>
統合してしまっているのもやや問題です。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="14" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[14]</anchor-end> 
こうした実例を見ていくと、
「<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">データ構造</anchor>的な言語」
では<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">人間可読属性値</anchor>を避ける設計が馴染むのに対し、
「<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">文章</anchor>的な言語」
ではそうでもないように思われます。
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">人間可読</anchor>なデータの非線形的混合を記述しづらいのは
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">SGML</anchor>
の設計の限界かもしれません。</p></section></section><section><h1>関連</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="3" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[3]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">人間可読</anchor>と<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">機械可読</anchor>とは必ずしも<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">対義語</anchor>ではありません。</p></section><section><h1>メモ</h1></section></body></html>