2015-04-20 9 views
5

stosując następujące zapytanie:wyszukiwania SPARQL dla xsd: integer tylko brak dziesiętne

PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> 
PREFIX owl: <http://www.w3.org/2002/07/owl#> 
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> 
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#> 
PREFIX uni: <http://localhost/SemanticSearch/semanticsearch.owl#> 

SELECT 
    DISTINCT * 
WHERE { 
    ?uri uni:altLabel "5"^^xsd:integer. 
    ?uri rdf:type ?type 
} 

również zwraca URI, które mają altLabel z xsd:decimal 5.x naprawdę muszę to powrót tylko ?uri które mają altLabel z xsd:integer. Czy mimo to jest to możliwe?

Odpowiedz

4

Zawsze jest łatwiej, jeśli możesz podać rzeczywiste dane, które możemy przesłać. W przyszłości podaj dane, które możemy przesłać. ponieważ wtedy możemy faktycznie testować zapytania przeciwko niemu. W każdym razie, oto bardzo prosty zestaw danych z dwoma zasobami, taki, który ma wartość xsd: dziesiętną i jedną z wartością xsd: integer.

@prefix xsd: <http://www.w3.org/2001/XMLSchema#>. 
@prefix uni: <http://localhost/SemanticSearch/semanticsearch.owl#>. 
@prefix : <urn:ex:>. 

:a uni:altLabel "5"^^xsd:integer ; a :somethingWithAnInteger . 
:b uni:altLabel "5"^^xsd:decimal ; a :somethingWithADecimal . 

można filtrować dla poszczególnych typów danych, które chcesz przy użyciu funkcja Typ danych:

PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> 
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#> 
PREFIX uni: <http://localhost/SemanticSearch/semanticsearch.owl#> 

SELECT DISTINCT * WHERE { 
    ?uri uni:altLabel ?altLabel . 
    ?uri rdf:type ?type 
    filter(?altLabel = "5"^^xsd:integer && datatype(?altLabel) = xsd:integer) 
} 

----------------------------------------------------------- 
| uri  | altLabel | type       | 
=========================================================== 
| <urn:ex:a> | 5  | <urn:ex:somethingWithAnInteger> | 
-----------------------------------------------------------