Числовые свойства, возвращаемые 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 на Virtuoso (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
}

(Что соответствует эту ссылку)

Он возвращает все записи, но поля "hombres" и "mujeres" возвращают их мне, как если бы это была строка, а не числовое значение, например невозможно применить фильтр типа FILTER (?hombres > 500). Есть идеи, в чем я ошибаюсь?

Кстати, онтология и ресурс со значениями доступны по этим ссылкам:


person germaaan    schedule 19.06.2017    source источник
comment
Недостаточно определить диапазон свойства. это также должно быть отражено в данных экземпляра путем добавления типа данных к каждому литералу: :x :hombres "352" - ›:x :hombres "352"^^xsd:nonNegativeInteger   -  person UninformedUser    schedule 19.06.2017


Ответы (1)


Чтобы рассматривать числа как числа, вам необходимо определить их как таковые.

Прямо сейчас вы определяете их как строки:

<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)
person evsheino    schedule 19.06.2017