CRS の RDF としての問題点

インディゴの松澤と申します。
# 過去議事で「インディゴ松田」となっているのが私かと思います
  金曜日にあらためて自己紹介させていただきます

さて、これは過去に高木さんとも議論した内容なのですが、
SVG IG 向きの課題かと思いますので、展開いたします。


◇事の発端
7.15 Geographic coordinate systems
http://www.w3.org/TR/SVGMobile12/coords.html#GeographicCoordinates
CRS のサンプル事例 07_19.svg、07_20.svg、07_21.svg の
掲載されているセクションなのですが、
実はここで掲載されている 07_20.svg と 07_21.svg の中の RDF は、
RDF validator (http://www.w3.org/RDF/Validator/)をパスしません。
  → この二つは、そもそも RDF風に書かれていないので、以下では触れません

07_19.svg の中の RDF は、validator はパスするのですが、
その RDF グラフは何かおかしいのです。


◇何が問題か?

== 典型的な CRS のRDF ==
<svg...>
<metadata>
<rdf:Description rdf:about="#">
  <crs:CoordinateReferenceSystem
       rdf:resource="http://purl.org/crs/84"
        svg:transform="matrix(a,b,c,d,e,f)"/>
</rdf:Description>
</metadata>
<g>...</g>
</svg>

このとき、この RDF は以下の2つのトリプルを構成します

> > 主語  : #
> > 述語  : crs:CoordinateReferenceSystem
> > 目的語: http://purl.org/crs/84

> > 主語  : http://purl.org/crs/84
> > 述語  : svg:transform
> > 目的語: matrix(a,b,c,d,e,f)

svg:transform="matrix(a,b,c,d,e,f)" というものは、
SVG ドキュメントの座標系に固有の値と考えるのが普通ですが、
RDF 的には、「http://purl.org/crs/84」という測地系のプロパティと
なっています。
このケースでは問題は深刻ではないですが、
以下のケースでは意味が消失します。


== 2つの CRS 定義を持つRDF ==
<?xml version="1.0"?>
<svg...>
<metadata...>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
         xmlns:crs="http://www.ogc.org/crs"
         xmlns:svg="http://www.w3.org/svg">

<rdf:Description rdf:about="#canvas1">
  <crs:CoordinateReferenceSystem
       rdf:resource="http://purl.org/crs/84"
       svg:transform="matrix(a1,b1,c1,d1,e1,f1)"/>
</rdf:Description>

<rdf:Description rdf:about="#canvas2">
  <crs:CoordinateReferenceSystem
       rdf:resource="http://purl.org/crs/84"
       svg:transform="matrix(a2,b2,c2,d2,e2,f2)"/>
</rdf:Description>
</rdf:RDF>

</metadata>
<g xml:id="canvas1">...</g>
<g xml:id="canvas2">...</g>
</svg>

この例では、 SVG の中に複数の地理座標があると考えてください。
たとえば、天気予報のように、本土と沖縄がひとつの画面に収まっているが、
本土部分と沖縄部分は違う CRS を持つようなケースです。
また、地図本体は CRS の影響下におきたいが、凡例などは影響外におきたい、
といったケースなど、Fragment に対する CRS の設定は
具体的な利用シーンが考えられます。

この RDF を Validator にかけると、

> > 主語  : #canvas1
> > 述語  : crs:CoordinateReferenceSystem
> > 目的語: http://purl.org/crs/84

> > 主語  : #canvas2
> > 述語  : crs:CoordinateReferenceSystem
> > 目的語: http://purl.org/crs/84

> > 主語  : http://purl.org/crs/84
> > 述語  : svg:transform
> > 目的語: matrix(a1,b1,c1,d1,e1,f1)

> > 主語  : http://purl.org/crs/84
> > 述語  : svg:transform
> > 目的語: matrix(a2,b2,c2,d2,e2,f2)

という4つのトリプルができあがり、
もともとの #canvas1, #canvas2 から svg:transfom への関係性が消失、
http://purl.org/crs/84 が二つの svg:transform を持つ、というように
コンフリクトしたグラフが形成されていることがわかります。



◇問題提起
ここで挙げたように、現在 SVGTiny1.2(SVG1.1も含む) で紹介されている
CRS の記述方法は、RDF としてみた場合には問題があると考えています。

1. svg:transform を中心として、
   RDF 的な文脈から周辺のクラス・語彙の定義を整理すべきでは

2. 非RDFの記法を考える場合にも、Fragment に対して複数の CRS を
   設定できる方法を検討したい

以上です。




--
Yuzo Matsuzawa <yuzo@indigo.co.jp>

Received on Thursday, 29 January 2009 08:41:09 UTC