如何编写SPARQL查询以获取OWL文件中的值

如何编写SPARQL查询以获取OWL文件中的值,sparql,jena,owl,ontology,Sparql,Jena,Owl,Ontology,我有一个OWL文件,其子类为OWL:Thing“Objects” 我需要获得个人的值(比如说Door1)。 如何使用SPARQL实现这一点?我试着: PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> PREFIX owl: <http://www.w3.org/2002/07/owl#> PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> P

我有一个OWL文件,其子类为
OWL:Thing“Objects”

我需要获得个人的值(比如说
Door1
)。 如何使用SPARQL实现这一点?我试着:

PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX owl: <http://www.w3.org/2002/07/owl#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
SELECT ?X ?datatype
WHERE {?X rdf:datatype ?datatype}
前缀rdf:
前缀owl:
前缀rdfs:
前缀xsd:
选择?X?数据类型
其中{?X rdf:datatype?datatype}
但我的质疑似乎是完全错误的。有人能给我解释一下如何编写(或者更重要的是如何阅读或思考)这个查询来从本体中找到
X=2
Y=20


谢谢

好的,第一步是丢失RDF/XML文本序列化。使用其他任何东西,但海龟最接近SPARQL。任何RDF编辑器都可以用于转换为Turtle。Turtle中
Door1
的等效文本序列化为:

:Door1
   rdf:type :Objects ;
   rdf:type owl:NamedIndividual ;
   :X 2 ;
   :Y 20 .
这种语法的一个不明显的部分是,每一行是一个三元组(主语、谓语、宾语)和
表示使用前一行中的主题。这种语法的一个优点是可以将RDF资源视为具有属性的对象

步骤2是SPARQL查询变得明显,因为您可以将三元组模式与Turtle中指定的三元组对齐:

SELECT ?X ?Y ?inst
WHERE {
   ?inst rdf:type owl:NamedIndividual ;
      :X ?X ;
      :Y ?Y . 
}

好的,步骤1是丢失RDF/XML文本序列化。使用其他任何东西,但海龟最接近SPARQL。任何RDF编辑器都可以用于转换为Turtle。Turtle中
Door1
的等效文本序列化为:

:Door1
   rdf:type :Objects ;
   rdf:type owl:NamedIndividual ;
   :X 2 ;
   :Y 20 .
这种语法的一个不明显的部分是,每一行是一个三元组(主语、谓语、宾语)和
表示使用前一行中的主题。这种语法的一个优点是可以将RDF资源视为具有属性的对象

步骤2是SPARQL查询变得明显,因为您可以将三元组模式与Turtle中指定的三元组对齐:

SELECT ?X ?Y ?inst
WHERE {
   ?inst rdf:type owl:NamedIndividual ;
      :X ?X ;
      :Y ?Y . 
}

非常感谢你!这个版本一开始给我带来了一些错误,但后来我对它进行了一些调整,比如:前缀my:SELECT?objects?X?Y WHERE{?objects rdf:type owl:NamedIndividual;my:X?X;my:Y?Y},它很有效我很抱歉问了一个愚蠢的问题,但是:在这种情况下,当我修改了您提供给我的代码后,但你的答案仍然是正确的,我是否应该按下“回答你的问题”并添加修改?对不起,我在stackoverflow网站方面不是很有经验)我认为这是可以接受的。SO的一个目标是教育,所以如果你有一些东西可以提供给别人学习,那么它将被认为是一个很好的贡献。非常感谢!这个版本一开始给我带来了一些错误,但后来我对它进行了一些调整,比如:前缀my:SELECT?objects?X?Y WHERE{?objects rdf:type owl:NamedIndividual;my:X?X;my:Y?Y},它很有效我很抱歉问了一个愚蠢的问题,但是:在这种情况下,当我修改了您提供给我的代码后,但你的答案仍然是正确的,我是否应该按下“回答你的问题”并添加修改?对不起,我在stackoverflow网站方面不是很有经验)我认为这是可以接受的。SO的一个目标是教育,因此,如果你有一些东西可以提供给其他人学习,那么它将被认为是一个很好的贡献。