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>

誰かが私を正しい方向に向けることができますか?

PS 可能であれば、10 大学の名前だけを取得したいと思います。

4

2 に答える 2

7

すべての大学"uni"の名前に文字列が含まれていると想定していることは理解しています。

値が string と等しいかどうかをチェックしていることに注意してください"uni"。データセットにそのようなインスタンスは実際にはありません。

で置き換えるFILTER(str(?aff)='uni')と、代わりに文字列" を含むFILTER regex(?aff, "uni", "i")値に一致させることができます。これは、3 つの引数を取る正規表現フィルターです。"uni

  1. 変数
  2. ここで説明されている構文に準拠した正規表現
  3. オプションのフラグのセット。この場合、1 つのフラグを使用し"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;
于 2012-10-28T14:24:40.470 に答える
-1

RDF スニペットには「foaf:」名前空間がありません。そのため、RDF を入れる必要があるかもしれません。もちろん、それが RDF ドキュメントのデフォルトの名前空間でない限り。

于 2016-10-27T05:56:47.823 に答える