首先,你應該清楚你的意思是「不工作。」起初,我認爲你的意思是,它不返回任何結果,但是當我在跑了the endpoint,我意識到,你實際上得到一個相當明確的錯誤消息,不好的事:
Parse error:
PREFIX owl: <http://www.w3.org/2002/07/owl#>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
PREFIX oddlinker: <http://data.linkedmdb.org/resource/oddlinker/>
PREFIX map: <file:/C:/d2r-server-0.4/mapping.n3#>
PREFIX db: <http://data.linkedmdb.org/resource/>
PREFIX dbpedia: <http://dbpedia.org/property/>
PREFIX skos: <http://www.w3.org/2004/02/skos/core#>
PREFIX dc: <http://purl.org/dc/terms/>
PREFIX movie: <http://data.linkedmdb.org/resource/movie/>
PREFIX m: <http://data.linkedmdb.org/resource/movie/>
SELECT DISTINCT * WHERE {
?film dc:title ?titulo_pelicula.
FILTER NOT EXISTS {
FILTER (regex(?titulo_pelicula, "The Lord of the Rings","i")) .
}
}
Lexical error at line 16, column 14. Encountered: " " (32), after : "NOT"
你有語法錯誤,當你到NOT
。端點基於原始SPARQL Query Language for RDF而不是SPARQL 1.1 Query Language。原始的SPARQL沒有NOT EXISTS
。
雖然這很容易解決。首先,認識到filter
接受一個表達式,並且只保留表達式計算結果爲真的那些結果。當正則表達式匹配標題時,過濾器表達式regex(?titulo_pelicula, "The Lord of the Rings","i")
返回true,並且您正在查找返回false的情況,因此您只需要使用!
來否定它。 (該!
操作是一樣的XPath函數not
的映射在SPARQL推薦的部分11.3 Operator Mapping定義。)你需要這樣的查詢:
PREFIX m: <http://data.linkedmdb.org/resource/movie/>
SELECT DISTINCT * WHERE {
?film dc:title ?titulo_pelicula.
FILTER (!regex(?titulo_pelicula, "The Lord of the Rings","i")) .
}
SPARQL results
今後,注意「關於您編寫的代碼問題的問題必須在問題本身中描述具體問題 - 幷包含有效代碼以再現問題。」和「要求提供代碼的問題必須對所解決的問題有最小的理解,包括嘗試的解決方案,爲什麼他們不工作,以及預期的結果。」在這種情況下,「不起作用」不夠明確。起初我以爲你沒有得到你所期望的結果,但在嘗試查詢時,我意識到它會產生一個錯誤。請更詳細地描述 –
發生了什麼(無論您是否遇到錯誤,或者發生了什麼,但結果與預期不同)。 –