Hatena::Groupweb

vantguarde

2.11

RDFから9年

| 23:09

XML10(あまり話題にもなっていない)の影に隠れて、RDFもそろそろ9年なんです。とはいっても2004年の改訂版ではなくて、1999年版ですが。

改めて古いドラフトを見ていたのですが、面白いですね。最初のWDとか、名前が結構違っていたり、構文もXMLにかなり寄ったものになってますね。

<?namespace href="http://docs.r.us.com/bibliography-info" as="bib"?> 
<?namespace href="http://www.w3.org/schemas/rdf-schema" as="RDF"?> 
<RDF:serialization> 
  <RDF:assertions href="http://www.bar.com/some.doc"> 
    <bib:author> 
      <RDF:resource> 
        <bib:name>John Smith</bib:name> 
        <bib:email>john@smith.com</bib:email> 
        <bib:phone>+1 (555) 123-4567</bib:phone> 
      </RDF:resource> 
    </bib:author> 
  </RDF:assertions> 
</RDF:serialization>

Namespace宣言がPIになってるのは、ちょうど同じ頃にNamespaces in XMLが策定中だったからです。初期草稿であるName Spaces in XMLなんかをみると、PIを使ったNamespaceの宣言方法が考案されていたのが分かります。PIの方が構文的に良いデザインに思える。。

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

7.23

RDF/CSSなるものを考える

| 20:19

CSSに作成日を埋め込みたいときはDOASを使ってるんですが、RDFがコメントの中に入ってしまうのと、CSSの中でTurtleが浮いてしまうのが気になるんですよね。

で、CSSはセレクタ、プロパティ、値という三つ組み構造なので、これをRDFのトリプルに対応させられないか考えてみました。

@namespace rdf  "http://www.w3.org/1999/02/22-rdf-syntax-ns#";
@namespace foaf "http://xmlns.com/foaf/0.1/";
@namespace doas "http://purl.org/net/ns/doas#";

@-meta url("") {
  rdf|type         : doas|CSSStyleSheet;
  doas|shortdesc   : "CSSです。";
  doas|created     : "2007-07-23";
  doas|dependencies: "none";
  foaf|maker       : url("tag:me@example.com,2007:me");
}

@-metaというのをつくって、urlに対象となるリソースのURIを指定します。中身は@namespaceで宣言したプレフィックスを使って、プロパティを書くと。

urlの部分を変えると当該文書以外にも使える設計になってるので、RDF構文としても使えそうです。ただ難点があって、匿名ノードを含められないので、複雑なRDFを表現するにはちょっと足りないんですよね。キーワードでも用意すればよいのでしょうが、うーん。

あ、この構文だと文書のフラグメントやセレクタに対してメタ情報を与えることができますね。これは面白いかも。

7.14

rdf:type属性誕生?

| 22:12

RDFaを開発しているRDF in XHTML TaskforceのTeleconにて、rdf:typeを表す為の属性を導入することが決まったそうです。これまでrdf:typeはclassまたはrole属性で行うことになっていたんですよね。なんだかなあと思っていたのでこれは歓迎です。

なんだかなあと思っていた理由として、classは内容がただの文字列で意味を持たせられないから、そしてroleはHTML要素の役割であり、生成されるリソースの役割じゃないよなあと思ったからというのがあります。いくらコンベンションとはいえ、そこらへんはきっちりしといた方がいい気もしますし。

とはいえ、そこまでrdf:typeまで書く必要あるかなあという気もするんですよね。RDFはプロパティがクラスのスコープを決めるので、プロパティの指定っていうゆるいルールだけでもいいんじゃないかなと思います。まあ、これはauthoringに対して思うことであって、構文にはあってもまあいいのかなとも。ややこしい。

しかしtype属性なんかは(局所的にですが)HTMLにすでに存在してますし、どんな属性名になるんでしょうか。

6.25

そのIDは要素か人か

| 21:50

数日前にRDF-in-XHTMLに流れたmime type of RDFa documentで、RDFaにおけるフラグメントIDの解釈はどうなるのって話がでていて興味深いです。

たとえば次のように、文書の作成者をRDFaとしてHTMLに埋め込んだとします。

<!-- http://example.com/foo.html -->
<link rel="foaf:primaryTopic" href="#me" />
<link rel="foaf:maker" href="#me" />

で、#meが指す部分はこんなの。

<!-- http://example.com/foo.htmlつづき -->
<div id="me">
<p><span property="foaf:nick">id:vantguarde</span>です。</p>
<p><a rel="foaf:mbox" href="mailto:foobar">メール</a>でなにかあればどうぞ。</p>
</div>

このHTMLから生成されるトリプルは次のようなものになります。

@prefix : <http://example.com/> .
@prefix foaf: <http://xmlns.com/foaf/0.1/> .

:foo.html foaf:primaryTopic :foo.html#me ;
  foaf:maker :foo.html#me .

:foo.html#me foaf:nick "id:vantguarde" ;
  foaf:mbox <mailto:foobar> .

さてさて、http://example.com/foo.html#meで表されるリソースは一体何になるのでしょうかというのが問題です。マークアップを考えるとdiv要素だけれど、生成されるトリプルを見るとfoaf:Personにも思えちゃうという。

フラグメントIDの扱いがRDFとHTMLでは違うので、こういう事が起こってしまうわけですね。解決法としてRDF的なURI参照にはabout属性を用いるベストプラクティスをつくろうっていう話が出てたりしますが、どうなるんですかね。

RoleやAccessよりはまだ動きがありそうなRDFaです。

Contact: @vant / lepetitcroissant@gmail.com.