Hatena::Groupweb

vantguarde

9.23

対訳マークアップのリソース関係

| 01:41

対訳(原文+訳文)のマークアップ方法を読んでました。いくつかメモ。

XHTML2の例なんですが、おおむねこれで良さそうです。ただdiv要素の属性としてわらわらrelやhrefを書くのであれば、head内に書く方が管理はしやすそうです。そうなると3言語以上にも対応できますし。

あとalternateの代わりにowl:SymmetricPropertyなプロパティ(ex:translation)を使えば、両方にrelを書く必要がなくなるのでいいかなあとも*1

一つ気になるのは、そのドラフトのMetainformation Attributes Moduleが今はobsoleteなんですよね。現在はRDFaでこういうものを表現していこうっていう動きです。こんな感じでしょうか。

<head>
<link rel="alternate" hreflang="en" href="#p1_1_en" about="#p1_1_ja"/>
<link rel="alternate" hreflang="ja" href="#p1_1_ja" about="#p1_1_en"/>
</head>
<body>
<h>対訳の例</h>
<section xml:lang="ja" id="p1_1_ja">
<h>日本語</h>
<p>次は上野駅です。JR 線と東京メトロ 銀座線・日比谷線は乗り換えです。</p>
</section>
<section xml:lang="en" id="p1_1_en">
<h>English</h>
<p>Next station is Ueno. Please change here for the JR and Tokyo Metro Ginza and Hibiya Line.</p>
</section>
</body>

RDFaはXHTML 1.1のモジュールも出るので、この書き方だとXHTML2と1.1の両方に対応できると思います。

で、「擬似的に」とはあるのですがXHTML 1.1の例、ちょっとどうなのかなと思いました。というのはrel属性の基点となるリソースは文書そのものであるため、リソースの関係がおかしくなってしまうからです*2

<#> ex:translation <#p1_1_en> .
<#> ex:translation <#p1_1_ja> .

文書の英語版として、同じ文書の一部分にアンカーが向かうっていうのは変ですよね。

じゃあどうすればいいかっていうと、またRDFなんですがeRDFを使います。eRDFだとrelの基点リソースをid属性のある要素にできるんですよね。

<head profile="http://purl.org/NET/erdf/profile">
<link rel="schema.ex" href="http://example.com/schema#" />
</head>
<body>
<h1 id="t04ced6">対訳の例</h1>
<div xml:lang="ja" id="p1_1_ja">
<h2 id="ta0a50d">日本語 <a rel="ex-translation" hreflang="en" href="#p1_1_en">(to English version)</a></h2>
<p>次は上野駅です。JR 線と東京メトロ 銀座線・日比谷線は乗り換えです。</p>
</div>
<div xml:lang="en" id="p1_1_en">
<h2 id="tcd3841">English <a rel="ex-translation" hreflang="ja" href="#p1_1_ja">(日本語へ)</a></h2>
<p>Next station is Ueno. Please change here for the JR and Tokyo Metro Ginza and Hibiya Line.</p>
</div>
</body>

これだとそのまま、次のようなトリプルが導けるかなと思います。

<#p1_1_ja> ex:translation <#p1_1_en> .
<#p1_1_en> ex:translation <#p1_1_ja> .

ex:translationに相当するプロパティを見つけないといけないのが面倒ですが、ほとんどそのままの記述でいけそうです。

*1RDFレイヤーなので、XHTMLにおける意味づけとしてはいずれにせよ必要かもしれませんが

*2http://www.w3.org/TR/html401/struct/links.html#adef-rel

9.9

Dublin CoreのRFC

| 14:00

RFC 5013なるものが。RFCってもう5000番台なんですね。

さておいてこのRFCDublin Coreの要素セットについて書かれてます。はて、前にもそんなのなかったっけと読み進めていたら、前のRFC 2413はバージョンが1.0とのこと(今回のは1.1)。

どうせならMetadata Termsとか、Abstract ModelあたりもRFCにしたほうがいいような気がします。まあ、DCのウェブサイトで全部見られるんですが。

5.24

Creative CommonsからRDFは消えてませんよ

| 05:01

あと今回文章を書くために調べていてようやく気付いたことを付け加えておくと、CC-JP のサイトでライセンスを決定しても、サイトに貼り付ける HTML コードに RDF メタデータが付かなくなっていた。

ワタシ自身は CC のメーリングリストなどの議論を追ってないので正確なところは分からないが、小耳に挟んだところでは海外では RDF が不人気で一つのページに複数の絡むと面倒といったところがあるらしいが、メタデータによりライセンスを機械可読が売りだったはずで、セマンティック・ウェブ的には後退には違いない。

クリエイティブ・コモンズ・ライセンスのブログ翻訳のススメ補足

後退なんかじゃありません。RDFは省かれたのではなく、HTML中により自然な形で埋め込まれるようになっただけです。むしろ前進じゃないかしら。

これまでのRDFのライセンス情報って、HTMLのコメントにRDF/XMLを書いていただけなんですよね。コメントですから、機械は処理しにくい。機械の為のメタデータが、機械にやさしくないフォーマットで埋め込まれていたわけです。なのでRDFを好きなひとにもあんまり評判が良くなかったんじゃないかなと思います。

で、解決策として導入されたのがRDFaという、XHTMLRDFを表現するフォーマット。導入の経緯については、A Chat with Aaron Swartzで軽く触れられてますが、RDFaの中心人物であるBen AdidaはCCプロジェクトの人間でもありますし、RDFを捨てたわけではないと。

RDFaはどんな構文なのかはRDFa Primerを見てもらうとして、http://creativecommons.org/licenses/by-sa/2.1/jp/がどのようなライセンス情報を埋め込んでいるのかを見てみましょう。

DeedのHTMLには昔と同じく、RDF/XMLによる情報ををコメントとして埋め込んでもいます。

<rdf:RDF xmlns="http://creativecommons.org/ns#"
 xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
  <License rdf:about="http://creativecommons.org/licenses/by-sa/2.1/jp/">
    <permits rdf:resource="http://creativecommons.org/ns#Reproduction"/>
    <permits rdf:resource="http://creativecommons.org/ns#Distribution"/>
    <requires rdf:resource="http://creativecommons.org/ns#Notice"/>
    <requires rdf:resource="http://creativecommons.org/ns#Attribution"/>
    <permits rdf:resource="http://creativecommons.org/ns#DerivativeWorks"/>
    <requires rdf:resource="http://creativecommons.org/ns#ShareAlike"/>
  </License>
</rdf:RDF>

このライセンスが何を許可し、何を求めているのかを記述しているわけですね。

さて、この情報はあなたは以下の条件に従う場合に限り…などというかたちで、本文としても表現されています。そのマークアップがどうなってるかといいますと、次の通り。

<div id="deed-rights">
  <h3 rel="cc:permits"
      href="http://creativecommons.org/ns#Reproduction">
        あなたは以下の条件に従う場合に限り、自由に</h3>
  <ul>
    <li rel="cc:permits"
        href="http://creativecommons.org/ns#Distribution">
          本作品を複製、頒布、展示、実演することができます。
    </li>
    <li rel="cc:permits"
        href="http://creativecommons.org/ns#DerivativeWorks">
          二次的著作物を作成することができます。
    </li>
  </ul>
</div>
<div id="deed-conditions">
  <h3>あなたの従うべき条件は以下の通りです。</h3>
  <ul> 
    <li rel="cc:requires"
        href="http://creativecommons.org/ns#Attribution">
      <p><strong>表示</strong>. <span>
        あなたは原著作者のクレジットを表示しなければなりません。</span></p>
    </li>
    <li rel="cc:requires"
        href="http://creativecommons.org/ns#ShareAlike">
      <p><strong>継承</strong>. <span>
        もしあなたがこの作品を改変、変形または加工した場合、
        あなたはその結果生じた作品をこの作品と同一の許諾条件の下でのみ
        頒布することができます。</span></p>
    </li>
    <li rel="cc:requires"
        href="http://creativecommons.org/ns#Notice">
        再利用や頒布にあたっては、この作品の使用許諾条件を他の人々に明らかにしなければなりません。
    </li>
  </ul>
</div>

ちょっとソースが見にくいんですが、li要素にrelおよびhref属性がついてるのを確認できるかと思います、これがRDFaです。rel属性の持つcc:permits, cc:requiresというlinktypes、そしてhref属性の持つURIから次のようなトリプルを導くことができます。

@prefix cc: <http://creativecommons.org/ns#> .

<http://creativecommons.org/licenses/by-sa/2.1/jp/>
  cc:permits <http://creativecommons.org/ns#Reproduction> ;
  cc:permits <http://creativecommons.org/ns#Distribution> ;
  cc:permits <http://creativecommons.org/ns#DerivativeWorks> ;
  cc:requires <http://creativecommons.org/ns#Attribution> ;
  cc:requires <http://creativecommons.org/ns#ShareAlike> ;
  cc:requires <http://creativecommons.org/ns#Notice> .

rdf:typeが指定されてはいないのですが、RDF/XMLと同じ情報が見事表現されてます。

さてさて、実はクリエイティブ・コモンズ・ライセンスのブログ翻訳のススメにもRDFaが使われていたりします。フッタの「この 作品は~」というくだりで、文書のメディアがテキストである事を表すトリプルが、RDFaを用いて埋め込まれていたりします。HTML4だとnamespaceが使えなかったりするので、validationの問題は残るんですが。。

まあとはいえ、コメントというスマートではない方法ではなく、本文中の要素を巧く用いRDFを埋め込むRDFaという仕組み、素敵じゃないですか。HTML中にとけ込んでるだけで、決してRDFをなくしたわけではありません。RDFaのように、元フォーマットにうまくとけ込める形でメタデータを埋め込む仕組みが広まれば、セマンティックWebもそこまで夢見ではないのかなと思います。

8.22

tagURIで時空間を含めたURIを考えてみる

| 01:47

単に「空間」だけではなく「時空間」にpermalinkをつけるべき、と思った。Google MapとWay Back Machineを組み合わせるとか?

この世の全てにパーマリンクを!

linkとして機能するかどうかは実装次第なんですけど、僕が大好きtagURIで考えてみました。tagURIには日付情報を含められるので、位置情報を拡張として取り入れれば簡単そう。

たとえば「今日の金沢21世紀美術館」についてURIをつくると、tag:example.com,2006-08-22:X136.658227Y36.560799:Kanazawa21という感じ。まあ、ただ単にtagURIのspecific部分に位置情報を含めただけの簡単なものですが。アプリケーションが解釈するにはちょっと弱いのかなあ。

問題があるとすれば時間がUTCで処理されるってことでしょうか(あるとすればじゃなくて大問題ですね)。tagURIは日付(YYYY-MM-DD)までしか時間情報を含められず、かつその時間はUTCで処理されるものと決められてます。なのでtimezoneや時刻を埋め込む際はまた別になにかルールを決めないといけません。時間はUTCに準拠させるって取り決めをすれば、埋め込むのは時刻のみでURIの解釈にも問題が生じないのでいいかも。

時間とURIを結びつけるものとしてDURIというドラフトが昔IETFに提出されていたのですが、こちらは時刻まで書けたりするのでtagURIも時刻を含められるように改良してほしかったり。

7.26

XHTML Role Attribute Module

| 18:18

XHTML Role Attribute Moduleのドラフトが出ました。XHTML 2.0のRole Access Moduleで検討されていたものなんですが、RDFaをXHTML1でも使えるように分離したみたいです。

さてさて、role属性については以前ちょこっと書いたんですがおさらいを。要は属性値に意味とnamespaceを持たせたclass属性です。まあたとえばこんな感じのHTMLになりますよ。

<body>
  <h1>A weblog</h1>
  <ul role="navigation">
    <li><a href="/">home</a></li>
    <li><a href="/weblog/">weblog</a></li>
  </ul>
  <div role="main">
    <h2>An entry</h2>
    <p>This is a paragraph.</p>
    <p class="note">Note that...</p>
  </div>
  <div role ="secondary">
    <div role="search">
       <form id="searchbox"/>
    </div>
  </div>
  <address role="contentinfo">2006 by whom</address>
</body>

ホントにclass属性と変わりませんが、まあ意味づけがきちんとされているわけです。

microformatsはrole属性を利用するといいんじゃないかなあ。microformatsとかブランド化されてるわけですが結局は属性値のconventionでしかないんですよね。意味の定義はXMDPなんかがありますが、やっぱり文字列でしかないので属性値のコリジョンが避けられないんですよね。それをnamespaceで解決できるので語彙のネーミング楽かなあと。

まあRoleの定義はRDFになりそうなんですが、これも<div class="profile" role="xmdp:profile">みたいに、xmdp:profileっていうRoleを使えば解決できるのでそこまで面倒ではなさそう。まあ、各自で好きな語彙を定義出来るのでmicroformatsっていう存在自体があまり意味をもたなくなりそうですが。

しかしまあこうやって新しい属性をモジュールとして出してくるって事は、XHTML2の意義がさらになくなりそう。。。

まあでも、便利な属性が増えるのはいいことかなあ。「適切な要素がない」とか「XHTMLの限界」とか言う人がいるこの頃なので、まあそんな要望に応えるにはうってつけじゃないでしょうか。

Contact: @vant / lepetitcroissant@gmail.com.