0

現在、Jena API 推論チュートリアルに従っています。

https://jena.apache.org/documentation/inference/

私の理解度をテストするための演習として、最初の例を書き直したいと思います。これは、プログラムで構築されたモデルからの単純な RDFS 推論を示しています。

import com.hp.hpl.jena.rdf.model.*;
import com.hp.hpl.jena.vocabulary.*;

public class Test1 {
    static public void main(String...argv) {
        String NS = "foo:";
        Model m = ModelFactory.createDefaultModel();
        Property p = m.createProperty(NS, "p");
        Property q = m.createProperty(NS, "q");
        m.add(p, RDFS.subPropertyOf, q);
        m.createResource(NS + "x").addProperty(p, "bar");
        InfModel im = ModelFactory.createRDFSModel(m);
        Resource x = im.getResource(NS + "x");
        // verify that property q of x is "bar" (which follows 
        // from x having property p, and p being a subproperty of q)
        System.out.println("Statement: " + x.getProperty(q));
    }
}

同じことを行うものに、代わりにこの Turtle ファイルから読み取ったモデルを使用します (これは上記の私自身の翻訳であるため、バグがある可能性があります)。

@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>.
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>.
@prefix foo: <http://example.org/foo#>.

foo:p a rdf:Property.
foo:q a rdf:Property.
foo:p rdfs:subPropertyOf foo:q.
foo:x foo:p "bar".

このコードで:

public class Test2 {
    static public void main(String...argv) {
        String NS = "foo:";
        Model m = ModelFactory.createDefaultModel();
        m.read("foo.ttl");
        InfModel im = ModelFactory.createRDFSModel(m);
        Property q = im.getProperty(NS + "q");
        Resource x = im.getResource(NS + "x");
        System.out.println("Statement: " + x.getProperty(q));
    }
}

これは正しいアプローチではないようです (特に、qプロパティの抽出が正しくないのではないかと思います)。私は何を間違っていますか?

4

1 に答える 1

1
String NS = "foo:";
m.createResource(NS + "x")

URI を作成しますが、Turtle バージョンには foo:x = http://example.org/foo#xがあります

モデルを印刷して違いを確認するim.write(System.out, "TTL");

NS = "foo:"に変更NS = "http://example.org/foo#"

于 2013-04-04T21:43:17.557 に答える