SPARQL查询大学

SPARQL查询大学,sparql,Sparql,我正在尝试使用SPARQL获取大学名称: rdf数据如下(还有更多,但这与此无关) 昆士兰大学 昆士兰大学 我已经编写了一个java程序来查询数据。 我查询数据的字符串如下所示: queryString += "PREFIX swrc: <http://swrc.ontoware.org/ontology#> \n"; queryString += "PREFIX dc: <http://pur

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

rdf数据如下(还有更多,但这与此无关)


昆士兰大学
昆士兰大学
我已经编写了一个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;