Transcript Document
OWL: Ontology Web Language Asignatura Doctorado 2007 (Francisco José Galán Morillo) Índice 1. Resumen 2. Estructura de una Ontología OWL 3. Elementos Básicos OWL 4. Relaciones entre Ontologías OWL 5. Clases OWL Complejas 1. Resumen Objetivo OWL es un lenguaje para describir datos con semántica en la Web y no un mero protocolo de intercambio de información. 1. Formaliza dominios mediante clases y propiedades. 2. Define individuos y propiedades entre individuos. 3. Permite un razonamiento formal (inferencia) basado en la semántica adoptada en la definición de clases propiedades e individuos 1. Resumen Niveles de Expresividad 1. OWL Lite: clasificaciones y restricciones simples (ideal para migrar tesauros). 2. OWL DL: máxima expresividad, completitud y decibilidad aseguradas. 3. OWL Full: Máxima expresividad (capacidades de metamodelado y extensión del vocabulario OWL) completitud y decibilidad no aseguradas. 2. Estructura de una Ontología OWL Suposiciones 1. OWL asume un mundo abierto y distribuido. 2. Monotonicidad. Toda adición de información se añade a la ya existente. 3. Ontologías Inconsistentes. 2. Estructura de una Ontología OWL Vocabulario OWL Espacios de nombres: <rdf:RDF xmlns = “http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#” (espacio de nombres por defecto de la ontología que se está describiendo) xmlns:vin = “http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#” (espacio de nombres por defecto de la ontología que se está describiendo) xml:base = “http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#” (URI del presente documento) xmlns:food= “http://www.w3.org/TR/2003/PR-owl-guide-20031209/food#” (espacio de nombres de la ontología que se está describiendo ‘food’) xmlns:owl = “http://www.w3.org/2002/07/owl#” (otros espacios de nombres) xmlns:rdf = “http://www.w3.org/1999/02/22-rdf-syntax-ns#” xmlns:rdfs= “http://www.w3.org/2000/01/rdf-schema#” xmlns:xsd = “http://www.w3.org/2001/XMLSchema#”> 2. Estructura de una Ontología OWL Vocabulario OWL Identificadores de ontologías mediante macros: importante para definir ontologías de forma distribuida. <!DOCTYPE rdf:RDF [ <!ENTITY vin "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#" > <!ENTITY food "http://www.w3.org/TR/2003/PR-owl-guide-20031209/food#" > <!ENTITY owl "http://www.w3.org/2002/07/owl#" > <!ENTITY xsd "http://www.w3.org/2001/XMLSchema#" > ]> Expresiones como &vin;merlot se expanden a http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#merlot 2. Estructura de una Ontología OWL Vocabulario OWL Encabezamientos: (meta)información relativa a comentarios, versión, inclusión de otras ontologías, etc. <owl:Ontology rdf:about=""> <rdfs:comment>An example OWL ontology</rdfs:comment> <owl:priorVersion> <owl:Ontology rdf:about="http://www.w3.org/TR/2003/CR-owl-guide-20030818/wine"/> </owl:priorVersion> <owl:imports rdf:resource="http://www.w3.org/TR/2003/PR-owl-guide-20031209/food"/> <rdfs:comment>Derived from the DAML Wine ontology at http://ontolingua.stanford.edu/doc/chimaera/ontologies/wines.daml Substantially changed, in particular the Region based relations. </rdfs:comment> <rdfs:label>Wine Ontology</rdfs:label> </owl:Ontology> 3. Elementos Básicos OWL Clases (I) Declaración de clases simples: todo individuo en una ontología OWL pertenece a la clase owl:Thing. También OWL define la clase vacía owl:Nothing. <owl:Class rdf:ID="Winery"/> <owl:Class rdf:ID="Region"/> <owl:Class rdf:ID="ConsumableThing"/> Declaración de subclases: todo individuo en una subclase pertenece a la superclase. <owl:Class rdf:ID="PotableLiquid"> <rdfs:subClassOf rdf:resource="#ConsumableThing" /> ... </owl:Class> 3. Elementos Básicos OWL Clases (II) Referenciación para uso: Dada la declaración: <owl:Class rdf:ID="Winery"/> Dentro del documento, la clase Winery puede ser referenciada: #Winery rdf:resource=“#Winery” http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#Winery Referenciación para extender la definición: rdf:about=“#Winery” 3. Elementos Básicos OWL Individuos (I) Declaración de individuos de una clase: <Region rdf:ID="CentralCoastRegion" /> O bien haciendo uso de la propiedad rdf:type para adscribir un individuo a una clase. <owl:Thing rdf:ID="CentralCoastRegion" /> <owl:Thing rdf:about="#CentralCoastRegion"> <rdf:type rdf:resource="#Region"/> </owl:Thing> 3. Elementos Básicos OWL Propiedades (I) Propiedades: relación binaria del tipo r(x:T,y:Z) donde T es el dominio de r y Z es el rango de r 1. Propiedades entre individuos y tipos de datos (datatype property): relación entre individuos de clases y literales RDF y tipos de datos XML Schema. 2. Propiedades entre individuos (object property): relación entre individuos de clases. 3. Elementos Básicos OWL Propiedades (II) Ejemplos de propiedades: <owl:ObjectProperty rdf:ID="madeFromGrape"> <rdfs:domain rdf:resource="#Wine"/> <rdfs:range rdf:resource="#WineGrape"/> </owl:ObjectProperty> <owl:ObjectProperty rdf:ID="course"> <rdfs:domain rdf:resource="#Meal" /> <rdfs:range rdf:resource="#MealCourse" /> </owl:ObjectProperty> 3. Elementos Básicos OWL Propiedades (III) Subpropiedades: subconjuntos de las propiedades originales. <owl:Class rdf:ID="WineDescriptor" /> <owl:Class rdf:ID="WineColor"> <rdfs:subClassOf rdf:resource="#WineDescriptor" /> ... </owl:Class> <owl:ObjectProperty rdf:ID="hasWineDescriptor"> <rdfs:domain rdf:resource="#Wine" /> <rdfs:range rdf:resource="#WineDescriptor" /> </owl:ObjectProperty> <owl:ObjectProperty rdf:ID="hasColor"> <rdfs:subPropertyOf rdf:resource="#hasWineDescriptor" /> <rdfs:range rdf:resource="#WineColor" /> ... </owl:ObjectProperty> 3. Elementos Básicos OWL Propiedades (IV) Clases con propiedades vía clases anónimas: <owl:Class rdf:ID="Wine"> <rdfs:subClassOf rdf:resource="&food;PotableLiquid"/> <rdfs:subClassOf> <owl:Restriction> <owl:onProperty rdf:resource="#madeFromGrape"/> <owl:minCardinality rdf:datatype="&xsd;nonNegativeInteger">1</owl:minCardinality> </owl:Restriction> </rdfs:subClassOf> ... </owl:Class> 3. Elementos Básicos OWL Tipos de Datos OWL usa la mayoría de tipos de datos de XML Schema (URI:http://www.w3.org/2001/XMLSchema) xsd:string xsd:normalizedString xsd:boolean xsd:decimal xsd:float xsd:double xsd:integer xsd:nonNegativeInteger xsd:positiveInteger xsd:nonPositiveInteger xsd:negativeInteger xsd:long xsd:int xsd:short xsd:byte xsd:unsignedLong xsd:unsignedInt xsd:unsignedShort xsd:unsignedByte xsd:hexBinary xsd:base64Binary xsd:dateTime xsd:time xsd:date xsd:gYearMonth xsd:gYear xsd:gMonthDay xsd:gDay xsd:gMonth xsd:anyURI xsd:token xsd:language xsd:NMTOKEN xsd:Name xsd:NCName 3. Elementos Básicos OWL Individuos (II) Individuos con propiedades: <Region rdf:ID="SantaCruzMountainsRegion"> <locatedIn rdf:resource="#CaliforniaRegion" /> </Region> <Winery rdf:ID="SantaCruzMountainVineyard" /> <CabernetSauvignon rdf:ID="SantaCruzMountainVineyardCabernetSauvignon" > <locatedIn rdf:resource="#SantaCruzMountainsRegion"/> <hasMaker rdf:resource="#SantaCruzMountainVineyard" /> </CabernetSauvignon> 3. Elementos Básicos OWL Propiedades (V) Transitividad: r(x,y) r(y,z) r(x,z) <owl:ObjectProperty rdf:ID="locatedIn"> <rdf:type rdf:resource="&owl;TransitiveProperty" /> <rdfs:domain rdf:resource="&owl;Thing" /> <rdfs:range rdf:resource="#Region" /> </owl:ObjectProperty> Simetría: r(x,y) r(y,x) <owl:ObjectProperty rdf:ID="adjacentRegion"> <rdf:type rdf:resource="&owl;SymmetricProperty" /> <rdfs:domain rdf:resource="#Region" /> <rdfs:range rdf:resource="#Region" /> </owl:ObjectProperty> 3. Elementos Básicos OWL Propiedades (VI) Función: r(x,y) r(x,z) y = z <owl:ObjectProperty rdf:ID="hasVintageYear"> <rdf:type rdf:resource="&owl;FunctionalProperty" /> <rdfs:domain rdf:resource="#Vintage" /> <rdfs:range rdf:resource="#VintageYear" /> </owl:ObjectProperty> Inverso: r1(x,y) r2(y,x) <owl:ObjectProperty rdf:ID="hasMaker"> <rdf:type rdf:resource="&owl;FunctionalProperty" /> </owl:ObjectProperty> <owl:ObjectProperty rdf:ID="producesWine"> <owl:inverseOf rdf:resource="#hasMaker" /> </owl:ObjectProperty> 3. Elementos Básicos OWL Propiedades (VII) Función Inversa: r(y,x) r(z,x) y = z <owl:ObjectProperty rdf:ID="hasMaker" /> <owl:ObjectProperty rdf:ID="producesWine"> <rdf:type rdf:resource="&owl;InverseFunctionalProperty" /> </owl:ObjectProperty> 3. Elementos Básicos OWL Restricciones (I) Restricciones de rango allValuesFrom: <owl:Class rdf:ID="Wine"> <rdfs:subClassOf rdf:resource="&food;PotableLiquid" /> ... <rdfs:subClassOf> <owl:Restriction> <owl:onProperty rdf:resource="#hasMaker" /> <owl:allValuesFrom rdf:resource="#Winery" /> </owl:Restriction> </rdfs:subClassOf> ... </owl:Class> “Para todo Wine si hasMaker(Wine) está definido entonces todos los individuos del rango de hasMaker(Wine) son Winery” 3. Elementos Básicos OWL Restricciones (II) Restricciones de rango someValuesFrom: <owl:Class rdf:ID="Wine"> <rdfs:subClassOf rdf:resource="&food;PotableLiquid" /> ... <rdfs:subClassOf> <owl:Restriction> <owl:onProperty rdf:resource="#hasMaker" /> <owl:someValuesFrom rdf:resource="#Winery" /> </owl:Restriction> </rdfs:subClassOf> ... </owl:Class> “Para todo Wine si hasMaker(Wine) está definido entonces al menos un individuo del rango de hasMaker(Wine) es Winery” 3. Elementos Básicos OWL Restricciones (III) Restricciones de multiplicidad: <owl:Class rdf:ID="Vintage"> <rdfs:subClassOf> <owl:Restriction> <owl:onProperty rdf:resource="#hasVintageYear"/> <owl:cardinality rdf:datatype="&xsd;nonNegativeInteger">1</owl:cardinality> </owl:Restriction> </rdfs:subClassOf> </owl:Class> “Toda cosecha (Vintage) tiene un año (hasVintageYear)” 3. Elementos Básicos OWL Restricciones (IV) Restricciones por valor: <owl:Class rdf:ID="Burgundy"> ... <rdfs:subClassOf> <owl:Restriction> <owl:onProperty rdf:resource="#hasSugar" /> <owl:hasValue rdf:resource="#Dry" /> </owl:Restriction> </rdfs:subClassOf> </owl:Class> “Todo individuo Burgundy tiene como valor de la propiedad hasSugar igual a dry” 4. Relaciones Entre Ontologías OWL Equivalencias Clases Equivalentes: Clases con los mismos individuos. <owl:Class rdf:ID="TexasThings"> <owl:equivalentClass> <owl:Restriction> <owl:onProperty rdf:resource="#locatedIn" /> <owl:someValuesFrom rdf:resource="#TexasRegion" /> </owl:Restriction> </owl:equivalentClass> </owl:Class> Propiedades Equivalentes: Propiedades con los mismos individuos. Similar a clases equivalentes pero usando owl:equivalentProperty 4. Relaciones Entre Ontologías OWL Identidades Identidad entre Individuos: <Wine rdf:ID="MikesFavoriteWine"> <owl:sameAs rdf:resource="#StGenevieveTexasWhite" /> </Wine> Suposición de no Unicidad de Nombres: OWL supone que dos individuos pueden ser idénticos sin tener los mismos nombres (Ej. dado que hasMaker es una propiedad funcional, se infiere que Bancroft = Beringer) <owl:Thing rdf:about="#BancroftChardonnay"> <hasMaker rdf:resource="#Bancroft" /> <hasMaker rdf:resource="#Beringer" /> </owl:Thing> 4. Relaciones Entre Ontologías OWL Diferencias(I) Individuos Diferentes: <WineSugar rdf:ID="Dry" /> <WineSugar rdf:ID="Sweet"> <owl:differentFrom rdf:resource="#Dry"/> </WineSugar> <WineSugar rdf:ID="OffDry"> <owl:differentFrom rdf:resource="#Dry"/> <owl:differentFrom rdf:resource="#Sweet"/> </WineSugar> 4. Relaciones Entre Ontologías OWL Diferencias(II) Individuos Diferentes: <owl:AllDifferent> <owl:distinctMembers rdf:parseType="Collection"> <vin:WineColor rdf:about="#Red" /> <vin:WineColor rdf:about="#White" /> <vin:WineColor rdf:about="#Rose" /> </owl:distinctMembers> </owl:AllDifferent> 5. Clases OWL Complejas Operadores Conjuntos (I) Intersección: <owl:Class rdf:ID="WhiteWine"> <owl:intersectionOf rdf:parseType="Collection"> <owl:Class rdf:about="#Wine" /> <owl:Restriction> <owl:onProperty rdf:resource="#hasColor" /> <owl:hasValue rdf:resource="#White" /> </owl:Restriction> </owl:intersectionOf> </owl:Class> 5. Clases OWL Complejas Operadores Conjuntos (II) Unión: <owl:Class rdf:ID="Fruit"> <owl:unionOf rdf:parseType="Collection"> <owl:Class rdf:about="#SweetFruit" /> <owl:Class rdf:about="#NonSweetFruit" /> </owl:unionOf> </owl:Class> Complemento (I): <owl:Class rdf:ID="ConsumableThing" /> <owl:Class rdf:ID="NonConsumableThing"> <owl:complementOf rdf:resource="#ConsumableThing" /> </owl:Class> 5. Clases OWL Complejas Operadores Conjuntos (III) Complemento (II): <owl:Class rdf:ID="NonFrenchWine"> <owl:intersectionOf rdf:parseType="Collection"> <owl:Class rdf:about="#Wine"/> <owl:Class> <owl:complementOf> <owl:Restriction> <owl:onProperty rdf:resource="#locatedIn" /> <owl:hasValue rdf:resource="#FrenchRegion" /> </owl:Restriction> </owl:complementOf> </owl:Class> </owl:intersectionOf> </owl:Class> 5. Clases OWL Complejas Clases Enumeradas Clases Enumeradas: Clases definidas por extensión de sus miembros <owl:Class rdf:ID="WineColor"> <rdfs:subClassOf rdf:resource="#WineDescriptor"/> <owl:oneOf rdf:parseType="Collection"> <owl:Thing rdf:about="#White"/> <owl:Thing rdf:about="#Rose"/> <owl:Thing rdf:about="#Red"/> </owl:oneOf> </owl:Class> 5. Clases OWL Complejas Clases Disjuntas Clases Disjuntas: Clases sin miembros comunes <owl:Class rdf:ID="SweetFruit"> <rdfs:subClassOf rdf:resource="#EdibleThing" /> </owl:Class> <owl:Class rdf:ID="NonSweetFruit"> <rdfs:subClassOf rdf:resource="#EdibleThing" /> <owl:disjointWith rdf:resource="#SweetFruit" /> </owl:Class> <owl:Class rdf:ID="Fruit"> <owl:unionOf rdf:parseType="Collection"> <owl:Class rdf:about="#SweetFruit" /> <owl:Class rdf:about="#NonSweetFruit" /> </owl:unionOf> </owl:Class>