本体从类及其子类中查找属性

时间:2014-12-25 07:31:51

标签: sparql ontology protege

我使用Protege创建本体

这是本体的概念:

class : Human
dataProperties : 
    hasName ( Domain: Human)
    hasHeight ( Domain: Human)
    hasWeight ( Domain: Human)

class : Man    - subClassOf Human
dataProperties : 
    hasWife ( Domain: Man)

我想使用Sparql来查询Class:Man的所有Dataproperties 不仅(hasWife),而且(hasName,hasHeight,hasWeight)

我是否需要指定DataProperties限制,例如min:1?

这里的主要目标是找到 如果我想创建一个单独的类:Man

如何找到所需的所有属性?

因为每个男人都应该有名字,身高和体重。

2 个答案:

答案 0 :(得分:2)

class : Human
dataProperties : 
    hasName ( Domain: Human)
    hasHeight ( Domain: Human)
    hasWeight ( Domain: Human)

class : Man    - subClassOf Human
dataProperties : 
    hasWife ( Domain: Man)
     

我想使用Sparql来查询类:人的所有Dataproperties都没有   only(hasWife),还有(hasName,hasHeight,hasWeight)

首先,请记住在OWL中没有属性。属性可以包含域和范围,但所有这些意味着断言的主语(对象)是域(范围)的成员。虽然 class 的概念,但它与(单一调度)面向对象的编程语言并不完全相同,其中属性"属于"上课。

那就是说,听起来你正在寻找拥有Man或Man超类的所有属性。 (请注意,我说"域名",而不是"域&#34 ;;属性可以有多个域。事实上,如果你说hasWife的域名是Man,那么那么人类也是hasWife的财产;毕竟,如果你知道hasWife(x,y),你知道x必须是人类。)这不是太难:

select ?p where {
  ?p rdfs:domain ?class .
  :Man rdfs:subClassOf* ?class .
}

这就是找到具有域?类的?p的值,其中:man通过rdfs:subClassOf链接的路径连接到?类。 *表示法意味着路径可以是任何长度,包括零。当路径长度为零时,意味着?类是:Man。如果使用^运算符生成后向路径,您实际上可以更简洁地编写此查询:

select ?p where {
  ?class ^rdfs:domain ?p ;
         ^rdfs:subClassOf* :Man
}

("域",因为属性可以有多个域。

答案 1 :(得分:0)

终于在这里找到了解决方案!

这是sparql

PREFIX foaf: <http://xmlns.com/foaf/0.1/>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX owl:  <http://www.w3.org/2002/07/owl#>
PREFIX dar:  <http://www.darrell.testSub#>

SELECT DISTINCT ?properties  ?superclass  ?propertyType
WHERE {    
dar:Man      rdfs:subClassOf*   ?superclass.
?properties  rdfs:domain        ?superclass.
?properties  rdf:type           ?propertyType
}

但仍有一些问题。

首先,我需要DISTINCT,否则我将获得2份重复。

其次,我无法弄清楚为什么它会避开“女人”类的属性。

Human ( human's properties)
    --Man ( man's properties ) 
    --Woman ( woman's properties )

在推理之后,我查询了

&LT; ?s rdfs:domain:Human&gt;

它返回(人类+男人+女人)的属性

如果我在那里使用sparql。我只能得到(人类+男人)的财产。

虽然这正是我想要的结果,但我无法弄明白为什么。