如何读取对象属性的特定范围值

时间:2019-06-12 17:35:29

标签: sparql rdf owl ontology protege

我是新手,要处理本体并发现问题以使我的SPARQL查询正常工作,尝试读取具有多个范围Object Property Screenshot的特定Object属性的值

尝试此查询返回所有对象属性Execution ResultProtege Visualization

PREFIX ns: <http://www.semanticweb.org/pavilion/ontologies/2017/5/untitled-ontology-66#>
PREFIX owl: <http://www.w3.org/2002/07/owl#>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>

SELECT *
WHERE {
    ns:star1086 ns:possesses ?z .
}

我只想读取所需范围值的期望结果,请提前感谢。

1 个答案:

答案 0 :(得分:0)

我认为您的本体存在问题。

为谓词指定多个范围会创建一个交集。采取以下声明:

?star ns:possesses ?something

然后?somethingSpectralType StarTemperature StarCoordinates 同时StarName,这不是您想要的。

相反,您应该使用联合。使用联合,您可以声明ns:possesses语句的对象可以是SpectralType StarTemperature { {1}} StarCoordinates。然后,在SPARQL查询中,您可以编写以下代码以仅从一种类型中获取语句。

StarName

在Protégé中,要编写联合,请打开类表达式编辑器(例如,通过单击“范围”旁边的“加号”),并用SELECT * WHERE { ns:star1086 ns:possesses ?z . ?z a ns:SpectralType . } 分隔不同的成员:

or

然后单击“确定”以创建新范围。


其他注意事项

让我们退后一步,看看您的本体。

首先不应使用单个谓词存储所有这些信息。相反,我建议您使用不同的子谓词,以便您的图形和查询具有更多的语义值。

此外,SpectralType or StarTemperature or StarCoordinates or StarName StarName是文字值。您不应该为此使用类。请改用数据类型属性。

Here是要点,您可以下载并在Protégé中打开。它包含一些样本数据,因此您可以尝试以下SPARQL查询。

Temperature