SPARQL查询大学
我正在尝试使用SPARQL获取大学名称: rdf数据如下(还有更多,但这与此无关)SPARQL查询大学,sparql,Sparql,我正在尝试使用SPARQL获取大学名称: rdf数据如下(还有更多,但这与此无关) 昆士兰大学 昆士兰大学 我已经编写了一个java程序来查询数据。 我查询数据的字符串如下所示: queryString += "PREFIX swrc: <http://swrc.ontoware.org/ontology#> \n"; queryString += "PREFIX dc: <http://pur
昆士兰大学
昆士兰大学
我已经编写了一个java程序来查询数据。
我查询数据的字符串如下所示:
queryString += "PREFIX swrc: <http://swrc.ontoware.org/ontology#> \n";
queryString += "PREFIX dc: <http://purl.org/dc/elements/1.1/> \n";
queryString += "PREFIX foaf: <http://xmlns.com/foaf/0.1/> \n";
queryString += "PREFIX geo: <http://www.w3.org/2003/01/geo/wgs84_pos#> \n";
queryString += "PREFIX ical: <http://www.w3.org/2002/12/cal/ical#> \n";
queryString += "PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> \n";
queryString += "PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> \n";
queryString += "PREFIX swc: <http://data.semanticweb.org/ns/swc/ontology#> \n";
queryString += "PREFIX swrc_ext: <http://www.cs.vu.nl/~mcaklein/onto/swrc_ext/2005/05#> \n";
queryString += "SELECT ?name WHERE {\n";
queryString += "?university rdfs:label ?aff . \n ?university foaf:name ?name FILTER(str(?aff)='uni') }";
queryString+=“前缀swrc:\n”;
queryString+=“前缀dc:\n”;
queryString+=“前缀foaf:\n”;
queryString+=“前缀geo:\n”;
queryString+=“前缀ical:\n”;
queryString+=“前缀rdf:\n”;
queryString+=“前缀rdfs:\n”;
queryString+=“前缀swc:\n”;
queryString+=“前缀swrc\U ext:\n”;
queryString+=“选择?名称,其中{\n”;
queryString+=“?大学rdfs:标签?aff。\n?大学foaf:名称?名称筛选器(str(?aff)='uni')}”;
不幸的是,这是不正确的,因为没有返回任何结果:
<?xml version='1.0' encoding='UTF-8'?>
<sparql xmlns='w3.org/2005/sparql-results#'>
<head>
<variable name='name'/>
</head>
<results>
</results>
</sparql>
谁能给我指出正确的方向吗
如果可能的话,我只想取10所大学的名字。我知道你假设所有大学的名字中都有字符串
“uni”
请注意,您正在检查字符串“uni”
的值是否相等。在您的数据集中确实没有这样的实例
将过滤器(str(?aff)='uni')
替换为过滤器正则表达式(?aff,“uni”,“i”)
将允许您匹配包含字符串“uni
”的值。它是一个接受三个参数的正则表达式过滤器
“I”
。这意味着匹配必须不区分大小写limit
关键字附加查询即可
结果查询应为:
PREFIX swrc: <http://swrc.ontoware.org/ontology#>
PREFIX dc: <http://purl.org/dc/elements/1.1/>
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
PREFIX geo: <http://www.w3.org/2003/01/geo/wgs84_pos#>
PREFIX ical: <http://www.w3.org/2002/12/cal/ical#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX swc: <http://data.semanticweb.org/ns/swc/ontology#>
PREFIX swrc_ext: <http://www.cs.vu.nl/~mcaklein/onto/swrc_ext/2005/05#>
SELECT ?name WHERE {
?university rdfs:label ?aff .
?university foaf:name ?name
FILTER regex(?aff, "uni", "i")
} LIMIT 10;
前缀swrc:
前缀dc:
前缀foaf:
前缀geo:
前缀ical:
前缀rdf:
前缀rdfs:
前缀swc:
前缀swrc_ext:
选择?名称在哪里{
?大学rdfs:标签?aff。
?大学foaf:名称?名称
过滤正则表达式(?aff,“uni”,“i”)
}限制10;
您的RDF代码段中没有“foaf:”命名空间。所以,也许你应该加入你的RDF。当然,除非它是RDF文档中的默认名称空间。SPARQL允许您限制结果的数量。只需在查询中附加限制10
。你的结果到底出了什么问题?谢谢你的快速回复。它应该显示所有大学的名称。不幸的是;结果是:我明白了,没有一所大学符合你的标准。我知道你假设所有大学的名称中都有字符串'uni'
。尝试将过滤器(str(?aff)='uni')
替换为过滤器正则表达式(?aff,“uni”,“i”)
或过滤器正则表达式(str(?aff),“uni”,“i”)
。不过,对我来说,按名称过滤似乎是一种奇怪的方法。您使用的数据集不是作为单独的属性提供此类信息吗?对这样的组织进行分类是有意义的。我也问了自己这个问题,我的导师说作业中没有这样的东西,所以我必须检查这些东西。我明白了。regex
过滤器有帮助吗?
PREFIX swrc: <http://swrc.ontoware.org/ontology#>
PREFIX dc: <http://purl.org/dc/elements/1.1/>
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
PREFIX geo: <http://www.w3.org/2003/01/geo/wgs84_pos#>
PREFIX ical: <http://www.w3.org/2002/12/cal/ical#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX swc: <http://data.semanticweb.org/ns/swc/ontology#>
PREFIX swrc_ext: <http://www.cs.vu.nl/~mcaklein/onto/swrc_ext/2005/05#>
SELECT ?name WHERE {
?university rdfs:label ?aff .
?university foaf:name ?name
FILTER regex(?aff, "uni", "i")
} LIMIT 10;