Internet Semantyczny Składnia RDF i RDFa Wiedza jest grafem Frank van Harmelen, ISWC 2011
Problem z przetwarzaniem informacji Przyczyna Informacja znajdująca się w Internecie jest zrozumiała dla człowieka, ale nie nadaje się do przetwarzania przez maszyny. Jakie rozwiązanie? Zapiszmy informacje w sposób zrozumiały dla maszyn.
Ewolucja Internetu Internet dzisiaj Internet Semantyczny Jorge Cardoso, The Syntactic and the Semantic Web, in Semantic Web Services: Theory, Tools, and Applications, IGI Global, 2007.
Ewolucja Internetu John Hebeler, Matthew Fisher, Ryan Blace, Andrew Perez-Lopez, Semantic Web Programming, Wiley, 2009.
Stos technologii Internetu Semantycznego Zaufanie Dowód Logika OWL, Ontologie Podpis cyfrowy RDF, RDF schema XML, schematy XML przestrzenie nazw URI
Zasoby RDF jest formatem zapisu informacji w Internecie Semantycznym. W języku RDF opisujemy zasoby. Zasobem może być dowolny obiekt znajdujący się w sieci, pojęcie abstrakcyjne, relacja czy obiekt fizyczny. Każdy zasób musi posiadać identyfikator IRI (Internationalized Resource Identifier). W IRI mogą pojawić się znaki z Uniwersalnego Zestawu Znaków (UCS Universal Character Set) określonego przez normę ISO/IEC 10646. IRI jest uogólnieniem URI (tylko znaki ASCII). URL jest ważnym przykładem URI.
Stwierdzenia Zasoby opisujemy za pomocą stwierdzeń (odpowiedniki zdań oznajmujących w języku naturalnym). W skład każdego stwierdzenia wchodzą następujące elementy: podmiot (subject) zasób (np. osoba, miejsce, rzecz) o którym mówi stwierdzenie. orzeczenie (predicate) zasób będący właściwością (np. nazwa, miasto, tytuł, kolor, charakterystyka) podmiotu. obiekt (object) wartość właściwości opisywanej przez orzeczenie. Obiekt może być zasobem lub tzw. literałem czyli ciągiem znaków.
Graficzna reprezentacja stwierdzeń Przykład Twórcą strony http://web.net/ jest Marek Bajon http://web.net http://fg.com/tworca Marek Bajon
Grafy RDF
Grafy RDF
Puste węzły W języku RDF dopuszczalne jest wykorzystywanie zasobów które nie posiadają identyfikatorów URI. Węzeł grafu związany z takim zasobem nazywamy węzłem pustym (ang. blank node). Pojawienie się pustego węzła może oznaczać, że identyfikator URI dla danego zasobu nie istnieje lub jest w danej chwili nieznany. Pusty węzeł może pojawić się na miejscu podmiotu i obiektu. Pusty węzeł ma zwykle przypisany przez walidator lokalny identyfikator.
Grafy RDF pusty węzeł
Grafy RDF
Grafy RDF
Grafy RDF Identyfikator
Grafy RDF Typ literału Grafy RDF pozwalają w wygodny i przejrzysty sposób reprezentować informacje. Przeznaczone są jednak dla ludzi, a nie dla aplikacji.
Serializacja RDF Serializacja RDF to konwersja między modelem abstrakcyjnym jakim są grafy i konkretnym formatem takim jak plik czy inny strumień bajtów. Istnieje kilka formatów serializacji RDF: RDF/XML, Turle, N-Triples, N3
Turtle - zasoby Jest to najprostsza i najbardziej zwięzła serializacja RDF. W porównaniu z innymi serializacjami Turtle jest też najbardziej czytelna dla ludzi. Zasoby Zasoby mogą być zapisane na dwa sposoby: Pełne URI umieszczone są w nawiasach < i >. Przykład Rozszerzenie pliku:.ttl Typ MIME: text/turtle <http://www.semantict.net/data/author>
Turtle - zasoby Aby uniknąć pisania pełnych identyfikatorów URI możemy używać zdefiniowanych wcześniej prefiksów. Otrzymujemy wówczas tzw. qualified name. Nazwa kwalifikowana (qnazwa) składa się z następujących elementów: Przykład prefiks_przestrzeni_nazw:lokalna_nazwa_zasobu Jeżeli prefiks abc związany jest z przestrzenią nazw http://www.semantict.net/data/ wówczas zasób z poprzedniego slajdu możemy zapisać następująco: abc:author
Turtle - zasoby Deklaracja przestrzeni nazw wygląda następująco: Przykład @prefix definiowany_prefiks: URI_przestrzeni_nazw. Deklaracja przestrzeni nazw użytej w poprzednim przykładzie: @prefix abc: http://www.semantict.net/data/.
Turtle - literały Literały (plain literals) W zapisie literałów nie zawierających przejścia do nowej linii wykorzystywany jest cudzysłów: "krotki literal" Jeżeli literał zapisany jest z przejściem do nowej linii wówczas stosujemy potrójny cudzysłów: """dlugi literal """ Do literału może też być dodana informacja o języku postaci: @language * """Warsaw"""@en *http://tools.ietf.org/html/rfc3066
UWAGA: nie można określić jednocześnie i typu danych i języka. Turtle - literały Literały z określonym typem danych (typed literals) Turtle umożliwia zapis typu literału przez dodanie do niego następującego ciągu znaków: ^^<dataype URI> gdzie datatype URI określa typ danych (często są to typy z XML Schema). Przykład "34"^^http://www.w3.org/2001/XMLSchema#int "Warsaw^^http://www.w3.org/rdf-schema#Literal """-12.5e10"""^^xsd:double
Turtle - stwierdzenia Stwierdzenia Podmiot, orzeczenie i obiekt zapisywane są w linii i oddzielone spacją. Stwierdzenie zakończone jest kropką. Przykład @prefix intrordf: <http://rdf.s.net/e#>. @prefix a: <http://xy.ab.net/>. @prefix sem: <http://ab.xy.net/>. sem:p10 intrordf:autor "Marek Nowak". sem:p10 intrordf:tytul "Ontologia". sem:p10 a:seria sem:sweb. sem:sweb intrordf:tytul "Semantic Web".
Turtle - stwierdzenia Przykład Równoważnie z użyciem pełnych identyfikatorów URI: <http://ab.xy.net/p10> <http://rdf.s.net/e#autor> "Marek Nowak". <http://ab.xy.net/p10> <http://rdf.s.net/e#tytul> "Ontologia". <http://ab.xy.net/p10> <http://xy.ab.net/seria> <http://ab.xy.net/sweb>. <http://ab.xy.net/sweb> <http://rdf.s.net/e#tytul> "Semantic Web".
Turtle - stwierdzenia Uproszczenie 1 Użycie średnika oznacza, że następne dwa elementy będą orzeczeniem i obiektem stwierdzenia o takim samym podmiocie jak stwierdzenie wcześniejsze. Przykład sem:p10 intrordf:autor "Marek Nowak". sem:p10 intrordf:tytul "Ontologia". sem:p10 intrordf:autor "Marek Nowak"; intrordf:tytul "Ontologia".
Turtle - stwierdzenia Uproszczenie 2 Użycie przecinka oznacza, że następny element będzie obiektem stwierdzenia o takim samy podmiocie i orzeczeniu jak stwierdzenie wcześniejsze. Przykład sem:p10 intrordf:autor "Marek Nowak". sem:p10 intrordf:autor "Agata Kłos". sem:p10 intrordf:autor "Marek Nowak", "Ontologia".
Turtle - stwierdzenia Uproszczenie 3 Możemy zdefiniować bazową przestrzeń nazw, która będzie wykorzystywana w przypadku zasobów bez określonego prefiksu. @base URI_bazowej_przestrzeni_nazw. Przykład @base <http://a.b.cc/>. @prefix p: <http://x.y.zz/>. :d p:r "Marek Nowak". <http://a.b.cc/d> <http://x.y.zz/r> "Marek Nowak".
Turtle - stwierdzenia Przykład @prefix : <http://a.b.cc/>. @prefix p: <http://x.y.zz/>. :d p:r "Marek Nowak". <http://a.b.cc/d> <http://x.y.zz/r> "Marek Nowak". @base <http://a.b.cc/>. <#ax> <#bx> "Marek Nowak". <http://a.b.cc/#ax> <http://a.b.cc/#bx> "Marek Nowak".
Turtle puste węzły Puste węzły oznaczamy przez _:nazwa. Przykład semt:intrordf intrdf:autor _:aautor. _:aautor intrdf:imie "Marcin". _:aautor intrdf:wiek "34".
Turtle puste węzły Puste węzły można także oznaczyć przez []. Przykład @prefix sem: <http://ab.xy.net/>. [] sem:autor "Marek Nowak". walidator _:bnode1874316544 <http://ab.xy.net/autor> "Marek Nowak".
Turtle puste węzły Puste węzły można także oznaczyć przez []. Przykład @prefix sem: <http://ab.xy.net/>. [sem:autor "Marek Nowak"]. walidator _:bnode1874316544 <http://ab.xy.net/autor> "Marek Nowak".
Turtle puste węzły Puste węzły można także oznaczyć przez []. Przykład Można zapiać inaczej: _:aautor intrdf:imie "Marcin". _:aautor intrdf:wiek "34". [intrdf:imie "Marcin"] intrdf:wiek "34".
Turtle puste węzły Przykład [intrdf:imie "Marcin"] rdfint:autor [intrdf:tytul "Wprowadzenie do RDF"].
RDF źródła Walidatory: Adres: http://www.w3.org/rdf/validator/ Możliwości: tylko RDF/XML, rysowanie grafów Adres: http://www.rdfabout.com/demo/validator/ Możliwości: konwersja między formatami Biblioteki: Adres: http://jena.sourceforge.net/ Nazwa: Jena Semantic Web Framework - Java Adres: http://soprano.sourceforge.net/ Nazwa: Soprano - the Qt/C++ RDF framework Wszystko: http://planetrdf.com/guide/
RDF i HTML Czy stwierdzenia RDF można umieścić w kodzie źródłowym strony HTML?
Maszyna vs człowiek To co widzi maszyna To co widzi człowiek
Co to jest RDFa? Technologia RDFa pozwala na łączenie XHTML i RDF. Do standardowych elementów XHTML mogą być dodane informacje przeznaczone dla maszyn. Dzięki temu zawartość dokumentu XHTML staje się częściowo zrozumiała dla maszyn (machine-readable). Dla maszyn te dodatkowe informacje stwierdzeń RDF. mają postać Stwierdzenia RDF dodawane są do kodu strony za pomocą atrybutów m.in. atrybutów języka XHTML. UWAGA: Atrybuty te można także stosować w języku HTML.
CURIE i SafeCURIE CURIE to kompaktowy identyfikator URI. Identyfikatory CURIE jest rozszerzeniem nazw kwalifikowanych. W przypadku nazwy kwalifikowanej ciąg znaków po dwukropku musi być poprawną nazwą z punktu widzenia języka XML. W przypadku CURI tak być nie musi. Przykład home:#start joseki: google:xforms+or+'xml+forms' SafeCURIE to CURIE w nawiasach [ i ]. [home:#start] [google:xforms+or+'xml+forms']
Atrybuty RDFa W jaki sposób wprowadzamy poszczególne elementy stwierdzeń RDF? XHTML @rel wartość: lista kompaktowych URI, znaczenie: relacja między dwoma zasobami (orzeczenie). @rev - wartość: lista kompaktowych URI, znaczenie: relacja odwrotna między dwoma zasobami (orzeczenie). @content wartość: ciąg znaków (literał). @href wartość: URI (obiekt będący zasobem). @src wartość: URI (obiekt będący zasobem).
Atrybuty RDFa RDFa @about wartość: URI lub SafeCURIE, znaczenie: opisywany zasób (podmiot). @property wartość: lista kompaktowych URI, znaczenie: relacja między zasobem i literałem (orzeczenie). @resource wartość: URI lub SafeCURIE (obiekt). Funkcja podobna do @href, ale bez możliwości klikania.
Atrybuty RDFa Atrybuty i ich rola: podmiot orzeczenie obiekt about* property, rel, rev literał zasób content** resource, src, href * w przypadku użycia rev atrybut określa obiekt. ** obiektem może być także zawartość elementu XHTML. Powyższe atrybuty możemy dodawać do różnych elementów (znaczników). Dodając je należy jednak pamiętać o strukturze stwierdzeń RDF i o roli jaką wartości atrybutów mogą odgrywać (patrz powyższa tabela).
Atrybuty @xmlns pozwala definiować przestrzenie nazw w dokumencie. Przestrzenie nazw mogą być definiowane w elemencie html : <html xmlns="http://www.w3.org/1999/xhtml" xmlns:foaf="http://xmlns.com/foaf/0.1/" xmlns:cyc="http://www.cyc.com/2003/04/01/cyc/">... </html> albo np. w elemencie div: <div xmlns:foaf="http://xmlns.com/foaf/0.1/">... </div>
Przykład @rel wartość: lista kompaktowych URI, znaczenie: relacja między dwoma zasobami (orzeczenie). <html xmlns="http://www.w3.org/1999/xhtml" xmlns:foaf="http://xmlns.com/foaf/0.1/"> <head> <title>atrybut rel</title> podmiot <link about="http://www.semwebprogramming.org#matt" rel="foaf:knows" orzeczenie href="http://www.semwebprogramming.org#andrew"/> </head> obiekt </html> Wykorzystane atrybuty: podmiot orzeczenie obiekt about rel href
Przykład Stwierdzenie RDF umieszczone w kodzie strony: <http://www.semwebprogramming.org#matt> <http://xmlns.com/foaf/0.1/knows> <http://www.semwebprogramming.org#andrew>.
Przykład Dodajmy jedno orzeczenie: <html xmlns="http://www.w3.org/1999/xhtml" xmlns:foaf="http://xmlns.com/foaf/0.1/"> <head xmlns:cyc="http://www.cyc.com/2003/04/01/cyc/"> <title>atrybut rel</title> podmiot <link about="http://www.semwebprogramming.org#matt" rel="foaf:knows cyc:likesafriend" orzeczenia href="http://www.semwebprogramming.org#andrew"/> </head> obiekt </html> Wykorzystane atrybuty: podmiot orzeczenie obiekt about rel href
Przykład Stwierdzenia RDF umieszczone w kodzie strony: <http://www.semwebprogramming.org#matt> <http://xmlns.com/foaf/0.1/knows> <http://www.semwebprogramming.org#andrew>. <http://www.semwebprogramming.org#matt> <http://www.cyc.com/2003/04/01/cyc/likesasfriend> <http://www.semwebprogramming.org#andrew>.
Przykład @rev - wartość: lista kompaktowych URI, znaczenie: odwrotna relacja między dwoma zasobami (orzeczenie). <html xmlns="http://www.w3.org/1999/xhtml" xmlns:foaf="http://xmlns.com/foaf/0.1/"> <head> <title>atrybut rel</title> <link obiekt xmlns:cyc="http://www.cyc.com/2003/04/01/cyc/" about="http://www.semwebprogramming.org#matt" rev="foaf:knows cyc:likesasfriend" orzeczenia href="http://www.semwebprogramming.org#andrew"/> </head> </html> podmiot Wykorzystane atrybuty: podmiot orzeczenie obiekt href rev about
Przykład Stwierdzenia RDF umieszczone w kodzie strony: <http://www.semwebprogramming.org#andrew> <http://www.cyc.com/2003/04/01/cyc/likesasfriend> <http://www.semwebprogramming.org#matt>; <http://xmlns.com/foaf/0.1/knows> <http://www.semwebprogramming.org#matt>. (UWAGA: w przypadku atrybutu @rev kolejność elementów stwierdzenia jest odwrotna niż w przypadku atrybutu @rel zobacz stwierdzenia na slajdzie 46)
Przykład @content wartość: ciąg znaków (literał). <html xmlns="http://www.w3.org/1999/xhtml" xmlns:foaf="http://xmlns.com/foaf/0.1/"> <head> <title>atrybut content</title> podmiot <link about="http://www.semwebprogramming.org#matt" property="foaf:family_name" orzeczenie content="fisher"/> </head> </html> Wykorzystane atrybuty: obiekt podmiot orzeczenie obiekt about property content
Przykład Stwierdzenie RDF umieszczone w kodzie strony: <http://www.semwebprogramming.org#matt> <http://xmlns.com/foaf/0.1/family_name> "Fisher". To samo stwierdzenie otrzymamy w przypadku: <html xmlns="http://www.w3.org/1999/xhtml" xmlns:foaf="http://xmlns.com/foaf/0.1/"> <head> <title>atrybut content</title> <link about="http://www.semwebprogramming.org#matt" property="foaf:family_name">fisher</link> </head> </html> (obiektem stwierdzenia jest zawartość elementu link, a nie wartość atrybutu content Informatyki Stosowanej, jak w Uniwersytet poprzednim Łódzki przykładzie)
Przykład @src wartość: URI (obiekt będący zasobem). <html xmlns="http://www.w3.org/1999/xhtml" xmlns:foaf="http://xmlns.com/foaf/0.1/"> <body> obiekt <img src="http://www.semwebprogramming.org/title.png" rev="foaf:depiction" orzeczenie href="http://www.semwebprogramming.org"/> </body> </html> podmiot Wykorzystane atrybuty: podmiot orzeczenie obiekt href rev src
Przykład Stwierdzenie RDF umieszczone w kodzie strony: <http://www.semwebprogramming.org> <http://xmlns.com/foaf/0.1/depiction> <http://www.semwebprogramming.org/title.png>.
Przykład @property - wartość: lista kompaktowych URI, znaczenie: relacja między zasobem i literałem (orzeczenie). <html xmlns="http://www.w3.org/1999/xhtml" xmlns:foaf="http://xmlns.com/foaf/0.1/"> <body>here s the story of a man named <div about="http://www.semwebprogramming.org#matt" property="foaf:firstname foaf:nick" content="matt"> <div property="foaf:title" content="mr">fisher </div> </div> </body></html> Wykorzystane atrybuty: podmiot orzeczenie obiekt about property content
Przykład Stwierdzenia RDF umieszczone w kodzie strony: @prefix foaf: <http://xmlns.com/foaf/0.1/>. <http://www.semwebprogramming.org#matt> foaf:firstname "Matt"; foaf:nick "Matt"; foaf:title "Mr".
Przykład Modyfikacja <html xmlns="http://www.w3.org/1999/xhtml" xmlns:foaf="http://xmlns.com/foaf/0.1/"> <body>here s the story of a man named <div about="http://www.semwebprogramming.org#matt" property="foaf:firstname foaf:nick" content="matt"> <div property="foaf:title" content="mr">fisher </div> </div> </body> </html> podmiot orzeczenie obiekt
Przykład Stwierdzenia RDF umieszczone w kodzie strony: @prefix foaf: <http://xmlns.com/foaf/0.1/>. <http://www.semwebprogramming.org#matt> foaf:firstname "Matt"; foaf:nick "Matt"; foaf:title "Fisher".
Przykład @resource wartość: URI lub SafeCURIE (obiekt). Funkcja podobna do @href, ale bez możliwości klikania. <html xmlns="http://www.w3.org/1999/xhtml" xmlns:foaf="http://xmlns.com/foaf/0.1/" xmlns:swp="http://www.semwebprogramming.org#"> <body>here s the story of a man named <div about="http://www.semwebprogramming.org#ryan" rel="foaf:knows" resource="[swp:john]"> <div rel="foaf:knows" resource= "http://www.semwebprogramming.org#matt">matt </div> </div> </body></html> podmiot orzeczenie obiekt
Przykład Tylko to co ważne: Zasób będący obiektem jednego stwierdzenia i podmiotem drugiego. <div about="http://www.semwebprogramming.org#ryan" rel="foaf:knows" resource="[swp:john]"> <div rel="foaf:knows" resource= "http://www.semwebprogramming.org#matt">matt </div> </div> Stwierdzenie 1: podmiot orzeczenie obiekt about rel resource Stwierdzenie 2: podmiot orzeczenie obiekt resource rel reource
Przykład Stwierdzenia RDF umieszczone w kodzie strony: @prefix foaf: <http://xmlns.com/foaf/0.1/>. @prefix swp: <http://www.semwebprogramming.org#>. swp:ryan foaf:knows swp:john. swp:john foaf:knows swp:matt.
Przykład Zmodyfikujmy poprzedni przykład usuwając jeden atrybut resource: <div about="http://www.semwebprogramming.org#ryan" rel="foaf:knows"> <div rel="foaf:knows" resource= "http://www.semwebprogramming.org#matt">matt </div> </div> podmiot orzeczenie obiekt Stwierdzenie 1: podmiot orzeczenie obiekt about rel Stwierdzenie 2: podmiot orzeczenie obiekt rel reource
Przykład Stwierdzenia RDF umieszczone w kodzie strony: @prefix foaf: <http://xmlns.com/foaf/0.1/>. @prefix swp: <http://www.semwebprogramming.org#>. swp:ryan foaf:knows [foaf:knows swp:matt]. Równoważnie: @prefix foaf: <http://xmlns.com/foaf/0.1/>. @prefix swp: <http://www.semwebprogramming.org#>. swp:ryan foaf:knows _:p _:p foaf:knows swp:matt. pusty węzeł
Inne atrybuty @datatype wartością atrybutu może być URI lub kompaktowy URI. Atrybut określa typ literału będącego obiektem stwierdzenia. <html xmlns="http://www.w3.org/1999/xhtml" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:xsd="http://www.w3.org/2001/xmlschema"> <body> Thank you for purchasing Semantic Web Programming on <span about="http://www.semwebprogramming.org#book" property="dc:date" datatype="xsd:date">2009-05-02 </span> </body></html> podmiot orzeczenie obiekt
Inne atrybuty Stwierdzenie RDF umieszczone w kodzie strony: @prefix dc: <http://purl.org/dc/elements/1.1/>. <http://www.semwebprogramming.org#book> dc:date """2009-05- 02"""^^<http://www.w3.org/2001/XMLSchemadate>.
Inne atrybuty @typeof wartością atrybutu może lista kompaktowych URI. Atrybut określa typ zasobu (czyli klasę do jakiej należy zasób). <html xmlns="http://www.w3.org/1999/xhtml" xmlns:foaf="http://xmlns.com/foaf/0.1/"> <body> <div typeof="foaf:person">matt <div property="foaf:firstname">matt</div> <div property="foaf:familyname" content="fisher"/> </div> </body> </html> podmiot orzeczenie obiekt
Inne atrybuty Stwierdzenie RDF umieszczone w kodzie strony: @prefix foaf: <http://xmlns.com/foaf/0.1/>. [a foaf:person ; foaf:familyname "Fisher"; foaf:firstname "Matt"]. Konsekwencja zastosowania atrybutu typeof.
Inne atrybuty W poprzednim przykładzie podmiot stwierdzeń był zasobem bez URI. Spróbujmy to zmienić. <html xmlns="http://www.w3.org/1999/xhtml" xmlns:foaf="http://xmlns.com/foaf/0.1/"> <body> <div about="http://www.semwebprogramming.org#matt" typeof="foaf:person">matt <div property="foaf:firstname">matt</div> <div property="foaf:familyname" content="fisher"/> </div> </body> podmiot orzeczenie obiekt </html>
Inne atrybuty Stwierdzenia RDF umieszczone w kodzie strony: @prefix foaf: <http://xmlns.com/foaf/0.1/>. <http://www.semwebprogramming.org#matt> a foaf:person ; foaf:familyname "Fisher" ; foaf:firstname "Matt". Orzeczenie "a" wyraża przynależność zasobu będącego podmiotem stwierdzenia do klasy będącej obiektem stwierdzenia. Klasy (a także tzw. właściwości) opisujemy w schematach RDF oraz w tzw. ontologiach.
RDFa RDF Stwierdzenia RDF możemy wydobyć ze strony XHTML wykorzystując aplikację: http://www.w3.org/2007/08/pyrdfa/