SPARQL以字符串形式返回的数值属性

SPARQL以字符串形式返回的数值属性,sparql,rdf,semantic-web,ontology,linked-data,Sparql,Rdf,Semantic Web,Ontology,Linked Data,我在处理数字数据类型时遇到了SPARQL问题 我有一个ontology(),我在其中定义了一对属性,表示特定性别的学生人数: <http://cabas.ugr.es/ontology/ugr#hombres> a owl:DatatypeProperty, owl:FunctionalProperty, rdf:Property ; rdfs:label "hombres"@es, "men"@en ; rdfs:c

我在处理数字数据类型时遇到了SPARQL问题

我有一个ontology(),我在其中定义了一对属性,表示特定性别的学生人数:

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

owl:DatatypeProperty,owl:FunctionalProperty,rdf:Property;
rdfs:标签
“hombres”@es,
“男人”@en;
rdfs:评论
“我们的学生都很好。”@es,
“男生人数。”@en;
rdfs:range xsd:nonNegativeInteger;
rdfs:isDefinedBy;
猫头鹰:萨摩亚;
猫头鹰:倒数;
ns1:术语_状态“稳定”。
owl:DatatypeProperty,owl:FunctionalProperty,rdf:Property;
rdfs:标签
“mujeres”@es,
"女人"恩,;
rdfs:评论
“我们的学生都很好。”@es,
“女生人数。”@en;
rdfs:range xsd:nonNegativeInteger;
rdfs:isDefinedBy;
猫头鹰:萨摩亚;
猫头鹰:倒数;
ns1:术语_状态“稳定”。
我在Virtuoso()上安装了一个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
}
前缀rdfs:
前缀ugr:
选择?X?提特拉西翁?拉玛?霍姆布雷斯?穆杰雷斯
在哪里{
?X ugr:Titulación?titulacion。
?X ugr:RamaConocimiento?rama。
?X ugr:hombres?hombres。
?X ugr:mujeres?mujeres
}
(与之相对应)

它返回所有记录,但是字段“hombres”“mujeres”将它们返回给我,就像它是一个字符串而不是一个数值一样,因此,例如,不可能应用类似
过滤器(?hombres>500)
的过滤器。知道我错在哪里吗

顺便说一下,可以通过以下链接访问本体和具有值的资源:

  • 本体:

    • 海龟格式:
    • RDF/XML格式:
  • 资源:

    • 海龟格式:
    • RDF/XML格式:

要将数字视为数字,您需要将其定义为数字

现在将它们定义为字符串:

<http://cabas.ugr.es/resources/MatriculasGrado1516#21>
  ns0:hombres "91" ;
  ns0:mujeres "68" .
如果需要,字符串也可以在查询中转换为整数。例如:

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

为了将数字视为数字,您需要将它们定义为数字

现在将它们定义为字符串:

<http://cabas.ugr.es/resources/MatriculasGrado1516#21>
  ns0:hombres "91" ;
  ns0:mujeres "68" .
如果需要,字符串也可以在查询中转换为整数。例如:

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

仅定义属性的范围是不够的。这也必须通过向每个文本添加数据类型来反映在实例数据中:
:x:hombres“352”
->
:x:hombres“352”^^xsd:nonNegativeInteger
定义属性的范围是不够的。这也必须通过向每个文本添加数据类型来反映在实例数据中:
:x:hombres“352”
->
:x:hombres“352”^^xsd:nonNegativeInteger