Sitemap

im@sparqlをTypeScriptでたたいてみる

8 min readFeb 11, 2019

--

こんにちは、.ごっちです。

去年末にCiecleCI(ほぼbash)でim@sparqlをcurlでたたいてました。

この記事のbashのcurlのURL自体はすでに例にあったところから持ってきたやつなので、正直なところ創意性がありませんでした()。

参考にしたやつ

sparql自体ぼくも慣れていないこともあったので、今度こそは自分の手でqueryを作ってみます。

あと、最近なにかと話題のTypeScriptを使ってみます。

できあがったもの

ひとまずWebフォームにしました。

こんなかんじ

誕生日検索

この検索はすでにCircleCIでもたたいたとおりなので、ちょっと改変するだけでおわります。

# query.sparql
PREFIX schema: <http://schema.org/>
PREFIX imas: <https://sparql.crssnky.xyz/imasrdf/URIs/imas-schema.ttl#>
SELECT (sample(?n) as ?name)
WHERE {
?sub schema:birthDate ?o;
schema:name ?n;
FILTER(regex(str(?o), '02-11' )).
}group by(?n)

?o(birthDate)02-11 が含まれるdataを取得してきます。出力はそのdataのnameの部分になります。

{
"head": {
"vars": [ "name" ]
} ,
"results": {
"bindings": [
{
"name": { "type": "literal" , "xml:lang": "ja" , "value": "浅野風香" }
}
]
}
}

あとはこれをいい感じにTypeScriptで加工するだけです。

名前検索

# query.sparql
PREFIX schema: <http://schema.org/>
PREFIX imas: <https://sparql.crssnky.xyz/imasrdf/URIs/imas-schema.ttl#>
SELECT (sample(?n) as ?name)
WHERE {
?s schema:name|imas:nameKana ?on;
schema:name ?n;
FILTER(CONTAINS(str(?on), 'あまみ')).
}group by(?n)

?on(name or nameKana)あまみ が含まれているデータを取得します。出力は上に同じくそのデータの name の部分だけです。

{
"head": {
"vars": [ "name" ]
} ,
"results": {
"bindings": [
{
"name": { "type": "literal" , "xml:lang": "ja" , "value": "天海春香" }
}
]
}
}

ただこのQueryにはバグが潜んでいて、 imas:nameKanaschema:name にはアイドル名以外にも系列があるので、そこは直さなければいけない部分です。

# query.sparql
PREFIX schema: <http://schema.org/>
PREFIX imas: <https://sparql.crssnky.xyz/imasrdf/URIs/imas-schema.ttl#>
SELECT (sample(?n) as ?name)
WHERE {
?s schema:name|imas:nameKana ?on;
schema:name ?n;
FILTER(CONTAINS(str(?on), '夕美')).
}group by(?n)

{
"head": {
"vars": [ "name" ]
} ,
"results": {
"bindings": [
{
"name": { "type": "literal" , "xml:lang": "ja" , "value": "相葉夕美" }
} ,
{
"name": { "type": "literal" , "xml:lang": "ja" , "value": "夕美が思うお花みたいに綺麗なアイドル" }
} ,
{
"name": { "type": "literal" , "xml:lang": "ja" , "value": "夕美が一緒にお花のお世話をしたいアイドル" }
}
]
}
}

本当は相葉夕美だけを取得できればいいんですが、シンデレラガール総選挙の他のアイドルを紹介するときの名前なども一緒についてきてしまうので、修正する必要があります。。。

ユニット名とか曲名なども入っていそうな予感

SPARQLの所感

コツさえ掴んでしまえば割といけるなぁといった感じです。最初にRDFにどんなデータがどんな名前で存在しているか調査するのも大変かなぁという感じです。

データの繋がり方や取得の仕方さえわかってしまえば、あとは書くだけなのでそのへんはSQLと何も変わらない気がしています。

Sparqlそのものの書き方は他の記事を参照しています。

TypeScriptの所感

書いた量が量というのもあり、まだTypeScriptの恩恵(型定義やclassをいい感じに管理するなど)を受けられていないのですが、もうちょっとTypeScriptっぽく書きたいなぁとかは思っています。 BestPrcticeをあさってきます。

今後

アイドルからユニットを検索したり、都道府県からアイドルを検索したりとWebフォームでサクッといけそうな部分はちょこちょこ書いていきたいです。

References

--

--

No responses yet