Sparql 查询RDF存储上的子数据属性

Sparql 查询RDF存储上的子数据属性,sparql,rdf,owl,ontology,rdfs,Sparql,Rdf,Owl,Ontology,Rdfs,在我的本体中,我有一个名为“person”的实体,它有一个名为“member”的类子级。有些是这样的(缩进表示层次结构) 另外,我还有一些属性(dataProperty),与“person”关联,另一个属性与“member”关联。具体来说,这些属性可以是电话号码。我以这种方式提出了属性的层次结构 phone (domain: person) office-phone (domain: member) office-phone-1 (domain: member)

在我的本体中,我有一个名为“person”的实体,它有一个名为“member”的类子级。有些是这样的(缩进表示层次结构)

另外,我还有一些属性(dataProperty),与“person”关联,另一个属性与“member”关联。具体来说,这些属性可以是电话号码。我以这种方式提出了属性的层次结构

phone (domain: person)
    office-phone (domain: member)
        office-phone-1 (domain: member)
        office-phone-2 (domain: member)
    personal-phone (domain: person)
我在做下面的事情

SELECT ?s ?attr ?data
WHERE
{  
    value ?attr {:phone} .
    ?s rdf:type :member .
    ?s ?attr ?data .  
}   
要获取所有电话号码

instance-member   :phone   "value-of-personal-phone"
instance-member   :phone   "value-of-office-phone-1"
instance-member   :phone   "value-of-office-phone-2"
但是,

如果不使用特定属性“:office phone”,我怎么可能只获取两个office phone??一些猫头鹰:限制还是定义


谢谢

首先,您必须在数据中使用属性层次结构,否则,这将无法工作(如果您下次提供适当的示例数据,这将是一件好事…):


首先,您必须在数据中使用属性层次结构,否则,这将无法工作(如果您下次提供适当的示例数据,这将是一件好事…):


…我以类似的方式得到它,显示了超属性,限制了域,包括一个独特的

SELECT distinct ?s ?attr_father ?data
WHERE
{ 
    values ?attr_father {:phone} .

    ?s rdf:type :member .
    ?attr rdfs:subPropertyOf* ?attr_father .
    ?attr rdfs:domain :member .
    ?s ?attr ?data .    
} 
这样我们就得到

instance-member   :phone   "value-of-office-phone-1" .
instance-member   :phone   "value-of-office-phone-2" .

问候

…我以类似的方式得到它,显示了超属性,限制了域并包含了一个独特的

SELECT distinct ?s ?attr_father ?data
WHERE
{ 
    values ?attr_father {:phone} .

    ?s rdf:type :member .
    ?attr rdfs:subPropertyOf* ?attr_father .
    ?attr rdfs:domain :member .
    ?s ?attr ?data .    
} 
这样我们就得到

instance-member   :phone   "value-of-office-phone-1" .
instance-member   :phone   "value-of-office-phone-2" .

问候

对于示例数据,这不起作用。实际上,您必须首先在数据中使用特定的子属性。然后,您可以使用SPARQL查询,该查询只考虑
office phone
的子属性。在当前数据中,这只反映在文本字符串中,而不能根据属性层次结构信息查询任何内容。我希望你能理解。根据你的样本数据,这是行不通的。实际上,您必须首先在数据中使用特定的子属性。然后,您可以使用SPARQL查询,该查询只考虑
office phone
的子属性。在当前数据中,这只反映在文本字符串中,而不能根据属性层次结构信息查询任何内容。我希望你能理解……我同意。。。我忘了包括一个样本数据。。。很抱歉,非常感谢,但是它们与您解释的方式相同(以及在我的本体中定义的层次结构)。但是,我的问题是“…不使用:办公室电话…”如果使用此dataProperty,则不需要包含三个”?attr rdfs:subpertyof*?p。“;这将是我首先包含的同一个sparql,我得到了“office phone”的孩子们……问题是只使用超级属性“phone”让属性亲属到“member”类。。。谢谢同意。。。我忘了包括一个样本数据。。。很抱歉,非常感谢,但是它们与您解释的方式相同(以及在我的本体中定义的层次结构)。但是,我的问题是“…不使用:办公室电话…”如果使用此dataProperty,则不需要包含三个”?attr rdfs:subpertyof*?p。“;这将是我首先包含的同一个sparql,我得到了“office phone”的孩子们……问题是只使用超级属性“phone”让属性亲属到“member”类。。。谢谢好的,但是你的问题没有反映出你想要什么,特别是你展示的样本数据,这些数据在这里不适用于你的查询,而且还远远没有完成。我不明白为什么三重
:instance member:personalPhone“value of personal phone”。
不会随您的查询一起返回……因此,在域限制的情况下,查询是以这种方式工作的(使用您编写的数据样本…另一次,很抱歉忘记编写它们)。如果在查询中删除此三元组,则会得到第三个结果“实例成员:personal phone的personal phone值”。。。当做好的,但是你的问题没有反映出你想要什么,特别是你展示的样本数据,这些数据在这里不适用于你的查询,而且还远远没有完成。我不明白为什么三重
:instance member:personalPhone“value of personal phone”。
不会随您的查询一起返回……因此,在域限制的情况下,查询是以这种方式工作的(使用您编写的数据样本…另一次,很抱歉忘记编写它们)。如果在查询中删除此三元组,则会得到第三个结果“实例成员:personal phone的personal phone值”。。。当做
instance-member   :phone   "value-of-office-phone-1" .
instance-member   :phone   "value-of-office-phone-2" .