W Jenie, Resource
obiekty same w sobie nie są w model. Model zawiera tylko trójek - Statement
obiektów zawierających temat, predykat i obiekt (zwykle w skrócie SPO). Każdy z S, P lub O może być zasobem (zauważając, że Property
jest podtypem Resource
w Jenie i standardzie RDF). Musisz więc sprecyzować swoje pytanie od "czy ten model zawiera ten zasób" do:
czy model M zawiera zasób R jako temat?
czy model M zawiera zasób R jako podmiot, predykat lub obiekt?
ten można osiągnąć jak:
Resource r = ... ;
Model m = ... ;
// does m contain r as a subject?
if (m.contains(r, null, (RDFNode) null)) {
..
}
// does m contain r as s, p or o?
if (m.containsResource(r)) {
..
}
Nawiasem mówiąc, w próbce kodu masz
model.getResource("example")
ta zwraca obiekt Resource
odpowiadający danym URI, ale nie obok -poprawka trójki w modelu. Jest to powód, dla którego Model
ma zarówno getResource
jak i createResource
- get jest potencjalnie nieco bardziej efektywny, ponieważ ponownie wykorzystuje obiekty zasobów, ale semantyka jest zasadniczo identyczna. Jednak argument, który należy przekazać do getResource
lub createResource
, powinien być identyfikatorem URI. Pożyczasz kłopoty z przyszłości, jeśli zaczniesz używać tokenów takich jak "example"
w miejsce pełnego identyfikatora URI, więc radziłbym powstrzymać ten zły nawyk zanim nie poczujesz się komfortowo!
Może ten link [Model interfejsu] (http://jena.apache.org/documentation/javadoc/jena/com/hp/hpl/jena/rdf/model/Model.html) jest przydatny. –
Po drobnych poszukiwaniach znalazłem następny sposób. Nie wiem, czy to naprawdę najlepszy sposób, aby to osiągnąć, ale działa: Resource toSearch = ResourceFactory.createResource ("przykład"); if (! Model.containsResource (toSearch)) ...; – jevora
Jeśli zostanie rozwiązany, opublikuj odpowiedź i zaakceptuj ją, aby następna osoba z tym samym problemem znalazła odpowiedź, otrzymasz także odznakę! :) – Boaz