Metadane w Internecie, czyli RDF
- co to są metadane i po co one
- metadane w internecie
- RDF: model i składnia
- RDF Schema, Dublin Core
- Jena - API do RDFów
- KR: RDF i Prolog
Co są metadane
- dane o danych
- własności danych
- trzymane obok
- płynna definicja (np. tytuł)
- tabelka 'Właściwości' w MS Wordzie
- spis treści
- karta w bibliotece
Metadane strony WWW
- <meta name="author" content="Karol Bieńkowski">
- author
- description
- keywords
- generator
- title (?)
- tekst linku (w Googlu)
Po co są?
- dodatkowy opis zasobu
- wyszukiwanie
- katalogowanie
- KR - Knowledge Representation
Dlaczego są niewystarczające?
- niejednoznaczne (np. Sun)
- tylko literały (email autora?)
- ograniczona ilość
- potrzebne podklasowanie (np. short-description)
- opis tylko bieżącej strony (nie cudzej)
- tylko do HTMLi, a co z obrazkami?
Co to oznacza?
- takie metadane nie nadają się do automatycznej
interpretacji
- odbija się to niekorzystnie na wyszukiwaniu
danych w internecie
- wyszukiwarki myszą "zgadywać"
- na podstawie linków (treść, jakość strony)
- na podstwie adresów http (np. które strony tworzą całość, autora)
- indeksuje się tylko HTMLe (ew. PDFy, ale nie JPEGi)
Jakie metadane by się przydały?
- które strony tworzą jedną logiczną
- mirrory
- nowe wersje
- katalogi, osobiste rankingi
- oraz: klasyfikcja ACM treści, prawa autorskie, własność,
dozwolony sposób wykorzystania, itp.
Gdyby było to...
- wyszukiwanie zasobów
- katalogowanie (opis treści, związków)
- inteligentne wyszukiwanie, wnioskowanie? na podstawie
modelu wiedzy
- rankingi stron
- kolekcje stron jako jeden dokument (np. slajdy)
- ochorona własności intelektualnej
- wyszukiwanie multimediów po treści
Lekarstwo na niejednoznaczności: URI
- Firma od Javy:
- http://www.sun.com
- Sun Microsystems, Inc
4150 Network Circle
Santa Clara. CA 95054
USA
- http://www.nasdaq.com/companies/SUN (FT pisze "Nasdaq: SUN")
- Najbliższa gwiazda
- http://www.nasa.gov/catalog/stars/Sun
- Mój but:
- http://www.bienkowski.net/2002/buty/tenisówki/lewa
Schematy
- cudów nie ma: trzeba stworzyć schemat i nauczyć
software go rozpoznawać
- schemat: słownik zawierający terminy z pewniego zakresu (klasy, instancje, własności)
- każdy schemat ma prefiks, np. http://www.nasdaq.com/companies/ (w skrócie nasdaq)
- mamy więc nasdaq:SUN, ale i nasdaq:number
- podstawowy schemat: XML Schema (rdfs:label, rdfs:subClassOf,
rdfs:domain, rdfs:range)
- schematy można dziedziczyć (jak agent nie zna podklasy,
to interpetuje nadklasę), wielodziedziczenie
- więc: ponowne wykorzystanie schematów, wymiana informacji,
łatwe rozwijanie, te same dane można
modelować w wielu schematach (np. Sun w Nasdaq oraz
Sun w bazie dostawców)
- schemat to diagram ERD: są klasy i własności
RDF - Resource Description Framework
- http://www.w3.org/RDF/
- abstrakcyjny model metadanych
- dowolne zastosowanie, niekoniecznie Web
- metody serializacji (m. in. do XML-a)
- XML, bo: wiele platform, i18n, charsety
- RDF. XML - mogą bez siebie istnieć!
RDF: Model
- bardzo prosty
- nazwane własności obiektów: albo atrybuty (tytuł dokumentu)
albo związki (autor dokumentu)
- ten sam model można różnie zobrazować: albo XML albo graf
- model składa się z: zasobów (resources), własności
(properites), literałów (literal)
oraz zdań (statements)
Zasób (resource)
- każda rzecz opisywana przez RDF to zasób
- np. strona WWW (http://bienkowski.net/)
- np. część strony (http://....../index.html#chapter2)
- np. książka Thinking in Java z czerwca 2000 (isbn:0130273635)
- np. osoba, ale pod warunkiem, że ma identyfikator URI
(http://www.empolis.com/people/bien04)
Własność (property)
- aspekt, cecha, charakterystyka, atrybut lub replacja
- do opisu zasobu
- własność to też zasób
- własności też mają URI (http://www.nasa.gov/properties/magnitutyde)
- własności mogą mieć własności (np. etykiete, rdfs:label)
- własnościami własnośi są rdfs:domain, rdfs:range
Zdanie (statement)
- zasób wraz z przypisaną własnością
- to trójka: subject, predicate, object
- object to albo resource albo literal
- litral to po prostu napis, np. "Bieńkowski"
- RDF-owy model wiedzy składa się wyłaącznie z takich trójek
Najprostsze zdanie
Przykłady i obrazki na kolejnych stronach pochodzą ze
specyfikacji RDF.
Ora Lassila is the creator of the resource
http://www.w3.org/Home/Lassila.
| Subject (Resource) |
http://www.w3.org/Home/Lassila |
| Predicate (Property) | Creator |
| Object (Litral) | "Ora Lassila" |
Uwaga: Creator powinno mieć prefiks, np.
http://purl.org/metadata/dublin_core#Creator

owale: zasoby, prostokąty: klierały
Złożone metadane
- wartością metadanej nie jest już literał lecz zasób
- powstał węzeł anonimowy (zasób)
- mamy teraz trzy zdania:
- [http://www.w3.org/Home/Lassila] [Creator] [X]
- [X] [Name] "Ora Lassila"
- [X] [Email] "lassila@w3.org"
- możemy opisywać dowolne obiekty: tu osobę
Nazywamy anonimowy węzeł
Po co nazywać? Żeby mieć do niego dostęp.
Kolekcje
- kolekcje są często wykorzystywane, więc RDF definiuje
jak je przedstawiać przy pomocy trójek
- w tym celu jest określona sementyka własności:
rdf:type, rdf:_1, rdf:_2, ..., rdf:Bag, rdf:Seq, rdf:Alt
- rdf: oznacza http://www.w3.org/1999/02/22-rdf-syntax-ns#
Jedna czy wiele własności?
Wiele własności:

Jedna własność:
Przestrzenie nazw w XML-u
- instancja XMLa: zbiór znaczników i atrybutów (np. MathML, XHTML)
- każda instancja XML ma URI (jednoznaczne, np.
http://bienkowski.net/rower-ns#)
- w dokumencie używa się krótkich prefisków, np. rower:)
- rower:Koło to skrót na http://bienkowski.net/rower-ns#Koło
- deklaracja namespaców <root
xmlns:rower="http://bienkowski.net/rower-ns#"/>
Serializacja do XML-a
Zdanie: Ora Lassila is the creator of the resource
http://www.w3.org/Home/Lassila., czyli:
[http://www.w3.org/Home/Lassila]
[http://description.org/schema/Creator] "Ora Lassila"
<?xml version="1.0"?>
<rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:s="http://description.org/schema/">
<rdf:Description about="http://www.w3.org/Home/Lassila">
<s:Creator>Ora Lassila</s:Creator>
</rdf:Description>
</rdf:RDF>
Serializacja trzech zdań
The individual referred to by employee id 85740 is named Ora Lassila and
has the email address lassila@w3.org.
The resource http://www.w3.org/Home/Lassila
was created by this individual.
<rdf:RDF>
<rdf:Description about="http://www.w3.org/Home/Lassila">
<s:Creator rdf:resource="http://www.w3.org/staffId/85740"/>
</rdf:Description>
<rdf:Description about="http://www.w3.org/staffId/85740">
<v:Name>Ora Lassila</v:Name>
<v:Email>lassila@w3.org</v:Email>
</rdf:Description>
</rdf:RDF>
Składnia zagnieżdżona
To samo zdanie co wyżej. Gdyby pominąć
about="http://www.w3.org/staffId/85740"
węzeł stałby się anonimowy.
<rdf:RDF>
<rdf:Description about="http://www.w3.org/Home/Lassila">
<s:Creator>
<rdf:Description about="http://www.w3.org/staffId/85740">
<v:Name>Ora Lassila</v:Name>
<v:Email>lassila@w3.org</v:Email>
</rdf:Description>
</s:Creator>
</rdf:Description>
</rdf:RDF>
Serializacja kolekcji
The students in course 6.001 are Amy, Tim, John, Mary, and Sue.
<rdf:RDF>
<rdf:Description about="http://mycollege.edu/courses/6.001">
<s:students>
<rdf:Bag>
<rdf:li resource="http://mycollege.edu/students/Amy"/>
<rdf:li resource="http://mycollege.edu/students/Tim"/>
<rdf:li resource="http://mycollege.edu/students/John"/>
<rdf:li resource="http://mycollege.edu/students/Mary"/>
<rdf:li resource="http://mycollege.edu/students/Sue"/>
</rdf:Bag>
</s:students>
</rdf:Description>
</rdf:RDF>
Dublin Core Metadata Inititiative
- http://dublincore.org/
- organizacja promująca wykorztystanie metadanych
- tworzy scheamty metadanych dla różnych zastsowań
- otwarta i międzynarodowa
- ludzie z różnych firm, założyciel z OCLC
Dublin Core
- zbiór 15 elementów do opisu zasobów sieciowych
- URI elementów oraz ich semantyka
- inaczej: prosty język do opisu dokumentów
- elementy:
- Content: Coverage, Description, Type, Relation, Source, Subject, Title
- Intellectual Proeprty: Contributor, Creator, Publisher, Rights
- Instantiation: Date, Format, Identifier, Language
- definicja
Przykład: Opis strony WWW przy pomocy schematu Dublin Core
<rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:dc="http://purl.org/metadata/dublin_core#">
<rdf:Description about="http://www.dlib.org">
<dc:Title>D-Lib Program - Research in Digital Libraries</dc:Title>
<dc:Description>The D-Lib program supports the community of people
with research interests in digital libraries and electronic
publishing.</dc:Description>
<dc:Publisher>Corporation For National Research Initiatives</dc:Publisher>
<dc:Date>1995-01-07</dc:Date>
<dc:Subject>
<rdf:Bag>
<rdf:li>Research; statistical methods</rdf:li>
<rdf:li>Education, research, related topics</rdf:li>
<rdf:li>Library use Studies</rdf:li>
</rdf:Bag>
</dc:Subject>
<dc:Type>World Wide Web Home Page</dc:Type>
<dc:Format>text/html</dc:Format>
<dc:Language>en</dc:Language>
</rdf:Description>
</rdf:RDF>
Przykład jak umieścić RDF na stronie HTML
<html>
<head>
<rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:dc="http://purl.org/metadata/dublin_core#">
<rdf:Description about="">
<dc:Creator>
<rdf:Seq ID="CreatorsAlphabeticalBySurname"
rdf:_1="Mary Andrew"
rdf:_2="Jacky Crystal"/>
</dc:Creator>
</rdf:Description>
</rdf:RDF>
</head>
<body>
<P>This is a fine document.</P>
</body>
</html>
Co jest, a czego nie ma w RDFie
- jest sposób na definiowanie własności obiektów
- nie można powiedzieć jakie obiekt może mieć własności
- brak własności o ustalonej semantyce
- wyjątki: rdf:type, rdf:_1, rdf:_2, ..., rdf:Seq
- brakuje pojęć znanych z języków obiektowych: klasa, obiekt, atrybut
klasy
- trochę jakby: 'jest gramatyka, ale nie ma słów'
- wiadomo, że są potrzebne specyficzne schematy (np. medyczny), ale
istnieje pewna część wspólna, której nie ma w RDFie
RDF Schema
- http://www.w3.org/TR/rdf-schema/
- RDF Schema słyży do opisu zasobów, własnośc i ich powiązań
- RDF Schema to uzupełnienie standardu RDF
- przy pomocy RDF Schemy można definiować własne schematy
(np. Dublin Core)
- schemat to (przypomnienie): obiekty, własności,
reguły jak używać własności
- RDF Schema to też schemat. RDF Schema jest opisany
za pomocą RDF Schema :)
- vocabulary description language
- RDF Schama nie definiuje własności autor, mówi jak ją samemu
zdefiniować
Co to jest RDF Schema
- jest to schemat, więc definiuje słownictwo używane w pewnej dziedzinie
- tą dziedziną jest definiowanie schematów
- RDF schema wprowadza URI zasobów (i własności) oraz podaje ich
semantykę
- RDF Schema ma prefiks http://www.w3.org/2000/01/rdf-schema#,
oznaczany tu jako rdfs:
- rdf: oznacza
http://www.w3.org/1999/02/22-rdf-syntax-ns#
Wykorzystanie RDF Schemy
Dziedzina (domain) i przeciwdziedzina (range)
- w Javie: definicja klasy określa możliwe atrybuty instancji
- w RDFS: definicja własności określa do jakich instancji można jej
użyć (nie ma definicji klas)
- Czemu? W ten sposób można opisywać istniejące instancje własnymi
cechami (np. [eg:Java] [kb:podobaMiSię] "tak")
- rdfs:domain - dziedzina własności, czyli klasa, której
instancje mogą mieć tę cechę
- rdfs:range - przeciwdziedzina, czyli klasa, której instancje
mogą być wartościami cech
- [eg:author] [rdfs:domain] [eg:Document]
[eg:author] [rdfs:range] [dc:Person]
Klasy w RDFS
- rdfs:Resource - wszystko jest zasobem
- rdfs:Class - pojęcie klasy, [rdfs:Class rdf:type rdfs:Class],
[rdfs:Class rdfs:subClassOf rdfs:Resource], [rdf:type] [rfds:range]
[rdfs:Class]
- rdfs:Literal - pojęcie literału
- własność bycia instancją: rdf:type
- metaklasy: [kb:mojeCV rdf:type kb:CV], [kb:CV rdf:type kb:TypDokumentu]
Własności w RDFS
- rdfs:range : rdf:Property -> rdfs:Class
- rdfs:domain : rdf:Property -> rdfs:Class, czyli
[rdfs:domain rdfs:domain rdf:Property] oraz
[rdfs:domain rdfs:range rdfs:Class]
- rdfs:label : rdfs:Resource -> rdfs:Literal
- rdfs:subClassOf : rdfs:Class -> rdfs:Class
- rdf:type : rdfs:Resource -> rdfs:Class
RDF Schema przy pomocy RDF Schemy
Open Directory Project
- http://dmoz.org/
- opis Internetu przy pomocy metadanych
- własność Netscape'a, ale za darmo każdy może korztystać
- prosta struktura metadanych: tytuł, opis, kategoria (drzewo)
- tworzony przez ludzi, są opiekunkowie gałęzi
- można wyeksportować do RDF-a
- korzystają z tego wyszukiwarki (np. Google)
Jena - Java API dla RDF
Jena - tworzenie zasobu
// some definitions
String personURI = "http://somewhere/JohnSmith";
String givenName = "John";
String familyName = "Smith";
String fullName = givenName + " " + familyName;
// create an empty graph
Model model = new ModelMem();
// create the resource
// and add the properties cascading style
Resource johnSmith
= model.createResource(personURI)
.addProperty(VCARD.FN, fullName)
.addProperty(VCARD.N,
model.createResource()
.addProperty(VCARD.Given, givenName)
.addProperty(VCARD.Family, familyName));
Jena - wypisywanie zasobów
// list the statements in the graph
StmtIterator iter = model.listStatements();
// print out the predicate, subject and object of each statement
while (iter.hasNext()) {
Statement stmt = iter.next(); // get next statement
Resource subject = stmt.getSubject(); // get the subject
Property predicate = stmt.getPredicate(); // get the predicate
RDFNode object = stmt.getObject(); // get the object
System.out.print(subject.toString());
System.out.print(" " + predicate.toString() + " ");
if (object instanceof Resource) {
System.out.print(object.toString());
} else {
// object is a literal
System.out.print(" \"" + object.toString() + "\");
}
System.out.println(" .");
}
Co może Jena?
- wczytywanie modelu z pliku
- zapisywanie do pliku
- praca na niezależnych modelach
- operacje na całych modelach (np. suma)
- pobieranie z modelu: listStatements(),
listStatementsWithPredicate(),
listStatements(Selector), itp.
- Statement s =
model.getResource("http://bienkowski.net").getProperty(KB.author);
String name =
s.getObject().getProperty(KB.name).getString()
RDQL
Przykładowy model (z Jena Tutorial z hp.com):
RDQL - proste zapytania
Zapytanie:
SELECT ?x
WHERE (?x, <http://www.w3.org/2001/vcard-rdf/3.0#FN>, "John Smith")
Wynik:
x
=============================
<http://somewhere/JohnSmith/>
Zapytanie:
SELECT ?x, ?fname
WHERE (?x, <http://www.w3.org/2001/vcard-rdf/3.0#FN>, ?fname)
Wynik:
x | fname
================================================
<http://somewhere/JohnSmith/> | "John Smith"
<http://somewhere/RebeccaSmith/> | "Becky Smith"
<http://somewhere/SarahJones/> | "Sarah Jones"
<http://somewhere/MattJones/> | "Matt Jones"
RDQL - zapytanie ze złączeniem
Zapytanie:
SELECT ?givenName
WHERE (?y, <http://www.w3.org/2001/vcard-rdf/3.0#Family>, "Smith") ,
(?y, <http://www.w3.org/2001/vcard-rdf/3.0#Given>, ?givenName)
Wynik:
givenName
=========
"John"
"Rebecca"
Zapytanie:
SELECT ?resource, ?givenName
WHERE (?resource, <http://www.w3.org/2001/vcard-rdf/3.0#N>, ?z) ,
(?z, <http://www.w3.org/2001/vcard-rdf/3.0#Given>, ?givenName)
Wynik:
resource | givenName
============================================
<http://somewhere/JohnSmith/> | "John"
<http://somewhere/RebeccaSmith/> | "Rebecca"
<http://somewhere/SarahJones/> | "Sarah"
<http://somewhere/MattJones/> | "Matthew"
Co jest, a czego nie ma w RDQLu?
- są proste klauzule WHERE, do testowanie literałów
(np. WHERE ?age > 15)
- jest klauzula USING do definiowania prefiksów
- nie ma: sortowania, OR-ów, złączeń zewnętrznych
- rekurencja (np. rdfs:subClassOf)
RDF i Prolog
- Knowledge Representation (dziedzina AI)
- RDF: [http://przykład.pl/elementarz#Ala]
[http://przykład.pl/elementarz#ma]
[http://przykład.pl/elementarz#kota]
- Prolog: 'http://przykład.pl/elementarz#ma'('http://przykład.pl/elementarz#Ala',
'http://przykład.pl/elementarz#kota').
- lub: rdf_triple('http://przykład.pl/elementarz#Ala',
'http://przykład.pl/elementarz#ma', 'http://przykład.pl/elementarz#kota').
- reguły: posiadacz(X) :- rdf_triple(X, e:ma, Y)., itp.
- subClassOf(X, Y) :- rdf_triple(X, rdfs:subClassOf, Y).
subClassOf(X, Y) :- rdf_triple(X, rdfs:subClassOf, Z), subClassOf(Z, Y).
- korzyści: wygodny interfejs/proxy
- są wydajne parsery: np. SWI-Prolog
Karol Bieńkowski