--- title: "複数エンドポイントの横断的活用" weight: 3 # bookFlatSection: false # bookToc: true # bookHidden: false # bookCollapseSection: false # bookComments: false # bookSearchExclude: false --- # 複数エンドポイントの横断的活用 SPARQLでは、1つのエンドポイントだけでなく、外部の複数のエンドポイントに対してクエリを実行することができる[**federatedクエリ**](https://www.w3.org/TR/2013/REC-sparql11-federated-query-20130321/)という仕組みがあります。 federatedクエリを利用したクエリを紹介します。 ## SPARQLクエリエディタ {#query-editor} {{< yasgui id="federated" />}} ----- ## クエリ集 {#queries} ### 作品の多言語のタイトルを取得する {#multilingual-titles} https://mediaarts-db.bunka.go.jp/id/C413599 [P7886(メディア芸術データベース識別子)](https://www.wikidata.org/wiki/Property:P7886) {{< yasgui-query yasgui-id="federated" title="作品の多言語のタイトルを取得する" endpoint="https://mediag.bunka.go.jp/sparql" >}} PREFIX rdfs: PREFIX schema: PREFIX ma: PREFIX wdt: SELECT ?MADBLabel ?label (LANG(?label) AS ?lang) ?wikidataEntity WHERE { schema:identifier ?MADBID ; rdfs:label ?MADBLabel . # Wikidataへクエリ SERVICE { # P7886: メディア芸術データベース識別子 ?wikidataEntity wdt:P7886 ?MADBID ; rdfs:label ?label . } } {{< / yasgui-query >}} ### メディア芸術データベースの責任主体の法人番号を取得する {#agent-houjin-bangou} Wikidataとメディア芸術データベースを連携したfederatedクエリ 法人番号からさらに[gBizINFOのSPARQLエンドポイント](https://info.gbiz.go.jp/hojin/SparqlQueryEditor)などとも繋げられそうですね。 {{< yasgui-query yasgui-id="federated" title="メディア芸術データベースの責任主体の法人番号を取得する" endpoint="https://mediag.bunka.go.jp/sparql" >}} PREFIX schema: PREFIX class: PREFIX ma: PREFIX wdt: SELECT ?agent ?name ?hojinBangou WHERE { ?agent a class:Agent; schema:name ?name ; ma:wikidata ?wikidataPage . # WikidataのリソースURIに変換 BIND (URI(REPLACE(?wikidataPage, "https://www.wikidata.org/wiki/", "http://www.wikidata.org/entity/")) AS ?wikidataEntity) # Wikidata SERVICE { # P3225: 法人番号 ?wikidataEntity wdt:P3225 ?hojinBangou ; } } LIMIT 100 {{< / yasgui-query >}} ### 「日本ゲーム大賞」を受賞したゲームを取得する {#japan-game-awards} DBpedia JapaneseとWikidataとメディア芸術データベースを連携したfederatedクエリ {{< yasgui-query yasgui-id="federated" title="「日本ゲーム大賞」を受賞したゲームを取得する" endpoint="https://mediag.bunka.go.jp/sparql" >}} PREFIX rdfs: PREFIX owl: PREFIX dcterms: PREFIX schema: PREFIX skos: PREFIX class: PREFIX ma: PREFIX wdt: PREFIX hint: SELECT ?MADBID ?genre ?label WHERE { hint:Query hint:joinOrder "Ordered" . # DBpedia Japanese SERVICE { SELECT DISTINCT (URI(REPLACE(STR(?wikidataEntity), "http://wikidata.dbpedia.org/resource/", "http://www.wikidata.org/entity/")) AS ?wikidataEntity) { ^skos:broader* ?category . ?dbpediaEntity dcterms:subject ?category; ^owl:sameAs ?wikidataEntity . FILTER(STRSTARTS(STR(?wikidataEntity), "http://wikidata.dbpedia.org/resource/")) } } # Wikidata SERVICE { # P7886: メディア芸術データベース識別子 ?wikidataEntity wdt:P7886 ?MADBID . } # メディア芸術データベース ?MADBResource schema:identifier ?MADBID ; schema:genre ?genre ; rdfs:label ?label . } LIMIT 100 {{< / yasgui-query >}} {{< hint info >}} federatedクエリの実行順序によっては、正しく結果が得られないことがあります。 RDFストアによっては、クエリオプティマイザに実行順序を指示する方法が用意されており、メディア芸術データベースのSPARQLクエリサービスが使用しているAmazon Neptuneでは `hint:Query hint:joinOrder "Ordered" .` というパターンを記述します。 参照: [Amazon Neptune: SPARQL クエリヒント](https://docs.aws.amazon.com/ja_jp/neptune/latest/userguide/sparql-query-hints.html) {{< /hint >}}