1. トップページ

PHP 5.3 のサポートが終了

2013年03月27日

マイナビニュースやスラッシュドット・ジャパンに PHP 5.3 のサポートが終了する記事が掲載されていた。

記事中には5.3がもっとも高いシェアを占めたと書かれているが、私の知る限り無料のレンタルサーバなどでは未だに PHP 5.2 が主流のように感じる。場合によっては PHP 5.1 や PHP 5.0 でサービスを提供している所もある。

全ての人が最新バージョンという恵まれた環境の中でウェブサイトを作ることが出来るわけではないのだ。

ICRA(Internet Content Rating Association) が終了していた

2013年03月27日

久々にインターネットにおけるレイティングを調べている中で分かったことなのだが ICRA によるラべリングは終了したようだ。

Upon the recent decision of FOSI's Board of Directors, the ICRA labeling engine has been discontinued. While all current labels will continue to work with Internet content filters, the ICRA label generator, ICRA tools and Webmaster support will no longer be available.

ICRA は HTTP Response Header で使用する PICS-Label の値やサイトのレイティングを記述した RDF/XML を生成してくれるジェネレータなどを提供していただけに少し残念だ。

ちなみに ICRA のジェネレータによって生成された RDF/XML は以下のようなものである。

<?xml version="1.0" encoding="UTF-8"?>
<rdf:RDF
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
    xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
    xmlns:dcterms="http://purl.org/dc/terms/"
    xmlns:label="http://www.w3.org/2004/12/q/contentlabel#"
    xmlns:icra="http://www.icra.org/rdfs/vocabularyv03#"
>
    <rdf:Description rdf:about="">
        <dcterms:creator rdf:resource="http://www.icra.org" />
        <dcterms:created>2011-04-30</dcterms:created>
        <dcterms:modified>2011-04-30</dcterms:modified>
        <label:authorityFor>http://www.icra.org/rdfs/vocabularyv03#</label:authorityFor>
    </rdf:Description>

    <label:Ruleset>
        <label:hasHostRestrictions>
            <label:Hosts>
                <label:hostRestriction>japan.nusutto.jp</label:hostRestriction>
            </label:Hosts>
        </label:hasHostRestrictions>
        <label:hasDefaultLabel rdf:resource="#label_1" />
    </label:Ruleset>

    <label:ContentLabel rdf:ID="label_1">
        <rdfs:comment>Label for all/most of website</rdfs:comment>
        <icra:nz>1</icra:nz>
        <icra:sz>1</icra:sz>
        <icra:vz>1</icra:vz>
        <icra:lz>1</icra:lz>
        <icra:oz>1</icra:oz>
        <icra:cz>1</icra:cz>
        <rdfs:label>No nudity; No sexual material; No violence; No potentially offensive language; No potentially harmful activities; No user-generated content; </rdfs:label>
    </label:ContentLabel>
</rdf:RDF>

タグ: RDF

HTML の中に Turtle を埋め込む方法

2013年03月27日

Turtle の仕様は Turtle - Terse RDF Triple Language にて公開されていたようだが、正式な W3C 勧告候補案が http://www.w3.org/TR/2013/CR-turtle-20130219/ にて公開されている。

ところでこの勧告候補案の A Embedding Turtle in HTML documents 中でThis section is non-normative.と前置きしながらも Turtle を HTML5 の中に埋め込む方法を提案している。

<script type="text/turtle">
@prefix dc: <http://purl.org/dc/terms/> .
@prefix frbr: <http://purl.org/vocab/frbr/core#> .

<http://books.example.com/works/45U8QJGZSQKDH8N> a frbr:Work ;
     dc:creator "Wil Wheaton"@en ;
     dc:title "Just a Geek"@en ;
     frbr:realization <http://books.example.com/products/9780596007683.BOOK>,
         <http://books.example.com/products/9780596802189.EBOOK> .

<http://books.example.com/products/9780596007683.BOOK> a frbr:Expression ;
     dc:type <http://books.example.com/product-types/BOOK> .

<http://books.example.com/products/9780596802189.EBOOK> a frbr:Expression ;
     dc:type <http://books.example.com/product-types/EBOOK> .
</script>

以前 HTML の中に RDF/XML を埋め込む方法として HTML のコメントを使用してその中に RDF/XML を記述するという方法があったがそれに近いものを感じる。悪くはないと思うのだが、RDFa があるのだからここまでしなくてもいいような気が…

タグ: RDF

ある時点を RDF で表現する

2013年03月27日

Webページのある時点を RDF で表現するにはどうしたらよいかを考えてみる。

実はある興味深いブログをブックマークしていたのだが、久々にアクセスしてみると胡散臭い情報商材を紹介したページとなっていた。恐らくドメインの売買が行われたのであろう。

仮にそのページの URL が http://www.example.com/blog/ であったとすると、ある時点で http://www.example.com/blog/ はブログであり、ある時点では情報商材を紹介したページということになる。

例えば http://www.example.com/blog/ がブログだった時の RDF は以下のようなものだとする。

@prefix dc: <http://purl.org/dc/elements/1.1/> .

<http://www.example.com/blog/>
    dc:title "アリスのブログ"@ja;
    dc:description  "アリスの日々を綴ったブログです。"@ja;
    dc:creator "アリス"@ja; .

この RDF は http://www.example.com/blog/ がブログだった時点では真だが、情報商材の時点では偽となる。こういった場合ある時点を RDF で指定する方法はあるのだろうか。

自分が思いつく方法としてはスナップショットのようなクラスを利用する。

@prefix ex: <http://www.example.com/vocabulary/> .
@prefix dc: <http://purl.org/dc/elements/1.1/> .

[]
    a ex:Snapshot;
    dc:title "アリスのブログ"@ja;
    dc:description  "アリスの日々を綴ったブログです。"@ja;
    dc:creator "アリス"@ja;
    ex:isSnapshotOf <http://www.example.com/blog/>;
    ex:date "2011-09-06"; .

空白ノードに ex:Snapshot の性質を与えて ex:isSnapshotOf で URL を指定し ex:date で日時を指定する。

この方法ならば RDF でWebページのある時点を切り取ることが出来る。

参考までにここで使用した語彙を Turtle で定義しておく。

@prefix dcterms: <http://purl.org/dc/terms/> .
@prefix ex: <http://www.example.com/vocabulary/> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix owl: <http://www.w3.org/2002/07/owl#> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .

ex:Snapshot
    a owl:Class;
    rdfs:subClassOf
        [   a owl:Restriction;
            owl:onProperty ex:isSnapshotOf;
            owl:cardinality 1;
        ],
        [   a owl:Restriction;
            owl:onProperty ex:isSnapshotOf;
            owl:allValuesFrom owl:Thing;
        ],
        [   a owl:Restriction;
            owl:onProperty ex:date;
            owl:cardinality 1;
        ],
        [   a owl:Restriction;
            owl:onProperty ex:date;
            owl:allValuesFrom xsd:date;
        ];
    rdfs:label "Snapshot"@en;
    rdfs:comment "ある時点を切り取ったスナップショットである。"@ja .

ex:isSnapshotOf
    a owl:ObjectProperty;
    a owl:FunctionalProperty;
    rdfs:subPropertyOf dcterms:isPartOf;
    rdfs:domain ex:Snapshot;
    rdfs:range owl:Thing;
    rdfs:label "is Snapshot of"@en;
    rdfs:comment "主語は目的語のスナップショットである。"@ja .

ex:date;
    a owl:DatatypeProperty;
    a owl:FunctionalProperty;
    rdfs:subPropertyOf dcterms:date;
    rdfs:domain ex:Snapshot;
    rdfs:range xsd:date;
    rdfs:label "date"@en;
    rdfs:comment "スナップショットの日時"@ja .

ヨコハマ・アート・LOD

2013年03月27日

公益財団法人横浜市芸術文化振興財団ヨコハマ・アート・LODというプロジェクトの中で RDF でデータを公開しているのだが、そこで定義されている語彙が「なんだかなぁ」と思わざるえない。

YAN event Vocabulary の一部を引用する。

<rdf:Description rdf:about="http://fp.yafjp.org/terms/event#Event">
    <rdfs:label xml:lang="ja">イベント</rdfs:label>
    <rdfs:comment xml:lang="ja">イベントを表す</rdfs:comment>
    <rdfs:isDefinedBy>http://fp.yafjp.org/terms/event/</rdfs:isDefinedBy>
    <rdf:type>http://www.w3.org/2000/01/rdf-schema#Class</rdf:type>
</rdf:Description>

@rdf:reource は何処へ行ってしまわれたのでしょうね。

パンくずリストを RDFa で表現する

2013年03月26日

リッチスニペットでのパンくずリストにおける問題で Google のパンくずリストでの RDFa の記述は問題があるのではないかと指摘したが、ではどのように記述すればよいか代替案を考えてみる。

最初に記述方法を考えるうえで以下のような条件を設ける。

  • RDF として問題ないようにする
  • 簡単に導入できる
  • コードが汚くならないようにする

この条件からするとパンくずリストを RDFa で階層的に表現するのは無理だと言える。となると他に考えられる方法としては RDF Collection か rdf:Seq を利用する方法が考えられる。

まず以下のようなパンくずリストのコードがある。

<div class="breadcrumb">
    <a href="http://www.example.com/dresses">洋服</a> › 
    <a href="http://www.example.com/dresses/real">ドレス</a> › 
    <a href="http://www.example.com/dresses/real/green">緑のドレス</a>
</div>

RDF Collection を使用した記述

このコードを RDF Collection を使用して表現するとおそらく以下のようになる。

<div class="breadcrumb" prefix="ex: http://www.example.com/vocabulary/" about="" rel="ex:breadcrumbList" inlist="">
    <a typeof="ex:Breadcrumb" href="http://www.example.com/dresses" rel="ex:url" property="ex:title">洋服</a> › 
    <a typeof="ex:Breadcrumb" href="http://www.example.com/dresses/real" rel="ex:url" property="ex:title">ドレス</a> › 
    <a typeof="ex:Breadcrumb" href="http://www.example.com/dresses/real/green" rel="ex:url" property="ex:title">緑のドレス</a>
</div>

このコードを Turtle に変換すると以下のようになる。

@prefix ex: <http://www.example.com/vocabulary/> .

<>
    ex:breadcrumbList (
        [   a ex:Breadcrumb;
            ex:url <http://www.example.com/dresses>;
            ex:title "洋服";
        ]
        [   a ex:Breadcrumb;
            ex:url <http://www.example.com/dresses/real>;
            ex:title "ドレス";
        ]
        [   a ex:Breadcrumb;
            ex:url <http://www.example.com/dresses/real/green>;
            ex:title "緑のドレス";
        ]
    ); .

RDFa 1.1 で追加された @inlist のおかけで大分簡略に記述できる。ただ RDF Collection は閉じたリストを表現するときに使われるものであるので、パンくずリストを表現するのに適しているかは正直微妙なところだと思う。

rdf:Seq を使用した記述

次に rdf:Seq を使用した記述の場合は以下のようになる。

<div class="breadcrumb" prefix="ex: http://www.example.com/vocabulary/" typeof="ex:BreadcrumbList" rel="rdf:li">
    <a typeof="ex:Breadcrumb" href="http://www.example.com/dresses" rel="ex:url" property="ex:title">洋服</a> › 
    <a typeof="ex:Breadcrumb" href="http://www.example.com/dresses/real" rel="ex:url" property="ex:title">ドレス</a> › 
    <a typeof="ex:Breadcrumb" href="http://www.example.com/dresses/real/green" rel="ex:url" property="ex:title">緑のドレス</a>
</div>

このコードを Turtle に変換すると以下のようになる。

@prefix ex: <http://www.example.com/vocabulary/> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .

[]  a ex:BreadcrumbList;
    rdf:li
        [   a ex:Breadcrumb;
            ex:url <http://www.example.com/dresses>;
            ex:title "洋服";
        ],
        [   a ex:Breadcrumb;
            ex:url <http://www.example.com/dresses/real>;
            ex:title "ドレス";
        ],
        [   a ex:Breadcrumb;
            ex:url <http://www.example.com/dresses/real/green>;
            ex:title "緑のドレス";
        ]; .

この方法ならば RDF 観点からみても全ての条件を満たしていると思う。XHTML の観点からしても無駄なspan要素などもなく美しい。rdf:Seq が記述されていないと思われるかもしれないが ex:BreadcrumbList のサブプロパティに rdf:Seq を指定しておけば問題はないであろう。個人的にはやはり RDF Collection よりは rdf:Seq を使用した記述方法のほうが妥当に思える。

語彙

参考までにここで使用した語彙を Turtle で定義しておく。

@prefix ex: <http://www.example.com/vocabulary/> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix owl: <http://www.w3.org/2002/07/owl#> .
@prefix v: <http://rdf.data-vocabulary.org/#> .

ex:BreadcrumbList
    a owl:Class;
    rdfs:subClassOf rdf:Seq;
    rdfs:label "Breadcrumb List"@en;
    rdfs:comment "パンくずリストを格納しておくクラス。"@ja .

ex:Breadcrumb
    a owl:Class;
    rdfs:subClassOf
        v:Breadcrumb,
        [   a owl:Restriction;
            owl:onProperty ex:url;
            owl:cardinality 1;
        ],
        [   a owl:Restriction;
            owl:onProperty ex:url;
            owl:allValuesFrom _:OnlineDocument;
        ],
        [   a owl:Restriction;
            owl:onProperty ex:title;
            owl:cardinality 1;
        ],
        [   a owl:Restriction;
            owl:onProperty ex:title;
            owl:allValuesFrom rdf:PlainLiteral;
        ];
    rdfs:label "Breadcrumb"@en;
    rdfs:comment "一つ一つのパンくず。"@ja; .

ex:breadcrumbList
    a owl:ObjectProperty;
    rdfs:domain _:OnlineDocument;
    rdfs:label "breadcrumb list"@en;
    rdfs:comment "パンくずリスト用の RDF Collection を指定する"@ja; .

ex:url
    a owl:ObjectProperty;
    a owl:FunctionalProperty;
    rdfs:subPropertyOf v:url;
    rdfs:domain ex:Breadcrumb;
    rdfs:range _:OnlineDocument;
    rdfs:label "url"@en;
    rdfs:comment "パンくずの URL を指定する。"@ja .

ex:title
    a owl:DatatypeProperty;
    a owl:FunctionalProperty;
    rdfs:subPropertyOf v:title;
    rdfs:domain ex:Breadcrumb;
    rdfs:range rdf:PlainLiteral;
    rdfs:label "title"@en;
    rdfs:comment "パンくずのタイトルを指定する。"@ja .

_:OnlineDocument
    a owl:Class;
    owl:intersectionOf (<http://xmlns.com/foaf/0.1/Document> <http://www.w3.org/2006/gen/ont#InformationResource>);
    rdfs:comment "オンライン上に存在するドキュメント。"@ja .

タグ: RDF

リッチスニペットでのパンくずリストにおける問題

2013年03月25日

Google のリッチスニペットでのパンくずリストにおける RDFa の記述は少し問題があるように感じる。

Google ではパンくずリストについて2種類の記述方法をサポートしている。

まずはパンくずリストがページ内に1つしかない場合の記述方法である。

<div xmlns:v="http://rdf.data-vocabulary.org/#">
   <span typeof="v:Breadcrumb">
     <a href="http://www.example.com/dresses" rel="v:url" property="v:title">
      ドレス
    </a> ›
   </span>
   <span typeof="v:Breadcrumb">
    <a href="http://www.example.com/dresses/real" rel="v:url" property="v:title">
      ドレス
    </a> ›
   </span>
   <span typeof="v:Breadcrumb">
    <a href="http://www.example.com/dresses/real/green" rel="v:url" property="v:title">
      緑のドレス
    </a> ›
   </span>
</div>

この RDFa を Turtle に変換すると以下のようになる。

@prefix v: <http://rdf.data-vocabulary.org/#> .

[] a v:Breadcrumb;
    v:title "ドレス";
    v:url <http://www.example.com/dresses>; .

[] a v:Breadcrumb;
    v:title "ドレス";
    v:url <http://www.example.com/dresses/real>; .

[] a v:Breadcrumb;
    v:title "緑のドレス";
    v:url <http://www.example.com/dresses/real/green>; .

RDF の観点から見ると、この記述の仕方では v:Breadcrumb という性質の空白ノードを作成しているにすぎない。RDF では rdf:Seq などを使用する場合を除きリソースの順番は考慮することはない。

本来ならば rdf:Seqrdf:li を使用して空白ノードの順番を記述すべきであろう。しかしこの RDFa ではそれが行われていない。これでは残念ながら RDF としては不完全であろう。

次にパンくずリストがページ内に複数ある場合の記述方法である。

<div xmlns:v="http://rdf.data-vocabulary.org/#">
  <span typeof="v:Breadcrumb">
    <a href="http://www.example.com/books" rel="v:url" property="v:title">
      書籍
    </a> ›
    <span rel="v:child">
      <span typeof="v:Breadcrumb">
        <a href="http://www.example.com/books/authors" rel="v:url" property="v:title">
          著者
        </a> ›
        <span rel="v:child">
          <span typeof="v:Breadcrumb">
            <a href="http://www.example.com/books/authors/stephenking" rel="v:url" property="v:title">
              スティーブン・キング
            </a> ›
          </span>
        </span>
      </span>
    </span>
  </span>
</div>

<div xmlns:v="http://rdf.data-vocabulary.org/#">
    <span typeof="v:Breadcrumb">
    <a href="http://www.example.com/books" rel="v:url" property="v:title">
      書籍
    </a> ›
    <span rel="v:child">
      <span typeof="v:Breadcrumb">
        <a href="http://www.example.com/books/fiction" rel="v:url" property="v:title">
          フィクション
        </a> ›
        <span rel="v:child">
          <span typeof="v:Breadcrumb">
            <a href="http://www.example.com/books/fiction/horror" rel="v:url" property="v:title">
              ホラー
            </a> ›
          </span>
        </span>
      </span>
    </span>
  </span>
</div>

この RDFa を Turtle に変換すると以下のようになる。

@prefix v: <http://rdf.data-vocabulary.org/#> .

[] a v:Breadcrumb;
    v:child [
        a v:Breadcrumb;
        v:child [
            a v:Breadcrumb;
            v:title "スティーブン・キング";
            v:url <http://www.example.com/books/authors/stephenking>;
        ];
        v:title "著者";
        v:url <http://www.example.com/books/authors>;
    ];
    v:title "書籍";
    v:url <http://www.example.com/books>; .

[] a v:Breadcrumb;
    v:child [
        a v:Breadcrumb;
        v:child [
            a v:Breadcrumb;
            v:title "ホラー";
            v:url <http://www.example.com/books/fiction/horror>;
        ];
        v:title "フィクション";
        v:url <http://www.example.com/books/fiction>;
    ];
    v:title "書籍";
    v:url <http://www.example.com/books>; .

こちらの記述方法では順番ではなく階層構造で解決しようとしている。この方法ならば RDF の観点からしても問題がないと思われる。しかし問題点が無いわけではない。一番目につくのはspan要素の多さだ。これは階層構造を記述するために仕方ないとはいえ汚いコードには変わらない。

Google のパンくずリストの記述方法は一方では RDF の観点からして不十分であるし、もう一方はソースが汚くなるという問題点がある。

タグ: RDF

XHTML + RDFa 1.0 から XHTML + RDFa 1.1 への書き換え

2013年03月25日

RDFa 1.0 と RDFa 1.1 の変更点という記事を書いたので今回は XHTML + RDFa 1.0 から XHTML + RDFa 1.1 への書き換えの際の注意点を書いておく。

DOCTYPE

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML+RDFa 1.0//EN" "http://www.w3.org/MarkUp/DTD/xhtml-rdfa-1.dtd">
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML+RDFa 1.1//EN" "http://www.w3.org/MarkUp/DTD/xhtml-rdfa-2.dtd">

RDFa 1.0 と RDFa 1.1 は異なるため DOCTYPE を書き換える必要がある。

HTML要素

<html
    xmlns="http://www.w3.org/1999/xhtml"
    xmlns:dbpedia="http://dbpedia.org/resource/"
    xmlns:foaf="http://xmlns.com/foaf/0.1/"
    xml:lang="ja"
    version="XHTML+RDFa 1.1"
    about=""
    typeof="foaf:Document"
>
<html
    xmlns="http://www.w3.org/1999/xhtml"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xml:lang="ja"
    version="XHTML+RDFa 1.1"
    prefix="dbpedia: http://dbpedia.org/resource/"
    about=""
    typeof="foaf:Document"
    xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/MarkUp/SCHEMA/xhtml-rdfa-2.xsd"
>

XHTML + RDFa 1.1 では @xmlns ではなく @prefix を使用する。FOAF はデフォルトでマッピングされているため @prefix で指定する必要はない。デフォルトで使用できる語彙は RDFa Core Initial Context で確認できる。

XML Schema の場所を @xsi:schemaLocation で指定できるようなので指定しておく。

profile属性

head要素で使用できた @profileXHTML + RDFa 1.1 の DTD で定義されていないため使用できない。

src属性

@src は主語から目的語へと変更された。@src と共に @property@rel を記述している場合には書き換える必要がある。

property属性

@property は目的語リテラルに使用するものだが、@href, @resourcec, @src の何れかが存在して @rel, @rev, @datatype, @content の何れも存在しない場合は @property の目的語はリテラルではなくリソースになる。

<h1><a id="#h1" href="#h1" property="dc:title">Title</a></h1>

以上のような書き方をしている場合には書き換える必要が出てくる。

datatype属性

@datatype のデフォルトはプレーンリテラルとなった。今までは子要素が存在してプレーンリテラルを指定する場合は datatype="" と書かなけばならなかったが、もはやその必要はなくなった。

<p property="dc:title">E = mc<sup>2</sup>: The Most Urgent Problem of Our Time</p>
<p property="dc:title" datatype="rdf:XMLLiteral">E = mc<sup>2</sup>: The Most Urgent Problem of Our Time</p>

XML Literal を使用したい場合 XHTML + RDFa 1.1 では明示的に datatype="rdf:XMLLiteral" と指定する必要がある。

inlist属性

XHTML + RDFa 1.1 では @inlist を使用して簡単に RDF Collection を作成できるようになった。既に XHTML + RDFa 1.0 で RDF Collection を記述しているならば書き直す必要はない。しかし @inlist で記述すると非常に読みやすくなる。

<p prefix="bibo: http://purl.org/ontology/bibo/ dc: http://purl.org/dc/terms/" typeof="bibo:Chapter">
  "<span property="dc:title">Semantic Annotation and Retrieval</span>", by
  <span inlist="" property="dc:creator" resource="http://ben.adida.net/#me">Ben Adida</span>,
  <span inlist="" property="dc:creator">Mark Birbeck</span>, and
  <span inlist="" property="dc:creator" resource="http://www.ivan-herman.net/foaf#me">Ivan Herman</span>.
</p>

タグ: RDF

RDFa 1.0 と RDFa 1.1 の変更点

2013年03月24日

最近になって知ったことだが、RDFa 1.0 をバージョンアップさせた RDFa 1.1 が勧告されていた。

Introduction to RDFa によると RDFa 1.1 による変更点は 以下のようなものである。

  • XHTML 特有のルールが XHTML+RDFa 1.1 として分離。
  • @xmlns による接頭辞宣言を廃止予定とし、@prefix を追加。
  • 接頭辞は大文字・小文字を区別せず、比較するときは小文字変換される。
  • データ型が CURIE の場所に絶対 IRI を書けるようになった(CURIEorIRI)。
  • データ型が CURIE の場所にタームを書けるようになった(TERMorCURIEorAbsIRI)。
  • 未定義のタームを定義するのに(@vocab を通して)デフォルト接頭辞を定義できる。
  • 目的語リテラルに @datatype がない場合、1.0 では XMLLiteral だったが、1.1 はプレーンリテラルになる。
  • @inlist によって、単純トリプルではなく、リソースに付随する RDF リストを生成できる。
  • @src は、1.0 では @about(主語)と同じであったが、1.1 では @href(目的語)と同じ。

私見としては @prefix ではなく @xmlns のままでもよいと思うのだが、廃止予定になってしまった。@xmlns について嫌いな人が多いのか、それとも HTML + RDFa との関係もあるのかもしれない。

@property, @datatype, @rel, @rev にそのまま URI を指定できる(正確には IRI)ようになったのは大きなメリットだと思う。RDFa 1.0 ではたった一回だけしか使用しないプロパティでも @xmlns を記述しなければならなかった。これはソースを汚くする大きな要因だった。

@datatype が存在せず、子要素が存在する場合は rdf:XMLLiteral になっていたが、これも地味に迷惑だった。子要素があるたびにいちいち datatype="" と記述しなければならないのは面倒だ。デフォルトはプレーンリテラルで XMLLiteral にしたい場合は datatype="rdf:XMLLiteral" と明示的に指定するように改善されたのはよかった。

@inlist が追加されたため RDF Collection が簡単に記述できるようになったのも大きな前進だろう。RDFa 1.0 で RDF Collection を記述しようとすると見るに堪えない汚いコードを書かなければならなかった。また RDF Collection で目的語にリテラルを使えるというのもよいと思う。(というのも RDF/XML では目的語にリテラルが使えず Turtle と比べて大きく見劣りする原因だった。)

@src が主語ではなく目的語になったのもよいことだ。もともとimg要素を使用するとき画像のメタデータの記述を簡単にするために @src を主語にしたと考えられるのだが、これは画像とそのページとの関係を記述するとき大きな妨げになっていた。<img alt="Logo" src="logo.png" rev="foaf:logo" resource="" /> などと書かなくてすむのはありがたいことだ。

それと @vocab は無くてもよい。というか態々新たに属性を作成する必要性があったのだろうか?

あと気づいた事なのだが、幾つかの接頭辞はデフォルトで定義されているようだ。

When an RDFa Processor processes an XML+RDFa document, it does so via the following initial context:

  1. There are default terms (e.g., describedby, license, and role), defined in http://www.w3.org/2011/rdfa-context/rdfa-1.1.
  2. There are default prefix mappings (e.g., dc), defined in http://www.w3.org/2011/rdfa-context/rdfa-1.1.
  3. There is no default vocabulary IRI.
  4. The base can be set using the @xml:base attribute as defined in [XML10-4e].
  5. The current language can be set using @xml:lang attribute.

デフォルトで定義されている接頭辞の一覧は RDFa Core Initial Context で参照することが出来る。W3C で作成された語彙は勿論のこと、Dubli Core や FOAF や SIOC などの有名どころの語彙も @prefix なしで使用できるということであろう。

XHTML+RDFa 1.1 も勧告されているため、すくにでも XHTML で使用することが出来る。

この記事を書いた後 RDF 1.0 と RDF 1.1 の大きな変更点をもう一つ発見した。

例えば以下のような XHTML + RDFa のコードを N-Triples に変換するとする。

<h1><a id="#h1" href="#h1" property="dc:title">Title</a></h1>

RDF 1.0 では 以下のような N-Triples になる。

<> <http://purl.org/dc/terms/title> "Title";

何も可笑しい所はない。ところが RDFa 1.1 だと以下のような N-Triples になる。

<> <http://purl.org/dc/terms/title> <#h1>;

RDFa 1.1 の仕様書を眺めていると、それっぽい記述を見つけた。

A literal object can be set by using @property to express a predicate, and then using either @content, or the inline text of the element that @property is on. Note that the use of @content prohibits the inclusion of rich markup in your literal. If the inline content of an element accurately represents the object, then documents should rely upon that rather than duplicating that data using the @content.

A IRI resource object can be set using one of @rel or @rev to express a predicate, and then either using one of @href, @resource or @src to provide an object resource explicitly, or using the chaining techniques described above to obtain an object from a nested subject, or from a bnode. Alternatively, the @property can also be used to define an IRI resource, in the presence of an @href, @resource, or @src and in the absence of @rel, @rev, @datatype, or @content.

私が読む限り @href, @resourcec, @src の何れかが存在して @rel, @rev, @datatype @content の何れも存在しない場合は @property の目的語はリテラルではなくリソースになるようだ。

正直これは改悪ではないかと思う。なんのための @rel だろうか。

参考リンク

タグ: RDF

台湾ではアダルトに著作権はないのか?

2013年03月23日

昨今著作権に関する問題は尽きないが、台北地検「アダルトに著作権なし」、日本販売元訴え不成立という記事によると台湾ではアダルトに著作権は認められないそうだ。

台湾ではこれまで、1999年にポルノ動画は公序良俗に反し、著作権法の対象である文学・科学・芸術などの著作に該当しないため、その保護は受けないとされた刑事判決事例がある。また高等法院2005年の刑事判決では、モザイク処理を施し、政府新聞局の審査で合格して限制級(台湾のアダルトランク)認定を受けたとしても、著作権法の保護を受けることはないとされている。同地検ではこのような判例や見解を受け、今回、台湾企業側が動画をネット上で配布しても著作権法違法にはあたらないとした。

これによって世界のポルノ動画が台湾に集まってくるなんてこともありうるのだろうか。