我是新手,要处理本体并发现问题以使我的SPARQL查询正常工作,尝试读取具有多个范围Object Property Screenshot的特定Object属性的值
尝试此查询返回所有对象属性Execution Result,Protege 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 .
}
我只想读取所需范围值的期望结果,请提前感谢。
答案 0 :(得分:0)
我认为您的本体存在问题。
为谓词指定多个范围会创建一个交集。采取以下声明:
?star ns:possesses ?something
然后?something
是SpectralType
和是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