id 修正しました。失礼。(こくぶんさんサンクス)
例のやつの草案が出ました。斜め(縦?)に読んだところ、XLink のように属性によって「この(属性が記述されている)要素自体がリンクをなす」ことを示すのではなく、「この型の要素はリンクをなす」ということを hlink という要素によって示す、というのが基本的な概念のようです。何かスキーマっぽいような印象を受けました。
で、具体的には、例えば <hlink namespace="http://www.w3.org/1999/xhtml"
element="a" locator="@href"
effect="replace" actuate="onRequest"
replacement="@target" />
と書くと、「http://www.w3.org/1999/xhtml
で識別される名前空間に属する a
という型の要素はリンクをなす。この要素は href という属性によって XLink の href 属性に相当する情報(ロケータ)を示す、云々」という情報が示されるというようになっています(多分)。なお、HLink の 名前空間識別子は http://www.w3.org/2002/06/hlink
となっています。
さて、この hlink 要素の記述の仕方ですが、これには「当該文書中に直接記述する」か、または「ルートの要素に HLink の definition という属性を記述し、HLink による定義を記述した別の文書を用意する」という二つの方法があります。
前者の方法では、例えば head 要素の内容として hlink 要素を <head xmlns:hlink="http://www.w3.org/2002/06/hlink">
<hlink:hlink ... />
...
のように記述します。後者の方法では、本文を
<?xml version="1.0" encoding="UTF-8" ?>
<html
xmlns:hlink="http://www.w3.org/2002/06/hlink"
hlink:definition="http://math.oheya.to/hlink/xhtml2"
... >
のように記述し、http://math.oheya.to/hlink/xhtml2
の文書に <?xml version="1.0" encoding="UTF-8" ?>
<hlinks xmlns="http://www.w3.org/2002/06/hlink">
<hlink ... />
...
</hlinks>
といった具合にリンク要素の定義を記述することになります。
両者の関係は DTD の内部サブセットと外部サブセットような関係と喩えることができるでしょう。恐らく XHTML 2.0 では、予め「XHTML 2.0 の HLink 定義」を記述した文書が用意され、html 要素には以下のような値固定の属性が追加されるのだろうと思います。
<!ATTLIST html
xmlns:hlink CDATA #FIXED 'http://www.w3.org/2002/06/hlink'
hlink:definition CDATA #FIXED 'http://www.w3.org/TR/xhtml2/hlink'
>
# こうしてみるとやはりスキーマ的な意味合いが強いので、個人的には一般のユーザは余り HLink の意味内容まで理解する必要はないんじゃないかと思いました。
某所にだらだらと書いてしまいましたが、HLink という仕様の意図するところについて。
後方互換やユーザエクスペリエンスなどを考慮した場合、href や src や cite や code といった属性を、全て xlink:href という名前によって統一してしまうというのは好ましくありません。しかし、従来の XML の各仕様の機構では、cite や code というような名前の属性(あるいは q や object といった名前の要素型)がリンクを示すということは明示できませんでした。
XLink 以外の属性がリンクを示すというのは、XML 関連の仕様から逸脱していますから、これは XHTML を厳密な XML アプリケーションとして捉えようとすると不合理ということになってしまいます。そこで、この不合理を解消するため、任意の名前の属性や要素型がリンク要素/属性であることを (XHTML 的にでなく XML 的に)明示できるように、HLink という新しい仕様を定めることにしたのでしょう(あくまで推測ですが)。
An XML declaration is not required in all XML documents; however XHTML document authors are strongly encouraged to use XML declarations in all their documents. Such a declaration is required when the character encoding of the document is other than the default UTF-8 or UTF-16 and no encoding was determined by a higher-level protocol. (強調石川)
つまり、encoding 宣言は「符号化が UTF-8 または UTF-16 以外であり、かつ上位のプロトコルで符号化方式が示されていないとき」には必須になりますが、言い換えれば上位のプロトコルで符号化方式が明示してあれば必須ではありません。
ちなみに原典の XML は次のように述べています。
In the absence of information provided by an external transport protocol (e.g. HTTP or MIME), it is an error for an entity including an encoding declaration to be presented to the XML processor in an encoding other than that named in the declaration, or for an entity which begins with neither a Byte Order Mark nor an encoding declaration to use an encoding other than UTF-8. Note that since ASCII is a subset of UTF-8, ordinary ASCII entities do not strictly need an encoding declaration.
これはつまり、encoding 宣言よりも HTTP や MIME による符号化の指定の方が優先される、ということです。極端な例を挙げると、MIME が text/xml で charset パラメタが省略されている場合などには、デフォルト値として charset=us-ascii
が与えられているものと見なされてしまうため、encoding 宣言でどの符号化方式を宣言していようと us-ascii 以外の符号化方式は使用できないことになってしまうくらいです(参考: XHTML Media Types 3.4.)。
ということで、「UTF-8 か UTF-16 以外の場合には encoding 宣言が必須」というのは、あくまで HTTP や MIME による指定が行われない場合の話なのです。ちなみに、上記引用中にもあるように、実は us-ascii などでも encoding 宣言は省略可能であり、実際 W3C も一年ほど前までは us-ascii で encoding 宣言を省略していました。
ただ、XML 宣言にせよ encoding 宣言にせよ省略できることはできますが、なるべく記述するのが好ましい、ということは確かであります(ローカルで扱うこともある訳ですし)。まあ後方互換を考慮したら省略したくなるのが人情とは思いますが。
# 今ちょっと調べてみたら、XHTML 1.0 SE で記述が変更されている箇所なんですね。XHTML の書き方と留意点の記述が更新されていました。XML では元々前述の通りの定義になっていたはずなので、XHTML 1.0 の初版の記述がちょっと XML の仕様から外れていたみたいです。