Tải bản đầy đủ (.pdf) (54 trang)

Ultimate mashup – Các dịch vụ Web và Web ngữ nghĩa (semantic Web), Phần 3 pps

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (613.39 KB, 54 trang )

Ultimate mashup – Các dịch vụ Web và Web ngữ nghĩa (semantic Web),
Phần 3: Hiểu về RDF và ngôn ngữ lược đồ RDF
Tóm tắt: Sức mạnh của Ultimate mashup là trí tuệ mà bạn phát triển bằng cách
sử dụng các kỹ thuật Web ngữ nghĩa, đặc biệt là Web ngôn ngữ bản thể luận (Web
Ontology Language - OWL). Nhưng trước khi bạn có thể sử dụng OWL, bạn cần
quen với ngôn ngữ cơ bản của chương trình này, đó là Resource Description
Framework (RDF) và RDF Schema Language (RDFs). Hướng dẫn này sẽ cung
cấp cho bạn kiến thức cơ bản khá tốt về cả RDF và RDFs để bạn sẵn sàng xây
dựng các bản thể luận (ontologies) cho công việc phát triển Web của bạn, và cũng
có thể tận dụng sức mạnh của RDF cho các dự án khác.

Trước khi bạn bắt đầu
Hướng dẫn này là dành cho các lập trình viên phát triển web, những người quan
tâm tới việc học về RDF (Resource Description Framework), cũng như dành cho
những ai quan tâm tới việc học thêm về Web ngữ nghĩa và các dịch vụ Web ngữ
nghĩa nói chung và xây dựng các bản thể luận nói riêng. Bạn sẽ học cách xây dựng
và truyền tải thông tin RDF ở cả dạng XML phổ biến và dạng dùng nhanh phi
XML.
Hướng dẫn này không liên quan tới lập trình, nhưng giả định là bạn đã quen với
các khái niệm XML.
Về loạt bài này
Có vẻ như ngày nay bạn không thể quay lưng lại với Web mà không vào một trang
web mà nó cho phép truy cập vào dữ liệu trên trang web thông qua dịch vụ dựa
trên nền Web API hoặc sử dụng dữ liệu từ một trang khác thông qua dịch vụ Web
API. Khi bạn cân nhắc lợi ích của việc sử dụng thông tin hiện có trong các ứng
dụng của riêng bạn thì điều này có thể không quá bất ngờ. Điều này cũng từng chỉ
là vấn đề về thời gian trước khi ai đó đã bắt đầu kết hợp các thông tin từ các hệ
thống tách biệt để tạo nên một thứ gì đó hoàn toàn mới. Những ứng dụng này,
được gọi là mashup, là cái mới nhất trên Web, từ các trang tập trung vào cộng
đồng tới các trang tìm kiếm đặc thù và cho tới các mashup ánh xạ hiện thời (ever-
present mapping mashups).


Mashup hầu hết đều hữu dụng, nhưng có một vấn đề mà chúng thường hay có đó
là chúng đều được phát triển cho tập hợp các dịch vụ cụ thể. Nếu một trong những
dịch vụ đó thay đổi, hoặc nếu sự ưa chuộng đối với một dịch vụ cụ thể của một
loại hình nào đó thay đổi thì bạn sẽ phải làm rất nhiều việc.
Mục tiêu của loạt bài hướng dẫn này đó là tạo ra một trình ứng dụng mashup
thông minh tới mức người sử dụng có thể thêm bớt các dịch vụ nếu muốn, và hệ
thống sẽ biết làm gì với chúng. Các tiến trình của loạt bài như sau:
Trong Phần 1, tôi đã giới thiệu khái niệm của mashup, đã chỉ ra cách thức chúng
vận hành và phát triển một phiên bản đơn giản của chúng. Bạn cũng đã tìm ra các
vấn đề nghiêm trọng trong vận hành có liên quan tới việc tạo ra hàng loạt cuộc gọi
trên Web.
Ở Phần 2, bạn sẽ giải quyết một vài vấn đề trong đó bằng cách sử dụng tính năng
pureXML™ mới của DB2® để xây dựng nơi lưu trữ, là chỗ lưu các kết quả của
các yêu cầu từ trước đó và cũng cho phép bạn tìm lại các thông tin nào đó.
Trước tiên, bạn cần sử dụng các bản thể luận, hoặc từ vựng xác định khái niệm và
mối quan hệ của chúng, vì vậy ở đây trong Phần 3 bạn sẽ bắt đầu quy trình đó
bằng cách tìm hiểu về RDF và RDFS, là hai nhân tố chính trong OWL (Web
Ontology Language) mà tôi sẽ thảo luận trong Phần 4. Trong Phần 5, bạn sẽ lấy
các bản thể luận được tạo ra ở Phần 4 và sử dụng chúng để cho phép người sử
dụng thay đổi các nguồn thông tin.
Trong Phần 6, mọi thứ sẽ thực sự thú vị. Về điểm này thì bạn có một trình ứng
dụng đang hoạt động và khung đúng chỗ để hệ thống có thể sử dụng lập luận ngữ
nghĩa để hiểu được dịch vụ tại vị trí của nó. Trong phần này, bạn cho phép người
dùng kiểm soát, cho phép họ lấy và lựa chọn dữ liệu mà sẽ được sử dụng cho một
mashup tùy biến.


Về bài viết này
Trong phần trước của loạt bài này, bạn đã tạo ra nền tảng của mashup: servlet mà
kiểm tra bộ đệm lưu trữ (cache) cơ sở dữ liệu và hiển thị dữ liệu lưu trữ hoặc làm

mới. Bây giờ bạn cần bắt đầu đưa "ngữ nghĩa" vào Web. Trong Phần 4, bạn sẽ tạo
ra một bản thể cho phép bạn thực thi logic trong các dịch vụ của bạn, nhưng trước
hết bạn cần hiểu được ngôn ngữ mà bạn sẽ làm việc với bản thể luận đó, RDF -
Resource Description Framework.
Bài viết này giúp bạn theo được với RDF và các nhánh của nó, lược đồ RDF.
Trong hướng dẫn này, bạn sẽ tìm hiểu về:
 RDF là gì và được sử dụng để làm gì
 Mối quan hệ giữa RDF, lược đồ RDF, OWL, và Web ngữ nghĩa
 Kiến thức cơ bản về RDF
 Xử lý các nguồn, thành phần, và các cấu trúc RDF khác
 Thể hiện RDF trong XML – và khi không có nó
 Tạo các lớp và ví dụ sử dụng lược đồ RDF
Trong bài viết này, bạn sẽ xem qua những cấu trúc này từ quan điểm của việc biểu
diễn các thành phần và dữ liệu của bạn từ ứng dụng mashup của bạn.


Các điều kiện tiên quyết
Mặc dù bạn không cần các cấu phần phần mềm để mashup tự chạy – xem danh
sách các yêu cầu đối trong phần 2 (xem Tài nguyên) bài này chủ yếu bàn về các
khái niệm vì vậy bạn không cần một phần mềm cụ thể nào cả.
Khái quát nhanh
Trước khi bạn tiếp tục đi sâu, chúng ta hãy trao đổi về ví dụ ứng dụng mashup,
Web ngữ nghĩa, RDF và các bản thể luận.
Nhìn lại các phần trước
Một mashup là một ứng dụng và nó lấy dữ liệu, thường là dữ liệu dịch vụ Web, và
thường lấy từ nhiều nguồn – và nó được sử dụng để tạo ra một chương trình mới
nào đó. Cho tới nay, để bạn tạo được Ultimate mashup, bạn đã tạo một hệ thống
mà nó thể hiện thông tin cho một số bất kỳ các dịch vụ Web và trình bày thông tin
đó trên trang Web.
Ứng dụng được xây dựng để trở thành chung nhất có thể. Bạn có thể xác định các

dịch vụ theo lớp riêng của chúng, với một mảng các dịch vụ cần thể hiện. Để thêm
hoặc bớt dịch vụ từ đầu ra cuối cùng, bạn có thể tạo nội dụng của mảng đó, và một
mẫu XML mà xác định bản trình bày mới nhất sẽ kèm theo một định nghĩa về dịch
vụ.
Kết quả cuối cùng đó là bạn có thể kiểm soát các dịch vụ được sử dụng, nội dung
trình bày của dữ liệu trên trang Web cuối cùng, và thậm chí các dịch vụ con được
kết nối với dịch vụ chính bằng cách đơn giản là chế tác các lượng thông tin vào
các hướng dẫn đầu vào.
Lý do tôi làm mọi điều trở lên chung chung một phần là để có được sự linh hoạt và
khả năng bảo trì, và một phần là để chuẩn bị trình ứng dụng cho những gì sẽ tới
tiếp theo.
Vào cái sẽ tới tiếp theo đó là một cách thức mới để tìm kiếm thông tin.
Tiếp theo là Web ngữ nghĩa
Ngay bây giờ, khi bạn tìm tới một công cụ tìm kiếm như Google và nhập từ để tìm
thì thật khó để đoán được chính xác là bạn sẽ nhận lại thông tin thế nào. Nếu bạn
nhập từ "SOAP", có phải bạn sẽ nhận được một loạt các tài liệu trên các dịch vụ
Web, hoặc những chỉ dẫn về việc giặt là? Hoặc có phải là một thông tin cập nhật
rằng ai đã giết nhân vật Greg Madden trong tập phim truyền hình "Bọn trẻ của
tôi"?
Google làm được nhiều trong việc tìm ra một trang Web nào đó thuộc về ví dụ nào
bằng cách xem trang nào được kết nối tới, nhưng kết cục là chuỗi "SOAP" chỉ là
một chuỗi các chữ cái, và để nhận rõ ý nghĩa và nội dung của từ đó là một nhiệm
vụ mà hiện nay tốt nhất là để dành lại cho bộ não của con người.
Nhưng mọi thứ đều khác trên Web ngữ nghĩa. Trên Web ngữ nghĩa, thông tin
được xác định theo cách mà có thể máy móc hiểu được, và cho phép phần mềm xử
lý quy trình này.
Một ví dụ thường được sử dụng để trao đổi trong trường hợp này có liên quan tới
việc sắp xếp chuyến du lịch hoặc các công việc khác. Trên Web ngữ nghĩa, một
đại lý thông minh có thể kiểm tra kế hoạch của bạn, có thể giúp bạn tìm một
chuyên gia phù hợp với một cuộc hẹn gặp mà bạn có thể thiết lập, có thể lấy đánh

giá từ các bệnh nhân cũ và bệnh nhân hiện thời, và có thể thu xếp một người giữ
trẻ để trông nom con bạn khi bạn đi vắng.
Tất cả các ví dụ này đều có khả năng thực hiện chỉ khi thông tin được đưa lên Web
ngữ nghĩa được xác định bằng máy cách mà máy có khả năng đọc và hiểu.
Nhưng ở đây là thủ thuật. Web ngữ nghĩa không phải là một sân chơi mới mẻ nào
đó mà ở đó những người sử dụng cần phải loại bỏ Web hiện thời. Không phải vậy,
Web ngữ nghĩa chỉ là trang Web hiện thời, nhưng với nhiều thông tin hơn.


Các dịch vụ Web ngữ nghĩa
Nếu bạn đưa các dịch vụ web vào mashup và dữ liệu của chúng theo cách này, với
nhiều thông tin hơn thì bạn có thể cho phép trình ứng dụng tạo ra các lựa chọn
thông minh. Ví dụ, trình ứng dụng có thể hiểu được dịch vụ nào thể hiện thông tin
bản đồ, và dịch vụ nào thể hiện các cửa hàng trực tuyến, hay thậm chí là sâu hơn,
các cửa hàng sách trực tuyến. Nó sẽ biết thông tin nào từ các dịch vụ đó thể hiện
tiêu đề, nội dung mô tả, giá cả và các thông tin khác nữa.
Đó là các dịch vụ hứa hẹn của Web ngữ nghĩa; một hệ thống hiểu được ý nghĩa
đằng sau các thông tin, làm cho thông tin có thể sử dụng được theo những cách cụ
thể.
Trong hướng dẫn này, nó có nghĩa những người sử dụng của bạn có thể tự động
hoán đổi các dịch vụ cùng loại – ví dụ như sử dụng Barnes và Noble thay vì
Amazon hoặc thậm chí tạo những mashup mới của riêng họ.
Cấu trúc mà bạn xác định thông tin này được gọi là bản thể luận.


Các bản thể luận
Trong cuốn sách Website Indexing 2nd Edition, Glenda Browne và John Jermey
định nghĩa từ bản thể luận như sau:
"Bản thể luận: Đặc tả kỹ thuật của việc khái quát hóa một miền kiến thức. Một
bản thể luận là các từ vựng được kiểm soát mà nó mô tả các đối tượng và các mối

quan hệ giữa chúng theo một cách chính thức, và có phần ngữ pháp để sử dụng các
thuật ngữ trong từ vựng để diễn giải điều gì đó có nghĩa trong một khoảng xác
định. Từ vựng được sử dụng để tạo các yêu cầu và các xác nhận. Các cam kết
thuộc bản thể luận là các thỏa thuận để sử dụng từ vựng theo cách ổn định để chia
sẻ kiến thức. Các bản thể luận có thể bao gồm các các danh sách từ (glossaries),
các phân loại (taxonomies) và các từ đồng nghĩa (thesauri), nhưng thông thường
có cách diễn giải tốt hơn và các quy định chặt chẽ hơn các công cụ này. Một bản
thể luận chính thức là một từ vựng được kiểm soát đã được diễn giải theo một
ngôn ngữ thể hiện bản thể."
Nói cách khác, một bản thể luận là một cách thức được thỏa thuận để diễn đạt các
ý tưởng cụ thể. Vì vậy, nếu tôi muốn làm cho thông tin của trang cá nhân của tôi
sẵn có, tôi có thể đưa lên các thông tin kiểu như thế này (xem Ví dụ 1):

Ví dụ 1. Thông tin được mã hóa sử dụng Dublin Core
<rdf:RDF
xmlns:rdf="
xmlns:dc="

<rdf:Description rdf:about="

<b><dc:creator>Nicholas Chase</dc:creator>
<dc:title>Chaos Magnet</dc:title>
<dc:description>The personal and professional ramblings
of technology author Nicholas Chase</dc:description>
<dc:date>2006-06-30</dc:date></b>

</rdf:Description>
</rdf:RDF>

Thông tin này được thể hiện bằng cách sử dụng các thuật ngữ từ một cấu trúc được

gọi là Dublin Core. Dù bạn có thể gọi Dublin Core một bản thể luận lại để tranh
luận hoặc không, nhưng chắc chắn là mọi người sẽ đồng ý răng ý nghĩa về ngữ
nghĩa của người sáng tạo, tiêu đề, ngày tháng và các thông tin khác nữa.
Trong trường hợp này, bạn có thể tạo ra một bản thể luận mà có thể xác định được
các khái niệm ví dụ như:
 Dịch vụ
 Bản đồ
 Cửa hàng
 Cửa hàng sách
 Giá cả
 Bình luận
 Hình ảnh
 Ảnh thu nhỏ
 Tiêu đề
Sau đó bạn có thể xác định các dịch vụ hoặc dữ liệu đơn lẻ như "các ví dụ" của
một trong các khái niệm này. Để làm được điều này, bạn sẽ sử dụng Ngôn ngữ
Bản thể luận Web (OWL).


Ngôn ngữ Bản thể luận Web (OWL)
Vâng tôi biết. Từ ghép đối với Ngôn ngữ Bản thể luận Web nên là WOL chứ
không phải là OWL. Nhưng lại không phải vậy, lý do là từ các tham chiếu tới
Winnie the Pooh (và Owl khôn ngoan, người đã đánh vần tên mình là W-O-L) cho
tới sự tôn trọng các dự án bản thể luận trước đó như Ngôn ngữ một thế giới (One
World Language) của Bill Martin cho tới thực tế rằng thật dễ dàng để nói và để
thiết kế những nhãn hiệu dành cho "OWL" hơn là cho "WOL".
Không vấn đề gì, và bây giờ cái đó đã được bỏ qua, vậy chính xác đó là gì?
One World Language, hay viết tắt là OWL, cung cấp một từ vựng để xác định
thông tin trên Web theo cách mà các máy móc có thể diễn giải được nó. Hãy xem
xét ví dụ này (xem Ví dụ 2):


Ví dụ 2. Một bản thể luận (rất) đơn giản
<rdf:RDF
xmlns ="
xml:base ="
xmlns:owl ="
xmlns:rdf ="
xmlns:rdfs="

<owl:Class rdf:ID="Store">
<rdfs:label>Online Store</rdfs:label>
</owl:Class>

<owl:Class rdf:ID="Bookstore">
<rdfs:subClassOf rdf:resource="#Store"/>
<rdfs:label>Bookstore</rdfs:label>
</owl:Class>

<Bookstore rdf:ID="Amazon.com"/>
</rdf:RDF>

Mã trong ví dụ 2 tạo ra một loại đối tượng chính, một cửa hàng Store, và một lớp
con, cửa hàng sách Bookstore. Sau đó bạn có thể sử dụng loại mới đó để xác định
Amazon.com là một Bookstore.
Không quá thú vị cho tới khi bạn xem xét thấy rằng OWL cũng cho phép bạn tạo
hàng loạt các xác nhận về các Bookstore, ví dụ như thực tế là chúng có thể truy
cập trực tuyến, chúng bán sách (cái mà bạn có thể xác định theo kiểu riêng của
bạn), mà bạn cũng có thể bán các loại hàng khác, và hơn thế nữa. Bằng cách xác
định Amazon.com là một Bookstore, tất cả những thông tin đó tự động gắn với nó.
Bạn sẽ tìm hiểu mọi thứ về OWL trong Phần 4 của loạt bài này, nhưng trước khi

bạn tới đó, bạn cần gọi tên dạng thức của thông tin, đó là Khung Mô tả Tài nguyên
(Resource Description Framework).


Khung Mô tả Tài nguyên (RDF)
Khung Mô tả tài nguyên là một cách thức rõ ràng để nêu thông tin về thứ gì đó.
Nhiều người cho rằng nó quá phức tạp, nhưng khi bạn nhìn nhận đúng về nó thì
RDF chỉ là cách để xác định đặc tính của các nguồn. Quay trở lại ví dụ trang web
cá nhân (xem Ví dụ 3):

Ví dụ 3. Xác định đặc tính của các nguồn
<rdf:RDF
xmlns:rdf="
xmlns:dc="

<rdf:Description rdf:about="

<dc:creator>Nicholas Chase</dc:creator>
<dc:title>Chaos Magnet</dc:title>
<dc:description>The personal and professional ramblings
of technology author Nicholas Chase</dc:description>
<dc:date>2006-06-30</dc:date>

</rdf:Description>
</rdf:RDF>

Trong ví dụ 3, mã tạo ra một mô tả Description đó là về một nguồn
Mã xác định bốn đặc tính, dc:creator, dc:title,
dc:Description, và dc:date, và giá trị của các đặc tính đó. Trong hướng dẫn này, tôi
sẽ dùng các đồ thị và các bộ ba (triples) và các nguồn và tất cả các thứ mà có thể

làm cho RDF dường như quá phức tạp, nhưng cuối cùng, đây là những gì mà thực
sự là nó: gán các đặc tính vào các nguồn theo một cách được thỏa thuận trước.


Lược đồ khung mô tả tài nguyên (RDFs)
Như tôi đã nói, RDF là một cách để gán các đặc tính vào các nguồn, và chỉ có vậy.
Bản thân RDF thậm chí không gán bất cứ nghĩa nào vào các đặc tính đó. Bất cứ
nghĩa nào trong một tài liệu RDF đến từ các đặc tính, và không phải từ RDF.
Không may là điều này có nghĩa là bản thân RDF không phải là rất hữu dụng đối
với các công việc như định nghĩa các từ vựng, trong đó bạn cần một cách thức để
xác định ít nhất là các quan hệ giữa các khái niệm.
Nhập lược đồ RDF. Một phần của nhóm các đặc tả được cho là "Bản khuyến nghị
của RDF", lược đồ RDF cung cấp cách thức để tạo ra những quan hệ cơ bản để
xác định từ vựng. Hãy xem ví dụ này (xem ví dụ 4):

Ví dụ 4. Một ví dụ đơn giản về lược đồ RDF
<rdf:RDF
xmlns ="
xml:base ="
xmlns:rdf ="
xmlns:rdfs="

<rdfs:Class rdf:ID="Service">
<rdfs:label>Web Service</rdfs:label>
</rdfs:Class>

<rdfs:Class rdf:ID="Store">
<rdfs:subClassOf rdf:resource="#Service"/>
<rdfs:label>Online Store</rdfs:label>
</rdfs:Class>


<rdfs:Class rdf:ID="Bookstore">
<rdfs:subClassOf rdf:resource="#Store"/>
<rdfs:label>Bookstore</rdfs:label>
</rdfs:Class>

<rdf:Property rdf:ID="endpoint">
<rdfs:domain rdf:resource="#Service"/>
<rdfs:range rdf:resource="
</rdf:Property>

<Bookstore rdf:ID="Amazon.com">
<endpoint>

</endpoint>
</Bookstore>
</rdf:RDF>

Trong ví dụ 4, mã tạo ra ba lớp Class và một đặc tính Property, endpoint. (Tôi sẽ
không thảo luận về OWL cho tới Phần 4.) Bạn có thể gán đặc tính đó vào bất kỳ
dịch vụ Service nào (điều này nghĩa là có thể áp dụng vào Bookstore, như một lớp
con của Store, một lớp con của Service) và cần một giá trị anyURI như đã được
định nghĩa bởi bản khuyến nghị của Sơ đồ XML.
Lược đồ RDF cung cấp các khái niệm này như một tập hợp các khối cơ bản
(building block) mà bạn có thể sử dụng để phát triển các ngôn ngữ và bản thể luận
mới. Trong Phần 4, chúng ta sẽ xem cách thức mà các khái niệm của RDF đưa vào
để tạo thành OWL, nhưng trước hết, trong hướng dẫn này, bạn sẽ tìm ra cách thức
mà nó vận hành.
Hãy bắt đầu với RDF.


Cơ bản về RDF
Tôi đã thấy các lập trình viên với nhiều năm kinh nghiệm đã tức tưởi khi bắt đầu
xử lý trên RDF, nhưng nó thực sự không khó khăn như vậy. Trong phần này, bạn
sẽ tìm hiểu những kiến thức cơ bản để bạn cũng có thể nói được rằng "Hãy vượt
qua nó, nó không quá khó đâu."
Các nguồn RDF
Cái tên Khung Mô tả Tài nguyên cho bạn thấy thực tế rằng bạn đang mô tả các tài
nguyên, nhưng thực ra chúng là thế nào?
Một nguồn có thể là về bất cứ thứ gì, cho dù nó hữu hình (như một người), hay vô
hình, ví dụ như chức danh hay cơ hội. Điều quan trọng là bạn cẩn có thể tham
chiếu nó và sử dụng định danh của nguồn đồng nhất (Uniform Resource Identifier-
URI). Một loại URI là địa chỉ tài nguyên đồng nhất (Uniform Resource Locator-
URL), là những thứ mà bạn đã quen thấy trên Internet, như trên
hay mailto: Nhưng các
URI cũng có thể chung chung hơn, ví dụ như urn:backstopmedia, đây là tên nguồn
đồng nhất (Uniform Resource Name-URN) thay vì là URL.
Điều này nghĩa là bạn có thế sử dụng các URL để xác định các nguồn như các
trang Web và hộp thư điện tử các nguồn trong đó một URL có thể cung cấp
thông tin khi tìm kiếm nó – và các URN để xác định các nguồn khác. Ví dụ, bạn
có thể quyết định xác định một người (ít nhất ở Hoa Kỳ) với một URN tham chiếu
Số An ninh Xã hội của họ, như trong ssn:078-05-1120. Dĩ nhiên, trong thời đại ăn
cắp thông tin cá nhân này thì bạn có lẽ không muốn làm như vậy, vì vậy bạn
thường gặp những người được tham chiếu như một URL với một ý nghĩa đã được
thỏa thuận trước nào đó, ví dụ như địa chỉ trang chủ trang web của họ
() hoặc URL nội bộ (ví dụ như

Một điều quan trọng đó là bạn cần có khả năng xác định nguồn với một loại URI
nào đó. Dạng thức mà cuối cùng nó thể hiện không quan trọng.
Đặc tính RDF
Để mô tả một nguồn mà sử dụng RDF, hãy gán cho nó các đặc tính. Bạn có thể

phân giai đoạn gán các đặc tính này thành các câu. Ví dụ (xem Ví dụ 5):

Ví dụ 5. Gán các đặc tính
Nick's blog has a name of Chaos Magnet
Nick's blog has a creator of Nicholas Chase

Trong mỗi một câu này, bạn có một chủ thể (Nick's blog) một tính chất (has a
name, has a creator) và một chủ thể (Chaos Magnet, Nicholas Chase). Chủ thể này
đại diện cho nguồn, tính chất, thuộc tính, và chủ thể giá trị của đặc tính. Vì vậy
nếu bạn chuyển các câu này sang dạng nào đó gần với một RDF triple, bạn sẽ
nhận được những thứ được chỉ ra trong Ví dụ 6:

Ví dụ 6. Phân chia các mục
Nick's blog name Chaos Magnet .
Nick's blog creator Nicholas Chase .

Dĩ nhiên, tôi thể hiện nguồn như một URI, vì vậy thay vào đó nó sẽ là thứ gì đó
giống như (xem Ví dụ 7):

Ví dụ 7. Thể hiện các nguồn dưới dạng như các URI
name Chaos Magnet .
creator Nicholas Chase .

Đây vẫn không thực sự là một RDF triple bởi vì nó có một chuỗi nguyên dành cho
các đặc tính. Vấn đề ở đây là các đặc tính, giống như các nguồn, cần được thể hiện
dưới dạng như một URI.


Các tham chiếu URI
Thực ra, bạn thể hiện các đặc tính dưới dạng như một tham chiếu URI, hay viết tắt

là URIref, là cái bao gồm cơ sở của đặc tính – theo phương thức thực tế, tên trống
mà đặc tính đó thuộc về được tiếp theo bởi một phân đoạn (fragment).
Ví dụ, trong ví dụ 7, tôi đã tham chiếu tới thuộc tính creator. Thực ra, đây là thuộc
tính creator được xác định bởi không gian tên Dublin Core, vì vậy tham chiếu
URIref đầy đủ sẽ là (xem ví dụ 8):

Ví dụ 8. URIref đầy đủ cho tên khởi tạo


Nếu bạn là một lập trình viên phát triển Web, thì cú pháp cuối cùng, phân đoạn bắt
đầu với ký hiệu dấu thăng (#) có thể thấy quen thuộc. Cùng cú pháp mà bạn dùng
để gửi trình duyệt tới một điểm nhất định trên trang web, ví dụ như (xem ví dụ 9):

Ví dụ 9. URL, bao gồm phân đoạn

web-services3/#N1014F

Để tạo điểm đó trên trang web, bạn có thể tạo một thẻ neo (anchor tag) của (xem
ví dụ 10):

Ví dụ 10. Tạo một thẻ neo
<a name="N1014F">:</a>

Với sự trông đợi của XHTML, phiên bản XML của HTML, bản này đổi thành
(xem Ví dụ 11):

Ví dụ 11. XHTML thẻ neo
<a id="N1014F" />

Vì vậy đoạn tham chiếu tới yếu tố đó là ký hiệu dấu thăng (#) và do vậy là giá trị

của thuộc tính ID. (Đối với những ai đã quen với XPointer, điều này có thể đã rõ.)
Sau này khi bạn tạo các nguồn sử dụng rdf:ID attribute, bạn sẽ thấy lại phần này,
nhưng bây giờ quan điểm của tôi đó là một URIref là một URL, có thể với một
đoạn đính kèm.
Đó cũng chỉ là một cách có thể chấp nhận được để xác định một đặc tính RDF. Vì
vậy các câu sẽ thành (xem ví dụ 12):

Ví dụ 12. Các đặc tính dưới dạng như các URIrefs
#name Chaos Magnet .

Nicholas Chase .

Trong một số trường hợp, bạn muốn viết tắt tất cả những thứ đó, vậy bạn có thể
gán một tiền tố để thể hiện không gian tên thực sự. Việc này cho phép bạn cắt các
câu xuống ví dụ 13:

Ví dụ 13. Cắt ngắn các câu
ex:name Chaos Magnet .
dc:creator Nicholas Chase .

Đây gần hơn với dạng RDF thực sự, nhưng chưa hẳn ở đó.


Các giá trị đặc tính
Cho tới nay tất cả các đặc tính mà bạn đã thấy đều có các giá trị chuỗi đơn giản,
nhưng trên thực tế các trường hợp đó là thiểu số. Để hiểu được tại sao, bạn cần
xem xét mọi thứ theo ngữ nghĩa đen. Khi tôi nói "trang web cá nhân của Nick có
một tên khởi tạo là 'Nicholas Chase'", đó thực chất là một câu không có ý nghĩa
lắm. Một chuỗi các chữ cái ("Nicholas Chase") đã không tạo trang web cá nhân
của tôi (thậm chí nếu nó dường như đôi lúc theo cách như vậy). Ý tôi thực sự

muốn nói đó là "Nguồn được biết tới là “trang web cá nhân của Nick's” đã được
tạo ra bởi nguồn được biết đến là 'Nicholas Chase'."
Vì vậy, triple thực sự có thể giống một số thứ hơn điều này (xem ví dụ 14):

Ví dụ 14. Tiến gần hơn tới triple
dc:creator

Bạn có thể thể hiện điều này trong một đồ thị RDF.


Đồ thị RDF
Một cách để thể hiện tất cả thông tin này là thông qua việc sử dụng các đồ thị
RDF. Trong các đồ thị này, bạn có thể thấy mọi thứ khớp với nhau như thế nào. Ví
dụ, xem Hình 1:

Hình 1. Một đồ thị RDF

Các nútt hình ô van thể hiện các nguồn, với các mũi tên giữa các hình thể hiện các
đặc tính. Giá trị các đặc tính mà các nguồn được chỉ ra bằng các hình ôvan, với
các giá trị theo nguyên văn được chỉ ra trong các hộp.


Các ký hiệu chú giải RDF
Cho tới nay bạn đã thấy qua thông tin về RDF, nhưng bạn chưa nhìn nhận chính
thức về cách thể hiện nó. Bạn có thể sử dụng các triple, trong đó nguồn các URIref
được viết trong trạng thái nguyên vẹn của chúng (xem ví dụ 15):

Ví dụ 15. Các triple đầy đủ URIref
<> <#name> Chaos Magnet .
<>

<
<> .

(Các ràng buộc khoảng trống có hiệu lực ở đây, nhưng mỗi triple thông thường
được viết trên một dòng.)
Bạn cũng có thể sử dụng tốc ký, thay thế các không gian tên với các tiền tố (xem
ví dụ 16):

Ví dụ 16. Ký hiệu Shorthand
@prefix ex: <> .
@prefix dc: < .
<> ex:name "Chaos Magnet" .
<> dc:creator
<> .

Chú ý rằng chỉ các URIrefs đầy đủ được hiển thị trong các dấu ngoặc. Có lẽ cách
phổ biến nhất để xem RDF, tuy nhiên, lại như XML. Ví dụ, bạn sẽ thấy những mối
quan hệ này như (xem ví dụ 17):

Ví dụ 17. Ký hiệu XML
<rdf:RDF
xmlns:rdf="
xmlns:ex = "#"
xmlns:dc="

<rdf:Description rdf:about="">
<ex:name>Chaos Magnet</ex:name>
<dc:creator rdf:resource="" />
</rdf:Description>
</rdf:RDF>


Bạn sẽ thấy rõ hơn về cách hiển thị RDF trong XML trong phần tiếp theo.

RDF/XML
XML không phải là cách duy nhất để hiển thị RDF. Trong một số trường hợp, nhất
là khi bạn cố gắng hình dung mối quan hệ giữa các nguồn và các đặc tính, thậm
chí đó không phải là cách tốt nhất. Nhưng chắc chắn đó là cách thông dụng nhất,
và khi được thực hiện với Web ngữ nghĩa, là cách thuận tiện nhất. Hãy xem cách
thức vận hành một cách chi tiết hơn.
Mô tả các nguồn đã tồn tại
Việc sử dụng RDF phổ biến nhất đó là mô tả các nguồn đã tồn tại, ví dụ như tất cả
hoặc một phần của một RSS feed. Trong các trường hợp đó, RDF được gộp trong
một tài liệu XML khác và được phần biệt thông qua việc sử dụng các không gian
tên XML. Tuy nhiên để đơn giản hơn, chúng ta hay xem xét riêng RDF.
Tôi sẽ bắt đầu với một tài liệu đơn giản mô tả dữ liệu được trả lại bởi một yêu cầu
đối với thẻ "movies" của Technorati (xem Ví dụ 18):

Ví dụ 18. Hãy mô tả một nguồn đã tồn tại
<rdf:RDF
xmlns:rdf=" />syntax-ns#"
xmlns:tapi="

<rdf:Description
rdf:about=" />

<tapi:Title>[Technorati] Tag results for
Movies</tapi:Title>
<tapi:PubDate>Sun, 30 Jul 2006 11:38:42
PST</tapi:PubDate>


<tapi:Inboundlinks>321580</tapi:Inboundlinks>

</rdf:Description>
</rdf:RDF>

Đây là một yếu tố đơn giản rdf:RDF với một mô tả Description bao gồm các đặc
tính cho nguồn được mô tả trong đặc tính rdf:about. Trong trường hợp này, các
đặc tính là từ không gian tên vì vậy nếu bạn mở
rộng các không gian tên, chúng ta thấy rằng thuộc tính title, ví dụ như vậy, thực sự
là thuộc tính của
Theo cách này, bạn có thể thêm bao nhiêu đặc tính vào nguồn là tùy thuộc vào
bạn.
Cũng cần chú ý rằng đây không chỉ là cách để hiển thị RDF trong XML. Do bởi
bạn thường kèm RDF trong các tài liệu khác, bạn luôn làm như vậy để họ không
động chạm tới thông tin gốc. Tuy nhiên cách mà tôi thể hiện các dữ liệu ở đây là
nếu tôi đã thêm thông tin vào trình duyệt, thì nội dung văn bản của các thành tố đó
sẽ xuất hiện trên trang web. Đây chỉ là cách thức mà dĩ nhiên cần như vậy, hiển thị
hành vi mặc định của trình duyệt một cách đơn giản thể hiện nội dung của bất kỳ
các phiên nào mà nó không hiểu được.
Để tránh vấn đề đó, chúng ta có thể sử dụng phương pháp thay thế bằng cách sắp
xếp thông tin theo các thuộc tính thay vì các thành tố. (xem Ví dụ 19):

Ví dụ 19. Dữ liệu RDF trong các thành tố
<rdf:RDF
xmlns:rdf="
xmlns:tapi="

<rdf:Description rdf:about="
tapi:Title="[Technorati] Tag results for Movies"
tapi:PubDate="Sun, 30 Jul 2006 11:38:42 PST"

tapi:Inboundlinks="321580" />

</rdf:RDF>

Thông tin tương tự, nhưng hiện nay nó được chứa trong các giá trị thuộc tính hơn
là nội dung thành tố, và nó sẽ không được thể hiện bởi một trình duyệt.


Xác định loại dữ liệu
Đôi khi bạn muốn cụ thể hóa cách thức dữ liệu được xử lý, vì vậy thật hữu ích để
có thể cụ thể một loại dữ liệu dự định. Ví dụ (xem Ví dụ 20):

Ví dụ 20. Xác định các loại dữ liệu
<rdf:RDF
xmlns:rdf="
xmlns:tapi="

<rdf:Description rdf:about="

<tapi:Title>[Technorati] Tag results for Movies</tapi:Title>
<tapi:PubDate
rdf:datatype="
Sun, 30 Jul 2006 11:38:42 PST
</tapi:PubDate>
<tapi:Inboundlinks
rdf:datatype="
321580
</tapi:Inboundlinks>

</rdf:Description>

</rdf:RDF>

Trong trường hợp này, tôi xác định các thành tố PubDate và Inboundlinks nên là
ngày tháng và số nguyên như đã được xác định trong đặc tả lược đồ XML. Bạn có
thể nói rằng phiên bản Lược đồ XML của các loại này được dựa trên các không
gian tên trong các URIref của chúng. Không có gì nói rằng bạn cần sử dụng loại
dữ liệu Lược đồ XML, nhưng chúng là trong tầm tay và các trình ứng dụng XML
thường đã hiểu chúng, vì vậy không có lý do gì để không sử dụng chúng.
Bạn cũng có thể hiện thị loại trong ký hiệu N3, như trong (xem Ví dụ 21):

Ví dụ 21. Xác định các loại dữ liệu trong ký hiệu N3
<
<
"321580"^^ .


Cần chú ý rằng bản thân RDF không đóng vai trò gì để bắt buộc hoặc duyệt các
loại dữ liệu này. Không có gì có thể ngăn bạn nhập một chuỗi hoặc một số cho
một URL. RDF đơn giản là cung cấp cách thức để biểu thị thông tin; trình ứng
dụng RDF có trách nhiệm đảm bảo dữ liệu thích hợp.


Tham khảo các nguồn hiện thời
Đôi khi bạn chỉ mô tả các nguồn hiện thời, bạn sử dụng chúng để mô tả các nguồn
khác. Ví dụ, bạn có thể thêm vào nguồn mà bạn mô tả và thêm vào đặc tính Hình
ảnh. (xem Ví dụ 22):

Ví dụ 22. Tham khảo một nguồn như một giá trị đặc tính
<rdf:RDF
xmlns:rdf="

xmlns:tapi="

<rdf:Description rdf:about="

<tapi:Title>[Technorati] Tag results for Movies</tapi:Title>
<tapi:PubDate
rdf:datatype="
Sun, 30 Jul 2006 11:38:42 PST
</tapi:PubDate>
<tapi:Inboundlinks
rdf:datatype="
321580
</tapi:Inboundlinks>

<tapi:Image rdf:resource
"

</rdf:Description>
</rdf:RDF>

Hãy chú ý rằng bạn xác định các giá trị như một rdf:resource, và sử dụng các URI
của nguồn đó như giá trị đặc tính thực sự. Tuy nhiên trong một số trường hợp,
nguồn mà bạn muốn tham chiếu không được xác định bên ngoài không gian tên
hiện thời. Ví dụ, sẽ ra sao nếu hình ảnh mà bạn tham chiếu không chỉ là tệp mà

×