日本語DBpediaのSPARQLエンドポイントで下の様なクエリを実行する
select distinct * where {?s rdfs:label ?o filter regex(?o, "東京", "i") }
少々時間はかかるが結果は表示される。
しかしヤフカテLODのSPARQLエンドポイントでは同様のクエリで結果はTransaction timed outになる。
この違いは何なのだろうか。
ためしにLimitを100にしてみると、結果は普通に表示された。
ここでやっと気づく。
ヤフカテLODではlabelにアンダースコアで上位カテゴリをくっつけている(同名カテゴリとの区別のため)ため、東京という文字列が含まれる結果を返そうとすると、東京都カテゴリ以下全てのカテゴリ+東京という文字列が含まれるサイトを返してしまう。
すなわち膨大な数の結果を返すことになるのでTransaction timed outが発生してしまうのではないか。と思ったんだけど、本家DBpediaでも日本語DBpediaでも、それなりに結果数が多くなりそうなクエリをかけてみてもTransaction timed outにはならない。これはやはりVirtuosoの方で設定があるんだろうか?
とりあえず解決策としてLimitをつける。また、ヤフカテLODの場合、カレントカテゴリの名前のみの値はrdfs:labelの代わりにdcterms:titleを使っているのでそちらに置き換える。
そんなわけでTransaction timed outにならない方法知ってる方いたら教えてください。