Rdf 使用Proté构建子查询;gé;DL查询编辑器

Rdf 使用Proté构建子查询;gé;DL查询编辑器,rdf,sparql,owl,ontology,Rdf,Sparql,Owl,Ontology,我有 包含个人DocA、DocB和DocC的类“文档” 对象属性“关于” 一个包含WatchA、WatchB和WatchC的类“Watch” 我断言DocA是关于WatchA的,DocB是关于WatchB的,DocC是关于watchC的 我需要一个查询,返回所有现有手表的所有文档。我可以编写一个DL查询:Document and(关于value Watch a或关于value Watch B或关于value Watch C) 但是我想写一个子查询,例如watchhascoolor Black

我有

  • 包含个人DocA、DocB和DocC的类“文档”
  • 对象属性“关于”
  • 一个包含WatchA、WatchB和WatchC的类“Watch”
我断言DocA是关于WatchA的,DocB是关于WatchB的,DocC是关于watchC的

我需要一个查询,返回所有现有手表的所有文档。我可以编写一个DL查询:Document and(关于value Watch a或关于value Watch B或关于value Watch C)

但是我想写一个子查询,例如watchhascoolor Black,并得到相应的文档。因此,有两个步骤:

  • 一个子查询,它将被计算为若干个个体(a,B)
  • 这些个体将用于评估第一个查询:关于值A或关于值B
  • 我没有使用SPARQL,因为它似乎不支持推断


    有什么建议吗?谢谢

    您可以将OWL表达式表述为:
    文档和关于一些(手表和颜色值黑色)
    ,并检索个体。在这种情况下,查询将返回
    documentA
    ,因为它是这个表达式所包含的唯一一个

    我假设您的本体/知识库如下所示(伪OWL-Manchester语法):

    前缀:示例:
    #对象属性
    对象属性:
    对象属性:
    #班级
    类别:
    类别:
    类别:
    #个人及其类型
    个人:
    类型:
    个人:
    类型:
    事实:
    个人:
    类型:
    事实:
    
    Prefix: example: <http://www.example.org/>
    
    # Object properties
    ObjectProperty: <example:about>
    ObjectProperty: <example:color>
    
    # Classes
    Class: <example:Color>
    Class: <example:Watch> 
    Class: <example:Document>
    
    # Individuals and their types
    Individual: <example:black>
      Types: 
         <example:Color>
    
    Individual: <example:watchA>
      Types: 
         <example:Watch>
    
      Facts:  
         <example:color>  <example:black>
    
    Individual: <example:documentA>
    
      Types: 
         <example:Document>
    
      Facts:  
         <:example:about>  <example:watchA>