SPARQL 作为字符串返回的数字属性
Numeric properties that are returned as string by SPARQL
我在处理数字数据类型时遇到 SPARQL 问题。
我有一个 ontology (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" .
我在 Virtuoso (http://cabas.ugr.es:8890/sparql) 上安装了一个 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)
它returns所有的记录,但是字段"hombres"和"mujeres"returns 他们对我来说就好像它是一个字符串而不是一个数值,所以例如不可能应用像 FILTER (?hombres > 500)
这样的过滤器。知道我哪里错了吗?
顺便说一下,ontology 和具有这些值的资源可以通过这些链接访问:
Ontology:
资源:
为了将数字视为数字,您需要这样定义它们。
现在您将它们定义为字符串:
<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)
我在处理数字数据类型时遇到 SPARQL 问题。
我有一个 ontology (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" .
我在 Virtuoso (http://cabas.ugr.es:8890/sparql) 上安装了一个 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)
它returns所有的记录,但是字段"hombres"和"mujeres"returns 他们对我来说就好像它是一个字符串而不是一个数值,所以例如不可能应用像 FILTER (?hombres > 500)
这样的过滤器。知道我哪里错了吗?
顺便说一下,ontology 和具有这些值的资源可以通过这些链接访问:
Ontology:
资源:
为了将数字视为数字,您需要这样定义它们。
现在您将它们定义为字符串:
<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)