я в настоящее время после Jena API логического вывода учебника:Основные RDFS логического вывода с API Jena
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
собственности как-то не так). Что я делаю не так?
Именно это, спасибо большое ! – cjauvin