Linguaggi per il Web Semantico Corso di Metodi di Estrazione delle Informazioni dal Web Roberto Navigli 02/01/2019
Perché linguaggi per il WS Nuove esigenze vengono soddisfatte da linguaggi pensati per le nuove problematiche Nell’ambito del Web Semantico, si è giunti a un insieme di linguaggi standard (W3C), ciascuno costruito sul precedente: Description Logics, linguaggi logici OWL Livello logico (supporto al ragionamento) RDF+RDFS Livello ontologico (definizione di ontologie) ? Livello schema (definizione del vocabolario) XML+XMLS OWL RDF Livello dei dati (modello dei dati e sintassi per i metadati)
Panoramica Non distingue tra struttura del contenuto e rappresentazione del documento HTML Permette di definire i propri tag e di strutturare le informazioni indipendentemente dalla loro futura ed eventuale resa grafica XML Definisce la struttura sintattica di un documento XML XMLS Permette di esprimere relazioni esistenti tra istanze concettuali (es. Autore-di(Buzzati, Deserto dei tartari)) RDF Permette di definire relazioni e concetti (es. Autore-di è una relazione, Libro è un concetto) RDFS Poggia su RDFS e permette di esprimere pienamente classi, relazioni, istanze, vincoli, ecc. OWL
XML: eXtensible Markup Language Linguaggio di markup Standard del W3C Semplicità di HTML (HyperText Markup Language Flessibilità di SGML (Standard Generalized Markup Language) Permette una strutturazione dei documenti Permette di separare la struttura dalla rappresentazione (al contrario di HTML)
Markup con XML Rex Stout è l’autore di molti romanzi gialli aventi come protagonisti il famoso Nero Wolfe e il suo aiutante e narratore Archie Goodwin <?xml version=“1.0”?> <autore>Rex Stout</autore> è l’autore di molti <genere>romanzi gialli</genere> aventi come protagonisti il famoso <protagonista>Nero Wolfe</protagonista> e il suo aiutante e narratore <narratore><protagonista> Archie Goodwin </protagonista></narratore>
Documenti XML Un documento XML è un insieme correttamente annidato di tag aperti e chiusi (elementi): <autore>Rex Stout</autore> Gli elementi possono avere un numero arbitrario di coppie attributo-valore: <libro rilegatura=“brossura”>La Divina Commedia</libro> Un documento XML sintatticamente corretto è detto ben formato.
Struttura di un documento XML Permettendo l’annidamento, un documento XML può essere rappresentato mediante una struttura ad albero. Ad esempio: <?xml version=“1.0”?> <autore><nome>Rex</nome><cognome>Stout</cognome></autore> è l’autore di molti <genere>romanzi gialli</genere> aventi come protagonisti il famoso <protagonista attributo=“famoso”><nome>Nero</nome> <cognome>Wolfe</cognome></protagonista> e il suo aiutante e narratore <narratore> <protagonista mansione=“aiutante”> <nome>Archie</nome> <cognome>Goodwin</cognome> </protagonista> </narratore>
Struttura di un documento XML Permettendo l’annidamento, un documento XML può essere rappresentato mediante una struttura ad albero. Ad esempio: radice documento autore genere protagonista narratore nome cognome Romanzo giallo nome cognome protagonista Rex Stout Nero Wolfe nome cognome Archie Goodwin
Alcuni utilizzi di XML Come sintassi di serializzazione per altri linguaggi Esempio: Java XML class Hello { static public void main(String[] args) System.out.println(“Hello world!”); } Come markup per risorse (documenti, pagine web, configurazioni ecc.) Come formato uniforme per lo scambio dei dati
Alcuni utilizzi di XML Come sintassi di serializzazione per altri linguaggi Esempio: Java XML <?xml version=“1.0” ?> <class name=“Hello”> <method name=“main” static=“true” scope=“public” returnType=“void” input=“String[]”> System.out.println(“Hello world!”); </method> </class> Come markup per risorse (documenti, pagine web, configurazioni ecc.) Come formato uniforme per lo scambio dei dati
Alcuni utilizzi di XML Come sintassi di serializzazione per altri linguaggi Come markup per risorse (documenti, pagine web, configurazioni ecc.) Es. classificazione delle istanze di un documento: Tra i precursori del genere giallo troviamo <autore>Edgar Allan Poe</autore>, con <romanzo genere=“giallo”>I delitti della Rue Morgue</romanzo>, e <autore>Arthur Conan Doyle</autore> con il suo <personaggio>Sherlock Holmes</personaggio>. Come formato uniforme per lo scambio dei dati
Alcuni utilizzi di XML Come sintassi di serializzazione per altri linguaggi Come markup per risorse (documenti, pagine web, configurazioni ecc.) Come formato uniforme per lo scambio dei dati Es. SOAP (Simple Object Access Protocol) <?xml version="1.0"?> <soap:Envelope xmlns:soap="http://www.w3.org/2001/12/soap-envelope" soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding"> <soap:Body xmlns:m="http://www.stock.org/stock"> <m:GetStockPrice> <m:StockName>IBM</m:StockName> </m:GetStockPrice> </soap:Body> </soap:Envelope>
Namespace in XML Namespace = collezione di nomi identificati da URI (Uniform Resource Identifier) Associati a elementi e attributi all’interno di documenti XML Permettono la visibilità al di fuori del singolo documento
Esempio: una libreria online books.org ecommerce.org /schema <author>Dino Buzzati</author> <title>Il deserto dei Tartari</title> <isbn>88-06-13848-4</isbn> XML <author> </author> <title> </title> <isbn> </isbn> XML isbn.org XML
Esempio: una libreria online <?xml version=‘1.0’ xmlns:books=’http://www.books.org/’ xmlns:store=’http://ecommerce.org/schema’ xmlns:isbn=’http://www.isbn.org/’ ?> <store:bookstore> <books:book> <books:title>Il deserto dei Tartari</books:title> <books:author>Dino Buzzati</books:author> <isbn:number>88-06-13848-4</isbn:number> </books:book> <books:title>L’isola di Arturo</books:title> <books:author>Elsa Morante</books:author> <isbn:number>88-06-13838-3</isbn:number> </store:bookstore>
Schemi sintattici per XML DTD (Document Type Definition) Specifica annidamenti e combinazioni permesse di elementi, attributi ecc. Un doc XML conforme a DTD = valido XML Schema Definisce lo schema sintattico con la stessa sintassi XML Fa uso di namespace e definizione di tipi Un doc XML conforme a XML Schema = schema valido
XML Schema Definizioni di tipo Dichiarazioni di elementi e attributi Roma,Londra, Parigi,Lisbona,Madrid Definizioni di tipo Semplici <simpleType name=‘stringlist’ base=‘string’ derivedBy=‘list’ /> Complessi <complexType name=‘indirizzo’> <sequence> <element name=‘nome’ type=‘string’ /> <element name=‘via’ type=‘string’ /> <element name=‘cap’ type=‘decimal’ /> <element name=‘citta’ type=‘string’ /> </sequence> </complexType> Dichiarazioni di elementi e attributi <element name=‘elenco’ type=‘stringlist’> <nome>...</nome> <via>...</via> <cap>00100</cap> <citta>Roma</citta>
Esempio di XML Schema Schema Istanza schema-valida <schema xmlns=’http://www.w3.org/1999/XMLSchema’ targetNamespace=’http://lazoo.org’> <simpleType name=’comment’ base=’string’> <maxLength value=’1024’> </simpleType> <element name=’about’ type=’comment’> <element name=’autore’ type=’string’> </schema> Istanza schema-valida <?xml version=‘1.0’ xmlns=‘http://lazoo.org’ ?> <autore>Luigi Pirandello</autore> <about>romanziere e commediografo</about>
Rappresentazione di Ontologie Cosa vogliamo esprimere: Classi (Personaggio, Autore, ecc.) Istanze (Sherlock Holmes, Arthur Conan Doyle) Relazioni (indaga-su, ha-scritto) Azioni e processi (aspetti dinamici)
Linguaggi ontologici Linguaggi logici Linguaggi basati su frame Logica del prim’ordine Logica basata su regole Description logics Linguaggi basati su frame Simili ai database relazionali Linguaggi basati su grafi Reti semantiche Linguaggi per il Web Semantico
RDF: Resource Description Framework Standard del W3C E’ un modello di dati che lavora con tre tipi di elementi fondamentali: Risorse: entità riferite attraverso URI Proprietà: relazioni binarie tra risorse e/o valori atomici di tipo primitivo Affermazioni (o proposizioni): specificano il valore di una certa proprietà relativa a una risorsa
RDF: un semplice esempio affermazione Autore(http://www.mywebsite.com)=JohnDoe Si può esprimere come tripla del tipo (soggetto, predicato, oggetto): (http://www.mywebsite.com, Autore, JohnDoe) proprietà risorsa soggetto risorsa oggetto
RDF: un secondo esempio autoreDi(“http://www.pincopallino.com”, “http://www.books.org/ISBN0012515866”) haPrezzo(“http://www.books.org/ISBN0012515866”, “10 euro”) autoreDi haPrezzo http://www.books.org/ ISBN0012515866 10 euro http://www.pincopallino.com
Serializzazione di RDF RDF, essendo un modello di dati, può essere serializzato in modi diversi. Ad esempio, come sequenza di triple oppure in XML: (http://www.mario.it, http://description.org/schema/creatore, “Mario”) <?xml version=“1.0”?> <rdf:RDF xmlns:rdf=”http://www.w3.org/1999/02/22-rdf-syntax-ns#”> <rdf:Description> <rdf:subject resource=”http://www.mario.it” /> <rdf:predicate resource=”http://description.org/schema/creatore” /> <rdf:object>Mario</rdf:object> </rdf:Description> </rdf:RDF>
RDF Schema RDF non fornisce meccanismi per dichiarare classi o proprietà né per definire relazioni tra proprietà e risorse RDF Schema Permette la definizione di un vocabolario per le proprietà RDF e la specifica dei tipi di oggetti cui possono essere applicate
RDFS: classi base Sono definite le seguenti classi (risorse di tipo rdfs:Class): rdfs:Resource: rappresenta tutto ciò che viene descritto in RDF (corrispondente di Object in Java) rdfs:Property: rappresenta il sottoinsieme di risorse che sono proprietà rdfs:Class: corrisponde al concetto di tipo (corrispondente alla nozione di classe nei linguaggi OO) Albero subclassOf Platano type Platano1 in viale Gorizia
RDFS: proprietà base RDFS definisce le proprietà (ovvero risorse di tipo rdfs:Property): rdfs:type: indica che una risorsa è istanza di una classe (1 risorsa, molti tipi) rdfs:subClassOf: relazione “sottoinsieme - sovrainsieme” tra classi (una classe può essere sottoclasse di molte classi) rdfs:subPropertyOf: una proprietà è una specializzazione di un’altra (1 proprietà, 0-n specializzazioni) rdfs:seeAlso: una risorsa contiene informazioni su un’altra risorsa rdfs:isDefinedBy: sottoproprietà di rfds:seeAlso, indica quale risorsa definisce un’altra risorsa (es. quale schema?)
RDFS: vincoli rdfs:ConstraintProperty è una sottoclasse di rdf:Property. Le sue istanze sono proprietà utilizzate all’interno di vincoli. RDF Schema permette di imporre: Vincoli di dominio (rdfs:domain) Istanze di rdfs:ConstraintProperty Vincolano l’applicazione di una proprietà a una o più classi Vincoli di intervallo (rdfs:range) Vincolano il valore di una proprietà a un determinato intervallo scelto su istanze di classi
RDFS: esempio di vincoli <rdf:Description ID=”appartieneA”> <rdf:type resource=”http://www.w3.org/1999/02/22-rdf-syntax-ns#Property”/> <rdfs:domain rdf:resource=”Oggetto”/> <rdfs:range rdf:resource=”Persona”/> </rdf:Description> Vincola la proprietà appartieneA: All’applicazione su istanze della classe Oggetto Ad assumere valori che siano istanze della classe Persona
RDFS: classi, sottoclassi, risorse sottoclasse classe definisce la classe risorsa
RDFS: classi, sottoclassi e tipi
I livelli successivi Il livello ontologico Il livello logico Fornisce gli strumenti per la definizione e l’uso di ontologie Si fonda su RDF e RDF Schema per definire le primitive di modellazione delle ontologie Il livello logico Fa uso della logica per rispondere a interrogazioni, mediante regole di inferenza e altre tecniche logiche e non Non specifica le euristiche di un particolare motore di inferenza
OWL: Ontology Web Language Standard del W3C Si basa su RDF (per le istanze) e RDFS (per classi e proprietà) e ne estende l’espressività Unifica tre aspetti importanti: Semantica formale e supporto al ragionamento efficiente (Description Logic) Ricche primitive di modellazione (Frame) Proposte standard per notazioni sintattiche (W3C, comunità Web)
Principali caratteristiche di OWL Classi subClassOf, intersectionOf, unionOf, complementOf, enumeration, equivalence, disjoint Proprietà symmetric, transitive, functional, inverse Functional range, domain, subPropertyOf, inverseOf, equivalentProperty Affermazioni sulle istanze sameIndividualAs, differentFrom, AllDifferent
Classi in OWL E’ possibile esprimere una classe come sottoclasse: <owl:Class rdf:ID=“Fiume"> <rdfs:subClassOf rdf:resource="#CorsoDAcqua"/> </owl:Class> E’ possibile definire una sottoclasse esprimendo delle restrizioni rispetto a un’altra classe: <rdfs:subClassOf rdf:ID=“Fiume”> <owl:Restriction> <owl:onProperty rdf:resource="#sfocia"/> <owl:allValuesFrom rdf:resource="#Mare"/> </owl:Restriction> </rdfs:subClassOf>
Altri modi di definire una classe (1) intersectionOf: <owl:Class rdf:ID=“Pinguino"> <rdfs:subclassOf> <owl:intersectionOf rdf:parseType="Collection"> <owl:Class rdf:about="#Uccello"/> <owl:Class rdf:about="#EsseriCheNonVolano"/> </owl:intersectionOf> </rdfs:subclassOf> </owl:Class> equivalentClass: <owl:Class rdf:ID=“BacinoDAcqua"> <owl:equivalentClass rdf:resource="http://www.other.org#Bacino"/> disjointWith: <owl:Class rdf:ID=“Fiume"> <rdfs:subClassOf rdf:resource="#CorsoDAcqua"/> <owl:disjointWith rdf:resource="#Ruscello"/> <owl:disjointWith rdf:resource="#Rivolo"/> <owl:disjointWith rdf:resource="#Torrente"/> Uccello EsseriChe NonVolano Pinguino Bacino D’Acqua Bacino CorsoDAcqua Fiume Ruscello
Altri modi di definire una classe (2) unionOf: <owl:Class rdf:ID=“Organismo"> <rdfs:subclassOf> <owl:unionOf rdf:parseType="Collection"> <owl:Class rdf:about="#Animale"/> <owl:Class rdf:about="#Vegetale"/> </owl:intersectionOf> </rdfs:subclassOf> </owl:Class> oneOf (definizione estensionale di classe): <owl:Class rdf:ID=“Continente"> <rdfs:subClassOf rdf:resource="#Regione"/> <owl:oneOf rdf:parseType="Collection"> <geo:Continente rdf:about="http://www.asia.org"/> <geo:Continente rdf:about="http://www.australia.org"/> <geo:Continente rdf:about="http://www.europa.org"/> <geo:Continente rdf:about="http://www.america.org"/> <geo:Continente rdf:about="http://www.africa.org"/> </owl:oneOf> complementOf: <owl:Class rdf:ID=“Artefatto"> <rdfs:subClassOf rdf:resource="#Oggetto"/> <owl:complementOf rdf:resource="#OggettoNaturale"/> Organismo Animale Vegetale Continente Asia … Europa Oggetto Oggetto Naturale Artefatto
Proprietà in OWL Due tipi di proprietà: owl:ObjectProperty è la classe di proprietà che hanno come valore un oggetto istanza di una classe owl:DatatypeProperty è la classe di proprietà che hanno come valore un dato di tipo semplice o strutturato (rdfs:Literal o XML Schema built-in datatype) Ruota parte-di Automobile Autore nome xsd:String
Cardinalità delle proprietà E’ possibile restringere la cardinalità delle proprietà con: owl:minCardinality owl:maxCardinality Esempio: <owl:Class rdf:ID=“Automobile"> <rdfs:subClassOf rdf:resource=“Veicolo"/><rdfs:subClassOf> <owl:Restriction> <owl:onProperty rdf:resource="#ha-parte"/> <owl:minCardinality rdf:datatype="&xsd;nonNegativeInteger">4</owl:minCardinality> <owl:maxCardinality rdf:datatype="&xsd;nonNegativeInteger">4</owl:minCardinality> </owl:Restriction> </rdfs:subClassOf> </owl:Class>
Istanze in OWL Si istanzia creando un tag con il nome della classe: <Fiume rdf:ID="Tevere"/> Si lega l’istanza ad altre istanze mediante le ObjectProperty definite: <Ruota rdf:ID=“ruota1”> <Automobile rdf:ID=“auto1”> <ha-parte rdf:resource="#ruota1”/> </Automobile> 1 4 Automobile ha-parte Ruota auto1 ruota1
Tre livelli di espressività OWL Full: piena espressività OWL DL: la stessa espressività delle Description Logics No metaclassi (classe di una classe) Non è possibile restringere la cardinalità di proprietà transitive OWL Lite: owl:minCardinality o owl:maxCardinality. I soli valori consentiti sono per owl:cardinality sono 0 e 1. Non sono disponibili owl:hasValue, owl:disjointWith, owl:one of, owl:complementOf, owl:unionOf. OWL Full OWL DL OWL Lite
Riferimenti sul Web OWL Guide fornisce una buona descrizione di OWL con molti esempi: http://www.w3.org/TR/owl-guide/ OWL Reference è una guida completa e dettagliata: http://www.w3.org/TR/owl-ref/ Per tutti gli altri documenti OWL, e informazioni su Semantic Web: http://www.w3.org/2001/sw