1. Trang chủ
  2. » Luận Văn - Báo Cáo

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

46 1,3K 11

Đ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

Thông tin cơ bản

Định dạng
Số trang 46
Dung lượng 836,45 KB

Nội dung

Trong chương này, chúng tôi cung cấp một vài ví dụ, từ HelloWorld, đến các thao tác cơ bản mà bạn có thể sẽ gặp phải đối với bất kỳ các ứng dụng trênSemantic Web, bao gồm cả các hoạt độn

Trang 1

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

Một phần của chương trước đã trình bày tổng quan về các frameworkphát triển có sẵn Chương này tập trung vào Jena là một ví dụ cụ thể cũng nhưmôi trường phát triển chính của chúng tôi

Trong chương này, chúng tôi cung cấp một vài ví dụ, từ HelloWorld, đến

các thao tác cơ bản mà bạn có thể sẽ gặp phải đối với bất kỳ các ứng dụng trênSemantic Web, bao gồm cả các hoạt động của mô hình RDF, xử lý đồ thị RDF

và khả năng suy luận Mục tiêu không phải chỉ để chỉ ra cách sử dụngframework phát triển Jena, mà còn bổ sung các classes Java vào bộ công cụriêng của bạn, và tái sử dụng chúng trong công tác phát triển trong tương lai củabạn

Lưu ý Jena là một API cho các ứng dụng Java Web ngữ nghĩa Do đóchương này giả định rằng 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úng tôi chưa phát triển các ứng dụng trên SemanticWeb Tuy nhiên, dựa vào những gì chúng ta đã học về Semantic Web, chúng tanhận ra rằng bất kỳ ứng dụng Web có ngữ nghĩa có thể xử lý các tác vụ thôngthường như sau:

• Đọc / phân tích các tài liệu RDF

• Viết / tạo các tài liệu RDF

• Định vị / tìm kiếm thông qua một đồ thị RDF

• Truy vấn một bộ dữ liệu RDF bằng SPARQL

• Suy luận sử dụng các ontology OWL

Để có thể sử dụng Jena API, bước đầu tiên là tải về các gói Jena, và bướcthứ hai là để thiết lập một môi trường phát triển Java để sử dụng các gói

Trang 2

Jena Hai bước này được trình bày chi tiết trong phần này Môi trường phát triểnJava được sử dụng là Eclipse.

15.1.2 Getting the Jena Package

Truy cập đường link (http://jena.apache.org/) để đến trang chủ Jena

Để tải về các gói Jena, nhấp vào liên kết tải về trên trang web, và làmtheo hướng dẫn Phiên bản sử dụng ở đây là bản 2.6.0, tuy nhiên các phiên bảncao hơn đều có thể sử dụng được

Sau khi tải về xong, bạn sẽ tìm thấy một tập tin zip có tên Jena-2.xx trên

ổ cứng Giải nén tập tin này để tạo ra một thư mục gói Jena trên ổ cứng củabạn Lưu ý rằng Jena là một thư viện để viết các ứng dụng dựa trên RDF và tàiliệu OWL Nó chỉ được sử dụng trong lập trình như là một tập hợp các APIs, vàkhông có giao diện đồ họa cho Jena Các thành phần cốt lõi của Jena được lưutrữ trong thư mục \lib

Để sử dụng các thư viện Jena, cần phải thêm tất cả các file jar liên quan

vào biến classpath.

Ví dụ đối với Windows XP, các biến classpath được chứa trong hai loại: loại SystemVariables và loại UserVariables Thông thường chỉ cần thay đổi giá trị biến UserVariables là đủ.

Để làm như vậy, nhấp chuột phải vào biểu tượng My Computer, nhấp chọn vào Properties, để hiện ra cửa sổ System Properties Trong cửa sổ này, click vào tab Advanced, và sau đó nhấp vào nút Environment Variables, trong

đó sẽ đưa bạn đến cửa sổ nơi bạn có thể chỉnh sửa các biến classpath chứa trong loại UserVariables.

15.1.3 Using Jena in Your Projects

Sau khi thiết lập môi trường Jena, cần phải tích hợp các gói Jena vào cácEclipse project để sử dụng được framework Jena

Trang 3

15.1.3.1 Using Jena in Eclipse

Sự khác biệt giữa một project thuần Java và một project Java sử dụng thưviện Jena đó là Eclipse cần biết đường dẫn để tìm các tập tin thư viện Jena đểtham chiếu đến Khi đó, nó có thể tải các class tương ứng từ thư viện để sử dụngtrong các project

Một cách để thực hiện điều này là để tạo ra một thư mục \lib trong projectworkspace, sao chép các tập tin thư viện Jena vào thư mục \lib này và sau đó bổsung thư mục \lib này vào đường dẫn để build project

Tuy nhiên, một giải pháp khác có thể được sử dụng đó là tạo thư việnngười sử dụng (user library)

Trong Eclipse, một thư viện người sử dụng một thư viện do người dùng

tự định nghĩa (một tập hợp các files jar) và có thể sử dụng cho nhiều projectkhác nhau Việc cập nhật phiên bản Jena cũng đơn giản hơn vì chỉ cần phải cậpnhật user library

Để cấu hình một user library, mở Eclipse và chọn Window từ thanh công

cụ Chọn Preferences Từ cửa sổ mở ra, chọn Java ở menu bên trái, và chọn Build Path Khi Build Path được mở, chọn User Libraries như hình 15.1.

Bấm New để tạo một user library mới, nhập jena làm tên thư viện, và nhấn OK Sau đó, nhấn vào Add JARS, trỏ đến thư mục chứa các file jar trong thư mục \lib Nhấn Open, và user library đã được tạo ra.

Hình 15.1 Thiết lập khuôn khổ Jena như một thư viện sử dụng trongEclipse

Trang 4

15.1.3.2 HelloWorld! from a Semantic Web Application

Chúng ta sẽ thực hiện ví dụ HelloWorld để khảo sát việc xây dựng một

project sử dụng framework Jena cho Semantic Web

Ví dụ HelloWorld như sau: chúng ta sẽ tạo ra một tài liệu RDF đơn giản

đó chỉ chứa một tài liệu RDF, khai báo như sau:

subject: http://example.org/test/message

property: http://example.org/test/says

object: Hello World!

Khởi động Eclipse, tạo một project mới là HelloWorld, tạo một class tên HelloWorld.java.

Nhập vào đoạn code bên dưới (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 =

Trang 5

8a: model.createResource(nameSpace + "message");

Trang 6

Hình 15.3 Sử dụng framework Jena như một user library

Sau khi nhập đoạn code, Eclipse sẽ báo lỗi Ví dụ, nó không nhận

ra Model, ModelFactory, Resource và Property Rõ ràng, những định nghĩa này

đã có trong Jena, tuy nhiên Eclipse vẫn chưa nhận ra Bây giờ chúng ta cần phảichỉ cho Eclipse rằng các thư viện dùng chúng ta vừa tạo ra có chứa các địnhnghĩa rằng nó cần; chúng ta làm điều này bằng cách thêm các user library đểbuild project

Để làm điều đó, nhấp chuột phải vào HelloWorld project trong cửa sổ

Project Explorer, chọn Properties, tìm đến Java Build Path và chọn

tab Libraries (Hình 15.3).

Chọn Add Library để hiện cửa sổ như hình 15.4.

Chọn User Library, và nhấn Next; chọn jena và nhấn Finish để thêm user

library như trong hình 15.5

Nhấn OK trong cửa sổ Properties for HelloWorld để hoàn thành Bạn có thể thấy thư viện jena đã xuất hiện trong cửa sổ Project Explorer.

Trang 7

Tuy nhiên, lỗi vẫn còn hiển thị Thực tế, Eclipse chờ chúng ta sử dụng

các khai báo import thích hợp để nó có thể tìm thấy các định nghĩa cho các lớp Model, ModelFactory, Resource và Property như ở Hình 15.2

Hình 15.4 Sử dụng framework Jena như một user library (cont.)

Hình 15.5 Sử dụng framework Jena như một user library (bước cuối

cùng)

Trang 8

Hình 15.2 Import statements in our HelloWorld project

Trang 9

15.2 Basic RDF Model Operations

Trong phần này, chúng ta sẽ sử dụng Jena để thực hiện một số chức năng

cơ bản, đơn giản là tạo các mô hình RDF trong bộ nhớ hoặc đọc vào bộ nhớ từcác URL hay file hệ thống

15.2.1 Creating an RDF Model

Trong phần này, chúng tôi tạo ra một mô hình RDF từ đầu và sau đóthêm các các khai báo cho nó Để đơn giản, chúng ta sẽ tạo mô hình biểu diễnFOAF, như trong Hình 15.5

Hình 15.5 The author’s FOAF document

Trang 10

21a: rdf:resource="http://www.ilrt.bris.ac.uk/~ecemm/"/> 22: </foaf:Person>

Và mã nguồn như trong Hình 15.6

Hình 15.6 Create a new RDF model and add statements to it

Trang 11

13: Model model = ModelFactory.createDefaultModel();

24a: model.createResource("http://www.liyangyu.com")); 25: subject.addProperty(FOAF.workplaceHomepage,

25a: model.createResource("http://www.delta.com")); 26: subject.addProperty(FOAF.topic_interest,

Trang 12

Trong Jena, các class biểu diễn như sau:

• Class Literal biểu diễn tân ngữ

Để tạo chủ ngữ, gọi hàm createResource() (dòng 17) Hàm truyền vào

URI như định danh

Để tạo thuộc tính cho đối tượng, gọi hàm Resource.addProperty() (từ

dòng 19-27) Hàm này truyền vào hai tham số: tên thuộc tính và giá trị thuộctính

Trong trường hợp Jena không hỗ trợ FOAF, dòng 19 có thể được viết lạinhư sau:

Trang 13

(model.createProperty("http://xmlns.com/foaf/0.1/name"),

"liyang yu");

Như vậy chúng ta đã hoàn tất việc tạo mô hình RDF Tiếp theo chúng ta

sẽ chạy chương trình để kiểm tra kết quả

Cho chạy class java này, bạn sẽ nhận được các kết quả như trong Hình15.7

Trang 14

RDF/XML-model.write(new PrintWriter(System.out), "RDF/XML-ABBREV");Chạy chương trình một lần nữa, và bạn sẽ thấy những kết quả như trongHình 15.8.

Hình 15.8 A better output generated from Hình 15.6

Trang 15

So với việc tạo ra một mô hình RDF, việc đọc một tài liệu RDF đưa vào

bộ nhớ là một hoạt động thường xuyên hơn Trước khi thao tác trên RDF, cầnphải đọc nó từ một địa chỉ URL cho trước nào đó, và lưu nó vào bộ nhớ

Đoạn mã của hoạt động đọc như Hình 15.9, đọc tài liệu FOAF từ URLhttp://liyangyu.com/foaf.rdf, và để hiển thị một cách chính xác, nó được lưu lạidưới định dạng Turtle

Hình 15.9 Reading an RDF document from a given URL

Trang 16

Hình 15.10 cho kết quả khi chạy đoạn mã trên.

Hình 15.10 Output generated from Hình 15.9

] ;

foaf:mbox_sha1sum

"1613a9c3ec8b18271a8fe1f79537a7b08803d896"@en ; foaf:name "liyang yu"@en ;

Trang 17

foaf:title "Dr"@en ; foaf:topic_interest

<http://dbpedia.org/resource/Semantic_Web> ; foaf:workplaceHomepage

<http://www.delta.com>

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

Trang 19

31: // show all the classes and their instances

32: System.out.println("the following types/classes have

32a: been used in this RDF document(with their instances):");

39: Resource instanceRes = resources.nextResource(); 40: if ( instanceRes.isAnon() ) {

41: System.out.println(" [anonymous instance] " + 41a: instanceRes.getId());

Trang 20

49: }

Dòng 15 xác định URL của các tài liệu RDF chúng ta muốn đọc, và dòng

19 và 20 thực hiện việc đọc các tài liệu RDF vào bộ nhớ của mô hình Dòng

23-29 hiển thị tất cả các namespaces (và các prefixes) đã được sử dụng trong tàiliệu Hàm getNsPrefixMap() (dòng 24) trả về một tập các cặp key-value; đối vớimỗi cặp, key là các prefixes và value là namespaces Như bạn thấy, dòng 27 vàdòng 28 sẽ in các prefixes và namespaces

Để tìm tất cả các kiểu/class được tham chiếu trong mô hình này,

hàm ListObjectsOfProperty() được sử dụng (dòng 33) Hàm này sử dụng một

thuộc tính (property) như tham số đầu vào của nó (trong trường hợp này,property này là RDF.type):

subject rdf:type object

Sau khi thực hiện, hàm ListObjectsOfProperty() trả về một nhóm các lớp.

Để tìm tất cả các resources của mỗi lớp, ta sử dụng

hàm ListResourcesWithProperty() như dòng 37 Hàm này có hai tham số truyền

vào là thuộc tính và loại đối tượng, và trong trường hợp này, RDF.type là thuộctính và typeRes là đối tượng Nó sẽ tìm các trường hợp có dạng như sau:

subject rdf:type typeRes

Khi được tìm thấy, hàm sẽ trả về các resources Dòng 38-44 sẽ hiển thị tất

cả các resources

Lưu ý rằng một số resource có thể trống (blank) Để kiểm tra điều này, cóthể sử dụng hàm isAnon() (dòng 40) Nếu resource biểu diễn một node trống, tadùng getId() được gọi để lấy định danh của nó; nếu không, có thể sử dụnghàm getURI() (dòng 43)

Chạy đoạn mã và cho ra kết quả như Hình 15.13

Hình 15.13 Output generated from Hình 15.12 with the author’s FOAFdocument

Trang 21

1: prefix:rdfs, namespace:http://www.w3.org/2000/01/rdf-schema#

2: prefix:rdf, 2a: namespace:http://www.w3.org/1999/02/22-rdf-syntax-ns#

3: prefix:foaf, namespace:http://xmlns.com/foaf/0.1/

4: the following types/classes have been used in this RDF 4a: document (with their instances):

5: (class/type) http://xmlns.com/foaf/0.1/Person 6: [anonymous instance] -6aa9a0b:12454881133:-8000 7: [instance] http://www.liyangyu.com/foaf.rdf#liyang

Như bạn có thể thấy, dòng 1-3 hiển thị các prefixes và namespaces, dòng

5 hiển thị class duy nhất (foaf: Person) được sử dụng trong tài liệu này, và dòng

6 và 7 là hai trường hợp của class đó

Chúng ta có thể thử một số file khác có nhiều nội dung hơn tài liệu FOAFtrên Ví dụ,

http://dbpedia.org/data/Roger_Federer.rdf

Bạn cần thay đổi dòng 15 của Hình 15.12 như sau:

public static final String RDF_FILE =

"http://dbpedia.org/data/Roger_Federer.rdf";

Hình 15.14 cho thấy một phần của kết quả

Hình 15.14 Understanding Federer’s RDF document generated byDbpedia

Trang 22

(class/type) http://dbpedia.org/class/yago/AustralianOpenChampions [instance] http://dbpedia.org/resource/Roger_Federer (class/type) http://dbpedia.org/ontology/Athlete [instance] http://dbpedia.org/resource/Roger_Federer (class/type) http://dbpedia.org/ontology/TennisPlayer [instance] http://dbpedia.org/resource/Roger_Federer (class/type) http://dbpedia.org/class/yago/LivingPeople [instance] http://dbpedia.org/resource/Roger_Federer (class/type) http://xmlns.com/foaf/0.1/Person [instance] http://dbpedia.org/resource/Roger_Federer

Dựa trên kết quả này, cho dù không đọc các tài liệu RDF này, chúng tôi

đã thu được khá nhiều thông tin về nó đã Bên cạnh đó sự hiểu biết các loạithông tin cho các nguồn tài nguyên, chúng ta cũng có thể kiểm tra các thuộctính xác định cho nó Trong số tất cả các thuộc tính, sau ba là mối quan tâm đặcbiệt đến với chúng tôi:

Trang 24

35: // show all the classes and their instances

51:

52: // show all instances that have a owl:sameAs property 53: System.out.println("\nfollowing instances have

53a: owl:sameAs property:");

54: StmtIterator statements = model.HìnhStatements

54a: ((Resource)null,OWL.sameAs,(RDFNode)null); 55: while ( statements.hasNext() ) {

56: Statement statement = statements.nextStatement(); 57: Resource subject = statement.getSubject();

58: if ( subject.isAnon() ) {

59: System.out.print(" (" + subject.getId() + ")"); 60: } else {

Trang 25

Hàm sư dụng ở đây là HìnhStatements() như trên dòng 54 Ta truyền giátrị null cho cả subject và object, do đó kết quả tìm được đều liên quan đến truyvấn owl:sameAs.

Bây giờ chạy lại đoạn code, và chúng ta sẽ thấy kết quả như trong Hình15.16

Hình 15.16 Part of the output from Hình 15.15

the following instance(s) has/have owl:sameAs property:

(http://dbpedia.org/resource/Roger_Federer) OWL.sameAs (http://rdf.freebase.com/ns/guid.9202a8c04000641f800000000019f52) (http://mpii.de/yago/resource/Roger_Federer) OWL.sameAs

(http://dbpedia.org/resource/Roger_Federer)

15.3 Handling Persistent RDF Models

15.3.1 From In-Memory Model to Persistent Model

Cho đến thời điểm này, chúng tôi đã được làm việc với bộ nhớ trong môhình Những mô hình này được tạo ra từ đầu, hoặc là từ các tập tin phổ biếnhiện có Các tập tin có thể được đặt trong một hệ thống tập tin địa phương, hoặc

có thể được tải về từ các URL nhất định

Mặc dù trong bộ nhớ mô hình là khá hữu ích, họ có một số nhượcđiểm Một vài điểm:

• Các mô hình RDF có được repopulated từ đầu mỗi khi khởi chạy ứngdụng, do đó đòi hỏi một thời gian khởi động lâu hơn

• Bất kỳ thay đổi được thực hiện cho các mô hình trong bộ nhớ sẽ bị mấtkhi ứng dụng được đóng cửa

• Các ứng dụng dựa trên bộ nhớ trong mô hình sẽ không quy mô nhưchúng tôi bắt đầu làm việc với các mô hình lớn hơn

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

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w