2010-06-09 4 views
1

Я пытаюсь sparql и использование влечения.Jena Эффекты различных режимов слияния

В качестве примера я использовал http://www.w3.org/TR/2010/WD-sparql11-entailment-20100126/#t112

я пытаюсь поставить их в Йене.

 
 OntClass book1= model.createClass(NS+"book1"); 
    OntClass book2=model.createClass(NS+"book2"); 
    OntClass book3=model.createClass(NS+"book3"); 
    OntClass publication=model.createClass(NS+"publication"); 
    OntClass article=model.createClass(NS+"article"); 
    OntClass mit=model.createClass(NS+"MIT"); 

    ObjectProperty a = model.createObjectProperty(NS+"a"); 
    ObjectProperty publishes = model.createObjectProperty(NS+"publishes"); 

    book1.addProperty(a, publication); 
    book2.addProperty(a, article); 
    publication.addSubClass(article); 

    publishes.addRange(publication); 
    mit.addProperty(publishes, book3); 

где модель - тип OntModel.

и я использовал запрос, аналогичный проблеме

 "PREFIX table: "I have correct namespace here"+ 
    "SELECT *"+ 
    "WHERE"+ 
    "{"+ 
    " ?x ?y table:publication ."+ 
    "}";

модель была создана, как это. Надежда OntModelSpec в порядке.

OntModel m = ModelFactory.createOntologyModel(OntModelSpec.OWL_MEM_RDFS_INF, null);

я получить как результаты запроса


x               y    
| http://www.example.com/ontologies/sample.owl#publishes | rdfs:range          | 
| http://www.example.com/ontologies/sample.owl#article  | rdfs:subClassOf         | 
| http://www.example.com/ontologies/sample.owl#book1  | http://www.example.com/ontologies/sample.owl#a | 
| http://www.example.com/ontologies/sample.owl#publication | rdfs:subClassOf         | 
| http://www.example.com/ontologies/sample.owl#book3  | rdf:type           | 

Может кто-нибудь дать мне пример, и без следования, поэтому код TRY косяк, может получить результаты сразу же.

ответ

2

Ваша онтология выглядит немного подозрительной.

book1, book2, book3 и mit не являются классами, они являются отдельными лицами. Вы должны использовать model.createIndividual(NS + "bookX", publication) для книг и создать класс для «организации» или аналогичного, а затем создать mit как личность этого класса. Обратите внимание, что createIndividual уже позаботится о назначении этого лица, поэтому вам не нужно возиться со своим свойством «a». Сначала вы должны исправить эти вещи, а затем повторите попытку и обновите свой вопрос.

О вступлении: Посмотрите на последнюю строку вашего запроса. Вы не сказали нигде, что book3 - это книга, но заявление есть в любом случае. Это связано с тем, что в нее входили другие операторы, и поэтому механизм вывода RDFS делает оператор видимым при запросе модели. Заявление связано с диапазоном publishes: все, что публикуется, должно быть типа publication.

+0

thx, хорошо работал. я изменил модель, следуя вашей идее. Без вывода возвращается book1 (плюс публикует и статью), с умозаключениями, 3 книги. Спасибо. y книги как классы были плохой ошибкой, но я был сумасшедшим, я не получал одинаковых результатов, я даже не проверял книгу3 – blueomega

+0

Рад, что я мог помочь! – cygri