PHẦN III. Ứng dụng RDF vào lập trình semantic web
III.3 Màn hình chung
dữ liệu theo id công ty tuyển dụng. Thông tin bao gồm tập hợp tất cả các subjects và objects của id đã cho (trong triple). Có nghĩa tất cả những gì liên quan đến id đó.
con=connection('http://localhost:8180/openrdf-sesame/')
con.addnamespace('rdf',RDF)
con.addnamespace('foaf',FOAF)
con.addnamespace('jb',JB)
con.addnamespace('jobs',JOBS)
con.addnamespace('company',COMPANY)
con.addnamespace('dc',DC)
con.use_repository('joblistings')
namefields=set([str(DC['title']),str(COMPANY['name'])])
class Main(object):
@cherrypy.expose
def index(self):
id=quote_plus('http://semprog.com/schemas/jobboard#tumblr') return 'Try visiting <a href="viewgeneral?id=%s">here</a>' % id
@cherrypy.expose
def viewgeneral(self,id):
sa=con.query('select ?pred ?obj where {<%s> ?pred ?obj .}' % id) oa=con.query('select ?pred ?sub where {?sub ?pred <%s> .}' % id) name=id
for row in sa:
if row['pred']['value'] in namefields: name=row['obj']['value']
t=lookup.get_template('viewgeneric.html')
Đoạn code trên lấy ra danh sách của các subjects và objects, sau đó tìm tên ứng với id và truyền cả 3 tham số này xuống template để hiển thị. Template Viewgeneric.html có nội như sau
<html> <head>
<title>Viewing ${name}</title> </head>
<body>
<h1>${name}</h1>
<h3>Subject assertions</h3> <table>
% for row in sa: <tr>
<td style="font-weight:bold">${row['pred']['value']}</td> % if row['obj']['type']=='uri':
<td><a href="view?id=${qp(row['obj']['value'])}">${row['obj'] ['value']}</a></td> % else: <td>${row['obj']['value']}</td> % endif </tr> % endfor </table> <h3>Object assertions</h3> <table>
% for row in oa: <tr>
<td style="font-weight:bold">${row['pred']['value']}</td> % if row['sub']['type']=='uri':
<td><a href="view?id=${qp(row['sub']['value'])}">${row['sub'] ['value']}</a></td> % else: <td>${row['sub']['value']}</td> % endif </tr> % endfor </table> </body> </html>
Hình 3-7: kết quả của màn hình liên kết subject – predicate - object
Nếu như hệ thống có càng nhiều triple liên kết với nhau qua uri, thì hệ màn hình này cho phép và có thể lưới tới mọi ngóc ngách như bạn đang di chuyển trên các node của một đồ thị.
III.4 Mở rộng các tập dữ liệu từ các nguồn công cộng