2017-06-19 76 views
1

我在處理數字數據類型時遇到SPARQL問題。由SPARQL以字符串形式返回的數字屬性

我在我所限定的一對錶示誰是某一性別的學生的數量屬性的本體(http://cabas.ugr.es/ontology/ugr):

<http://cabas.ugr.es/ontology/ugr#hombres> 
        a owl:DatatypeProperty, owl:FunctionalProperty, rdf:Property ; 
    rdfs:label 
    "hombres"@es, 
    "men"@en ; 
    rdfs:comment 
    "Número de estudiantes hombres."@es, 
    "Number of male students."@en ; 
    rdfs:range xsd:nonNegativeInteger ; 
    rdfs:isDefinedBy <http://cabas.ugr.es/ontology/ugr#> ; 
    owl:sameAs <http://cabas.ugr.es/ontology/ugr#hombres> ; 
    owl:inverseOf <http://cabas.ugr.es/ontology/ugr#mujeres> ; 
    ns1:term_status "stable" . 

<http://cabas.ugr.es/ontology/ugr#mujeres> 
        a owl:DatatypeProperty, owl:FunctionalProperty, rdf:Property ; 
    rdfs:label 
    "mujeres"@es, 
    "women"@en ; 
    rdfs:comment 
    "Número de estudiantes mujeres."@es, 
    "Number of female students."@en ; 
    rdfs:range xsd:nonNegativeInteger ; 
    rdfs:isDefinedBy <http://cabas.ugr.es/ontology/ugr#> ; 
    owl:sameAs <http://cabas.ugr.es/ontology/ugr#mujeres> ; 
    owl:inverseOf <http://cabas.ugr.es/ontology/ugr#hombres> ; 
    ns1:term_status "stable" . 

我已經安裝在炫技一個SPARQL端點(http://cabas.ugr.es:8890/sparql ),我在其中例如輸入以下查詢:

PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> 
PREFIX ugr: <http://cabas.ugr.es/ontology/ugr#> 

SELECT ?X ?titulacion ?rama ?hombres ?mujeres 
WHERE { 
    ?X ugr:Titulación ?titulacion . 
    ?X ugr:RamaConocimiento ?rama . 
    ?X ugr:hombres ?hombres . 
    ?X ugr:mujeres ?mujeres 
} 

(這與this link對應)

它返回所有記錄,但字段「hombres」「mujeres」將它們返回給我,就好像它是一個字符串而不是數字值,因此例如不可能應用像FILTER (?hombres > 500)這樣的過濾器。任何想法我錯了什麼?

順便說一句,本體與價值的資源是可通過這些鏈接:

+1

定義屬性的範圍是不夠的。這也將通過將數據類型添加到每個文字來反映在實例數據中:':x:hombres「352」' - >':x:hombres「352」^^ xsd:nonNegativeInteger' – AKSW

回答

5

爲了治療的人數爲數字,你需要將它們定義爲此類。

現在你將它們定義爲字符串:

<http://cabas.ugr.es/resources/MatriculasGrado1516#21> 
    ns0:hombres "91" ; 
    ns0:mujeres "68" . 

其定義爲整數,你需要將其類型設置爲xsd:integer

<http://cabas.ugr.es/resources/MatriculasGrado1516#21> 
    ns0:hombres "91"^^xsd:integer ; 
    ns0:mujeres "68"^^xsd:integer . 

字符串也可以轉換爲整數查詢, 如果需要的話。例如:

FILTER(xsd:integer(?hombres) > 500) 
+0

這就是我需要添加的全部內容使其工作。謝謝! – germaaan

相關問題