PHẦN III. Ứng dụng RDF vào lập trình semantic web
III.4 Mở rộng các tập dữ liệu từ các nguồn công cộng
khi liên kết đến các uri chuyên biệt. Một trong những cơ sở dữ liệu tốt nhất được sử dụng để cập nhật thông tin về công ty là Crunchbase, nó được tạo ra và cập nhật thông tin bởi cộng đồng người sử dụng nó. Chúng ta sẽ sử dụng nó để cập nhật thêm thông tin cho công ty trong kho dữ liệu của chúng ta.
Ví dụ, ứng với Crunchbase keys là metawebtechnologies chúng ta sẽ có uri truy xuất dữ liệu của nó ra dạng JSON như sau, khi bõ vào trình duyệt
Hình 3-8: kết quả truy xuất tìm thông tin về công ty trên Crunchbase dựa vào keys
Chúng ta sẽ thực hiện việc cập nhật này bằng code tự tạo trong module crunchbase_data.py( kèm trong source code)
from rdflib import ConjunctiveGraph
from rdflib import Namespace, BNode, Literal, RDF, URIRef from pysesame import connection
import urllib
from simplejson import loads
# Connecion to Sesame
con=connection('http://localhost:8180/openrdf-sesame/')
con.use_repository('joblistings')
con.addnamespace('rdfs','http://www.w3.org/2000/01/rdf-schema#')
JB = Namespace("http://semprog.com/schemas/jobboard#")
DC = Namespace("http://purl.org/dc/elements/1.1/")
cg.bind('dc',DC)
cg.bind('jobboard',JB)
cg.bind('foaf',FOAF)
# tìm uri seeAlso có chứa từ crunchbase
res=con.query('select ?id ?url where {?id rdfs:seeAlso ?url . FILTER regex(?url, "crunchbase")}')
# Loop over the results
for row in res:
company=URIRef(row['id']['value']) url=row['url']['value']
data=urllib.urlopen(url).read() # load nội dung dạng JSON
record=loads(data)
# Bổ sung thông tin location vào company được lấy từ nội dung truy xuất
for loc in record['offices']:
if loc['city'] and loc['state_code']:
cityid='%s_%s' % (loc['city'].lower().replace(' ','_'),loc['state_code'].lower())
cg.add((company,JB['location'],JB[cityid]))
# Bổ sung home page
cg.add((company,FOAF['homepage'],Literal(record['homepage_url'])))
# Add funding rounds
for fr in record['funding_rounds']: round=BNode()
cg.add((company,JB['funding_round'],round))
cg.add((round,JB['amount'],Literal(fr['raised_amount']))) cg.add((round,DC['date'], Literal(str(fr['funded_year']))))
Sau khi thực thi module này chúng ta sẽ có tập tất cả các thông tin bổ sung ứng với mỗi company trong đồ thị mới là cg (đồ thị này chỉ cập nhật thông tin company có trong kho sesame và thông tin bổ sung.
Các thông tin mới đã được cập nhật trên hệ thống của chúng ta như hình 3-9
Hình 3-9: thông tin bổ sung đã được cập nhật.
Cập nhật tương tự cho thông tin finance trong yahoo_finance_update.py.
Nếu bạn đầu chúng ta không đưa thông tin crunchbase vào kho dữ liệu của chúng ta, thì chúng ta có thể cập nhật chúng dựa trên dịch vụ của freebase dưới namespace tên gọi là metaweb, như ví dụ trong freebase_companies.py.
III.5 Tạo màn hình theo chức năng