Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
SPARQLを使い込む       山本泰智ライフサイエンス統合データベースセンター
今日のお題ほぼ1年前に開かれたLinked Data勉強会第二回でSPARQLの基礎を学びましたhttp://www.slideshare.net/fumihiro/sparql-8669490今回は、Federated Queries、CON...
でもその前にキーワードは、IRI rdf:typeの代わりに用いられるキーワード「a」を除き、大文字と小文字を区別しません関数名も同じく大文字と小文字を区別しませんデータサンプルは Turtle 形式で記述しますスペースの都合上、多くのprefi...
http://www.learningsparql.com/
http://jena.apache.org/
ng D raft                           ll Wo rki                    Last Cahttp://www.w3.org/TR/sparql11-query/
http://patterns.dataincubator.org/book/
Meronymy founder
Federated Queries一つのSPARQLクエリで複数のSPARQLエンドポイントにクエリを発行して結果をまとめて取得従来はプログラムを組んで行う必要があった分散データベース環境に適した仕組みといえる      第5回LinkedDa...
Linked Dataとの親和性 第5回LinkedData勉強会 7/24 @ DBCLS   山本泰智
サブクエリとSERVICEクエリの中にクエリ(サブクエリ)を書けるSERVICEキーワードで問合せ先エンドポイントを指定SELECT ?p ?oWHERE { SERVICE <http://ja.DBpedia.org/sparql> { S...
BINDもキモBINDキーワードを用いて演算結果を別の変数に代入できるPREFIX : <http://example.com/ns/expenses#>SELECT ?mealCode ?amountWHERE {   ?meal :desc...
CONSTRUCTで新たなトリプルを生成SELECTの代わりにCONSTRUCTを用いて結果をトリプルにCONSTRUCT { dbpedia:Joseph_Hocking ?dbpProp ?dbpVal . gp:Hocking_Josep...
生成ルールとCONSTRUCTd:jane ab:hasParent d:gene .                   patd:gene ab:hasParent d:pat ;        ab:gender   d:female ....
結果d:mike ab:hasAunt d:gene .d:jane ab:hasAunt d:joan .                             pat       gene                   joan  ...
CONSTRUCTでデータ変換PREFIX v: <http://www.w3.org/2006/vcard/ns#>PREFIX : <http://example.com/myaddressbook#>CONSTRUCT {  ?s v:g...
CONSTRUCTで内容確認CONSTRUCT {  ?item dm:problem dm:prob00 .  dm:prob00 rdfs:label "Amount must be an integer." .}WHERE {  ?ite...
データの型RDFのノードはURI、空白ノード、リテラルのいずれかリテラルはプレーンか型付きのいずれか プレーンリテラルには言語タグが付けられる "New York"@en 型付きリテラルはデータ型URIが付く "2012-07-24T18:00...
基本データ型 XML Schema datatypesで規定されている型 xsd:integer xsd:decimal xsd:float xsd:double xsd:string xsd:boolean xsd:dateTime@prefix...
カスタムデータ型自由に型を宣言できる "two"^^mt:potrzebies "10"^^u:squareMeters "14"^^u:liters "30"^^u:centimeters :asfaCode rdfs:subProperty...
関数 1条件SELECT ?answerWHERE { BIND (      (IF (2 > 3, "Two is bigger","Three is bigger")) AS ?answer)}判定SELECT ?o ?blankTest...
関数 2変換SELECT ?o ?integerTest ?decimalTest ?floatTest ?doubleTest ?stringTest ?booleanTest ?dateTimeTestWHERE { ?s ?p ?o .  ...
関数3型付きリテラルを生成するSTRDTSTRDT("123", xsd:integer)→ "123"^^<http://www.w3.org/2001/XMLSchema#integer>STRDT("iiii", <http://exam...
関数を使うことで得られるご利益既存データではIDがリテラルで表現されていることも多い             そこで文字列操作をした後にURI関数でURI化することで、他のRDFデータとの関係を明確にしたデータベースをSPARQLで構築できる ...
関数を用いてノードとトリプルを作る 1PREFIX dm: <http:/  /example.com/ns/demo#>CONSTRUCT { ?locationURI rdf:type dm:Place . }WHERE {  ?item ...
処理例入力                         @prefix d: <http://example.com/ns/data#> .                           @prefix dm: <http:/ /exam...
関数を用いてノードとトリプルを作る 2PREFIX im: <http:/ /example.com/ns/importedData#>PREFIX u: <http:/  /example.com/ns/units#>CONSTRUCT { ...
処理例                            @prefix d: <http://example.com/ns/data#> .                            @prefix u: <http://exam...
言語タグ関係関数lang と langMatches:x rdfs:label "french fries"@en-US .?s rdfs:label ?labellang(?label) = "en" は falselangMatches(l...
文字列処理関係関数判定?s rdfs:label ?label .BIND (STRSTARTS(?label,"12") AS ?startsTest)BIND (STRENDS(?label,"ing") AS ?endsTest)BIND...
数値処理関係関数四則演算や集合演算( AVG, MIN, MAX, SUM, COUNT )の他 ?s dm:amount ?amount . BIND (abs(?amount) AS ?absTest ) BIND (round(?amou...
日時や時間関係関数SELECT ?mtg ?yearTest ?monthTest ?dayTest ?hoursTest ?minutesTest ?secondsTest ?timezoneTest ?tzTest ?cTWHERE {  ...
ある条件を満たさないデータを検索するSELECT ?first ?last WHERE {  ?s ab:firstName ?first ;     ab:lastName ?last .  OPTIONAL { ?s ab:workTel ?wo...
実装状況に差SPARQL1.1は未確定なこともあり、実装毎に実行可能なキーワードや関数が異なるFederated Queriesは相互運用性に難あり        第5回LinkedData勉強会 7/24 @ DBCLS   山本泰智
ja.dbpedia.org や lod.ac, data.nature.com,data.allie.dbcls.jp などのサイトで実際に試す
Upcoming SlideShare
Loading in …5
×

第5回LinkedData勉強会@yayamamo

18,513 views

Published on

第5回Linked Data勉強会で説明しました少々発展的なSPARQLの使い方についてのスライドです。基礎的な使い方については加藤さんのスライド http://www.slideshare.net/fumihiro/sparql-8669490 をご覧ください。
また、本発表についての補足を以下のページに記述しています。
http://dbcls.rois.ac.jp/~yayamamo/fsyl/2012/07/sparqlを使い込む-補足/

Published in: Technology
  • Sex in your area is here: ❶❶❶ http://bit.ly/2Qu6Caa ❶❶❶
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • Follow the link, new dating source: ❶❶❶ http://bit.ly/2Qu6Caa ❶❶❶
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • Do This Simple 2-Minute Ritual To Loss 1 Pound Of Belly Fat Every 72 Hours ▲▲▲ https://tinyurl.com/y6qaaou7
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here

第5回LinkedData勉強会@yayamamo

  1. 1. SPARQLを使い込む 山本泰智ライフサイエンス統合データベースセンター
  2. 2. 今日のお題ほぼ1年前に開かれたLinked Data勉強会第二回でSPARQLの基礎を学びましたhttp://www.slideshare.net/fumihiro/sparql-8669490今回は、Federated Queries、CONSTRUCT、データ型、関数について紹介します 第5回LinkedData勉強会 7/24 @ DBCLS 山本泰智
  3. 3. でもその前にキーワードは、IRI rdf:typeの代わりに用いられるキーワード「a」を除き、大文字と小文字を区別しません関数名も同じく大文字と小文字を区別しませんデータサンプルは Turtle 形式で記述しますスペースの都合上、多くのprefixを記述していなかったり、元テキストからの変更を行ったりしています 第5回LinkedData勉強会 7/24 @ DBCLS 山本泰智
  4. 4. http://www.learningsparql.com/
  5. 5. http://jena.apache.org/
  6. 6. ng D raft ll Wo rki Last Cahttp://www.w3.org/TR/sparql11-query/
  7. 7. http://patterns.dataincubator.org/book/
  8. 8. Meronymy founder
  9. 9. Federated Queries一つのSPARQLクエリで複数のSPARQLエンドポイントにクエリを発行して結果をまとめて取得従来はプログラムを組んで行う必要があった分散データベース環境に適した仕組みといえる 第5回LinkedData勉強会 7/24 @ DBCLS 山本泰智
  10. 10. Linked Dataとの親和性 第5回LinkedData勉強会 7/24 @ DBCLS 山本泰智
  11. 11. サブクエリとSERVICEクエリの中にクエリ(サブクエリ)を書けるSERVICEキーワードで問合せ先エンドポイントを指定SELECT ?p ?oWHERE { SERVICE <http://ja.DBpedia.org/sparql> { SELECT ?p ?o WHERE { dbpedia:東京 ?p ?o .} }} 第5回LinkedData勉強会 7/24 @ DBCLS 山本泰智
  12. 12. BINDもキモBINDキーワードを用いて演算結果を別の変数に代入できるPREFIX : <http://example.com/ns/expenses#>SELECT ?mealCode ?amountWHERE { ?meal :description ?description ; :amount ?amount . BIND (UCASE(SUBSTR(?description,1,3)) as ?mealCode)} 第5回LinkedData勉強会 7/24 @ DBCLS 山本泰智
  13. 13. CONSTRUCTで新たなトリプルを生成SELECTの代わりにCONSTRUCTを用いて結果をトリプルにCONSTRUCT { dbpedia:Joseph_Hocking ?dbpProp ?dbpVal . gp:Hocking_Joseph ?gutenProp ?gutenVal .}WHERE { SERVICE <http://DBpedia.org/sparql> { SELECT ?dbpProp ?dbpVal WHERE { dbpedia:Joseph_Hocking ?dbpProp ?dpbVal . }} SERVICE <http://www4.wiwiss.fu-berlin.de/gutendata/sparql> { SELECT ?gutenProp ?gutenVal WHERE { gp:Hoking_Joseph ?gutenProp ?gutenVal .}}} 第5回LinkedData勉強会 7/24 @ DBCLS 山本泰智
  14. 14. 生成ルールとCONSTRUCTd:jane ab:hasParent d:gene . patd:gene ab:hasParent d:pat ; ab:gender d:female .d:joan ab:hasParent d:pat ; gene joan ab:gender d:female .d:pat ab:gender d:male . jane miked:mike ab:hasParent d:joan .CONSTRUCT { p の親の親 g がいて、その g を ?p ab:hasAunt ?aunt . }WHERE { 親に持つ女性 aunt がいる。 ?p ab:hasParent ?parent . かつ、aunt は p の親ではない。 ?parent ab:hasParent ?g . ?aunt ab:hasParent ?g ; ab:gender d:female . そのとき、p は aunt というおば FILTER (?parent != ?aunt)} を持つ。 第5回LinkedData勉強会 7/24 @ DBCLS 山本泰智
  15. 15. 結果d:mike ab:hasAunt d:gene .d:jane ab:hasAunt d:joan . pat gene joan jane mike 第5回LinkedData勉強会 7/24 @ DBCLS 山本泰智
  16. 16. CONSTRUCTでデータ変換PREFIX v: <http://www.w3.org/2006/vcard/ns#>PREFIX : <http://example.com/myaddressbook#>CONSTRUCT { ?s v:given-name ?firstName ; v:family-name ?lastName ; v:email ?email ; v:homeTel ?homeTel .}WHERE { ?s :firstName ?firstName ; :lastName ?lastName ; :email ?email . OPTIONAL { ?s :homeTel ?homeTel . }} 第5回LinkedData勉強会 7/24 @ DBCLS 山本泰智
  17. 17. CONSTRUCTで内容確認CONSTRUCT { ?item dm:problem dm:prob00 . dm:prob00 rdfs:label "Amount must be an integer." .}WHERE { ?item dm:amount ?amount . FILTER ((datatype(?amount)) != xsd:integer)} 第5回LinkedData勉強会 7/24 @ DBCLS 山本泰智
  18. 18. データの型RDFのノードはURI、空白ノード、リテラルのいずれかリテラルはプレーンか型付きのいずれか プレーンリテラルには言語タグが付けられる "New York"@en 型付きリテラルはデータ型URIが付く "2012-07-24T18:00:00"^^xsd:dateTime 第5回LinkedData勉強会 7/24 @ DBCLS 山本泰智
  19. 19. 基本データ型 XML Schema datatypesで規定されている型 xsd:integer xsd:decimal xsd:float xsd:double xsd:string xsd:boolean xsd:dateTime@prefix xsd: <http://www.w3.org/2001/XMLSchema#> 第5回LinkedData勉強会 7/24 @ DBCLS 山本泰智
  20. 20. カスタムデータ型自由に型を宣言できる "two"^^mt:potrzebies "10"^^u:squareMeters "14"^^u:liters "30"^^u:centimeters :asfaCode rdfs:subPropertyOf skos:notation :an_agrovoc_uri :asfaCode "asf4534"^^:asfaCode datatype関数で型を取得できる なお、sub-propertyとしてもモデル化できる 第5回LinkedData勉強会 7/24 @ DBCLS 山本泰智
  21. 21. 関数 1条件SELECT ?answerWHERE { BIND ( (IF (2 > 3, "Two is bigger","Three is bigger")) AS ?answer)}判定SELECT ?o ?blankTest ?literalTest ?numericTest ?IRITest ?URITestWHERE { ?s ?p ?o . BIND (isBlank(?o) as ?blankTest) BIND (isLiteral(?o) as ?literalTest) BIND (isNumeric(?o) as ?numericTest) BIND (isIRI(?o) as ?IRITest) BIND (isURI(?o) as ?URITest)} 第5回LinkedData勉強会 7/24 @ DBCLS 山本泰智
  22. 22. 関数 2変換SELECT ?o ?integerTest ?decimalTest ?floatTest ?doubleTest ?stringTest ?booleanTest ?dateTimeTestWHERE { ?s ?p ?o . BIND (xsd:integer(?o) as ?integerTest) BIND (xsd:decimal(?o) as ?decimalTest) BIND (xsd:float(?o) as ?floatTest) BIND (xsd:double(?o) as ?doubleTest) BIND (xsd:string(?o) as ?stringTest) BIND (xsd:boolean(?o) as ?booleanTest) BIND (xsd:dateTime(?o) as ?dateTimeTest)} 第5回LinkedData勉強会 7/24 @ DBCLS 山本泰智
  23. 23. 関数3型付きリテラルを生成するSTRDTSTRDT("123", xsd:integer)→ "123"^^<http://www.w3.org/2001/XMLSchema#integer>STRDT("iiii", <http://example.com/romanNumeral>)→ "iiii"^^<http://example.com/romanNumeral>URIを生成するURI (IRI)URIはIRIの同義関数URI("http://example.com/") → <http://example.com/>文字列表現を得るstrstr(<http://example.com/>) → "http://example.com/" 第5回LinkedData勉強会 7/24 @ DBCLS 山本泰智
  24. 24. 関数を使うことで得られるご利益既存データではIDがリテラルで表現されていることも多い そこで文字列操作をした後にURI関数でURI化することで、他のRDFデータとの関係を明確にしたデータベースをSPARQLで構築できる より構造化できる 再利用性が高まる 第5回LinkedData勉強会 7/24 @ DBCLS 山本泰智
  25. 25. 関数を用いてノードとトリプルを作る 1PREFIX dm: <http:/ /example.com/ns/demo#>CONSTRUCT { ?locationURI rdf:type dm:Place . }WHERE { ?item dm:location ?locationValue . BIND (IF(isURI(?locationValue), ?locationValue, URI(CONCAT("http:/ /example.com/ns/data#", ENCODE_FOR_URI(?locationValue))) ) AS ?locationURI ).} 第5回LinkedData勉強会 7/24 @ DBCLS 山本泰智
  26. 26. 処理例入力 @prefix d: <http://example.com/ns/data#> . @prefix dm: <http:/ /example.com/ns/demo#> .d:item432 dm:cost 8 ; dm:location <http://dbpedia.org/resource/Boston> .d:item857 dm:cost 12 ; dm:location <http://dbpedia.org/resource/Montreal> .d:item693 dm:cost 10 ; dm:location "Heidelberg" .d:item126 dm:cost 5 ; dm:location <http://dbpedia.org/resource/Lisbon> .出力<http://dbpedia.org/resource/Boston> rdf:type dm:Place .d:Heidelberg rdf:type dm:Place .<http://dbpedia.org/resource/Montreal> rdf:type dm:Place .<http://dbpedia.org/resource/Lisbon> rdf:type dm:Place . 第5回LinkedData勉強会 7/24 @ DBCLS 山本泰智
  27. 27. 関数を用いてノードとトリプルを作る 2PREFIX im: <http:/ /example.com/ns/importedData#>PREFIX u: <http:/ /example.com/ns/units#>CONSTRUCT { ?s u:amount ?newAmount . }WHERE { ?s im:product ?prodName ; im:amount ?amount ; im:units ?units . BIND(STRDT(?amount, URI(CONCAT("http:/ /example.com/ns/units#",?units))) AS ?newAmount)} 第5回LinkedData勉強会 7/24 @ DBCLS 山本泰智
  28. 28. 処理例 @prefix d: <http://example.com/ns/data#> . @prefix u: <http://example.com/ns/units#> .入力 @prefix im: <http://example.com/ns/importedData#> .d:item1 im:product "kerosene" ; im:amount "14" ; im:units "liters" .d:item2 im:product "double-knit polyester" ; im:amount "10" ; im:units "squareMeters" .d:item3 im:product "gold-plated chain" ; im:amount "30" ; im:units "centimeters" .出力d:item2 u:amount "10"^^u:squareMeters .d:item1 u:amount "14"^^u:liters .d:item3 u:amount "30"^^u:centimeters . 第5回LinkedData勉強会 7/24 @ DBCLS 山本泰智
  29. 29. 言語タグ関係関数lang と langMatches:x rdfs:label "french fries"@en-US .?s rdfs:label ?labellang(?label) = "en" は falselangMatches(lang(?label)),"en") は trueSTRLANG言語タグ付きリテラルを生成するSTRLANG("truck","en-US") 第5回LinkedData勉強会 7/24 @ DBCLS 山本泰智
  30. 30. 文字列処理関係関数判定?s rdfs:label ?label .BIND (STRSTARTS(?label,"12") AS ?startsTest)BIND (STRENDS(?label,"ing") AS ?endsTest)BIND (CONTAINS(?label," ") AS ?containsTest)BIND (regex(?label,"d{3}") AS ?regexTest)その他BIND (STRLEN(?label) AS ?strlenTest)BIND (SUBSTR(?label,4,2) AS ?substrTest)BIND (UCASE(?label) AS ?ucaseTest)BIND (LCASE(?label) AS ?lcaseTest)BIND (REPLACE(?label,"ab([a-z]+)","X$1") AS ?repTest) 第5回LinkedData勉強会 7/24 @ DBCLS 山本泰智
  31. 31. 数値処理関係関数四則演算や集合演算( AVG, MIN, MAX, SUM, COUNT )の他 ?s dm:amount ?amount . BIND (abs(?amount) AS ?absTest ) BIND (round(?amount) AS ?roundTest ) BIND (ceil(?amount) AS ?ceilTest ) BIND (floor(?amount) AS ?floorTest ) BIND (rand() AS ?randTest ) 第5回LinkedData勉強会 7/24 @ DBCLS 山本泰智
  32. 32. 日時や時間関係関数SELECT ?mtg ?yearTest ?monthTest ?dayTest ?hoursTest ?minutesTest ?secondsTest ?timezoneTest ?tzTest ?cTWHERE { ?mtg t:starts ?startTime . BIND (year(?startTime) AS ?yearTest) BIND (month(?startTime) AS ?monthTest) BIND (day(?startTime) AS ?dayTest) BIND (hours(?startTime) AS ?hoursTest) BIND (minutes(?startTime) AS ?minutesTest) BIND (seconds(?startTime) AS ?secondsTest) BIND (timezone(?startTime) AS ?timezoneTest) BIND (tz(?startTime) AS ?tzTest) BIND (now() AS ?cT)} 第5回LinkedData勉強会 7/24 @ DBCLS 山本泰智
  33. 33. ある条件を満たさないデータを検索するSELECT ?first ?last WHERE { ?s ab:firstName ?first ; ab:lastName ?last . OPTIONAL { ?s ab:workTel ?workNum . } FILTER (!bound(?workNum))}SELECT ?first ?last WHERE { ab:workTelが無い ?s ab:firstName ?first ; データを見つける ab:lastName ?last . NOT EXISTS { ?s ab:workTel ?workNum }}SELECT ?first ?last WHERE { ?s ab:firstName ?first ; ab:lastName ?last . MINUS { ?s ab:workTel ?workNum }} 第5回LinkedData勉強会 7/24 @ DBCLS 山本泰智
  34. 34. 実装状況に差SPARQL1.1は未確定なこともあり、実装毎に実行可能なキーワードや関数が異なるFederated Queriesは相互運用性に難あり 第5回LinkedData勉強会 7/24 @ DBCLS 山本泰智
  35. 35. ja.dbpedia.org や lod.ac, data.nature.com,data.allie.dbcls.jp などのサイトで実際に試す

×