1

hasAuthorオントロジーで複数値オブジェクト プロパティを定義しますliterature。がとの個体book-1がいます。の著者を取得したい場合は、次のように書くことができますhasAuthorwriter-1writer-2book-1

Resource r;  // r represents the individual book-1
r.getRequiredProperty(literature.hasAuthor).getObject().toString();

また

r.getPropertyResourceValue(literature.hasAuthor).toString();

ただし、どちらも最初の値のみを返し、writer-1無視writer-2されます。

すべての作成者を取得するには、コードをどのように変更すればよいですか?

4

2 に答える 2

2

一般に、get* 操作は単一の項目を取得し、list* 操作は複数のものに対する反復子を返します。

.listProperties(property) -> StmtIterator を使用します。

于 2013-05-28T08:26:07.337 に答える
2

Jenaには、リソースをサブジェクトとして指定されたプロパティを持つステートメントを反復処理するために使用できるResourceメソッドがあります。listProperties以下は、RDF Primerとその 2 つのエディター (例に合わせるために、この例では作成者と呼ばれます) を説明する例です。

public class MultipleProperties {
  public static void main(String[] args) {
    String ns = "http://www.example.com/";
    Model model = ModelFactory.createDefaultModel();
    model.setNsPrefix( "", ns );
    Property hasAuthor = model.createProperty( ns + "hasAuthor" );

    Resource rdfPrimer = model.createResource( "http://www.w3.org/TR/rdf-primer/" );
    Resource fm = model.createResource( ns + "FrankManola" );
    Resource em = model.createResource( ns + "EricMiller" );

    rdfPrimer.addProperty( hasAuthor, fm );
    rdfPrimer.addProperty( hasAuthor, em );

    System.out.println( "== The Model ==" );
    model.write( System.out, "N3" );

    System.out.println( "\n== The Properties ==" );
    StmtIterator it = rdfPrimer.listProperties( hasAuthor );
    while( it.hasNext() ) {
      Statement stmt = it.nextStatement();
      System.out.println( " * "+stmt.getObject() );
      System.out.println( "   * "+stmt );
    }
  }
}

出力:

== The Model ==
@prefix :        <http://www.example.com/> .

<http://www.w3.org/TR/rdf-primer/>
      :hasAuthor :EricMiller , :FrankManola .

== The Properties ==
 * http://www.example.com/EricMiller
   * [http://www.w3.org/TR/rdf-primer/, http://www.example.com/hasAuthor, http://www.example.com/EricMiller]
 * http://www.example.com/FrankManola
   * [http://www.w3.org/TR/rdf-primer/, http://www.example.com/hasAuthor, http://www.example.com/FrankManola]
于 2013-05-28T15:32:40.537 に答える