agenda 2002-08(上旬) slain hourglass

サイトの更新情報(RDF)は分離しました。

画像素材屋とアクセシビリティ

公開
2002年8月15日

視覚障害者がホームページを作ろうとする際:

  • 晴眼閲覧者の為に画像素材を集める

という場合もあることを知った。

問題はAll About Japanの提示している「視覚障害者向けに素材屋が取れる解決策」。longdesc属性には一切触れず、「JavaScriptを使ったポップアップで画像の説明にリンクする方法」を紹介している。ALTタグはご愛嬌。

ツッコミどころのようでツッコミどころでないのは、「alt属性に画像の説明を記述」している点。画像そのものを紹介したい場合、そのimg要素(サムネイル画像)をフルサイズ画像へのアンカーにして、alt属性には画像の説明や特徴を記述できる。

  • <a href="foo.png"><img src="thum_foo.png" alt="fooの写真" /></a>

「alt属性=画像の説明」という間違った認識を否定する時、「alt属性は画像の説明ではない」といってしまうと、それはそれで間違いになってしまう。

  • 「alt属性=画像の説明」ではない(○)
  • alt属性は画像の説明ではない(×)

画像素材屋がサムネイルなどの画像を提供する場合、伝えたいのは「それがどのような画像なのか」つまり画像の性質なので、文字で代替するなら「画像の説明」になる。

冗長なリンク

  • <a href="foo.png"><img src="foo.png" alt="fooの写真" /></a>

これは、同じ終点リソースへのリンクが2つあることになる。src属性による埋め込み型リンクと、href属性による参照型リンクだ。

この冗長性は、主に晴眼者に不利益を生じさせる。

ポインタが手の形になったものだからはりきって(謎)クリックしたところ、同じ画像が表示されてガッカリ、というアレ。

問題は、画像を非表示にした場合、img要素と一緒にリンク(関係性)も除去されてしまうことだ。そのため、この例のような冗長なリンクをしなければならなくなる。

IE6/Win DOMの要素追加系メソッドに制限?

公開
2002年8月12日

フレーム内のスクリプトにて、親ウィンドウのルート要素下にある要素をコピーし、そのフレーム内のルート要素下に追加しようとするとエラー(もちろんクロスサイトではなく)。

var _parent = window.parent.document;
var oH1 = _parent.getElementsByTagName('H1').item(0);
document.body.appendChild(oH1.cloneNode(true));

IE6/Win では「引数が無効」と言われる。Mozillaは問題なし。

対策は、コピーしたい要素のouterHTMLを読んで、追加先の要素のinnerHTMLに書くとか。この例では最後の行を以下のように:

document.body.innerHTML += oH1.outerHTML;

追記

IEはiframe要素内の文書を別のDOMツリーとして扱い、Mozillaは同じDOMツリーとして扱う、ということだろうか。

サイトマップ

以上のような問題を回避しつつ、ページ内ナビゲーションサイトマップを統合(謎)してみた。文書内容と無関係なサイトマップがくっついてくる(謎)のは無意味なので、ページ内目次もマップに含めてしまおう、と。

サイトマップ最後の課題は、現在地と同時に「どこからやってきたか」に関する情報を取得するにはどうすれば良いかということだけれども、リファラというのはイマイチ信用できない。それなら、サイト内のリソースを参照するアンカーのhref属性にはQueryをつけることにしたらどうだろう。

例えばこのページから、7月後半分にリンクするという場合:

<a href="d20027l.html?agenda.html">agenda(7月後半)</a>

こういう風にすれば、リンク先に渡す情報としてはそこそこ信用できるのではないかな。

やってみるとして実体を変更するのはちょっと不安だから、JavaScriptを使って、document.links[index].hrefそれぞれに書き加えることになるのか。正規表現でサイト内の別文書を示すURIを判別して? リンクは山ほどあるのに? サイトマップを使わないユーザさんには無関係なのに?

駄目かも。

window.onunload()時にクッキーにファイル名を書くとか。クッキー依存?

まあ無くても構わないものだし、ちょっとやってみてもいいかな(どうかな)。

script要素のdefer属性

公開
2002年8月7日

- XHTML Scripting Module (英語)を読んでいて、script要素にdefer属性があることに気づいた。てっきりMSの独自拡張かと思って今までずっと使用を敬遠していたのだけど、HTML4.01とかでもvalidじゃあないか。損した。window.onloadよりパフォーマンスが良い方法だから。

XHTML2.0(WD)のnl要素について。

公開
2002年8月7日

nl要素は、何だかなー。この手の本文とは關係の無い記述は、headに「追出す」べきだと思ふけど。視覺系のユーザエージェントでは「ドロップダウン式」のプレゼンテーションスタイルを採用する形になるやうです。

闇黒日記 より

私も最初そうなのかと思って萎えましたが、例示を見る限り、どうやらこのnl要素 (英語)は、例えばこのページにもある「ページ内目次」のようなものを明示するのに使っているようなので、少なくとも本文と関係の無いアレ(一部のグローバルナビゲーション)専用というわけではなさそうです。

input要素のname属性

公開
2002年8月7日

XHTML 1.0 (Strict) では、FORM 要素から name 属性が排除されていますが、input 要素には name 属性が温存されています。なんだか不思議な差別ですが、なにか合理的な理由があるものなのでしょうか。

Wind Report - 2002年8月上旬 [QUIA] より

type="radio"なinput要素は、name属性が同じものをグループ化して、排他的な選択ができるようになっています。

name属性あり
  • 右翼
  • 左翼
name属性なし
  • 右翼
  • 左翼

同じことをid属性でやろうとするとinvalidになりますので、合理的のような気がします。他のtypeのinput要素については、name属性を残してある合理的な理由がイマイチ分かりませんが、何となくDTDの限界のような気がしたりしなかったり。少なくとも私はDTDでどうやって他のtypeのinput要素のname属性を排除すればいいのか分かりません。

現行のDOMユーザとしてはgetElementsByName()で任意のノードリストを取得したい時があるのでname属性の復活を希望……というかclassNameで取得したい(無関係)。

無意識

公開
2002年8月4日

何かを検索していて見つけた文章。

というわけで昨日「カンマとピリオドはとみづらい」という旨のメールを1通いただきましたので、「、」と「。」に戻すことにしました。

●1匹見たら100匹いる  2002.5.2(http://www.swany.ne.jp/minba/h/0205.html)より

というわけで、メールした方を虫に喩えてしまっているわけだ。無意識は恐ろしい。何か作る人間の態度としては、まあ忌避すべきものの一つだとは思う。「ディレクトリを掘って」みると、次のサイトが出てきた。

  • ウェブページデザインの事情(http://www.swany.ne.jp/minba/h/index.html)

随分色々と「ホームページ」が作られているようだが、ほとんどのホームページは一面真っ白で何も読めなかった。画像を非表示にしていた為らしい。img要素にalt属性をつけるのは、そんなに面倒なものか。

しかし、alt属性を付けてもらいたいとか思っているわけではない。個人的には、いつまでも間違ったHTML文書を作り続ければいいと思っている。何故ならそれはHTMLではないのだし、HTMLである必要もないからだ。「画像が表示でき、解像度の高いディスプレイで、JavaScriptが機能する」そういった限られた特定の環境に特化したホームページを公開できれば良いのなら、何もHTMLを使う必要はない。間違ったHTML(何と呼ぶかはわからないがHTMLではない何か)でも構わない。ただ、まともなHTMLを使って意識的にデザインすれば、より多くの人に伝えられる、つまりベターな方法があるというだけだ。

問題は、無意識であるということ(プロなら尚更)。

間違っていることを意識しないのが問題だ。意識しないとどうなるか。こういうコンテンツを作ってしまう。

  • ■小学生でもできるHTML講座(http://www.swany.ne.jp/minba/kantan/index.html)

環境に依存せず、文書内各要素の構造上の意味を伝えるはずのHTMLが、無残に捩じ曲げられて伝えられてゆく。

「HTMLの小わざ集」も酷い。

XSL文書のMIME type(JCOM)

公開
2002年8月3日

JCOM@Nethomeに依頼して、XSL文書のMIME typeをtext/xmlにしてもらった。「してもらった」つもりなのだけど、元々XSLに対応していたかのように言われた。なんか癪だ。

「最終更新日:2002年6月11日」となっている。でもtext/xmlの欄に、xslは載っていなかったと思った。思ったというか、無いことを確認したからこそメールを書いたのだけど。


尚、某プロバイダ経由のアクセスがおかしくなるという件ですが、JCOM側が何か制限をかけているとか、そういったことはないそうな。

タグスープ

公開
2002年8月1日

Lars Kasper (独語)氏によると、invalidなHTML文書はtag soupと表現するのだそうな。ぬるい。不思議マークアップ(wonder markup?)の方が的を射た表現だ。

向こうでは見出しレベルはちっとも重要視されていないようで、Kasper氏も「見出しレベルを守っているのなんてオマケだよ、オマケ(意訳)」などと仰る。invalid系文書をtag soupとか呼んでいるから駄目なんだと思った。こちら(どちら)では、最上位見出しをh2タグでマークアップした時点で「不思議マークアップ」だ。

消える文字コード宣言(MSXML4.0)

公開
2002年8月1日

xsl:outputでencoding="Shift_JIS"を指定しているのに、結果ツリーのXML宣言に反映されない。ならDOM操作で直接生成してみようと思って、このようなスクリプトを実行してみた。

スクリプト
var _doc=new ActiveXObject("Msxml2.DOMDocument.4.0");
var pi=_doc.createProcessingInstruction('xml',
    'version="1.0" encoding="Shift_JIS"');
alert(pi.xml);
出力結果(アラート)
<?xml version="1.0"?>

ともかくxmlプロパティ(MS独自拡張プロパティ)を見てみると、version属性以外の全てが消えている。というかそもそもXML宣言ってProcessing Instruction(処理命令)だったっけ? 少なくともXPathでは答えは「No」だけど。

それはともかくとして、XML宣言を削除し、文字列として先頭に挿入する形で回避。ベタベタ。

普通にsaveメソッドで保存すればこの問題は起らなかった。

xmlプロパティはUnicodeなので、文字コード宣言が取り払われるらしい。

HTMLヘルプ内のFAQにこんなのがあった。

Does MSXML 4.0 provide a 100% compliant XSLT processor?
Yes. MSXML 4.0 is fully compliant with the XSLT specification. For more information, see Supported XSLT Features.

これを信じて(うそ)プロセッサ完全乗り換え。何故ってHTML + CSSで簡単にUIを設計できて、変換後のXMLのDOMツリーをメモリに置くことができて( DOMDocument.transformNodeToObjectメソッド)、しかもJScriptでイケるんだもの。でも、決め手はコレ。

  • DOMでXPath式を使える

selectNodes(expression)というMS独自拡張メソッドでXPath式が使える。らしい。なんかワクワクする。ワクワクするといえば次世代fub(謎)はXMLでUI(?)を定義するそうで。