2017-11-23 15 views
0

以下のクエリは、フィルタにCONTAINSを使用する行を含めると機能しますが、値(LCASE)が "donald trump" )。WikiData SPARQLクエリが失敗し、CONTAINSが動作する必要があります

は、この行を使用し、それが動作します:

FILTERは(?(LCASE(idLabel)、 "ドナルド切り札")を含みます)。

使用この行を、それは失敗します。

FILTER(LCASE(idLabel)= "ドナルド切り札"?)。

ありWORKS照会の出力idLabel = "ドナルド・トランプ"

SPARQLクエリ:

SELECT DISTINCT ?id ?idLabel ?PV WHERE { 

    ?id wdt:P106 ?V0. VALUES ?V0 { wd:Q39631 } . 

    OPTIONAL { 
     ?id rdfs:label ?idLabel . 
     FILTER(LANG(?idLabel) = 'en') . 
    } . 

    # Filter on Label 

    # WORKS: 
    FILTER(CONTAINS(LCASE(?idLabel), "donald trump")). 

    # DOES NOT WORK 
    #FILTER(LCASE(?idLabel) = "donald trump") . 

    # subselect on instance type 
    { 
     SELECT ?id WHERE { 
     ?id wdt:P31/wdt:P279* ?PV . VALUES(?PV) {(wd:Q5) } . 
     } 
    } . 
} 

Try it here

目のオプションが動作しない理由私の質問はありますか?

(そして、はい、私は外科医ドナルド・トランプ、ではない、他の人を探しています)ウィキデータで

答えて

1

ラベルは言語タグを持っている、したがって、文字通りのラベルが

「ドナルド・トランプ」です@

エンとLCASE後の文字列は、実際に

CONTAINS WOR @en

"ドナルド切り札" になりますここにks。

あなたは "ドナルド・トランプ"

ソリューション

だけ

すなわち、字句形式を取得するには STR機能を使用する必要があります:あなたは私のフリーキングヒーローです

FILTER(LCASE(STR(?idLabel)) = "donald trump") .

+0

! – Andy

関連する問題