2015-04-20 19 views
5

:SPARQL arama: tamsayı sadece aşağıdaki sorguyu kullanarak Herhangi bir ondalık

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 
} 

Ayrıca ben gerçekten dönmek gereken bir altLabelxsd:decimal ile 5.x sahip URI'ları döndüren sadece altLabel var ?urixsd:integer. Bunu başarabilmenin bir yolu var mı?

cevap

4

Sorgulayabileceğimiz gerçek verileri sağlayabiliyorsanız her zaman daha kolay olur. Gelecekte, lütfen sorgulayabileceğimiz verileri sağlayın. çünkü o zaman buna karşı sorguları test edebiliriz. Her durumda, burada xsd: ondalık değerine sahip ve xsd: tamsayı değerine sahip iki kaynağı olan çok basit bir veri kümesi vardır.

@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 . 
Sen veri türü işlevini kullanarak istediğiniz belirli veri türleri için filtre

:

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> | 
----------------------------------------------------------- 
İlgili konular