私はSparkQLとwikidataが初めてで、次のクエリを実行しようとしています:
- 男性歌手(アーティスト・パフォーマー)
- 誰が生きている
- 名 = 6 文字
- 名に含まれていない ("e"、"i"、"u")
与えられた名前のフィルターに問題があります ("SERVICE wikibase:label" を参照しているためだと思います)。HAVING を使用してみましたが、役に立ちませんでした。クエリをネストしてそれをフィルタリングする正しいアクションですか、それとももっとエレガントな方法がありますか?
#-- Male artists
SELECT DISTINCT ?m ?givennameLabel (STRLEN(?givennameLabel)AS ?Namechars)
?mLabel ?plLabel WHERE {
?m wdt:P31 wd:Q5.
?m wdt:P21 wd:Q6581097.
?m wdt:P735 ?givenname.
?m wdt:P27 ?pl.
?m (wdt:P106/wdt:P279*) wd:Q483501.
OPTIONAL { ?m wdt:P175 ?performer. }
OPTIONAL {?m wdt:P570 ?d }
FILTER (!bound(?d))
SERVICE wikibase:label { bd:serviceParam wikibase:language "en". }
FILTER (!regex(?givennameLabel,"(e|i|u)")). #no records
FILTER (STRLEN(?givennameLabel) = 6) #no records
} #HAVING (!regex(?givennameLabel,"(e|i|u)")) #returns "Bad aggregate"
LIMIT 50
うまくいきませんが、このようなものはうまくいくはずだと思います。
BIND(STRLEN(str(?givennameLabel)) as ?NL)
FILTER (?NL = 6)