RDF được thiết kế sao cho hệ thống máy tính có thể hiểu được và có thể đọc được thông tin, chứ không phải để trình bày dữ liệu cho người dùng.Là một thành phần của Semantic Web, được đặt
Trang 1TIỂU LUẬN BIỂU DIỄN TRI THỨC VÀ ỨNG DỤNG
Trang 2LỜI CẢM ƠN
Em xin gửi lời cảm ơn chân thành đến thầy PGS.TS Đỗ Văn Nhơn, người đã dành nhiều thời gian quý báu của mình để truyền đạt cho lớp CH CNTT K6 những kiến thức bổ ích, lý thú về biểu diễn tri thức và ứng dụng Đây là những kiến thức hết sức cần thiết cho hành trang của chúng em trong công việc nghiên cứu về lĩnh vực tin học Đặt biệt thầy đã truyền đạt các kiến thức và ví dụ minh họa rất bổ ích cho chúng em về ontology Đây chính là tiền đề, là kiến thức nền tảng đã thôi thúc
em thực hiện đề tài tiểu luận về “Tìm hiểu về RDF và ứng dụng vào lập trình Semantic Web”
Xin chân thành cảm ơn sự giúp đỡ của các bạn bè, anh chị, những người đã thảo luận và đóng góp ý kiến, giúp đỡ em tìm kiếm thông tin và động viên tinh thần cho em trong suốt quá trình thực hiện tiểu luận
Một lần nữa xin chân thành cảm ơn đến tất cả những người đã quan tâm đến tiểu luận của em Tuy nhiên, trong quá trình làm việc không thể tránh khỏi những sai sót, rất mong sự đóng góp ý kiến nhiệt tình của Thầy và các bạn
Học viên thực hiện
Phan Đình Duy Lớp: CH CNTT K6
Trang 3Mục lục
Chương 1 BIỂU DIỄN DỮ LIỆU BẰNG RDF 3
1.1 Định nghĩa RDF 3
1.2 Mô hình dữ liệu RDF 3
1.2.1 URIs 4
1.2.2 Blank Nodes 4
1.2.3 Literal values - Giá trị nghĩa đen 5
1.3 Các định dạng lưu trữ RDF 6
1.3.1 N-Triples 7
1.3.2 N3 7
1.3.3 RDF/XML 8
1.4 Ontology 8
Chương 2 ỨNG DỤNG RDF VÀO LẬP TRÌNH SEMANTIC WEB 11
2.1 Sử dụng Sesame như công cụ lưu trữ và truy vấn 12
2.1.1 Cài đặt ứng dụng web Sesame 12
2.1.2 Tạo mới kho dữ liệu 12
2.1.3 Load dữ liệu thô tạo đồ thị ngữ nghĩa 14
2.1.4 Đẩy dữ liệu từ đồ thị lên sesame(qua định dạng RDF/XML) 16
2.2 Tạo ứng dụng web 18
2.3 Màn hình chung 18
2.4 Mở rộng các tập dữ liệu từ các nguồn công cộng 20
2.5 Tạo màn hình theo chức năng 24
2.6 Trực quan hóa giao diện 25
Chương 3 KẾT LUẬN 29
Trang 4DANH MỤC HÌNH ẢNH
Hình 1-1 Blank nodes trong mạng xã hội thể hiện thành viên 4
Hình 1-2 Blank node mô hình hóa một địa chỉ liên lạc 5
Hình 1-3 Đồ thị các mối quan hệ của TobySegaran 6
Hình 2-1 Màn hình cấu hình của Sesame 12
Hình 2-2 Tạo mới kho dữ liệu 13
Hình 2-3 Kho dữ liệu được tạo với id là joblistings 14
Hình 2-4 Kết quả tìm danh sách các công ty tuyển dụng 17
Hình 2-5 Xem danh sách Triple bằng export 17
Hình 2-6 Kết quả của màn hình liên kết Subject - Predicate - Object 20
Hình 2-7 Kết quả truy xuất tìm thông tin về công ty trên Crunchbase dựa vào keys 21
Hình 2-8 Nội dung của đồ thị trên kho seasame 23
Hình 2-9 Thông tin bổ sung đã được cập nhật 23
Hình 2-10 Màn hình cụ thể về các vị trí tuyển dụng và thông tin về công ty 25
Hình 2-11 Kết quả JSON trả về bởi hàm exhibit_job_data 26
Hình 2-12 Màn hình thể hiện biểu đồ jobs theo salary và funding dạng plot 28
Trang 5Chương 1 BIỂU DIỄN DỮ LIỆU BẰNG RDF 1.1 Định nghĩa RDF
Chúng ta thấy rằng việc chuyển sang mô hình dữ liệu đồ thị là khá dễ dàng, và là một
ý tưởng tốt Nhưng với dữ liệu đã được nạp vào đồ thị, làm thế nào để chia sẽ dữ liệu đó cho người khác? Đó chính là lý do của sự xuất hiện Resource Description Framework(RDF) của W3C RDF cung cấp một cách biểu diễn chuẩn của đồ thị, cho phép chia sẽ chúng với người khác, và quan trọng hơn là với máy tính Bởi vì nó là một chuẩn mà W3C “khuyến khích", một tập lớn các công cụ và dịch vụ đã xuất hiện quanh khái niệm về RDF.RDF là một “bộ khung” được sử dụng để mô tả các nguồn tài nguyên trên Internet RDF cung cấp một mô hình dữ liệu, và một cú pháp đơn giản sao cho các hệ thống độc lập có thể trao đổi và sử dụng nó
RDF được thiết kế sao cho hệ thống máy tính có thể hiểu được và có thể đọc được thông tin, chứ không phải để trình bày dữ liệu cho người dùng.Là một thành phần của Semantic Web, được đặt trên XML, RDF sử dụng cú pháp của XML để biểu diễn thông tin, điều này có nghĩa là các tài liệu RDF được viết bằng XML Ngôn ngữ XML dùng để biểu diễn thông tin trong RDF được gọi là RDF/XML Thông qua định dạng này, các thông tin trong RDF có thể được trao đổi dễ dàng giữa các hệ thống máy tính cũng như các hệ điều hành hay các ngôn ngữ lập trình ứng dụng khác nhau
RDF mô tả siêu dữ liệu về các tài nguyên trên Web RDF dựa trên cú pháp XML tuy nhiên XML chỉ mô tả dữ liệu, RDF còn có khả năng biểu diễn ngữ nghĩa giữa chúng thông qua các tài nguyên được định danh bằng URI
1.2 Mô hình dữ liệu RDF
Hiểu một cách cực kỳ đơn giản dựa vào những khái niệm về mô hình ngữ nghĩa mà chúng ta đã tìm hiểu trong phần trước, RDF chẳng qua là một cách chuẩn hóa mô hình ngữ nghĩa bằng triple, là một cấu trúc gồm 3 thành phần chính (Subject-Predicate-Object) Điểm khác biệt duy nhất chính là liên quan đến tài nguyên sử dụng thể hiện trong triple và các định dạng lưu trữ của chúng
Trang 61.2.1 URIs
Universal Resource Identifier (URI): tức là định danh tài nguyên duy nhất Trong đó URL là tập con của URI chỉ vị trí tài nguyên duy nhất mà chúng ta đã quá quen thuộc khi
sử dụng web
Mô hình DRF sử dụng URI như tài nguyên cho tất cả các thành phần trong mô hình
từ subject, predicate đến object nhằm đảm bảo tính duy nhất và đồng thời cũng là giá trị
để truy xuất đến các thông tin có nghĩa thực sự
Điều quan trọng là cần lưu ý rằng URI không phải là URL (mặc dù mỗi URL là một URI) Một cách thực tế, điều này có nghĩa là bạn không nên cho rằng URI sẽ tạo ra bất kỳ thông tin nào nếu bạn gõ vào một trình duyệt web Mà nó có nghĩa rằng, cố gắng làm càng nhiều thông tin tài nguyên sẵn có tại địa chỉ là một cách tốt
Một cách sử dụng phổ biến và ngắn gọn của URI trong RDF là chỉ ra khái niệm namespace (không gian sử dụng chung) để định nghĩa phần cơ sở của URI (base) và chỉ thể hiện bằng tên namespace cộng với thành phần phân biệt còn lại của URI
Trang 7Trong biểu diễn triple, Blank node được thể hiện bằng quy tắc đặt tên _:id, trong đó
id là tùy ý nhưng phải suy nhất trong phạm vi đồ thi
Ví dụ , biểu thức định dạng triple cho mô hình ở Hình 1-1như sau
(_:ax1, "weblog", "http://blog.kiwitobes.com")
(_:ax1, "surName", "Segaran")
(_:ax1, "givenName", "Toby")
nguyên Mã ISO 639 được sử dụng để chỉ định ngôn ngữ; Ví dụ, en cho tiếng Anh hoặc
ja cho Nhật Bản
Trang 81.3 Các định dạng lưu trữ RDF
Cách sử dụng RDF thì dường như khá đơn giản nhưng cấu trúc lưu trữ chúng thì khá phức tạp, tuy nhiên chúng ta không lo lắng về điều này vì RDF đã có sẵn những chuẩn định dạng lưu trữ khá tốt
Chúng ta sẽ tìm hiểu bốn định dạng tuần tự hóa ở đây: N-Triples, mô tả đơn giản nhất; N3, phiên bản ngắn gọn của N-Triple; RDF / XML, một trong những định dạng sử dụng thường xuyên nhất và cuối cùng, "RDF in attributes" (RDFa), được nhúng vào các
Trang 91.3.1 N-Triples
Định dạng đơn giản và gần với cấu trúc gốc của Triple nhất, có định dạng
Subject1 Predicate1 Object1
Subject2 Predicate2 Object2
…
Trong đó mỗi triple là một dòng đơn gồm 3 thành phần và kết thúc bằng dấu chấm Các thành phần được thể hiện bằng URI được bao quanh bởi dấu <> bao quoanh, ngoại trừ
Blank Node thể hiện bằng _:id ( id là chuỗi tự do tuân theo nguyên tắc đặt tên)
Literal values : thể hiện bằng chuỗi trong ngoặc kép
Chỉ định @lang theo sau để chỉ ngôn ngữ : ISO 639 Chỉ định ^^type theo sau để chỉ kiểu dữ liệu : XSD
N-Triples được lưu xuống file dưới đuôi là nt
1.3.2 N3
N3 là phiên bản nâng cấp khắc phục tình trạng bị lặp lại của N-Triples, bằng cách đưa
ra một số cách định nghĩa trước và quy tắc thể hiện theo nhóm Một số bổ sung sau
Định nghĩa @prefixsemperp: <http://semprog.com/people/>
Sử dụng semperp:colin thay cho <http://semprog.com/people/colin>
Nhóm các predicate và object vào chung một nhóm để tranh lặp lại subject
Subject1 P1_1O1_1;P1_2 O1_2
Với Subject là Blank Node nhóm các predicate và object vào chung và đặt bên
trong ngoặc vuông []
Subject1 Predicate S2,[P2_1 O2_1;P2_2 O2_2]
Kí tự a, được thể hiện cho predicate thuộc kiểu dữ liệu (URI =
<http://www.w3.org/1999/02/22-rdf-syntax-ns#type> )
<http://www.w3.org/2002/07/owl#sameAs> hoặc owl:sameAs được thể hiện bởi dấu =
Trang 101.3.3 RDF/XML
RDF/XML là mô hình dữ liệu của RDF được biểu diễn bằng XML
Ở phần đầu tiên là nơi định nghĩa namespace ví dụ
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"/>
Phần nội dung, định dạng này được thể hiện theo mô hình tree, bám theo các giá trị subject gốc ban đầu Trong cấu trúc phân cấp các giá trị con chính là các thành phần kế tiếp trong dãy liên kết O-P-O-P-O…
Sử dụng tên của kiểu dữ liệu để làm node biểu diễn dữ liệu cho đối tượng thuộc kiều
đó ví dụ
<foaf:Person rdf:about="http://kiwitobes.com/toby.rdf#ts">
Foaf:Person là kiểu dữ liệu cho đối tượng thể hiên cho tody
Rdf:about là uri của đối tượng doty
Literal values được thể hiện bằng nội dung text của xml node hoặc như một thuột tính trong rdf:Description
Giá trị đối tượng trong node rdf:Description có kiểu là X thì nó được thể hiện bằng cách thay thế tên rdf:Description thành tên X
1.4 Ontology
Mô hình dữ liệu RDF đã cho chúng ta một khá tổng quát về tổ chức ngữ nghĩa Tuy nhiên, cũng vì tính quá chung chung đó mà tất cả các thực thể, đối tượng, quan hệ của chúng trở nên cực kì lộn xộn, không rõ ràng phạm vi sử dụng trong một lĩnh vực xác định.Ontology đã được áp dụng vào mô hình RDF để làm nó trở nên rõ ràng hơn về ý nghĩa và tính trong sáng cua mô hình
Sau khi khi trãi qua một loạt các mô hình ngữ nghĩa, chúng ta thấy rằng mô hình sử dụng Subject-predicate-object là một phương pháp hữu ích và linh hoạt cho việc biểu diễn tri thức.Các nhà triết học từ thời Aristotle đã quan tâm rất nhiều về việc biết những
gì tồn tại và làm thế nào để mô tả nó.Và một khi bạn nghĩ rằng bạn biết rằng một cái gì đó tồn tại, bước tiếp theo là tìm phạm vi cho nó trong số tất cả những thứ khác.Trong lĩnh vực triết học, nỗ lực này được gọi là ONTOLOGY
Trang 11Vì sao chúng ta lại quan tâm đến vấn đề của triết học ? bởi vì triết học đưa ra những khái niệm chung nhất về thế giới và vũ trụ, chúng ta làm phần mềm liên quan tới ngữ nghĩa cần mô hình của thế giới Do đó chúng ta cũng cần tới những khái niệm liên quan đến thế giới
Xây dựng mô hình của thế giới là không có gì mới đối với các nhà thiết kế hệ thống Chúng ta đã và đang làm điều này mọi lúc mọi nơi, tạo các mô hình cơ sỡ dữ liệu và quan
hệ Tuy nhiên, với các hệ thống ngữ nghĩa, chúng ta cần phải thể hiện các mô hình này theo cách mà hệ thống phân phối trên Web có thể đọc và hiểu chính xác các mô hình của chúng ta và sử dụng chúng
Ontology cung cấp một tập từ vựng chính xác với những tri thức mà nó mang theo
Từ vựng này cho phép chúng ta xác định các thực thể sẽ được biểu diễn, làm thế nào chúng có thể được nhóm lại và các mối quan hệ của chúng
Vì vậy, làm thế nào để chúng ta biết được Ontology của chúng ta là thứ chính xác?
Nó chỉ đúng khi mà mọi người và các hệ thống sử dụng nó có thể để tương tác thành công Đây là cùng một tiêu chuẩn mà chúng ta áp dụng phần mềm máy tính Chương trình chạy không? Chúng ta nhận được câu trả lời chạy? Nếu vậy, chúng ta thành công Tương tự như mô hình hướng đối tượng (object-oriented - OO), mô hình ngữ nghĩa (sematic) cũng sử dụng khái niệm class để mô tả nhóm các thực thể cùng tính chất và quan hệ Trong hầu hết các mô hình hướng đối tượng một đối tượng là một thể hiện của một lớp bởi vì chúng nó được tạo bởi định nghĩa của lớp đó Một khi một thể hiện được tạo ra nó sẽ chứa tất cả các thuộc tính và hành động của lớp tạo ra nó
Dữ liệu ngữ nghĩa, như chúng ta đã thấy nó tập trung vào mối quan hệ giữa các thực thể Vì vậy mô hình ngữ nghĩa lại là mô hình hướng thuộc tính chứ không phải hướng đối tượng
Các thực thể ngữ nghĩa không được sinh ra từ trong một lớp, mà chúng được hiểu là một thành phần của lớp dựa vào những thuộc tính của chúng cùng chung một nhóm Chúng ta thấy phân biệt kiểu này thì quá chi tiết, nhưng việc tập trung vào các mối quan
hệ sẽ cho mô hình trở nên tuyệt vời và mềm dẽo hơn
Trang 12Trong hệ thống hướng đối tượng, một thuộc tính là 1 phần của lớp, một khi bạn biết đối tượng là nằm trong lớp nào bạn sẽ biết danh sách các thuộc tính của đối tượng đó Trong hệ thống ngữ nghĩa, thuột tính được định nghĩa độc lập, một thuộc tính có thể khai báo nó thuộc kiểu tài nguyên nào ( resouce – tương tự class trong OO) Tập hợp các kiểu
( tài nguyên) sử dụng thuộc tính đó được gọi là domain ( lĩnh vực,phạm vi) của thuộc
tính Có nghĩa là một thuộc tính nằm có thể nằm trong nhiều kiểu khác nhau Tương tự
như vậy, tập hợp các giá trị của nó có thể nhận được thì gọi là range (miền xác định) của
thuộc tính
Trang 13Chương 2 ỨNG DỤNG RDF VÀO LẬP TRÌNH SEMANTIC WEB
Phần này chúng ta sẽ kết hợp mọi thứ lại với nhau và sử dụng một số công cụ thể tạo thử một ứng dụng đơn giản tìm hiểu thông tin về các vị trí tuyển dụng trên web
Yêu cầu của ứng dụng
Cài đặt và chạy các chức năng cơ bản một cách nhanh chóng
Cần mềm dẽo cho việc mở rộng các chức năng
Được thiết kế hỗ trợ cho việc truy xuất và chia sẽ thông tin theo dạng chuẩn(ngữ nghĩa)
Tương tác nhanh
Hệ thống sẽ bao gồm 2 phần chính ( mà có thể sẽ mở rộng trong tương lai)
Lưu trữ và truy vấn mô hình ngữ nghĩa RDF
Tạo ứng dụng web truy xuất và thể hiện ra giao diện
Để bắt đầu thực hiện, giả sử chúng ta có sẵn một số dữ liệu dạng bảng có sẵn trên web đã được rút trích ra là danh sách các nghề nghiệp (jobs) Bạn có thể download tại đây
http://semprog.com/psw/chapter10/joblist.csv
Nội dung như sau:
"JobTitle","Salary","Location","Company","Crunchbase","Ticker"
"Tugboat Captain",10000,"San Francisco,CA","Metaweb","metawebtechnologies”
"Ancient Mariner",20000,"New York, NY","Google","google","GOOG"
"Fisherman",30000,"Seattle, WA","Microsoft",,"MSFT"
"Third Mate",40000,"Sunnyvale, CA","Yahoo",,"YHOO"
"Stevedore",50000,"New York, NY","Tumblr","tumblr"
Đây chỉ là cách tạo một ứng dụng ban đầu nên giả sử rằng có sẵn tập dữ liệu này, trong thực tế tập dữ liệu này sẽ được rút trích trực tiếp trên các hệ thống website về jobs.Việc cần làm đầu tiên là sẽ lấy danh sách dữ liệu này chuyển sang dạng lưu trữ RDF trước khi tiếp tục công việc
Trang 142.1 Sử dụng Sesame như công cụ lưu trữ và truy vấn
2.1.1 Cài đặt ứng dụng web Sesame
http://www.openrdf.org/download.jsp
Giải nén tìm và chép 2 files webapp openrdf-sesame.war và openrdf-workbench.war vào thư mục webapps của web server (giả sử ta đã có web server)
Cấu hình lại port cho web server tới 8180
Sau khi hoàn tất ta có thể truy xuất vào địa chỉ workbench để xem màn hình thiết lập của sesame như Hình 2-1 sau
http://localhost:8180/openrdf-Hình 2-1 Màn hình cấu hình của Sesame 2.1.2 Tạo mới kho dữ liệu
Để tạo mới một nơi chứa dữ liệu mô hình, chọn “New Repository”
Trang 15Hình 2-2 Tạo mới kho dữ liệu Thông tin cần quan tâm ở đây là ID = joblistings , nó sẽ là id để sử dụng phân biệt
với các kho dữ liệu khác
Như vậy là chúng ta đã có một kho chứa dữ liệu trên sesame với dữ liệu là rỗng Hình 2-3 Chúng ta có thể thêm dữ liệu vào kho bằng các dữ liệu được định dạng chuẩn theo RDF trên file hoặc url trên mạng
Tuy nhiên những gì ta có chỉ là một danh sách các jobs trong file csv Do đó điều đầu tiên cần làm là cần phải thêm dữ liệu vào kho bằng cách code ( cũng để tìm hiểu rõ hơn bằng cách thêm dữ liệu động)
Trang 16Hình 2-3 Kho dữ liệu được tạo với id là joblistings 2.1.3 Load dữ liệu thô tạo đồ thị ngữ nghĩa
Tạo một module nhỏ của Python để thực hiện công việc này, module này ta đặt tên là convert_jobs.py (trong source code đi kèm)
from rdflib import ConjunctiveGraph
from rdflib import Namespace , BNode , Literal , RDF , URIRef