Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何编写SPARQL查询以从OWL文件检索数据_Java_Sparql_Jena_Owl_Protege - Fatal编程技术网

Java 如何编写SPARQL查询以从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

我已经使用Protege生成了一个owl文件。现在我希望从中访问类RailwayStation的所有实例的所有stationCode属性值

我的OWL文件包含以下格式


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”变成了什么。