<?xml version="1.0" encoding="Shift_JIS"?>
<document file="d20033f" class="Agenda" y="2003" m="3" division="f">
	<link class="d20030203">
		<rel type="home" href="index.html">Personnel</rel>
		<rel type="help" href="about.html">当サイトについて</rel>
		<rel type="contact" href="mail.html">連絡先</rel>
		<rel type="sitemap" href="sitemap.html">サイトマップ</rel>
		<rel type="prev" href="d20032l.html">2003/2/15〜31</rel>
		<rev type="section" href="agenda_archive.html">agenda アーカイブ目次</rev>
		<rev type="chapter" href="agenda2003.html">2003年目次</rev>
	</link>
	<h1>agenda</h1>
	<p>S curse</p>
	<h2 d="15" c="CSS Usability">何故左右マージンを小さくすべきなのか - 草稿 -</h2>
	<p>前置きしておきますと、見栄えを完全にCSSで制御しているのなら、ユーザースタイルシートで何とでもなるため、マージンをどう取ろうと問題にはなりません。ただ「WWWメディア対応のスタイルシート」を目指すなら、左右のマージンは出来る限り小さくしておきたいところです。</p>
	<h3>適切な折り返し文字数を調節できる</h3>
	<p>まず、私のように少ない文字数で折り返しされていると読みづらいという人もいます。というか、どの程度が読みやすいかは個人差があるのですから、それぞれが適当なウィンドウサイズにすることによって読みやすい折り返し文字数を<em>簡単に</em>調整できた方が良いのです。それができるのがウェブページですから。</p>
	<h3>流し読みしやすい</h3>
	<p>次に、その文書の概観を掴みたいときがあります。この時どうするかといえば、自分の環境で実現できる最大のウィンドウ幅を利用して、<em>一度に視界に入ってくる段落の冒頭や見出しを可能な限り多くさせます</em>。この場合、左右マージンは邪魔以外の何物でもありません。これについては<a href="http://noz.hp.infoseek.co.jp/diary/20011205.html">闇黒日記の平成13年12月22日の記事</a>が参考になると思います。</p>
	<p>私も以前は糞真面目に一字一句読んでいたのですが、最近は<q>飛ばし読み</q>というものの重要性をひしひしと感じています。時間は変わらないのに読むものが多くなったからでしょうか。あるいは既知の事柄が増えた為かもしれません。知っていることをくどくど説明している文章は読み飛ばしたいのです。</p>
	<h3>弊害</h3>
	<p><a href="http://noz.hp.infoseek.co.jp/diary/20011205.html">闇黒日記の平成13年12月23日の記事</a>を見ると、「左右マージンが少ないと心理的な圧迫感が増す」という問題もあるようですが、ウェブページデザイン（CSSのデザイン）は、ウェブの特性を最大限活かすべきです。従って、そのような「圧迫感」は、別のデザイン要素でカバーするよう努めるべきでしょう。そこが、腕の見せ所というやつなのではないでしょうか。</p>
	<p>因みに私の場合、<em>文章に集中している時</em>には、左右マージンが小さくても圧迫感を感じることはありません。ところが、スタイルシートを<em>スタイルとして眺めてみた時</em>、圧迫感を感じることがあります。文章を読みにきた閲覧者を対象にするのか、スタイルを眺めにきた閲覧者を対象にするのか、あるいは、どちらにも満足してもらいたいのか。その辺りで適切な幅が決まるのかなと思っています。</p>
	<h3>例外</h3>
	<p>詩など、通常一字一句読むようなコンテンツや、独特の修辞で「読ませる」タイプの「ネタ」などは例外です。ウェブ日記などもどうでしょう。何か特定の目的をもった閲覧者を想定しないタイプの「日記」は、左右マージンを小さくする必要があるかどうか、疑わしいものがあります。しかし、<abbr title="RDF Site Summary">RSS</abbr>や一部のアンテナ等で何が書かれているかを確認してから読みに行く、という目的志向の閲覧者（私含む）がいないとは限りませんから、長文が多くなる日記では やはり左右マージンは小さくしておいて良いと思います。</p>
	<h2 c="XPath Criticism" d="10">XPath解説突っ込み日記</h2>
	<p><a href="http://www.eris.ais.ne.jp/~himitu/diary/pre_dia/dia03_03.html">おかし日記</a>（３月10日（土））経由で見つけたXPath 1.0を解説している<a href="http://www.alpha-net.ne.jp/users2/uk413/prog/xml/xpath.html">XMLマスター基礎講座 （XPath編）</a>には誤りが沢山あります。というお話。</p>
	<blockquote cite="http://www.alpha-net.ne.jp/users2/uk413/prog/xml/xpath.html" title="XMLマスター基礎講座 （XPath編）">
		<p>ノードを特定するための規格 </p>
	</blockquote>
	<p>まずここからして私の認識とは少し違います。XPath 1.0は：</p>
	<li>ノード集合</li>
	<li>文字列</li>
	<li>数値</li>
	<li>ブール値</li>
	<p>これらを<em>表現</em>するための規格です。ノード集合を表現する方法の一つに「ロケーションパス」がありますが、この<a href="http://www.alpha-net.ne.jp/users2/uk413/prog/xml/xpath.html">XMLマスター基礎講座 （XPath編） </a>で取り上げられているのは「省略文法のロケーションパス」と「一部の関数」です。</p>
	<p><code>'あ'</code>。これも「あ」という文字列を表すXPathの表現です。</p>
	<p>とはいえロケーションパスはXPath 1.0の主要な部分であると言われていますから、揚げ足を取ったに過ぎません。もちろん非常に重要だと思うから書いたわけですが。例えばXSLTのvalue-of要素のselect属性には、XPathで文字列を表現したものを記述します。そうでないものは勝手に文字列に変換されているに過ぎません。</p>
	<blockquote cite="http://www.alpha-net.ne.jp/users2/uk413/prog/xml/xpath.html" title="XMLマスター基礎講座 （XPath編）">
		<p>基本的には「.」「..」「/」「*」と要素名の組み合わせですね。</p>
	</blockquote>
	<p>これまた私の認識とは違います。ロケーションパスの基本は：</p>
	<li>ロケーションステップ</li>
	<li>ステップの区切り子「<code>/</code>」</li>
	<li>ルートノード表現「<code>/</code>」</li>
	<p>以上の三つの組み合わせで、さらにロケーションステップは：</p>
	<li>軸</li>
	<li>ノードテスト</li>
	<li>述語</li>
	<p>の三つで構成されている、と考えるのが基本かと思います。最小単位は「軸とノードテストのみから成る単一のロケーションステップ）」です。また、ノードテストは「要素名」ではないです。*等のキーワードか、あるいはQNameです。</p>
	<p>と、ここまではジャブ。基本をおろそかにして省略文法を「基本」だと考えているとXPathには色々と罠があります。</p>
	<p><code>//data[2][memo]</code>というロケーションパスについて、次のように解説されています。</p>
	<blockquote cite="http://www.alpha-net.ne.jp/users2/uk413/prog/xml/xpath.html" title="XMLマスター基礎講座 （XPath編）">
		<p>文書内の２番目のdata要素を選択する。<br />
ただし該当するdata要素が子要素memoを含まない場合、選択されない。</p>
	</blockquote>
	<p>ダウト。</p>
	<p>ルートノードの子孫ノード全てについて、その子供であるdata要素の内、二番目のものに絞込み、その中からmemo要素を子供に持っているものに絞り込みます。文書順（document order）で二番目とは限りません。因みに私なら<code>/descendant::data[position() = 2][boolean(child::memo) = true()]</code>というパスで解説します。</p>
	<blockquote cite="http://www.alpha-net.ne.jp/users2/uk413/prog/xml/xpath.html" title="XMLマスター基礎講座 （XPath編）">
		<p>last()  最後のノードを返す。</p>
	</blockquote>
	<p>これも間違っています。</p>
	<p>まず、XPathのビルトイン関数の中にノードを返却するものはありません。扱えるデータ型は前述の4つ。また、last()関数が返却するのは数値で、コンテクストサイズと呼ばれるものです。</p>
	<p>述語を使うなら、XPathの基礎となっているコンテクストと、その言わばコンポーネントであるコンテクストサイズ、コンテクストポジション、コンテクストノード、関連付けられた名前空間くらいは、少なくとも意識している必要があると思います。</p>
	<blockquote cite="http://www.alpha-net.ne.jp/users2/uk413/prog/xml/xpath.html" title="XMLマスター基礎講座 （XPath編）">
		<p>演算子を使用する際には注意する点がいくつかあります。 まず比較演算子のうち「&lt;」「&gt;」の文字は、「&amp;lt;」「&amp;gt;」と記述しなければなりません。</p>
	</blockquote>
	<p>必ずしもそうする必要はありません。</p>
	<blockquote cite="http://www.alpha-net.ne.jp/users2/uk413/prog/xml/xpath.html" title="XMLマスター基礎講座 （XPath編）">
		<p>not()を使う場合、()内に条件式を記述します。</p>
	</blockquote>
	<p>not関数の引数はブール値です。<q>条件式</q>?はそのブール値を表現するXPath 表現の一つに過ぎません。</p>
	<p>ともかくXPathは色々な場面で使用する基礎的なものですから、きちんと仕様書を読むのが一番です。XPathには理念やら解釈なども存在しないので、やはり、仕様書を読むのが一番です。というか、解説を書くなら仕様書を参照すべきです（SHOULD）。2003-03-10現在、HTML文書としてぶっ壊れていますが、<a href="http://www.doraneko.org/xml/xpath/REC991116.html">XMLパス言語 (XPath) Version 1.0</a>という日本語訳もあるようです。</p>
	<p><a href="http://www.alpha-net.ne.jp/users2/uk413/prog/xml/ref.html">XMLマスター基礎講座（お世話になった書籍＆ページ）</a>には仕様書が見当たらず例の@ITが挙げられていますが、私はあそこの記事に突っ込みのメールを送ったことがあります。「/」をルート要素と説明していたからです（修正され済み）。日本の企業サイトが解説しているものには色々と違和感のある記事が多いので、突っ込みを連載企画にしようと思った程ですが、面倒なので止めました。営利系がどうなろうと知ったことではないのですよね。</p>
	<h2 d="8" c="CSS JScript">ユーザースタイルシートでmailtoリンクを見分ける</h2>
	<p><a href="http://homepage2.nifty.com/tomchem/book/book0303.html#d07n01">mailtoリンクを見分ける @ 思考/謎</a>で、Mozillaのユーザースタイルシートでmailtoスキームでリンクしているアンカーを見分ける方法が紹介されていますが、ふと思いついて私もInternet Explorer6 にて同じようなことをやってみました。</p>
	<pre><code><![CDATA[a:link, a:visited{
 color : expression( (/^mailto:/.test(this.href)) ? '#000' : '#fff' ) !important
}]]></code></pre>
	<p>a要素のhref属性のURIがmailto:スキームを持っているなら、文字色を黒（#000）、そうでないなら白（#fff）にします。いやこれでは役に立たないのですが、取り敢えず例として。</p>
	<p>何を今更expressionといった感がありますが、thisキーワードがセレクタで表される要素オブジェクトになっていたというのが発見でした。もっと早く気づいていれば……</p>
	<p class="append">expressionについては<a href="http://msdn.microsoft.com/workshop/author/dhtml/reference/methods/setexpression.asp">setExpression</a>を参照。</p>
	<p>ということは、URIがhttp:等のスキームコンポーネントを持っていて、かつdocument.domainを含まないなら、外部サイトへのリンクであることが推測できるかもしれません。……結局そのくらいしか思いつきませんでしたが、まあ一応。そもそも、外部サイトだろうと内部サイトだろうと、あまり関心がないというか。</p>
	<h2 c="Linkage Criticism" d="6">URI、URN、URL、そしてフラグメント参照とXLink批判</h2>
	<p>明らかに<abbr title="Uniform Resource Locators">URL</abbr>といってよいものを<abbr title="Uniform Resource Identifiers">URI</abbr>と記述していた部分をURLに修正……しようと思ったのですが、abbr要素としてマークアップしていなかったので放置することにしました（駄目）。XSLTスタイルシートで書き出している部分は、<a href="http://purl.org/">PURL</a>だったりしますので、これは「Locator」というより「Name」、URNなのではないかな、と。でもPR PURLはURLのような気もします（参照：<a href="http://www.kanzaki.com/docs/html/urn.html">URN (Uniform Resource Name) について-- ごく簡単なHTMLの説明</a>）。</p>
	<p>と、ここで誠に残念な記事を発見してしまいました。</p>
	<li><a href="http://www.kanzaki.com/docs/html/htminfo12.html">ハイパーリンク -- ごく簡単なHTMLの説明</a></li>
	<blockquote cite="http://www.kanzaki.com/docs/html/htminfo12.html" title="ハイパーリンク -- ごく簡単なHTMLの説明">
		<p>URI部分のない（#fragidだけの）URI参照は、その文書の「見え方（view）」を変更するものであるとされています。</p>
	</blockquote>
	<p>次の一節をどう読むと、<q>「見え方（view）」を変更するものであるとされています</q>などと解釈できるのでしょうか。</p>
	<blockquote cite="http://www.ietf.org/rfc/rfc2396.txt" title="G.4. Modifications from RFC 1808">
		<p>
   RFC 1808 (Section 4) defined an empty URL reference (a reference
   containing nothing aside from the fragment identifier) as being a
   reference to the base URL.  Unfortunately, that definition could be
   interpreted, upon selection of such a reference, as a new retrieval
   action on that resource.  Since the normal intent of such references
   is for the user agent to change its view of the current document to
   the beginning of the specified fragment within that document, not to
   make an additional request of the resource, a description of how to
   correctly interpret an empty reference has been added in Section 4.
</p>
	</blockquote>
	<p>ここではフラグメント識別子のみで構成されたURI参照の「定義」ではなく、その一般的な<em>目的</em>（normal intent of such references）が述べられているだけです。不適切な引用のような気がします。私ならこちらを参考にします。</p>
	<blockquote cite="http://www.ietf.org/rfc/rfc2396.txt" title="4.1. Fragment Identifier">
		<p>
   The semantics of a fragment identifier is a property of the data
   resulting from a retrieval action, regardless of the type of URI used
   in the reference.  Therefore, the format and interpretation of
   fragment identifiers is dependent on the media type [RFC2046] of the
   retrieval result.  The character restrictions described in Section 2
</p>
	</blockquote>
	<p>（フラグメント識別子の意味は、参照に用いられたURIの形式に関係なく、取得動作の結果となるデータの性質である。それゆえ、フラグメント識別子の形式と解釈は取得結果のメディア型[RFC2046]に依存する。文字の制限はSection2で説明したとおりである。）</p>
	<p>メディア型依存ということで、RFCのこの文書を根拠としてURI参照の具体を定義することは無理そうです。メディアを特定しないなら<q cite="http://www.w3.org/DesignIssues/Fragment.html">The significance of the fragment identifier is a function of the MIME type of the object</q>と、精々こう定義できる程度のものです（参考：<a href="http://www.w3.org/DesignIssues/Fragment.html">Fragment Identifiers -- Axioms of Web architecture</a>）。</p>
	<p>ではXHTMではどうかといえば、<a href="http://www.w3.org/TR/xhtml1/">XHTML 1.0: The Extensible HyperText Markup Language (Second Edition)</a>のC.8. Fragment Identifiersに、次のような記述があります。</p>
	<blockquote cite="http://www.w3.org/TR/xhtml1/" title="C.8. Fragment Identifiers @ XHTML 1.0: The Extensible HyperText Markup Language (Second Edition)">
		<p>In XML, URI-references [<a href="http://www.w3.org/TR/xhtml1/#ref-rfc2396">RFC2396</a>] that end with fragment identifiers of the form "#foo" do not refer to elements with an attribute name="foo"; rather, they refer to elements with an attribute defined to be of type ID, e.g., the id attribute in HTML 4. </p>
	</blockquote>
	<p>「XMLでは、フラグメント識別子で終わるURI参照はID型として定義された属性をもった<em>要素を参照する</em>」とあります。HTML4では参照という単語は使われず、「name属性やid属性を持ったアンカーを示す」という程度の意味になっていますが、viewを変更するとった具体的な表示方法について定義した記述は見つかりませんでした。もしあったら「HTML4 is crap」と叫んでしまうところでした。</p>
	<blockquote cite="http://www.kanzaki.com/docs/html/htminfo12.html" title="ハイパーリンク -- ごく簡単なHTMLの説明">
		<p>文章の読み方という点で見れば、ユーザーのアクションによってviewを変更する＝異なるポジションに移動するのも、やはりハイパーリンクですね。</p>
	</blockquote>
	<p><q>異なるポジションに移動する</q>というのは、ある特定のメディアに依存した参照行為の一つの手法ですが、XLinkのように、「アクション」をリンクに含んでしまうのは大反対です。もし、ユーザーのアクションによって異なるポジションに移動するのが「ハイパーリンク」であるならば、「&lt;a href="http://example.com/"&gt;ここをクリック&lt;/a&gt;」をクリックして移動する<em>行為</em>も立派なハイパーリンクになってしまいます。<q>ユーザーのアクション</q>を明確に示した<q>クリック</q>、そしてそれをハイパーリンクとする為に、aタグでその文字列を括るのです。こんな自然な行為があるでしょうか。</p>
	<p>リンクのセマンティクスに「アクション」を含めてしまうと、このようなメディア依存なリンク（例：ここをクリック）、あるいは、ユーザーの自由を侵害するリンク（target="_blank"）を含んだHTML/XHTML文書が大量に生産されることになります。その時になって初めて、具体的かつ詳細なアクセシビリティガイドラインの普及に躍起になるのと、リンクの意味からアクションの部分を最初から切り離しておくのと、どちらが良いでしょうか。「<em>何故</em>そのアクションを起こす必要があるのか」その理由を意味付けしてやれば機能的には同じ物を提供できるはずです。「<em>何故</em>文字を太くしたいのか」「強調したいからさ」</p>
	<h3>XLink批判</h3>
	<p>そういった意味で、XLinkの「behavior attributes」のshow属性などはかなり有害だと思います。</p>
	<dt>xlink:show="new"</dt>
	<dd>
新しいウィンドウ等を開かせる指定ですが、これはナンセンスです。そういった具体的なアクションではなくて、例えば「一時的な参照である」ことを示せば済む話です。
</dd>
	<dt>xlink:show="embed"</dt>
	<dd>
終了リソースを埋め込むという指定ですが、これはナンセンスです。そういった具体的なアクションではなくて、例えば「その文書が必要とするリソースへの参照である」ことを示せば済む話です。
</dd>
	<p>要するに、参照の性質を示せば良いところを、具体的なアクションを定義する形にしてしまっているのが駄目なのです。ユーザーエージェントは、参照の性質を知ることが出来れば、新しいウィンドウで開くかどうかを決定する有益な情報をユーザーに提供することが可能です。それで十分です。一方、xlink:show="new"では、参照の性質を伝えませんから、新しいウィンドウを開きたくないユーザーは、一律にこのアクションを拒絶する設定をするかもしれません。どちらがより良いでしょうか。</p>
	<p>特定のメディアの特定の環境向けにこういったアクションの具体を定義する言語があっても良いとは思いますが、XMLのリンク一般を叙述する言語に、そのようなものは必要ないと考えます。</p>
	<ol title="参照">
		<li><a href="http://jessey.net/blog/archive/2003/012303c.html" hreflang="en">Get rid of XLink?</a></li>
		<li><a href="http://tantek.com/log/2003/01.html#L20030123t1524" hreflang="en">The future of linking on the Web</a></li>
		<li><a href="http://www.w3.org/2003/01/16-tag-xlink" hreflang="en">minutes of the W3C 16 Jan 2003 discussion on Linking</a></li>
	</ol>
	<h2 c="XMLSchema" d="2" up="2003-03-03T22:53:20+09:00">属性によって型を変えるには? （XML Schema）</h2>
	<p>例えばfooという要素があり、id属性を持っているときにはcomplexTypeな型を持っており、ref属性を持っているときには空要素であるとすると、XML Schemaではどういう風に書けば良いのでしょうか。</p>
	<p>
		<a href="http://www.w3.org/TR/xmlschema-1/">XML Schemaのスキーマを定義するXML Schame文書</a>を調べてみました。XML Schemaのelement要素が正にそれなのです。</p>
	<p>……。</p>
	<p>こいつは私の理解力の限界点に近い気がします。何度見てもいまいち釈然としませんが、element要素をローカルな要素として二通り宣言している辺りで実現して<em>いそう</em>なことは、ボンヤリと分かった気がします。もう少し修養が必要なようです。</p>
	<p>面白そうなURIを見つけたので参照してみました。</p>
	<li>
		<a href="http://www.w3.org/1999/XSL/Transform.xsd">http://www.w3.org/1999/XSL/Transform.xsd</a>
	</li>
	<blockquote cite="http://www.w3.org/1999/XSL/Transform.xsd">
		<p>Someday a schema for XSL Transforms will live here</p>
	</blockquote>
	<p>容易でないことは確かに想像できますが、期待していただけにかなりがっかりしました。</p>
	<h3 up="2003-03-03T22:53:20+09:00">追記</h3>
	<p>やっぱり何度見ても分かりません。というか、ローカルに宣言されたelement要素の型を見ても、ref属性とname属性の共存を許可しているようにしか見えませんでした。</p>
	<p>実際、<code>&lt;xsd:element name="foo" ref="foo" /&gt;</code>なる要素をもったスキーマ文書自身を検証してみたのですが、何も文句を言われませんでした。</p>
	<p>持っている属性によって型を変えるなんて芸当は、XML Schemaには無理なのでしょうか。とりあえず私には分かりません。</p>
	<h3>何故XML Schemaに興味を持ったか</h3>
	<p>XML Schemaに限った話ではないのですが、XMLでスキーマが定義されているということは素晴らしいことなのです。どういうことかというと、スキーマというのは本質的にそれ以上ないほど精密かつ正確なリファレンスなのですが、人にとって理解し辛いのが珠に傷です。 しかしXSLTでお好みの構造を持ったHTML文書か何かに適当に変換してやることで、その精度を微塵も損なうことなく読みやすいドキュメントにしてやることが出来るわけです。リファレンス本等々は、少なくとも構文を学ぶ上では一切必要なくなります。たった一つのXSLT文書を用意しておくだけで良いのです。XML Schemaの場合、適切な位置に詳細なannotationが用意されていれば、もはや解説本や解説サイトが不要になります。自分の好みの、一貫した体系でXML応用言語を効率的に学ぶことが可能になるのです。</p>
	<p>従ってスキーマ言語の冗長性は大いに結構な話で、可能な限り豊富な意味付けをして頂きたいと思っています。将来、RDF/XMLでXML Schemaを再定義してもらっても良いくらいです。</p>
	<h3>XML Schemaで一石二鳥を狙う</h3>
	<p>やはり一番良い修養方法は、ゼロから言語を設計してやることだと思います。というわけで勢いだけでCSS1をXML化してみようと思い立ちました。これは結構前からやりたかったのですが、CSSのレベル毎の管理やブラウザ対策用プロパティ等の管理、共通プロパティグループの定義等々が可能になります。CSSは見た目シンプルですが、実際には値に多くの型が存在していますし、運用する際にはバグに付き合った解も紛れ込ませなければなりません。専用のツールでもない限り、管理がとても大変です。</p>
	<p>尤も、頻繁にCSSを破棄して新しく作る場合には関係ない話ですが、少しずつ改良を加える場合にはだんだんスパゲッティ化してしまうのです（参照：[<a href="../style/croix.css">croix.css</a>] 笑）</p>
	<p>そのスキーマとインスタンスを利用することから：</p>
	<li>CSS1の完全なリファレンスが手に入る（XSLT利用）</li>
	<li>CSS1の規則、プロパティ等を任意のグループ単位として管理できるようになる</li>
	<li>ブラウザ対策と規則を分離しておくことができるようになる</li>
	<p>等々の見返り（副産物）を期待しています。</p>
	<p>実はスキーマは物理量的には殆ど完成していて、プロパティ（要素として表現）の型定義は書き終えました。CSS1の仕様書に全部書いてありますから機械的な作業で済んだわけです。後は構文をXMLでどう表現するかというところで躓いています。あるセレクタにプロパティを与える方法の一つとして、外部からプロパティのグループを参照させる形を取れるようにしたいのですが……。</p>
</document>

