Java 如何编写SPARQL查询以从OWL文件检索数据
我已经使用Protege生成了一个owl文件。现在我希望从中访问类RailwayStation的所有实例的所有stationCode属性值 我的OWL文件包含以下格式Java 如何编写SPARQL查询以从OWL文件检索数据,java,sparql,jena,owl,protege,Java,Sparql,Jena,Owl,Protege,我已经使用Protege生成了一个owl文件。现在我希望从中访问类RailwayStation的所有实例的所有stationCode属性值 我的OWL文件包含以下格式 YPR 如何为此编写SPARQL查询 我目前的问题是: String querystr=“前缀rdf:”+ “前缀owl:”+ “前缀rdfs:”+ “选择*其中{”+ “?铁路车站代码?x。”+ "}"; 但它给出了这样一个例外: 线程“main”com.hp.hpl.jena.query.QueryParseExcept
YPR
如何为此编写SPARQL查询
我目前的问题是:
String querystr=“前缀rdf:”+
“前缀owl:”+
“前缀rdfs:”+
“选择*其中{”+
“?铁路车站代码?x。”+
"}";
但它给出了这样一个例外:
线程“main”com.hp.hpl.jena.query.QueryParseException中的异常:第1行第194列的词法错误。遇到:“”(32),在“stationCode”之后
位于com.hp.hpl.jena.sparql.lang.ParserSPARQL11.perform(ParserSPARQL11.java:111)
位于com.hp.hpl.jena.sparql.lang.ParserSPARQL11.parse$(ParserSPARQL11.java:53)
位于com.hp.hpl.jena.sparql.lang.SPARQLParser.parse(SPARQLParser.java:37)
位于com.hp.hpl.jena.query.QueryFactory.parse(QueryFactory.java:148)
在com.hp.hpl.jena.query.QueryFactory.create(QueryFactory.java:80)上
位于com.hp.hpl.jena.query.QueryFactory.create(QueryFactory.java:53)
位于com.hp.hpl.jena.query.QueryFactory.create(QueryFactory.java:41)
位于org.iitb.jena.Main.sprqltest(Main.java:70)
位于org.iitb.jena.Main.Main(Main.java:22)
“铁路车站代码?x。”
属性必须是URI(具有)或前缀名称(具有冒号)
“铁路车站代码?x。”
属性必须是URI(具有)或前缀名称(具有冒号)。您的文件和查询存在一些问题。首先,您必须知道,当您在xml/rdf文件中声明
base
名称空间时,没有特定名称空间的所有标记都将添加到基本名称空间http://www.owl-ontologies.com/RailwaysSemantic.owl
。但在你的情况下,我认为Protege为你生成了这个名称空间。关于您的文件,请将#或/
添加到基本命名空间的末尾
最后,对于您的查询:添加前缀前缀base:
,就像您对rdf和rdfs所做的那样
在此之后,您希望访问RailwayStation类的所有实例的所有stationCode属性值,回答此问题的sparql查询是:
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX base: <http://www.owl-ontologies.com/RailwaysSemantic.owl#>
select *
where { ?s a <http://www.owl-ontologies.com/RailwaysSemantic.owl#RailwayStation> .
?s <http://www.owl-ontologies.com/RailwaysSemantic.owl#stationCode> ?o}
前缀rdf:
前缀基:
选择*
a在哪里。
?s?o}
我在你的文件中测试了它,结果很好。我故意没有在查询中使用名称空间,因此您可以在数据中立即测试它,而无需更改名称空间;)
祝您好运您的文件和查询出现一些问题。首先,您必须知道,当您在xml/rdf文件中声明
base
名称空间时,没有特定名称空间的所有标记都将添加到基本名称空间http://www.owl-ontologies.com/RailwaysSemantic.owl
。但在你的情况下,我认为Protege为你生成了这个名称空间。关于您的文件,请将#或/
添加到基本命名空间的末尾
最后,对于您的查询:添加前缀前缀base:
,就像您对rdf和rdfs所做的那样
在此之后,您希望访问RailwayStation类的所有实例的所有stationCode属性值,回答此问题的sparql查询是:
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX base: <http://www.owl-ontologies.com/RailwaysSemantic.owl#>
select *
where { ?s a <http://www.owl-ontologies.com/RailwaysSemantic.owl#RailwayStation> .
?s <http://www.owl-ontologies.com/RailwaysSemantic.owl#stationCode> ?o}
前缀rdf:
前缀基:
选择*
a在哪里。
?s?o}
我在你的文件中测试了它,结果很好。我故意没有在查询中使用名称空间,因此您可以在数据中立即测试它,而无需更改名称空间;)
祝你好运我们可以通过使用前缀使其更可读,如下所示:
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX base: <http://www.owl-ontologies.com/RailwaysSemantic.owl#>
select *
where { ?s base:RailwayStation .
?s base:stationCode ?o}
前缀rdf:
前缀基:
选择*
基地在哪里:铁路站。
?s基:stationCode?o}
我们可以通过使用前缀使其更具可读性,如下所示:
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX base: <http://www.owl-ontologies.com/RailwaysSemantic.owl#>
select *
where { ?s base:RailwayStation .
?s base:stationCode ?o}
前缀rdf:
前缀基:
选择*
基地在哪里:铁路站。
?s基:stationCode?o}
那么我应该如何编写select查询呢?问题中没有足够的信息可以说明。通过将数据打印为N个三元组来查看数据,并查看属性URI是什么。很可能,您还需要在数据中设置一个基本URI。我已经更新了我的owl文件描述。请提供帮助。xml:base=“--末尾应该有一个#。以N-Triples打印数据以查看三元组结构,这就是SPARQL查询的内容。查看“什么”stationCode“已成为。那么我应该如何编写select查询?问题中没有足够的信息可以说明。通过将数据打印为N个三元组来查看数据,并查看属性URI是什么。很可能,您还需要在数据中设置一个基本URI。我已经更新了我的owl文件描述。请提供帮助。xml:base=“--末尾应该有一个#。以N-Triples打印数据以查看三元组结构,这就是SPARQL查询的内容。看看“stationCode”变成了什么。