2010-06-11 42 views
6
InfModel infmodel = ModelFactory.createInfModel(reasoner, m); 
Resource vegetarian = infmodel.getResource(source + "Vegetarian"); 
Resource margherita = infmodel.getResource(source + "Example-Margherita"); 
if (infmodel.contains(margherita, RDF., vegetarian)) { 
     System.out.println("Margherita is a memberOf Vegetarian pizza"); 
    } 

Ví dụ được nêu ở trên được hình thành bởi pizza chính thức.owl. Trong con cú này, Ví dụ-Margherita là một cá nhân của lớp Margherita. Vì vậy, nó đã được viết trong tập tin cú. Tuy nhiên, vấn đề là các nhà lý luận nên suy ra rằng ví dụ margherita cũng nên là một bánh pizza chay. Bất cứ ai có thể vui lòng đưa ra một ví dụ cho thấy cách tìm các lớp suy luận có thể của một cá nhân như trong Protege? (Protege chính xác cho rằng Example-Margherita là một món ăn chay. Tuy nhiên, tôi không thể suy ra theo chương trình)Suy luận sử dụng Jena

+0

Sẽ rất hữu ích nếu bạn đưa con trỏ vào tệp pizza.owl (Tôi cho rằng nó công khai ở đâu đó) và nếu bạn cũng cung cấp mã bạn đã sử dụng để thiết lập biến 'reasoner'. – cygri

+0

Cảm ơn bạn rất nhiều cygri vì sự quan tâm của bạn. Tôi đã giải quyết được vấn đề của mình và cung cấp một ví dụ bên dưới. – Mikae

Trả lời

9

Tôi đã giải quyết xong câu hỏi. Tôi nghĩ rằng có một vấn đề với bản thể luận của tôi. Do đó, tôi đã tạo ra một bản thể luận khác để suy ra cá nhân. Bản thể luận mà tôi đã tạo có chứa Person và các lớp con của Person: MalePerson, FemalePerson và MarriedPerson. Và, có hai thuộc tính đối tượng (hasSpouse, hasSibling) và một thuộc tính kiểu dữ liệu (hasAge). Và tôi đã tạo 3 cá nhân. John - MalePerson - hasAge (20) - hasSibling (Jane) Jane - FemalePerson - hasSibling (John) - hasSpouse (Bob) Bob - MalePerson - hasSpouse (Jane)

Và, tôi đặt hai hạn chế đối với MalePerson và Các lớp học Nữ. Đối MalePerson: hasSpouse tối đa 1 hasSpouse chỉ MalePerson Đối FemalePerson: hasSpouse tối đa 1 hasSpouse chỉ FemalePerson

Cuối cùng, tôi đã MarriedPerson là một lớp xác định. Trước khi lập luận, MarriedPerson không có cá nhân. Tuy nhiên, mô hình nên suy ra rằng Jane và Bob đã kết hôn. Vì vậy, cuối cùng, lớp MarriedPerson nên có 2 cá nhân.

Khi tôi chạy mã này bằng Java sử dụng Jena, tôi có 2 cá nhân phỏng đoán.

OntModel ontModel = ModelFactory.createOntologyModel(); 
    InputStream in = FileManager.get().open(inputFileName); 
    if (in == null) { 
     throw new IllegalArgumentException("File: " + inputFileName + " not found"); 
    } 
    ontModel.read(in, ""); 


    Reasoner reasoner = ReasonerRegistry.getOWLReasoner(); 
    reasoner = reasoner.bindSchema(ontModel); 
    // Obtain standard OWL-DL spec and attach the Pellet reasoner 
    OntModelSpec ontModelSpec = OntModelSpec.OWL_DL_MEM; 
    ontModelSpec.setReasoner(reasoner); 
    // Create ontology model with reasoner support 
    OntModel model = ModelFactory.createOntologyModel(ontModelSpec, ontModel); 

    // MarriedPerson has no asserted instances 
    // However, if an inference engine is used, two of the three 
    // individuals in the example presented here will be 
    // recognized as MarriedPersons 
      //ns is the uri 
    OntClass marPerson = model.getOntClass(ns + "OWLClass_00000003866036241880"); // this is the uri for MarriedPerson class 
    ExtendedIterator married = marPerson.listInstances(); 
    while(married.hasNext()) { 
     OntResource mp = (OntResource)married.next(); 
     System.out.println(mp.getURI()); 
    } // this code returns 2 individuals with the help of reasoner 
+0

Cảm ơn Mikae! Rất hữu ích! Nó sẽ là tuyệt vời nếu bạn có thể bao gồm các tập tin OWL & Rùa của bạn quá :-) –

+0

không ai biết làm thế nào để mở rộng này với các quy tắc riêng được nạp từ một tập tin? – Macilias

Các vấn đề liên quan