$30 off During Our Annual Pro Sale. View Details »

SPARQL入門 / SPARQL primer

fumi
December 19, 2016

SPARQL入門 / SPARQL primer

https://doi.org/10.6084/m9.figshare.5947678

2016-12-19 JSTリンクト・データ(大規模文献情報・シソーラス)を使い倒そう!-LODC2016×J-GLOBAL knowledge連携イベント- の講演スライド http://lodc2016-jst.peatix.com

fumi

December 19, 2016
Tweet

More Decks by fumi

Other Decks in Technology

Transcript

  1. 41"32-ೖ໳
    ࠃཱ৘ใֶݚڀॴ
    Ճ౻จ඙

    1
    JSTϦϯΫτɾσʔλʢେن໛จݙ৘ใɾγιʔϥεʣΛ࢖͍౗ͦ͏ʂ
    ʵLODC2016×J-GLOBAL knowledge࿈ܞΠϕϯτʵ

    View Slide

  2. جૅฤ

    View Slide

  3. ΫΤϦݴޠ
    • ༻్ओʹσʔλૢ࡞
    • σʔλϞσϧ΍%#γ
    εςϜʹ߹Θͤͯઃ
    ܭ

    3%#
    ΫΤϦ
    %#
    Ϟσϧ
    3%'
    Ϟσϧ
    42-
    3FMBUJPOBM
    Ϟσϧ
    3%'
    41"32-

    View Slide

  4. άϥϑͷΫΤϦ
    • άϥϑͷ࠷খ୯Ґͭ૊ τϦϓϧ

    • άϥϑύλʔϯ
    1. ׬શҰக
    ECS౦ژ౎ECPDPVOUSZECS೔ຊ
    2. ม਺ʹΑΔύλʔϯϚον
    ECS౦ژ౎ECPDPVOUSZ DPVOUSZ
    3. ͱͷ૊Έ߹Θͤ
    dbr:東京都 dbr:日本
    dbo:country

    View Slide

  5. :Amy
    :Bob :Cathy
    :Dan
    :Jim
    :Ed
    :Kate
    :Gil
    :Flo
    :Hal
    :Ian
    :Lee
    :May
    :like :like
    :like
    :like
    :like
    :like
    :like
    :dislike
    :dislike
    :dislike :dislike
    :dislike
    :dislike :dislike
    :dislike
    ޷͖ݏ͍άϥϑ

    View Slide

  6. :Amy
    :Bob :Cathy
    :Dan
    :Jim
    :Ed
    :Kate
    :Gil
    :Flo
    :Hal
    :Ian
    :Lee
    :May
    :like :like
    :like
    :like
    :like
    :like
    :like
    :dislike
    :dislike
    :dislike :dislike
    :dislike
    :dislike :dislike
    :dislike
    "NZ͕޷͖ͳਓ

    άϥϑύλʔϯ
    "NZMJLF QFSTPO

    View Slide

  7. :Amy
    :Bob :Cathy
    :Dan
    :Jim
    :Ed
    :Kate
    :Gil
    :Flo
    :Hal
    :Ian
    :Lee
    :May
    :like :like
    :like
    :like
    :like
    :like
    :like
    :dislike
    :dislike
    :dislike :dislike
    :dislike
    :dislike :dislike
    :dislike
    l"NZ͕޷͖ͳਓz͕޷͖ͳਓ

    άϥϑύλʔϯ
    "NZMJLF QFSTPO
    QFSTPOMJLF QFSTPO

    View Slide

  8. 41"32-
    • 42-ͷΑ͏ͳจ๏
    • ʹ͕8$קࠂ
    • σʔλϞσϧ3%'
    • ϓϩτίϧ)551

    View Slide

  9. 41"32-ΤϯυϙΠϯτ
    w 41"32-ΫΤϦΛड͚෇͚Δ৔ॴ
    w ϓϩάϥϜ͔Β41"32-Λ࢖͏ͱ
    ͖ʹࢦఆ
    w ϒϥ΢βͰΞΫηεͨ͠ͱ͖༻ʹ
    ϑΥʔϜ͕͋Δ৔߹΋
    w ྫIUUQKBECQFEJBPSHTQBSRM

    View Slide

  10. dbr:AdministraDveRegion
    dbr:サイボーグ009
    dbo:
    ComicsCreator
    dbr:宮城県
    dbr:石ノ森章太郎
    rdfs:label
    rdf:type
    rdfs:label
    dbo:notableWork
    dbo:award
    dbo:birthPlace
    rdf:type
    サイボーグ009
    ٶ৓ݝ
    foaf:Person
    石ノ森章太郎
    rdf:type
    rdfs:label
    dbr:村井嘉浩
    dbo:leaderName
    %#QFEJB+BQBOFTFͷάϥϑྫ
    dbr:手塚治虫
    文化賞
    dbo:Cartoon
    rdf:type

    13&'*9ECSIUUQKBECQFEJBPSHSFTPVSDF
    13&'*9ECPIUUQECQFEJBPSHPOUPMPHZ

    View Slide

  11. dbo:AdministraDveRegion
    dbr:サイボーグ009
    dbo:
    ComicsCreator
    dbr:宮城県
    dbr:石ノ森章太郎
    rdfs:label
    rdf:type
    rdfs:label
    dbo:notableWork
    dbo:award
    dbo:birthPlace
    rdf:type
    サイボーグ009
    宮城県
    foaf:Person
    石ノ森章太郎
    rdf:type
    rdfs:label
    dbr:村井嘉浩
    dbo:leaderName
    dbr:手塚治虫
    文化賞
    dbo:Cartoon
    rdf:type

    ΫΤϦੴϊ৿ষଠ࿠ͷग़਎஍
    13&'*9ECSIUUQKBECQFEJBPSHSFTPVSDF
    13&'*9ECPIUUQECQFEJBPSHPOUPMPHZ
    4&-&$5 CJSUI1MBDF
    8)&3&\
    ECSੴϊ৿ষଠ࿠ECPCJSUI1MBDF CJSUI1MBDF
    ^

    View Slide


  12. • SELECT: औಘ͍ͨ͠ม਺Λࢦఆ
    • SELECT * ͸શͯͷม਺ࢦఆͱಉ౳
    • ݁Ռܗࣜ: XML, JSON, CSV, TSV, ...
    • WHERE: {}಺ʹάϥϑύλʔϯͷ૊Έ߹ΘͤΛهड़
    • LIMIT: ݅਺ͷ੍ݶ
    • 100ͩͱ1-100·Ͱऔಘ
    • LIMIT͕ͳ͍৔߹͸શ݅औಘ
    • ྔ͕ଟ͍৔߹͸αʔόʹෛՙΛ͔͚ΔͷͰ஫ҙ
    • PREFIX: URIΛ୹ॖͯ͠هड़͢ΔͨΊͷ࢓૊Έ
    • dbr:౦ژ౎ =
    13&'*9ECSIUUQKBECQFEJBPSHSFTPVSDF
    13&'*9ECPIUUQECQFEJBPSHPOUPMPHZ
    4&-&$5 CJSUI1MBDF
    8)&3&\
    ECSੴϊ৿ষଠ࿠ECPCJSUI1MBDF CJSUI1MBDF
    ^

    View Slide


  13. View Slide

  14. dbo:AdministraDveRegion
    dbr:サイボーグ009
    dbo:
    ComicsCreator
    dbr:宮城県
    dbr:石ノ森章太郎
    rdfs:label
    rdf:type
    rdfs:label
    dbo:notableWork
    dbo:award
    dbo:birthPlace
    rdf:type
    サイボーグ009
    宮城県
    foaf:Person
    石ノ森章太郎
    rdf:type
    rdfs:label
    dbr:村井嘉浩
    dbo:leaderName
    dbr:手塚治虫
    文化賞
    dbo:Cartoon
    rdf:type

    ΫΤϦख௩࣏஬จԽ৆Λड৆ͨ͠ອըՈ
    13&'*9ECSIUUQKBECQFEJBPSHSFTPVSDF
    13&'*9ECPIUUQECQFEJBPSHPOUPMPHZ

    4&-&$5 DSFBUPS
    8)&3&\
    DSFBUPSSEGUZQFECP$PNJDT$SFBUPS
    ECPBXBSEECSख௩࣏஬จԽ৆
    ^

    View Slide


  15. View Slide

  16. dbo:AdministraDveRegion
    dbr:サイボーグ009
    dbo:
    ComicsCreator
    dbr:宮城県
    dbr:石ノ森章太郎
    rdfs:label
    rdf:type
    rdfs:label
    dbo:notableWork
    dbo:award
    dbo:birthPlace
    rdf:type
    サイボーグ009
    宮城県
    foaf:Person
    rdf:type
    rdfs:label
    dbr:村井嘉浩
    dbo:leaderName
    dbp:手塚治虫
    文化賞
    dbo:Cartoon
    rdf:type

    ΫΤϦख௩࣏஬จԽ৆Λड৆ͨ͠ອըՈͷ୅දతͳອը
    13&'*9ECSIUUQKBECQFEJBPSHSFTPVSDF
    13&'*9ECPIUUQECQFEJBPSHPOUPMPHZ
    4&-&$5 DSFBUPS/BNF DPNJD/BNF
    8)&3&\
    DSFBUPSBECP$PNJDT$SFBUPSECPBXBSEECSख௩࣏஬จԽ৆
    ECPOPUBCMF8PSL DPNJDSEGTMBCFM DSFBUPS/BNF
    DPNJDBECP$BSUPPOSEGTMBCFM DPNJD/BNF
    ^
    石ノ森章太郎

    View Slide


  17. View Slide

  18. 41"32-
    w σʔλऔಘ
    w 4&-&$5
    w "4,
    w %&4$3*#&
    w $0/4536$5
    w ΄΅Ͳ͜Ͱ΋࢖͑Δ

    View Slide

  19. 4&-&$5

    ೚ҙͷͭ૊Λ݅औಘ
    4&-&$5 T Q P
    8)&3&\
    T Q P
    ^
    -*.*5

    View Slide

  20. "4,

    • "4,άϥϑύλʔϯʹϚον͢Δ΋ͷ͕͋Δ͔
    • ݁ՌZFT͔OP

    ੴϊ৿ষଠ࿠ͷग़਎஍ؚ͕·Ε͍ͯΔ͔Ͳ͏͔
    13&'*9ECSIUUQKBECQFEJBPSHSFTPVSDF
    13&'*9ECPIUUQECQFEJBPSHPOUPMPHZ
    "4,
    8)&3&\
    ECSੴϊ৿ষଠ࿠ECPCJSUI1MBDF CJSUI1MBDF
    ^

    View Slide

  21. %&4$3*#&

    • %&4$3*#&Ϧιʔεʹؔ͢ΔάϥϑΛऔಘ
    • άϥϑͱͯ͠Կ͕ฦͬͯ͘Δ͔͸࣮૷ґଘ
    • ର৅ϦιʔεΛTVCKFDU͔PCKFDUʹؚΉͭ૊ͷू߹
    • ݁Ռܗࣜ5VSUMF 3%'9.- +40/-%౳

    Պֶٕज़ৼڵػߏʹؔ͢ΔάϥϑΛऔಘ
    DESCRIBE

    View Slide

  22. $0/4536$5

    • $0/4536$5৽͍͠άϥϑΛ࡞੒ͯ͠औಘ
    • ݁Ռܗࣜ5VSUMF 3%'9.- +40/-%౳
    GPBGOBNFϓϩύςΟͷͭ૊ΛSEGTMBCFMʹͯ͠औಘ
    13&'*9SEGTIUUQXXXXPSHSEGTDIFNB
    13&'*9GPBGIUUQYNMOTDPNGPBG
    $0/4536$5\ TSEGTMBCFM P^
    8)&3&\ TGPBGOBNF P^

    View Slide

  23. /BNFE(SBQI
    w ετΞ಺ͷෳ਺ͷ3%'άϥϑΛ۠ผ͍ͨ͠ͱ͍͏ཁٻ
    w σʔληοτͷ༝དྷ
    w ಛఆͷσʔληοτࢦఆ
    w ͭ૊ͭ૊άϥϑ*3*

    View Slide


  24. PREFIX rdfs:
    PREFIX orth:
    PREFIX protid:
    SELECT DISTINCT ?protein_id
    FROM
    FROM
    WHERE {
    ?group a orth:OrthologGroup ;
    orth:member+/orth:gene?/orth:protein?/rdfs:seeAlso protid:NP_563687.1 ;
    orth:member+/orth:gene?/orth:protein?/rdfs:seeAlso ?protein_id .
    FILTER regex(?protein_id, "identifiers.org/ncbiprotein")
    }

    View Slide

  25. 41"32-
    w σʔλ؅ཧ
    w ࡞੒ɾߋ৽ɾ࡟আ༻۟*/4&35
    61%"5& %&-&5& -0"% %301
    w αʔϏεهड़
    w (SBQI4UPSF)5511SPUPDPM

    View Slide

  26. ϓϩύςΟύε
    w ௨ৗͷͭ૊ύλʔϯ T Q P
    w Pͷলུ΍ Qͷ܁Γฦ͠ɼ Qͷٯ޲͖
    ౳Λهड़Մೳ
    PREFIX dbr:
    PREFIX dbo:
    PREFIX rdfs:
    SELECT ?creator ?comicName
    WHERE {
    ?creator dbo:notableWork/rdfs:label ?comicName .
    }

    View Slide

  27. ϓϩύςΟύεͷྫ
    w TGPBGLOPXTGPBGLOPXT P
    w TGPBGLOPXT P
    w T?GPBGLOPXT P
    w TGPBGOBNFcSEGTMBCFM P

    View Slide

  28. ू໿
    w $06/5ݸ਺
    w 46.߹ܭ
    w "7(ฏۉ
    w .*/࠷খ஋
    w ."9࠷େ஋
    w (3061#:ू໿͢Δม਺ͷࢦఆ

    View Slide

  29. $06/5

    # ৿܆ϦιʔεͷτϦϓϧ਺
    SELECT (COUNT(?o) AS ?count)
    WHERE {
    ?p ?o .
    }

    View Slide

  30. (3061#:

    ྫ) ΫϥεຖͷΠϯελϯεͷ਺্Ґ100݅Λ߱ॱ
    SELECT ?class (COUNT(?instance) AS ?noOfInstances)
    WHERE {
    ?instance a ?class .
    }
    GROUP BY ?class
    ORDER BY DESC(?noOfInstances)
    LIMIT 100

    View Slide

  31. αϒΫΤϦ

    ྫ) ΫϥεຖͷΠϯελϯεͷ਺ͷฏۉ
    SELECT (AVG(?noOfInstances) AS ?avg)
    WHERE {
    {
    SELECT ?class (COUNT(?instance) AS ?noOfInstances)
    WHERE {
    ?instance a ?class .
    }
    GROUP BY ?class
    }
    }

    View Slide

  32. 'FEFSBUFEΫΤϦ
    w 4&37*$&۟αϒΫΤϦͷԆ௕
    w ΫΤϦΛ௚઀౤͛ͨΤϯυϙΠϯτҎ֎Λࢦఆͯ͠
    ΫΤϦΛ౤͛ΒΕΔ
    w ϲॴҎ্ͷ41"32-ΤϯυϙΠϯτʹରͯ͠ΫΤϦ
    Λൃߦͯࣗ͠ಈతʹ݁ՌΛ݁߹
    w ·ͩ࢖͑ΔΤϯυϙΠϯτ͕ݶΒΕΔ͕41"32-ͷύ
    ϫϑϧ͞ͷ৅௃ͷҰͭ

    View Slide

  33. 41"32-&OEQPJOUϦετ
    w IUUQEBUBIVCJPEBUBTFU
    RSFT@GPSNBUBQJ'TQBSRM
    w IUUQTQBSRMFTPLGOPSH
    w ࣮ମ͸IUUQTQBSRMFTBJXVBDBU

    View Slide


  34. http://datahub.io/dataset?q=&res_format=api%2Fsparql

    View Slide

  35. IUUQEBUBIVCJPEBUBTFU RSFT@GPSNBUBQJ'TQBSRM

    View Slide

  36. Ԡ༻ฤ

    View Slide

  37. 41"32-ͷՄࢹԽ ࣗલ

    w 41"32-݁Ռ͸ܾ·ͬͨߏ଄ͷ+40/΍9.-ͳͷͰɺ
    ௚઀)551Ͱ໰͍߹Θͤͯ࢖͑͹ྑ͍
    w ଟ͘ͷݴޠͰ͸41"32-ॲཧ༻ͷϥΠϒϥϦ΋͋Δ
    w දࣔ෦෼͸ࣗલͰ࡞Δඞཁ͕͋Δ

    function query(endpoint, sparql, callback) {
    var url = endpoint + "?query=" + encodeURIComponent(sparql);
    $.getJSON(url, function(json){ callback(json) }
    }

    View Slide

  38. 41"32-ՄࢹԽϥΠϒϥϦ
    w ϥΠϒϥϦʹԊͬͨΫΤϦΛॻ͚ͩ͘ͰՄ
    ࢹԽՄೳ
    w ϥΠϒϥϦ͕41"32-݁Ռܗ͔ࣜΒՄࢹԽ
    ϥΠϒϥϦͷσʔλߏ଄΁ͷม׵Λ੥͚ෛ
    ͏
    w ྫETQBSRMɺ3ɺTHWJ[MFSɺ41"32-
    5JNFMJOFS

    View Slide

  39. ETQBSRMKT
    w +BWB4DSJQUϥΠϒϥϦ
    w 41"32-݁ՌΛEKTͰՄࢹԽ
    w WFSTJPOͷҰ෦ʹରԠ
    w IUUQCJPIBDLBUIPOPSHETQBSRM
    w IUUQTHJUIVCDPNLUZNETQBSRM

    View Slide

  40. IUUQTEKTPSH

    View Slide

  41. IUUQTHJUIVCDPNEEXJLJ(BMMFSZ

    View Slide

  42. IUUQCJPIBDLBUIPOPSHETQBSRM

    View Slide


  43. IUUQTHJUIVCDPNLUZNETQBSRM

    View Slide

  44. ରԠܗࣜ
    w $IBSU
    w #BSDIBSU
    w 4DBUUFSQMPU
    w 1JFDIBSU
    w (SBQI
    w 'PSDFHSBQ
    I
    w 4BOLFZ
    w 5SFF
    w %FOESPHSB
    N
    w 5SFFNBQ
    w 5SFFNBQ;P
    PN
    w 3PVOE5SFF
    w $JSDMFQBDL
    w 4VOCVSTU
    w .BQ
    w $PPSENBQ
    w /BNFE
    NBQ
    w 5BCMF
    w )5.-
    5BCMF
    w )5.-
    )BTI

    View Slide


  45. View Slide

  46. #BSDIBSUαϯϓϧ
    w IUUQTHJUIVCDPNGVNJEFYHJU
    w FYBNQMFTCBSDIBSUIUNMΛ։͘
    w 2VFSZϘλϯΛԡ͢

    View Slide

  47. View Slide


  48. PREFIX rdfs:
    PREFIX yago:
    PREFIX dbo:
    SELECT ?label ?size
    WHERE {
    ?s a yago:WikicatPrefecturesOfJapan ;
    rdfs:label ?label;
    dbo:areaTotal ?area_total .
    FILTER (lang(?label) = 'ja')
    BIND ((?area_total / 1000000) AS ?size)
    FILTER (str(?s) != 'http://dbpedia.org/resource/Onjuku')
    }
    ORDER BY DESC(?size)

    View Slide


  49. View Slide

  50. OBNFENBQΫΤϦ

    function exec() {
    var endpoint = d3.select("#endpoint").property("value")
    var sparql = d3.select("#sparql").property("value")
    d3sparql.query(endpoint, sparql, render)
    }
    function render(json) {
    var config = {
    "label_x": "౎ಓ෎ݝ",
    "label_y": "໘ੵ",
    "var_x": "label",
    "var_y": "size",
    "width": 800,
    "height": 400,
    "margin": 100,
    "selector": "#result"
    }
    d3sparql.barchart(json, config)
    }
    ର৅ͷม਺໊ΛDPOpHͰࢦఆ
    #BSDIBSUͷݺͼग़͠

    View Slide

  51. 1JFDIBSU
    w CBSDIBSUIUNMΛQJFDIBSUIUNMʹίϐʔ
    w QJFDIBSUIUNMΛΤσΟλͰ։͘
    w ETQBSRMKTͷதͷETQBSRMQJFDIBSUͷί
    ϝϯτ෦෼Λࢀরͯ͠ɺQJFDIBSUIUNMͷ
    GVODUJPOSFOEFS
    Λॻ͖׵͑Δ

    View Slide

  52. OBNFENBQΫΤϦ

    function render(json) {
    var config = {
    "label": "label",
    "size": "size",
    "width": 600,
    "height": 600,
    "margin": 10,
    "hole": 200,
    "selector": "#result"
    }
    d3sparql.piechart(json, config)
    }

    View Slide

  53. View Slide

  54. w ਓޱີ౓Λܭࢉͯ͠஍ਤͰՄࢹԽ
    w 5PQPKTPO
    w λεΫ
    w OBNFENBQIUNMΛ࣮ߦ
    w %#QFEJBͰ41"32-ΫΤϦ࣮ߦ
    w OBNFENBQIUNMͷιʔεಡΈ
    /BNFENBQ

    View Slide

  55. View Slide

  56. View Slide


  57. PREFIX rdfs:
    PREFIX yago:
    PREFIX dbo:
    SELECT DISTINCT ?s ?label ?population ?area ?density
    WHERE {
    ?s a yago:WikicatPrefecturesOfJapan ;
    rdfs:label ?label ;
    dbo:populationTotal ?population ;
    dbo:areaTotal ?area .
    BIND (xsd:float(?population)/xsd:float(?area/1000000) AS ?density)
    FILTER (lang(?label) = 'ja' )
    FILTER (str(?s) != 'http://dbpedia.org/resource/Onjuku')
    }
    ORDER BY DESC(?density)
    ಛఆͷม਺໊ΛOBNFENBQͷDPOpHͰࢦఆ

    View Slide

  58. OBNFENBQΫΤϦ

    function exec() {
    var endpoint = d3.select("#endpoint").property("value")
    var sparql = d3.select("#sparql").property("value")
    d3sparql.query(endpoint, sparql, render)
    }
    function render(json) {
    var config = {
    "label": "label",
    "value": "density",
    "topojson": "https://gist.githubusercontent.com/fumi/
    521c759efe0648b3c1296c5a869b3406/raw/
    39e94dae1c46ed71d88529038f3ff45e681b257c/japan.topojson",
    "mapname": "japan",
    "color_max": "red",
    "color_min": "white",
    "center_lat": 34,
    "center_lng": 137,
    "scale": 1500,
    "selector": "#result"
    }
    d3sparql.namedmap(json, config)
    }

    View Slide

  59. w 4VOCVSTU౳
    w %#QFEJB+BQBOFTF
    ͷσʔλͰిंӺ
    ؒͷྡ઀ؔ܎ΛՄ
    ࢹԽ
    ໦ߏ଄ՄࢹԽ

    View Slide

  60. View Slide

  61. OBNFENBQΫΤϦ

    PREFIX rdf:
    PREFIX rdfs:
    PREFIX dbpedia-owl:
    PREFIX prop-ja:
    SELECT ?root_name ?parent_name ?child_name
    WHERE {
    VALUES ?root_name { "౦ژӺ"@ja }
    ?root rdfs:label ?root_name .
    ?root prop-ja:࣍ͷӺ{1,5} ?child .
    ?parent prop-ja:࣍ͷӺ ?child .
    MINUS { ?child prop-ja:࣍ͷӺ ?parent . }
    ?parent rdfs:label ?parent_name .
    ?child rdfs:label ?child_name .
    FILTER (LANG(?parent_name) = 'ja')
    FILTER (LANG(?child_name) = 'ja')
    } GROUP BY ?root_name ?parent_name ?child_name
    ஫ҙ͜ͷ෦෼͸
    ඪ४࢓༷Ͱ͸ͳ͍

    View Slide


  62. View Slide