Hatena::Groupweb

vantguarde

4.17

SPARQLメモとFOAF

| 16:40

引き続きSPARQLのお勉強。今日は名前を抜き出してみます。

PREFIX foaf: <http://xmlns.com/foaf/0.1/>

SELECT ?name
WHERE {
  ?p a foaf:Person ;
    foaf:name ?name ;
}
ORDER BY ?name

ORDER BYは続く変数で結果をソートする為のキーワード。

で、こう帰ってくる。

<sparql ...>

  <head>
    <variable name="name"/>
  </head>

  <results>

    <result>
      <binding name="name">
        <literal>Another Friend</literal>
      </binding>
    </result>

    <result>
      <binding name="name">
        <literal>My Friend</literal>
      </binding>
    </result>

    <result>
      <binding name="name">
        <literal>vant</literal>
      </binding>
    </result>

  </results>
</sparql>

はい、3つでてきました。元のFOAFにはぼく、My Friend, Another Friendの3人の情報(名前)があるので、3つ帰ってきます。

では、「あるFOAFファイルがあって、そのメインとなる人」の情報のみを返したい場合どうするか?

おとといのFOAFを見るに、どうやら僕がその人らしい。ただ、あのFOAFでは「僕のFOAF」だと確実にいうことが出来ないんです。もしかしたらMy Friendがメインかもしれないし、Another Friendがメインかもしれない。

これはFOAFにおいて、個人の情報とそれを記述したファイルとの間につながりがないことで引き起こされる問題です。

4.16

あっ

| 18:54

RDF Query Demoなんてのが。こんなのあるなんて知らなかったよ。

試してみたところ下で書いたクエリはちゃんと動きました。よかったよかった。ただNamespaceとschemaLocationが違うので注意かも。

SPARQLメモ

| 18:46

昨日書いたFOAFにクエリを投げてみる。

とりあえずSPARQL Query LanguageでのRDFクエリは次のようになります。N3/Turtleを参考に作られたので、それらを理解していたらQuery Languageは早く理解できます。

PREFIX foaf: <http://xmlns.com/foaf/0.1/>

SELECT ?mbox ?weblog
WHERE {
  ?p a foaf:Person ;
    foaf:name "vant" ;
    foaf:mbox ?mbox ;
    foaf:weblog ?weblog
}

foaf:nameに"vant"という値を持つfoaf:Personの、foaf:mboxとfoaf:weblogの値を返せ」っていうクエリですね。

結果をSPARQL Query Results XML Formatで取得してみると、次のようなXMLでかえってくるはず。

<sparql
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xmlns="http://www.w3.org/2005/sparql-results#"
 xsi:schemaLocation="http://www.w3.org/TR/rdf-sparql-XMLres/result2.xsd">

  <head>
    <variable name="mbox"/>
    <variable name="weblog"/>
  </head>

  <results>

    <result>
      <binding name="mbox">
        <uri>mailto:vantguarde@example.com</uri>
      </binding>

      <binding name="weblog">
        <uri>http://web.g.hatena.ne.jp/vantguarde/</uri>
      </binding>
    </result>

  </results>
</sparql>

わかりやすいのかわかりにくいのか。

Contact: @vant / lepetitcroissant@gmail.com.