Утверждение утверждения в модели без этого утверждения в модели?

Более конкретно, это должно представлять ситуацию, такую ​​как "Джон сказал, что машина синяя", не обязательно имея "машина синяя" в текущей онтологии. Мой код должен был бы проверить это позже. У меня может быть идея о том, как это сделать с помощью аксиомы аннотации 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>
Другие вопросы по тегам