From 3d3e673697e10c431168c5c53ab05fc67b7fac04 Mon Sep 17 00:00:00 2001 From: Babibubebon Date: Thu, 8 Sep 2022 04:29:11 +0900 Subject: [PATCH] add federated queries --- content/docs/federated_query.md | 46 +++++++++++++++++++++++++++++++-- content/docs/mediaartsdb.md | 16 ++++++++---- 2 files changed, 55 insertions(+), 7 deletions(-) diff --git a/content/docs/federated_query.md b/content/docs/federated_query.md index 40541b7..f0038f9 100644 --- a/content/docs/federated_query.md +++ b/content/docs/federated_query.md @@ -104,8 +104,9 @@ WHERE { (URI(REPLACE(STR(?wikidataEntity), "http://wikidata.dbpedia.org/resource/", "http://www.wikidata.org/entity/")) AS ?wikidataEntity) { + # 下位カテゴリを含める ^skos:broader* ?category . - ?dbpediaEntity dcterms:subject ?category; + ?dbpediaEntity dcterms:subject ?category ; ^owl:sameAs ?wikidataEntity . FILTER(STRSTARTS(STR(?wikidataEntity), "http://wikidata.dbpedia.org/resource/")) } @@ -129,4 +130,45 @@ 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 >}} \ No newline at end of file +{{< /hint >}} + + +### 「タイムトラベルを題材とした作品」を取得する +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 { + ?wikidataEntity wdt:P7886 ?MADBID . + } + # メディア芸術データベース + ?MADBResource schema:identifier ?MADBID ; + schema:genre ?genre ; + rdfs:label ?label . +} +LIMIT 200 +{{< / yasgui-query >}} \ No newline at end of file diff --git a/content/docs/mediaartsdb.md b/content/docs/mediaartsdb.md index 12bd882..5353a69 100644 --- a/content/docs/mediaartsdb.md +++ b/content/docs/mediaartsdb.md @@ -283,21 +283,27 @@ LIMIT 100 ### 登場キャラクター名がタイトルであるアニメ {#anime-character-name-title} +`schema:actor` の値として以下のような形式で記述されていることを利用し、正規表現を用いて検索します。 + +``` +【キャラクター名】キャスト名 / 【キャラクター名】キャスト名 ... +``` + {{< yasgui-query yasgui-id="madb-lod" title="登場キャラクター名がタイトルであるアニメ" >}} PREFIX schema: PREFIX rdf: PREFIX rdfs: PREFIX class: SELECT - ?col ?genre ?colName ?actors + ?series ?genre ?seriesName ?actors WHERE { - ?col a ?animeColClasses ; - schema:name ?colName ; + ?series a ?animeColClasses ; + schema:name ?seriesName ; schema:genre ?genre ; schema:actor ?actors . VALUES ?animeColClasses {class:AnimationTVRegularSeries class:AnimationTVSpecialSeries class:AnimationMovieSeries} - FILTER(LANG(?colName) = "") - FILTER(REGEX(?actors, CONCAT("【", ?colName ,"】"))) + FILTER(LANG(?seriesName) = "") + FILTER(REGEX(?actors, CONCAT("【", ?seriesName ,"】"))) } {{< / yasgui-query >}}