Sử dụng Jena để phát triển Web ngữ nghĩa

46 1.3K 11
Sử dụng Jena để phát triển Web ngữ nghĩa

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Chapter 15: Sử dụng Jena để phát triển Web ngữ nghĩa Một phần chương trước trình bày tổng quan framework phát triển có sẵn Chương tập trung vào Jena ví dụ cụ thể môi trường phát triển Trong chương này, cung cấp vài ví dụ, từ HelloWorld, đến thao tác mà bạn gặp phải ứng dụng Semantic Web, bao gồm hoạt động mô hình RDF, xử lý đồ thị RDF khả suy luận Mục tiêu để cách sử dụng framework phát triển Jena, mà bổ sung classes Java vào công cụ riêng bạn, tái sử dụng chúng công tác phát triển tương lai bạn Lưu ý Jena API cho ứng dụng Java Web ngữ nghĩa Do chương giả định bạn quen thuộc với ngôn ngữ lập trình Java 15.1 Jena: A Semantic Web Framework for Java 15.1.1 What Is Jena and What Can It Do for Us? Tại thời điểm này, chưa phát triển ứng dụng Semantic Web Tuy nhiên, dựa vào học Semantic Web, nhận ứng dụng Web có ngữ nghĩa xử lý tác vụ thông thường sau: • Đọc / phân tích tài liệu RDF • Viết / tạo tài liệu RDF • Định vị / tìm kiếm thông qua đồ thị RDF • Truy vấn liệu RDF SPARQL • Suy luận sử dụng ontology OWL Để sử dụng Jena API, bước tải gói Jena, bước thứ hai để thiết lập môi trường phát triển Java để sử dụng gói Jena Hai bước trình bày chi tiết phần Môi trường phát triển Java sử dụng Eclipse 15.1.2 Getting the Jena Package Truy cập đường link (http://jena.apache.org/) để đến trang chủ Jena Để tải gói Jena, nhấp vào liên kết tải trang web, làm theo hướng dẫn Phiên sử dụng 2.6.0, nhiên phiên cao sử dụng Sau tải xong, bạn tìm thấy tập tin zip có tên Jena-2.xx ổ cứng Giải nén tập tin để tạo thư mục gói Jena ổ cứng bạn Lưu ý Jena thư viện để viết ứng dụng dựa RDF tài liệu OWL Nó sử dụng lập trình tập hợp APIs, giao diện đồ họa cho Jena Các thành phần cốt lõi Jena lưu trữ thư mục \lib Để sử dụng thư viện Jena, cần phải thêm tất file jar liên quan vào biến classpath Ví dụ Windows XP, biến classpath chứa hai loại: loại SystemVariables loại UserVariables Thông thường cần thay đổi giá trị biến UserVariables đủ Để làm vậy, nhấp chuột phải vào biểu tượng My Computer, nhấp chọn vào Properties, để cửa sổ System Properties Trong cửa sổ này, click vào tab Advanced, sau nhấp vào nút Environment Variables, đưa bạn đến cửa sổ nơi bạn chỉnh sửa biến classpath chứa loại UserVariables 15.1.3 Using Jena in Your Projects Sau thiết lập môi trường Jena, cần phải tích hợp gói Jena vào Eclipse project để sử dụng framework Jena 15.1.3.1 Using Jena in Eclipse Sự khác biệt project Java project Java sử dụng thư viện Jena Eclipse cần biết đường dẫn để tìm tập tin thư viện Jena để tham chiếu đến Khi đó, tải class tương ứng từ thư viện để sử dụng project Một cách để thực điều để tạo thư mục \lib project workspace, chép tập tin thư viện Jena vào thư mục \lib sau bổ sung thư mục \lib vào đường dẫn để build project Tuy nhiên, giải pháp khác sử dụng tạo thư viện người sử dụng (user library) Trong Eclipse, thư viện người sử dụng thư viện người dùng tự định nghĩa (một tập hợp files jar) sử dụng cho nhiều project khác Việc cập nhật phiên Jena đơn giản cần phải cập nhật user library Để cấu hình user library, mở Eclipse chọn Window từ công cụ Chọn Preferences Từ cửa sổ mở ra, chọn Java menu bên trái, chọn Build Path Khi Build Path mở, chọn User Libraries hình 15.1 Bấm New để tạo user library mới, nhập jena làm tên thư viện, nhấn OK Sau đó, nhấn vào Add JARS, trỏ đến thư mục chứa file jar thư mục \lib Nhấn Open, user library tạo Hình 15.1 Thiết lập khuôn khổ Jena thư viện sử dụng Eclipse 15.1.3.2 HelloWorld! from a Semantic Web Application Chúng ta thực ví dụ HelloWorld để khảo sát việc xây dựng project sử dụng framework Jena cho Semantic Web Ví dụ HelloWorld sau: tạo tài liệu RDF đơn giản chứa tài liệu RDF, khai báo sau: subject: http://example.org/test/message property: http://example.org/test/says object: Hello World! Khởi động Eclipse, tạo project HelloWorld, tạo class tên HelloWorld.java Nhập vào đoạn code bên (Hình 15.1) 1: public class HelloWorld { 2: 3: static private String nameSpace = "http://example.org/test/"; 4: 5: public static void main(String[] args) { 6: Model model = ModelFactory.createDefaultModel(); 7: 8: Resource subject = 8a: model.createResource(nameSpace + "message"); 9: Property property = 9a: model.createProperty(nameSpace + "says"); 10: subject.addProperty(property, 10a: "Hello World!",XSDDatatype.XSDstring); 11: 12: model.write(System.out); 13: } 14: 15:} Hình 15.1 HelloWorld.java Hình 15.2 Thiết lập framework Jena user library Eclipse (cont.) Hình 15.3 Sử dụng framework Jena user library Sau nhập đoạn code, Eclipse báo lỗi Ví dụ, không nhận Model, ModelFactory, Resource Property Rõ ràng, định nghĩa có Jena, nhiên Eclipse chưa nhận Bây cần phải cho Eclipse thư viện dùng vừa tạo có chứa định nghĩa cần; làm điều cách thêm user library để build project Để làm điều đó, nhấp chuột phải vào HelloWorld project cửa sổ Project Explorer, chọn Properties, tìm đến Java Build Path chọn tab Libraries (Hình 15.3) Chọn Add Library để cửa sổ hình 15.4 Chọn User Library, nhấn Next; chọn jena nhấn Finish để thêm user library hình 15.5 Nhấn OK cửa sổ Properties for HelloWorld để hoàn thành Bạn thấy thư viện jena xuất cửa sổ Project Explorer Tuy nhiên, lỗi hiển thị Thực tế, Eclipse chờ sử dụng khai báo import thích hợp để tìm thấy định nghĩa cho lớp Model, ModelFactory, Resource Property Hình 15.2 Hình 15.4 Sử dụng framework Jena user library (cont.) Hình 15.5 Sử dụng framework Jena user library (bước cuối cùng) Hình 15.2 Import statements in our HelloWorld project import com.hp.hpl.jena.datatypes.xsd.XSDDatatype; 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.Resource; Bây giờ, chạy project, bạn có kết Hình 15.3 Hình 15.3 HelloWorld output Hello World! Xin chúc mừng, ứng dụng Web ngữ nghĩa bạn sử dụng Jena Đối với mô hình RDF trên, có khai báo, làm cho trông tốt cách thay đổi dòng 12 Hình 15.1 để làm cho trông này: 12: model.write(System.out,"Turtle"); Chạy lại project lần Bạn nhận kết Hình 15.4 Hình 15.4 A better output from HelloWorld project "Hello World!"^^ 15.2 Basic RDF Model Operations Trong phần này, sử dụng Jena để thực số chức bản, đơn giản tạo mô hình RDF nhớ đọc vào nhớ từ URL hay file hệ thống 15.2.1 Creating an RDF Model Trong phần này, tạo mô hình RDF từ đầu sau thêm các khai báo cho Để đơn giản, tạo mô hình biểu diễn FOAF, Hình 15.5 Hình 15.5 The author’s FOAF document 1: 2: 6: 7: 8: liyang yu 9: Dr 10: liyang 11: yu 12: 13: 14: 15: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: Và mã nguồn Hình 15.6 Hình 15.6 Create a new RDF model and add statements to it 1: import java.io.PrintWriter; 2: import com.hp.hpl.jena.rdf.model.Model; 3: import com.hp.hpl.jena.rdf.model.ModelFactory; 4: import com.hp.hpl.jena.rdf.model.Resource; 5: import com.hp.hpl.jena.sparql.vocabulary.FOAF; 6: import com.hp.hpl.jena.vocabulary.RDF; 7: import com.hp.hpl.jena.vocabulary.RDFS; 8: 9: public class MyFOAFModel { 10: 11: 12: public static void main(String[] args) { Rõ ràng, tất tạo khuôn khổ Jena, nhu cầu cho làm điều với họ Tuy nhiên, tò mò, luôn kiểm tra số họ Nếu làm vậy, khám phá điều sau đây: • Table jena_g1t1_stmt holds all the statements contained in my FOAF document • Table jena_graph holds all the models in the database Ví dụ, để kiểm tra bên bảng jena_graph, làm sau: mysql> select * from myfoafmodel.jena_graph; +——+—————————+ | ID | Name | +——+—————————+ | | myFoafRDF| +——+—————————+ Như bạn thấy, tài liệu FOAF mô hình sở liệu, xem làm để thêm mô hình khác vào sở liệu phần Trước di chuyển trên, làm tập để đạt hiểu biết nhiều mô hình liên tục Đầu tiên, thêm dòng sau vào mã hiển thị Hình 15.17, chắn bạn thêm dòng sau dòng 46 Hình 15.17: // update the model m.getResource("http://www.liyangyu.com/foaf.rdf#liyang").addProperty( FOAF.nick,"laoyu"); Chạy mã lần với dòng lệnh thêm vào, sau tắt ứng dụng bạn Bây giờ, cập nhật trên, bạn thực cho mô hình lưu sở liệu Để thấy điều này, sử dụng MySQL Command Line Client để kiểm tra bảng jena_g1t1_stmt, bạn thấy cập nhật bạn thực mô hình lại sở liệu 15.3.3.2 Multiple Persistent RDF Models Trong phần trước, học làm để tải tài liệu RDF vào sở liệu backend để làm cho mô hình RDF ổn định Tuy nhiên, ứng dụng thực tế thường liên quan đến số tài liệu RDF, bao gồm thẩm thể học tập Để xử lý tình trạng này, sở liệu Jena lưu trữ nhiều mô hình, thông thường, mô hình biểu diễn tập bảng sở liệu Hãy cho lần sử dụng tài liệu FOAF ví dụ Chúng tải vào sở liệu phần trước, phần này, load ontology FOAF vào sở liệu tương tự Vì vậy, sở liệu tổ chức hai mô hình Hình 15.18 cho thấy cách thực Hình 15.18 Load the author’s FOAF document and FOAF ontology to make them persistent models 1: import com.hp.hpl.jena.db.DBConnection; 2: import com.hp.hpl.jena.db.IDBConnection; 3: import com.hp.hpl.jena.rdf.model.Model; 4: import com.hp.hpl.jena.rdf.model.ModelFactory; 5: import com.hp.hpl.jena.rdf.model.ModelMaker; 6: import com.hp.hpl.jena.rdf.model.Property; 7: import com.hp.hpl.jena.rdf.model.Resource; 8: import com.hp.hpl.jena.rdf.model.Statement; 9: import com.hp.hpl.jena.rdf.model.StmtIterator; 10: import com.hp.hpl.jena.util.FileManager; 11: import com.hp.hpl.jena.util.PrintUtil; 12: 13: public class DBModelTester { 14: 15: public static final String RDF_FILE = 15a: "http://www.liyangyu.com/foaf.rdf"; 16: public static final String ONTOLOGY_FILE = 16a: "http://xmlns.com/foaf/0.1/"; 17: 18: private static String className = "com.mysql.jdbc.Driver"; 19: private static String DB_URL = 19a: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 33a: 34: 35: 36: 37: 38: "jdbc:mysql://localhost:3306/myFoafModel"; private static String DB_USER = "root"; private static String DB_PASSWD = "passwd"; private static String DB_TYPE = "MySQL"; private static String DOCUMENT_NAME = "myFoafRDF"; private static String ONTOLOGY_NAME = "foaf.owl"; public static void main( String[] args ) { IDBConnection conn = null; ModelMaker maker = null; try { Class.forName(className); conn = new DBConnection(DB_URL,DB_USER,DB_PASSWD,DB_TYPE); } catch (Exception e) { e.printStackTrace(); } maker = ModelFactory.createModelRDBMaker(conn); Model m = null; 39: 40: 40a: 41: 42: 43: 44: 45: 46: 47: 48: 49: 49a: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 63a: 64: 64a: 65: 66: if ( !maker.hasModel(DOCUMENT_NAME) == true ) { System.out.println( "Loading instance document – one time only" ); m = maker.createModel(DOCUMENT_NAME); FileManager.get().readModel(m,RDF_FILE); } else { m = maker.getModel(DOCUMENT_NAME); } printStatements(m, null, null, null); if ( !maker.hasModel(ONTOLOGY_NAME) ) { System.out.println( "Loading ontology document – one time only" ); m = maker.createModel(ONTOLOGY_NAME); get().readModel(m,ONTOLOGY_FILE); } else { m = maker.getModel(ONTOLOGY_NAME); } printStatements(m, null, null, null); try { conn.close(); } catch(Exception e) { e.printStackTrace(); } } private static void printStatements(Model m, Resource s, Property p, Resource o) { for (Stm tIterator i = m.HìnhStatements(s,p,o); i.hasNext(); ) { Statement stmt = i.nextStatement(); System.out.println(" - " + PrintUtil.print(stmt)); 67: 68: } } 69: } Dựa học từ Hình 15.17, Hình 15.18 không đòi hỏi nhiều lời giải thích Dòng 48-55 dòng thêm vào; họ lần kiểm tra xem ontology FOAF tồn sở liệu, có, tải vào mô hình Nếu không, họ tạo mô hình liên tục đại diện cho ontology sở liệu Sau bạn chạy mã Hình 15.18, lại sử dụng lệnh MySQL Command Line Client để kiểm tra kết Đầu tiên, bạn thấy có bảng nhiều sở liệu: mysql> show tables from myfoafmodel; +——————————————————————+ | Tables_in_myfoafmodel | +——————————————————————+ | jena_g1t0_reif | | jena_g1t1_stmt | | jena_g2t0_reif | | jena_g2t1_stmt | | jena_graph | | jena_long_lit | | jena_long_uri | | jena_prefix | | jena_sys_stmt | +——————————————————————+ Và kể từ bảng jena_graph nắm giữ tất mô hình sở liệu, có nhìn vào nội dung nó: mysql> select * from myfoafmodel.jena_graph; +——+——————————+ | ID | Name | +——+——————————+ | | myFoafRDF | | | foaf.owl | +——+——————————+ Rõ ràng, mô hình mới, foaf.owl, thêm vào sở liệu Bạn tiếp tục kiểm tra bảng để xác nhận tạo thành công hai mô hình liên tục hệ thống sở liệu chúng tôi, không bao gồm chi tiết.Nói chung, ứng dụng bạn hoạt động tài liệu RDF lớn, mô hình liên tục nên luôn xem xét, thường xuyên, họ giải pháp tốt để ứng dụng bạn 15.4 Inferencing Using Jena 15.4.1 Jena Inferencing Model Trong giới Jena, suy luận hay luận đề cập đến trình phát sinh kiện bổ sung mà cách rõ ràng văn thể hay văn thể học Các nguyên tắc reasoners sử dụng để đối tượng mã cụ thể thực thực nguồn gốc Đôi khi, reasoners gọi công cụ suy luận Jena cung cấp số reasoners cho để sử dụng Sau danh sách reasoners thường sử dụng: • Quy tắc RDFS reasoners: công cụ suy luận hỗ trợ tất entailments RDFS • OWL reasoners: reasoners mặc định hỗ trợ hầu hết thường xuyên sử dụng OWL cấu trúc Trong thực tế, reasoners coi "đầy đủ" một, chi tiết tìm thấy trang web thức Jena • OWL Mini reasoners: phiên cắt giảm "đầy đủ" OWL reasoners; • OWL Micro reasoners: nhỏ nhanh Để tìm RDFS OWL hỗ trợ cấu trúc reasoners, tham khảo trang web thức Jena, cung cấp thông tin lên up-todate Phần cho bạn điều việc sử dụng reasoners Các bước cần thiết để sử dụng reasoners cho suy luận chuẩn, tóm tắt đây: Chọn reasoners: sử dụng bước để thông báo cho hệ thống Jena mà reasoners muốn sử dụng Một cách để làm điều sử dụng ReasonerRegistry lớp; Nạp tài liệu ontology liên kết với reasoners luận, lựa chọn, reasoners biết tất kiện thể tài liệu ontology Một cách để làm điều sử dụng bindSchema() phương pháp cung cấp reasoners đối tượng Nạp thể tài liệu RDF, với reasoners , sử dụng lớp ModelFactory để tạo mô hình suy luận, mà không nạp thể liệu , có báo cáo đoán Chú ý mô hình suy luận tạo bước chứa tất kiện ban đầu từ ví dụ tài liệu ontology tài liệu, có tất báo cáo có nguồn gốc từ đại diện cho kiện khác tìm thấy reasoners Nói cách khác, ngoại trừ cho bước liệt kê trên, gọi cách rõ ràng reasoners, xây dựng mô hình suy luận, có tất 15.4.2 Jena Inferencing Examples Đối với ví dụ mã phần này, tiếp tục sử dụng tài liệu FOAF tôi, với ontology FOAF Tuy nhiên, để làm cho việc khác thú vị hơn, số thay đổi thực để tài liệu FOAF tôi, Hình 15.19 Hình 15,19 FOAF tài liệu tác giả với số thay đổi để thử nghiệm suy luận Jena 1: 2: 7: 8: 9: liyang yu 10: Dr 11: liyang 12: yu 13: 13a: 1613a9c3ec8b18271a8fe1f79537a7b08803d896 13b: 14: 15: 17: 18: 19: 20: 21: 22: 25: 26: 26a: 27: 28: 29: 30: 31: 32: 32a: 1613a9c3ec8b18271a8fe1f79537a7b08803d896 32b: 33: 34: 35: Chú ý thay đổi dòng 31-33: tài nguyên thêm vào, với nguồn tài nguyên URI đưa điều sau đây: http://www.liyangyu.com/foaf.rdf#yiding Cũng thông báo không thực tuyên bố loại tính chất ngoại trừ xác định foaf nó: sở hữu mbox_sha1sum (dòng 32), giả định giá trị tương tự dòng 13 Trong thực tế, dòng 32 chìa khóa để tài nguyên Dựa FOAF ontology, foaf: mbox_sha1sum tính nghịch đảo; nói cách khác, hai nguồn lực giữ giá trị tài sản này, hai nguồn tài nguyên này, xác định hai URI khác nhau, thực điều tương tự Kết là, mong đợi để xem kiện sau thêm vào mô hình suy luận tạo Jena: • Hai http://www.liyangyu.com/foaf.rdf#yiding URI http://www.liyangyu.com/foaf.rdf#liyang, đại sau diện cho tài nguyên giới • Do đó, http://www.liyangyu.com/foaf.rdf#yiding foaf: Person, tất thuộc tính (và giá trị) thuộc sở hữu http://www.liyangyu.com/foaf.rdf# liyang phải thật cho http://www.liyangyu.com/foaf.rdf#yiding Ví dụ, có foaf: tài sản có giá trị nhau, foaf title: tài sản có giá trị tên, vv vv Hình 15.20 cho thấy làm mô hình suy luận tạo Hình 15.20 Ví dụ thấy khả suy luận Jena 1: package test; 2: 3: import java.util.Iterator; 4: import com.hp.hpl.jena.rdf.model.InfModel; 5: import com.hp.hpl.jena.rdf.model.Model; 6: import com.hp.hpl.jena.rdf.model.ModelFactory; 7: import com.hp.hpl.jena.rdf.model.Property; 8: import com.hp.hpl.jena.rdf.model.Resource; 9: import com.hp.hpl.jena.rdf.model.Statement; 10: import com.hp.hpl.jena.rdf.model.StmtIterator; 11: import com.hp.hpl.jena.reasoner.Reasoner; 12: import com.hp.hpl.jena.reasoner.ReasonerRegistry; 13: import com.hp.hpl.jena.reasoner.ValidityReport; 14: import com.hp.hpl.jena.util.FileManager; 41: ValidityReport vr = infModel.validate(); 42: if ( vr.isValid() == false ) { 43: System.out.print("ontology model validation failed."); 44: for (Iterator i = vr.getReports(); i.hasNext(); ) { 45: System.out.println(" - " + i.next()); 46: } 47: return; 48: } 49: 50: Resource yu = infModel.getResource 50a: ("http://www.liyangyu.com/foaf.rdf#yiding"); 51: System.out.println("yu *:"); 52: printStatements(infModel, yu, null, null); 53: 54: } 55: 56: private static void printStatements(Model m,Resource 56a: s,Property p,Resource o) { 57: for (StmtIterator i = m.HìnhStatements(s,p,o); 57a: i.hasNext(); ) { 58: Statement stmt = i.nextStatement(); 59: System.out.println(" - " + PrintUtil.print(stmt)); 60: 61: } 62: } } Hình 15.20 nên dễ dàng để làm theo đồ cho bước cần thiết để tạo mô hình suy luận sử dụng Jena (xem Sect 15.4.1) Cụ thể hơn, dòng 34 đồ để bước 1, dòng 30-31 dòng 35 thực bước 2, dòng 25-26 dòng 38 bước cuối Một lần nữa, dòng 38 thực hiện, mô hình suy luận infModel chưa kiện ban đầu kiện phát sinh Để xem kiện có nguồn gốc, hỏi tất thật nguồn tài nguyên xác định http://www.liyangyu.com/foaf.rdf#yiding, hy vọng nhìn thấy nhiều kiện bổ sung tài nguyên Điều thực đường 50-52, với giúp đỡ từ phương pháp printStatements() (dòng 5661), mà không đòi hỏi nhiều lời giải thích Bây giờ, chạy mã Hình 15.20 Hình 15.21 cho thấy số kiện phát sinh (số dòng thêm vào cho mục đích giải thích) Hình 15.21 nguồn gốc thật Yiding tài nguyên 1: - (http://www.liyangyu.com/foaf.rdf#yiding owl:sameAs http://www.liyangyu.com/foaf.rdf#liyang) 2: - (http://www.liyangyu.com/foaf.rdf#yiding rdf:type http://xmlns.com/foaf/0.1/Person) 3: - (http://www.liyangyu.com/foaf.rdf#yiding rdfs:label 'liyang yu') 4: - (http://www.liyangyu.com/foaf.rdf#yiding foaf:name 'liyang yu') 5: - (http://www.liyangyu.com/foaf.rdf#yiding foaf:knows 3550803e:1245b5759eb:-8000) 6: - (http://www.liyangyu.com/foaf.rdf#yiding foaf:family_name 'yu') 7: - (http://www.liyangyu.com/foaf.rdf#yiding foaf:givenname 'liyang') 8: - (http://www.liyangyu.com/foaf.rdf#yiding foaf:title 'Dr') 9: - (http://www.liyangyu.com/foaf.rdf#yiding foaf:topic_interest http://dbpedia.org/resource/Semantic_Web) 10: - (http://www.liyangyu.com/foaf.rdf#yiding foaf:homepage http://www.liyangyu.com) 11: - (http://www.liyangyu.com/foaf.rdf#yiding foaf:workplaceHomepage http://www.delta.com) Rõ ràng, công cụ suy luận công nhận thành công mà hai nguồn tài nguyên đối tượng giới thực (dòng 1), giao tất tài sản thuộc sở hữu http://www.liyangyu.com/foaf.rdf#liyang để nguồn tài nguyên xác định http://www.liyangyu.com/foaf.rdf#yiding, thể dòng 2-11 Hiểu bên cạnh bước việc sử dụng công cụ suy luận, thực lựa chọn số cấu hình reasoners khác Ví dụ, dòng 34 Danh sách 15.20 hỏi OWL reasoners từ Jena, tham số truyền cho gọi, OWL mặc định reasoners (phiên "đầy đủ") trả Để yêu cầu reasoners OWL mặc định, bạn cần giúp đỡ lớp học quan trọng gọi OntModelSpec, mà giấu phức tạp việc cấu hình mô hình suy luận.Cụ thể hơn, số đối tượng phổ biến mà đại diện cho cấu hình khác predeclared số OntModelSpec Bảng 15.1 cho thấy số cấu hình (đối với danh sách đầy đủ, tham khảo tài liệu thức Jena) Để tạo mô hình suy luận với đặc điểm kỹ thuật mong muốn, lớp ModelFactory nên sử dụng, với cấu hình predeclared tài liệu ví dụ, Hình 15.22 Một lần nữa, Hình 15.22 hoàn thành xác điều tương tự Hình 15.20 gì, với linh hoạt việc lựa chọn riêng bạn cấu hình reasoners Bảng 15.1 reasoners cấu hình sử dụng OntModelSpec Liệt kê 15.22 Sử dụng ontModelSpec để tạo mô hình ontology 1: package test; 2: 3: import java.util.Iterator; 4: import com.hp.hpl.jena.ontology.OntModel; 5: import com.hp.hpl.jena.ontology.OntModelSpec; 6: import com.hp.hpl.jena.rdf.model.Model; 7: import com.hp.hpl.jena.rdf.model.ModelFactory; 8: import com.hp.hpl.jena.rdf.model.Property; 9: import com.hp.hpl.jena.rdf.model.Resource; 10: import com.hp.hpl.jena.rdf.model.Statement; 11: import com.hp.hpl.jena.rdf.model.StmtIterator; 12: import com.hp.hpl.jena.reasoner.ValidityReport; 13: import com.hp.hpl.jena.util.FileManager; 14: import com.hp.hpl.jena.util.PrintUtil; 15: 16: public class InfModelTester { 17: 18: public static final String RDF_FILE = 18a: "c:/liyang/myWebsite/currentPage/foaf.rdf"; 19: public static final String OWL_FILE = 19a: "http://xmlns.com/foaf/0.1/"; 20: 21: public static void main( String[] args ) { 22: 23: // load instance data 24: 25: 26: Model data = ModelFactory.createDefaultModel(); FileManager.get().readModel(data,RDF_FILE); // use data.read() if reading from Web URL 27: 28: 29: 29a: 30: 31: 32: 33: 34: 40: 41: 42: 42a: 43: 44: 45: 46: 47: 48: 48a: 53: // create my ontology model OntModel ontModel = ModelFactory.createOntologyModel (OntModelSpec.OWL_MEM_RULE_INF,data); ontModel.read(OWL_FILE); // some validation to make us happy ValidityReport vr = ontModel.validate(); if ( vr.isValid() == false ) { } Resource yu = ontModel.getResource ("http://www.liyangyu.com/foaf.rdf#yiding"); System.out.println("yu *:"); printStatements(ontModel, yu, null, null); } private static void printStatements(Model m,Resource s, Property p,Resource o) { } 54: } Như bạn nói, cách tiếp cận khác so với hiển thị Hình 15.20 Thay sử dụng ModelFactory.createDefaultModel(), dòng 29 tạo mô hình ontology, sử dụng cấu hình OntModelSpec.OWL_MEM_RULE_INF với tài liệu ví dụ Sau dòng 30 thực thi, mô hình ontology hoàn chỉnh bao gồm reasoners mong muốn, tập tin thể liệu mẫu cho reasoners để làm việc tạo So với mô hình tạo ModelFactory Phương pháp createDefaultModel(), mô hình ontology có tất báo cáo có nguồn gốc Như thí nghiệm nhỏ, thử cấu hình RDFS_MEM_RDFS_INF: thay đổi dòng 29 Danh sách 15.22 sau: OntModel ontModel = ModelFactory.createOntologyModel (OntModelSpec.RDFS_MEM_RDFS_INF,data); chạy mã, bạn thấy khác biệt Kể từ RDFS khả xử lý tài sản ngược chức năng, hầu hết kiện đoán Trong thực tế, không số báo cáo Danh sách 15.21 hiển thị 15.5 Summary Trong chương này, trình bày Jena khung ví dụ cho phát triển ứng dụng Web có ngữ nghĩa Sau hoàn thành chương này, bạn làm việc hiệu với thư viện Jena Cụ thể hơn, bạn nên • Hiểu cách thiết lập Jena làm khung phát triển mình; • Hiểu cách sử dụng thư viện Jena để tiến hành hoạt động mô hình RDF bản, chẳng hạn đọc mô hình RDF, tạo mô hình RDF thẩm vấn mô hình RDF; • Hiểu mô hình RDF dai dẳng quan trọng, làm để sử dụng thư viện Jena để tạo mô hình liên tục làm để kiểm tra mô hình tồn lâu hệ thống sở liệu lựa chọn; • Hiểu khái niệm mô hình suy luận cấu hình khác nó, làm để sử dụng thư viện Jena để tạo mô hình suy luận với cấu hình cụ thể hiểu làm để lấy lại điều khoản bắt nguồn từ mô hình suy luận Bạn thấy thêm nhiều tính cung cấp thư viện Jena hai chương tiếp theo, với bạn học đây, bạn khám phá thư viện Jena ngày riêng bạn tốt [...]... có thể sử dụng lệnh MySQL Command Line Client để kiểm tra kết quả Đầu tiên, bạn sẽ thấy có bảng bây giờ nhiều hơn trong cơ sở dữ liệu: mysql> show tables from myfoafmodel; +——————————————————————+ | Tables_in_myfoafmodel | +——————————————————————+ | jena_ g1t0_reif | | jena_ g1t1_stmt | | jena_ g2t0_reif | | jena_ g2t1_stmt | | jena_ graph | | jena_ long_lit | | jena_ long_uri | | jena_ prefix | | jena_ sys_stmt... Để xem chi tiết về nó, hãy để chúng tôi kiểm tra tất cả các bảng trong cơ sở dữ liệu này: mysql> show tables from myfoafmodel; +—————————————————————+ | Tables_in_myfoafmodel| +—————————————————————+ | jena_ g1t0_reif | | jena_ g1t1_stmt | | jena_ graph | | jena_ long_lit | | jena_ long_uri | | jena_ prefix | | jena_ sys_stmt | +—————————————————————+ Rõ ràng, đây là tất cả được tạo ra bởi các khuôn khổ Jena, ... import com.hp.hpl .jena. db.DBConnection; 2: import com.hp.hpl .jena. db.IDBConnection; 3: import com.hp.hpl .jena. rdf.model.Model; 4: import com.hp.hpl .jena. rdf.model.ModelFactory; 5: import com.hp.hpl .jena. rdf.model.ModelMaker; 6: import com.hp.hpl .jena. rdf.model.Property; 7: import com.hp.hpl .jena. rdf.model.Resource; 8: import com.hp.hpl .jena. rdf.model.Statement; 9: import com.hp.hpl .jena. rdf.model.StmtIterator;... cách rõ ràng bằng văn bản thể hiện hay văn bản thể học Các nguyên tắc reasoners được sử dụng để chỉ một đối tượng mã cụ thể thực sự thực hiện nguồn gốc Đôi khi, một reasoners cũng được gọi là một công cụ suy luận Jena cung cấp một số reasoners cho chúng tôi để sử dụng Sau đây là danh sách các reasoners thường được sử dụng: • Quy tắc RDFS reasoners: một công cụ suy luận rằng hỗ trợ hầu như tất cả các... từ các ứng dụng Đối với các nhà phát triển như chúng tôi, điều này có nghĩa là chúng ta có thể chọn một trong những cơ sở dữ liệu trên hệ thống như các lưu trữ dữ liệu, và Jena giấu các biến thể của SQL cú pháp trong cơ sở dữ liệu khác nhau bằng cách cung cấp các API có liên quan mà chúng ta có thể sử dụng Ví dụ, khi chúng ta gọi HìnhStatements() trên một mô hình cơ sở dữ liệu sao lưu, Jena sẽ xây... com.hp.hpl .jena. rdf.model.Model; import com.hp.hpl .jena. rdf.model.ModelFactory; import com.hp.hpl .jena. rdf.model.ModelMaker; import com.hp.hpl .jena. rdf.model.Property; import com.hp.hpl .jena. rdf.model.Resource; import com.hp.hpl .jena. rdf.model.Statement; import com.hp.hpl .jena. rdf.model.StmtIterator; import com.hp.hpl .jena. util.FileManager; import com.hp.hpl .jena. util.PrintUtil; public class DBModelTester... chúng ta có thể sử dụng để tìm hiểu một tài liệu RDF Hình 15.12 Understanding an RDF document 1: package test; 2: 3: import java.util.Iterator; 4: import java.util.Map; 5: 6: import com.hp.hpl .jena. rdf.model.Model; 7: import com.hp.hpl .jena. rdf.model.ModelFactory; 8: import com.hp.hpl .jena. rdf.model.NodeIterator; 9: import com.hp.hpl .jena. rdf.model.ResIterator; 10: import com.hp.hpl .jena. rdf.model.Resource;... ; foaf:workplaceHomepage Cũng có thể load một tài liệu RDF vào bộ nhớ từ một file hệ thống Để làm điều này, ta sử dụng class FileManager như Hình 15.11 Hình 15.11 Read an RDF document from local file system 1: package test; 2: 3: import com.hp.hpl .jena. rdf.model.Model; 4: import com.hp.hpl .jena. rdf.model.ModelFactory; 5: import com.hp.hpl .jena. util.FileManager;... và sau đó tắt ứng dụng của bạn Bây giờ, các bản cập nhật trên, bạn đã thực hiện cho các mô hình được lưu trong cơ sở dữ liệu Để thấy điều này, sử dụng MySQL Command Line Client để kiểm tra bảng jena_ g1t1_stmt, và bạn sẽ thấy những cập nhật bạn đã thực hiện mô hình này ở lại trong cơ sở dữ liệu 15.3.3.2 Multiple Persistent RDF Models Trong phần trước, chúng ta đã học được làm thế nào để tải một tài liệu... ResultSet rằng ứng dụng của chúng tôi có thể thao tác để lấy từng đối tượng Với giải pháp này, các mô hình RDF của chúng tôi sẽ ở lại trong cơ sở dữ liệu bất kể các ứng dụng trên hay không, và các ứng dụng truy cập vào các mô hình này thông qua API Jena mà không cần nạp các mô hình vào bộ nhớ Ngoài ra, bất cứ điều gì các ứng dụng đã thay đổi sẽ ở lại trong các mô hình, và trong thời gian tới ứng dụng bắt đầu,

Ngày đăng: 23/05/2016, 10:24

Từ khóa liên quan

Mục lục

  • 15.1 Jena: A Semantic Web Framework for Java

    • 15.1.1 What Is Jena and What Can It Do for Us?

    • 15.1.2 Getting the Jena Package

    • 15.1.3 Using Jena in Your Projects

      • 15.1.3.1 Using Jena in Eclipse

      • 15.1.3.2 HelloWorld! from a Semantic Web Application

      • 15.2 Basic RDF Model Operations

        • 15.2.1 Creating an RDF Model

        • 15.2.2 Reading an RDF Model

        • 15.2.3 Understanding an RDF Model

        • 15.3 Handling Persistent RDF Models

          • 15.3.1 From In-Memory Model to Persistent Model

          • 15.3.2 Setting up MySQL

          • 15.3.3 Database-Backed RDF Models

            • 15.3.3.1 Single Persistent RDF Model

            • 15.3.3.2 Multiple Persistent RDF Models

            • 15.4 Inferencing Using Jena

              • 15.4.1 Jena Inferencing Model

              • 15.4.2 Jena Inferencing Examples

              • 15.5 Summary

Tài liệu cùng người dùng

Tài liệu liên quan