基于SPARQL DELETE和INSERT更新数据属性值

基于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

我已经创建了一个本体,我想更新其中的一些数据属性。我在中阅读了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” "} "; 非常感谢

我的本体是:

<?xml version="1.0"?>


30
小孩
10
小孩
25
成人

  • 你的问题的格式总是有助于其他人阅读问题
  • 您使用哪种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
  • 请下次检查您的变量名,在那里看到拼写错误是很可怕的<代码>公司->
    年龄
    类别
    ->
    类别
  • 修正了
    中的
    部分(我假设年龄是一个整数值):

  • 你的问题的格式总是有助于其他人阅读问题
  • 您使用哪种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))
     }