Утверждение утверждения в модели без этого утверждения в модели?
Более конкретно, это должно представлять ситуацию, такую как "Джон сказал, что машина синяя", не обязательно имея "машина синяя" в текущей онтологии. Мой код должен был бы проверить это позже. У меня может быть идея о том, как это сделать с помощью аксиомы аннотации OWL2. Тем не менее, я запутался в том, как это сделать в Йене с RDF Statement.
1 ответ
Реализация оператора - это ресурс, у которого есть субъект, свойство и объект, а также оператор типа. Вы можете использовать Модель для создания оператора (используя createStatement) без добавления этого оператора в модель. Затем вы можете получить ReifiedStatement (используя createReifiedStatement) на основе этого оператора. Вот код Jena, который создает необходимые ресурсы, а затем создает оператор
car hasColor blue
не добавляя его в модель, создает x
этого утверждения (которое добавляет тройки к модели) и, наконец, добавляет утверждение
john says x
к модели.
import com.hp.hpl.jena.rdf.model.Model;
import com.hp.hpl.jena.rdf.model.ModelFactory;
import com.hp.hpl.jena.rdf.model.Property;
import com.hp.hpl.jena.rdf.model.ReifiedStatement;
import com.hp.hpl.jena.rdf.model.Resource;
import com.hp.hpl.jena.rdf.model.Statement;
public class ReificationExample {
public static void main(String[] args) {
final String NS = "http://stackru.com/questions/19526223/";
final Model model = ModelFactory.createDefaultModel();
final Resource john = model.createResource( NS+"john" );
final Resource car = model.createResource( NS+"car" );
final Property hasColor = model.createProperty( NS+"hasColor" );
final Property says = model.createProperty( NS+"says" );
final Resource blue = model.createResource( NS+"blue" );
// creating a statement doesn't add it to the model
final Statement stmt = model.createStatement( car, hasColor, blue );
// creating a reified statement does add some triples to the model, but
// not the triple [car hasColor blue].
final ReifiedStatement rstmt = model.createReifiedStatement( stmt );
// john says rstmt
model.add( john, says, rstmt );
model.write( System.out, "TTL", null ); // or "RDF/XML", etc.
}
}
Выход в черепаху:
<http://stackru.com/questions/19526223/john>
<http://stackru.com/questions/19526223/says>
[ a <http://www.w3.org/1999/02/22-rdf-syntax-ns#Statement> ;
<http://www.w3.org/1999/02/22-rdf-syntax-ns#object>
<http://stackru.com/questions/19526223/blue> ;
<http://www.w3.org/1999/02/22-rdf-syntax-ns#predicate>
<http://stackru.com/questions/19526223/hasColor> ;
<http://www.w3.org/1999/02/22-rdf-syntax-ns#subject>
<http://stackru.com/questions/19526223/car>
] .
Вывод в RDF/XML:
<rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:j.0="http://stackru.com/questions/19526223/">
<rdf:Description rdf:about="http://stackru.com/questions/19526223/john">
<j.0:says>
<rdf:Statement>
<rdf:object rdf:resource="http://stackru.com/questions/19526223/blue"/>
<rdf:predicate rdf:resource="http://stackru.com/questions/19526223/hasColor"/>
<rdf:subject rdf:resource="http://stackru.com/questions/19526223/car"/>
</rdf:Statement>
</j.0:says>
</rdf:Description>
</rdf:RDF>