2017-06-19 6 views
1

Ich habe ein Problem mit SPARQL beim Umgang mit numerischen Datentypen.Numerische Eigenschaften, die von SPARQL als Zeichenfolge zurückgegeben werden

Ich habe eine Ontologie (http://cabas.ugr.es/ontology/ugr), in dem ich ein Paar Eigenschaften definiert haben, die die Anzahl der Schüler vertreten, die eines bestimmten Geschlechts sind:

<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" . 

Ich habe ein SPARQL-Endpunkt auf Virtuoso montiert (http://cabas.ugr.es:8890/sparql), in dem gebe ich zum Beispiel die folgende Abfrage:

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 
} 

(Was bei this link)

entspräche

Es gibt alle Datensätze, aber die Felder "hombres" und "mujeres" gibt sie an mich zurück, als ob es eine Zeichenfolge anstelle eines numerischen Werts wäre, so zum Beispiel ist es unmöglich, einen Filter wie FILTER (?hombres > 500) anzuwenden . Irgendeine Idee, worüber ich falsch liege?

By the way, die Ontologie und die Ressource mit den Werten sind durch diese Links gilt:

+1

Das Definieren des Bereichs einer Eigenschaft ist nicht genug. Dies muss sich auch in den Instanzdaten widerspiegeln, indem der Datentyp jedem Literal hinzugefügt wird: ': x: hombres" 352 "' -> ': x: hombres" 352 "^^ xsd: nonNegativeInteger' – AKSW

Antwort

5

Um die Zahlen als Zahlen zu behandeln, müssen Sie sie als solche definieren.

Gerade jetzt definieren Sie sie als Strings:

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

sie als ganze Zahlen zu definieren, müssen Sie ihre Typ xsd:integer einzustellen:

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

Strings können auch in Anfragen an integer gegossen werden , wenn benötigt. Zum Beispiel:

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

Das war alles, was ich hinzufügen musste damit es funktioniert. Vielen Dank! – germaaan

Verwandte Themen