SPARQL查询大学

3

我正在尝试使用SPARQL获取大学名称:

以下是rdf数据(还有很多其他内容,但这不相关)。

<Organization rdf:about="http://data.semanticweb.org/organization/the-university-of-queensland">
    <rdfs:label>The University of Queensland</rdfs:label>
    <homepage rdf:resource="http://www.uq.edu.au/"/>
    <member rdf:resource="http://data.semanticweb.org/person/jane-hunter"/>
    <member rdf:resource="http://data.semanticweb.org/person/kwok-cheung"/>
    <member rdf:resource="http://data.semanticweb.org/person/robert-m-colomb"/>
    <name>The University of Queensland</name>
</Organization>

我已经写了一个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') }";

很遗憾,这是不正确的,因为没有返回任何结果:

<?xml version='1.0' encoding='UTF-8'?> 
  <sparql xmlns='w3.org/2005/sparql-results#'> 
    <head> 
     <variable name='name'/> 
    </head> 
    <results> 
    </results> 
  </sparql>

有人能指引我正确的方向吗?

附带说明:如果可能,我想只获取10所大学的名称。


感谢您的快速回复。它应该显示所有大学的名称。不幸的是,这是结果:<?xml version='1.0' encoding='UTF-8'?> <sparql xmlns='http://www.w3.org/2005/sparql-results#&#39;> <head> <variable name='name'/> </head> <results> </results> </sparql> - user1390504
我刚刚检查了一下,结果发现正则表达式本身并没有起到作用。但是将“uni”更改为“Uni”就可以了!这都要感谢你才能注意到。非常感谢你提供的限制信息! - user1390504
你能回答这个问题吗?这样我就可以接受它了,谢谢! :) - user1390504
很奇怪。正则表达式应该是大小写不敏感的(给定了“i”参数)。 - toniedzwiedz
我在使用正则表达式时将其更改为Uni。因此,我不确定是因为 U 还是因为正则表达式导致了这种情况;无论如何,它正在工作 :) - user1390504
显示剩余4条评论
2个回答

7

我理解您假设所有大学的名称中都含有字符串"uni"

请注意,您正在检查一个值是否等于字符串"uni"。实际上,在您的数据集中并没有这样的实例。

使用FILTER regex(?aff, "uni", "i")替换FILTER(str(?aff)='uni')将允许您匹配包含字符串"uni"的值,它是一个正则表达式筛选器,需要三个参数:

  1. 一个变量
  2. 此处描述的语法兼容的正则表达式
  3. 一组可选标志,在本例中,我使用了一个标志"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;

-1
在你的RDF片段中,没有"foaf:"命名空间。因此,你可能应该在你的RDF中加入它。当然,如果它是你的RDF文档中的默认命名空间,那就不用了。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接