基于SPARQL DELETE和INSERT更新数据属性值
我已经创建了一个本体,我想更新其中的一些数据属性。我在中阅读了SPARQL更新,发现使用SPARQL更新(Insert/Update)可以基于Pellet Reasonier更新RDF triple。但我怀疑它对数据属性是否有用 例如,我有一个带有DataProperty的person类,它的年龄为“30”,年龄为category=“child” 我创建了这个SPARQL查询,但没有结果 “删除?人员nn:具有类别年龄‘child’\n” “插入?人员nn:类别年龄为‘成人’\n” “其中{\n” “?人员rdf:类型nn:人员。\n” “?人员nn:有年龄?年龄。\n” “?人员nn:具有类别年龄?类别。\n” “筛选器((类别为age='child')&&(?类别为age='30'))\n” "} "; 非常感谢 我的本体是:基于SPARQL DELETE和INSERT更新数据属性值,sparql,ontology,Sparql,Ontology,我已经创建了一个本体,我想更新其中的一些数据属性。我在中阅读了SPARQL更新,发现使用SPARQL更新(Insert/Update)可以基于Pellet Reasonier更新RDF triple。但我怀疑它对数据属性是否有用 例如,我有一个带有DataProperty的person类,它的年龄为“30”,年龄为category=“child” 我创建了这个SPARQL查询,但没有结果 “删除?人员nn:具有类别年龄‘child’\n” “插入?人员nn:类别年龄为‘成人’\n” “其中{\n
<?xml version="1.0"?>
30
小孩
10
小孩
25
成人
WHERE
部分是否正确并与某些数据匹配李>
SELECT
查询来完成的WHERE
部分中看到明显的错误:
WHERE {
?person rdf:type nn:person .
?person nn:has-age ?ag .
?person nn:has-category-age ?categry .
FILTER ((has-category-age='child') && (?has-age='30'))
}
?人员nn:具有类别年龄?类别。
,过滤器为(具有类别年龄='child')
。为什么?必须根据变量值进行筛选,不能再次使用谓词?人员nn:has age?ag.
,过滤器为(?has age='30')
。与以前相同的问题…此外,如果年龄的数据类型是xsd:integer
,则不能使用'30'
,因为在内部引号中它将是一个字符串。使用30
或“30”^^xsd:integer
年龄
和类别
->类别
中的部分(我假设年龄是一个整数值):
你的问题的格式总是有助于其他人阅读问题
您使用哪种triple store/SPARQL引擎李>
在看不到数据的情况下,我们如何检查WHERE
部分是否正确并与某些数据匹配李>
通过首先检查WHERE部分是否与任何结果匹配,显然可以调试SPARQL更新查询-这确实可以通过使用SELECT
查询来完成
从SPARQL查询中,我可以在的WHERE
部分中看到明显的错误:
WHERE {
?person rdf:type nn:person .
?person nn:has-age ?ag .
?person nn:has-category-age ?categry .
FILTER ((has-category-age='child') && (?has-age='30'))
}
三重模式?人员nn:具有类别年龄?类别。
,过滤器为(具有类别年龄='child')
。为什么?必须根据变量值进行筛选,不能再次使用谓词
三重模式?人员nn:has age?ag.
,过滤器为(?has age='30')
。与以前相同的问题…此外,如果年龄的数据类型是xsd:integer
,则不能使用'30'
,因为在内部引号中它将是一个字符串。使用30
或“30”^^xsd:integer
请下次检查您的变量名,在那里看到拼写错误是很可怕的<代码>公司
->年龄
和类别
->类别
修正了中的部分(我假设年龄是一个整数值):
WHERE {
?person rdf:type nn:person .
?person nn:has-age ?age .
?person nn:has-category-age ?category .
FILTER ((?category='child') && (?age=30))
}