2015-04-20 39 views
5

Sử dụng truy vấn sau đây:SPARQL tìm kiếm cho xsd: integer chỉ, không có số thập phân

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 
} 

Cũng trả URI có một altLabel với xsd:decimal 5.x Tôi thực sự cần nó để trở về chỉ ?urialtLabel của xsd:integer. Có bất kì cách nào để đạt được điều này không?

Trả lời

4

Sẽ dễ dàng hơn nếu bạn có thể cung cấp dữ liệu thực tế mà chúng tôi có thể truy vấn. Trong tương lai, vui lòng cung cấp dữ liệu mà chúng tôi có thể truy vấn. bởi vì sau đó chúng tôi thực sự có thể kiểm tra các truy vấn đối với nó. Trong mọi trường hợp, đây là một tập dữ liệu rất đơn giản với hai tài nguyên, một trong đó có một giá trị xsd: decimal và một với một giá trị 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 . 

Bạn có thể lọc cho các kiểu dữ liệu cụ thể mà bạn muốn sử dụng datatype chức năng:

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> | 
----------------------------------------------------------- 
Các vấn đề liên quan