RDF Schema RDF RDF es un lenguaje universal que permite a los usuarios describir los recursos utilizando su propio vocabulario. RDF no hace suposiciones sobre un dominio particular, ni define la semántica de cualquier dominio. Eso es responsabilidad del usuario al hacerlo en el RDF Esquema (RDFS). Clases y propiedades Dominio: el dominio de los cursos (courses) y profesores (lecturers) de la Universidad Griffith Lecturers, tal como David Billington Courses, tal como Discrete Mathematics Courses, first-year courses, lecturers, professors, etc. Objetos individuales (Recursos) Objetos que pertenecen a una clase (instancias de la clase). Clases que definen tipos de objetos Conjunto de elementos. Restricciones en el rango (lecturers): Discrete Mathematics is taught by Concrete Mathematics. Restricciones en el dominio (courses): Room MZH5760 is taught by David Billington. Una jerarquía de clases Jerarquía de clases y herencia Clases staff members (miembros del personal) assistant professors academic staff members (miembros del personal académico ) administrative staff members professors technical support staff members associate professors Jerarquías A es una subclase de B si cada instancia de A es también una instancia de B. “Every professor is an academic staff member.” “professor” es una subclase de “academic staff member”, “academic staff member” es una superclase de “professor” La relación subclase (subclass) define una jerarquía de clases. Un grafo de subclases no necesita ser un árbol. Una clase puede tener múltiples superclases. Si una clase A es una subclase de ambos B1 y B2, esto significa que cada instancia de A es una instancia de B1 y una instancia de B2. Herencia Considera la siguiente restricción de rango: Courses must be taught by academic staff members only. Supongamos Michael Maher se define como un profesor. Entonces, de acuerdo con la restricción anterior, no está autorizado para impartir cursos. La razón es que no hay ninguna declaración que especifique que Michael Maher es también un miembro del personal académico. Nos gustaría Michael Maher heredara la capacidad de enseñar de la clase de los miembros del personal académico. Exactamente esto se hace en RDF esquema. RDF schema define la relación subclase, sin embargo, es en la aplicación donde se interpreta. Programación orientada a objetos En la programación orientada a objetos, una clase de objeto define las propiedades que le son aplicables. Añadir nuevas propiedades a una clase significa modificar la clase. En RDFS, las propiedades se definen globalmente, es decir, no están encapsulados como atributos en las definiciones de la clase. Es posible definir nuevas propiedades que se aplican a una clase existente sin cambiar esa clase. Jerarquía de propiedades Se puede definir la jerarquía entre clases, Lo mismo pasa para la propiedades. Por ejemplo, “is taught by” es una subpropiedad de “involves” Si “ a course c is taught by an academic staff member a”, entonces “c also involves a”. La inversa no es necesariamente cierta. Por ejemplo, a puede ser el coordinador del curso, o un tutor que indica a los estudiantes la tarea pero no les enseña a c. En general, P es una subpropiedad de Q si Q(x,y) siempre que P(x,y). RDF contra capas RDFS Ejemplo: Discrete Mathematics is taught by David Billington. El esquema para esta declaración puede contener clases tales como: lecturers, academic staff members, staff members, first-year courses, Propiedades tales como is taught by, involves, phone, employee ID. propiedades clases instancias Ejemplo <?xml version="1.0"?> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" xml:base="http://www.animals.fake/animals#"> <rdfs:Class rdf:ID="animal" /> <rdfs:Class rdf:ID=“dog"> <rdfs:subClassOf rdf:resource="#animal"/> </rdfs:Class> </rdf:RDF> Clases rdfs:Resource, la clase de todos los recurso rdfs:Class, la clase de todas las clases rdfs:Literal, la clase de todas las literales (cadenas) rdf:Property, la clase de todas las propiedades rdf:Statement, la clase de todas las declaraciones modificadas Propiedades básicas para definir relaciones rdf:type, que relaciona un recurso a su clase. El recurso es declarado como una instancia de esa clase. rdfs:subClassOf, que relaciona una clase con su superclase. Todas las instancias de una clase son instancias de su superclase. Note que una clase puede ser una subclase de más de una clase. Ejemplo: la clase femaleProfessor puede ser subclase de ambas female y professor. rdfs:subPropertyOf, que relaciona una propiedad a con una superpropiedad. <?xml version="1.0"?> Modelo conceptual - ontología <rdf:RDF <rdf:Property rdf:ID="involves"> xmlns:rdf="http://www.w3.org/1999/02/22-rdf<rdfs:domain syntax-ns#" rdf:resource="#course"/> xmlns:rdfs="http://www.w3.org/2000/01/rdf<rdfs:range schema#"> rdf:resource="#lecturer"/> </rdf:Property> <rdfs:Class rdf:ID="lecturer"> <rdfs:subClassOf <rdf:Property rdf:ID="isTaughtBy"> rdf:resource="#academicStaffMember"/> <rdfs:subPropertyOf </rdfs:Class> rdf:resource="#involves"/> </rdf:Property> <rdfs:Class rdf:ID="academicStaffMember"> <rdfs:subClassOf <rdf:Property rdf:ID="phone"> rdf:resource="#staffMember"/> <rdfs:domain </rdfs:Class> rdf:resource="#staffMember"/> <rdfs:range <rdfs:Class rdf:ID="staffMember"> rdf:resource="rdf;Literal"/> </rdfs:Class> </rdf:Property> <rdfs:Class rdf:ID="course"> </rdfs:Class> </rdf:RDF> Ejercicio Solución <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"> <rdfs:Class rdf:ID="motorVehicle"/> <rdfs:Class rdf:ID="van"> <rdfs:subClassOf rdf:resource="#motorVehicle"/> </rdfs:Class> <rdfs:Class rdf:ID="truck"> <rdfs:subClassOf rdf:resource="#motorVehicle"/> </rdfs:Class> <rdfs:Class rdf:ID="passengerVehicle"> <rdfs:subClassOf rdf:resource="#motorVehicle"/> </rdfs:Class> <rdfs:Class rdf:ID="miniVan"> <rdfs:subClassOf rdf:resource="#passengerVehicle"/> <rdfs:subClassOf rdf:resource="#van"/> </rdfs:Class> </rdf:RDF> Ejercicio RDFS vocabulario Clases Este grupo incluye términos RDFS que pueden usarse para definir clases. Términos: rdfs:Resource, rdfs:Class, rdfs:Literal, rdfs:Datatype. Propiedades Este grupo incluye términos RDFS que pueden usarse para definir propiedades y se incluyen los siguientes términos: rdfs:range, rdfs:domain, rdfs:subClassOf, rdfs:subPropertyOf, rdfs:label y rdfs:comment. Utilerias Diversos propósitos, rdfs:seeAlso y rdfs:isDefinedBy. Definiendo clases rdfs:Resource representa la clase raíz, y cada clase definida usando términos RDFS es una subclase de esta clase. En la práctica, se usa poco; todas las cosas descritas por RDF son instancias de la clase rdfs:Resource. Para definir una clase en un vocabulario, se utiliza rdfs:Class. <?xml version="1.0"?> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" xmlns:myCamera="http://www.liyangyu.com/camera#"> <rdf:Description rdf:about="http://www.liyangyu.com/camera#Camera"> <rdf:type rdf:resource="http://www.w3.org/2000/01/rdf-schema#Class"/> </rdf:Description> </rdf:RDF> Ejemplo <?xml version="1.0"?> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" xmlns:myCamera="http://www.liyangyu.com/camera#" xml:base="http://www.liyangyu.com/camera#"> <rdf:Description rdf:ID="Camera"> <rdf:type rdf:resource="http://www.w3.org/2000/01/rdf-schema#Class"/> </rdf:Description> </rdf:RDF> <?xml version="1.0"?> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" xmlns:myCamera="http://www.liyangyu.com/camera#" xml:base="http://www.liyangyu.com/camera#"> <rdf:Class rdf:ID="Camera"> </rdf:Class> </rdf:RDF> <?xml version="1.0"?> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" xmlns:myCamera="http://www.liyangyu.com/camera#" xml:base="http://www.liyangyu.com/camera#"> <rdf:Class rdf:ID="Camera"> </rdf:Class> </rdf:RDF> <?xml version="1.0"?> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" xmlns:myCamera="http://www.liyangyu.com/camera#" xml:base="http://www.liyangyu.com/camera#"> <rdf:Class rdf:about="http://www.liyangyu.com/camera#Camera"> </rdf:Class> </rdf:RDF> Ejemplo 1: <?xml version="1.0"?> 2: <rdf:RDF 2a: xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" 3: xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" 4: xmlns:myCamera="http://www.liyangyu.com/camera#" 5: xml:base="http://www.liyangyu.com/camera#"> 6: 7: <rdfs:Class rdf:about="http://www.liyangyu.com/camera#Camera"> 8: </rdfs:Class> 9: 10: <rdfs:Class rdf:about="http://www.liyangyu.com/camera#Lens"> 11: </rdfs:Class> 12: 13: <rdfs:Class rdf:about="http://www.liyangyu.com/camera#Body"> 14: </rdfs:Class> 15: 16: <rdfs:Class 16a: rdf:about="http://www.liyangyu.com/camera#ValueRange"> 17: </rdfs:Class> 18: 19: </rdf:RDF> rdfs:subClassOf Ejemplo <rdfs:Class rdf:about="http://www.liyangyu.com/camera#Digital"> <rdfs:subClassOf rdf:resource="http://www.liyangyu.com/camera#Camera"/> </rdfs:Class> Ejercicio <?xml version="1.0"?> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" xmlns:myCamera="http://www.liyangyu.com/camera#" xml:base="http://www.liyangyu.com/camera#"> <rdfs:Class rdf:about="http://www.liyangyu.com/camera#Camera"> </rdfs:Class> <rdfs:Class rdf:about="http://www.liyangyu.com/camera#Lens"> </rdfs:Class> <rdfs:Class rdf:about="http://www.liyangyu.com/camera#Body"> </rdfs:Class> <rdfs:Class rdf:about="http://www.liyangyu.com/camera#ValueRange"> </rdfs:Class> <rdfs:Class rdf:about="http://www.liyangyu.com/camera#Digital"> <rdfs:subClassOf rdf:resource="#Camera"/> </rdfs:Class> <rdfs:Class rdf:about="http://www.liyangyu.com/camera#Film"> <rdfs:subClassOf rdf:resource="#Camera"/> </rdfs:Class> <rdfs:Class rdf:about="http://www.liyangyu.com/camera#DSLR"> <rdfs:subClassOf rdf:resource="#Digital"/> </rdfs:Class> <rdfs:Class rdf:about="http://www.liyangyu.com/camera#PointAndShoot"> <rdfs:subClassOf rdf:resource="#Digital"/> </rdfs:Class> <rdfs:Class rdf:about="http://www.liyangyu.com/camera#Photographer"> <rdfs:subClassOf rdf:resource="http://xmlns.com/foaf/0.1/Person"/> </rdfs:Class> </rdf:RDF> Propiedades Para definir una propiedad, rdf:Property Para especificar el URI de la propiedad: rdf:about Juntos indican como usar la propiedad rdfs:domain rdfs:range Ejemplo <rdf:Property rdf:about="http://www.liyangyu.com/camera#owned_by"> <rdfs:domain rdf:resource="#DSLR"/> <rdfs:range rdf:resource="#Photographer"/> </rdf:Property> Propiedades Al definir una propiedad, se pueden especificar múltiples propiedades. En este caso, indicamos que la propiedad puede ser usada con un recurso que es una instancia de cada clase definida por la propiedad rdfs:domain. Ejemplo: <rdf:Property rdf:about="http://www.liyangyu.com/camera#owned_by"> <rdfs:domain rdf:resource="#DSLR"/> <rdfs:domain rdf:resource="#PointAndShoot"/> <rdfs:range rdf:resource="#Photographer"/> </rdf:Property> Propiedades También podemos usar múltiples propiedades rdfs:range Ejemplo: <rdf:Property rdf:about="http://www.liyangyu.com/camera#owned_by"> <rdfs:domain rdf:resource="#DSLR"/> <rdfs:range rdf:resource="#Photographer"/> <rdfs:range rdf:resource="#Journalist"/> </rdf:Property> Ejercicio 1: <?xml version="1.0"?> 2: <rdf:RDF 2a: xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" 3: xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" 4: xmlns:myCamera="http://www.liyangyu.com/camera#" 5: xml:base="http://www.liyangyu.com/camera#"> 6: 7: ... // classes/sub-classes definitions as shown in List 4.7 38: 39: <rdf:Property 39a: rdf:about="http://www.liyangyu.com/camera#owned_by"> 40: <rdfs:domain rdf:resource="#DSLR"/> 41: <rdfs:range rdf:resource="#Photographer"/> 42: </rdf:Property> 43: 44: <rdf:Property 44a: rdf:about="http://www.liyangyu.com/camera#manufactured_by"> 45: <rdfs:domain rdf:resource="#Camera"/> 46: </rdf:Property> 47: 48: <rdf:Property 48a: rdf:about="http://www.liyangyu.com/camera#body"> 49: <rdfs:domain rdf:resource="#Camera"/> 50: <rdfs:range rdf:resource="#Body"/> 51: </rdf:Property> 52: 53: <rdf:Property 53a: rdf:about="http://www.liyangyu.com/camera#lens"> 54: <rdfs:domain rdf:resource="#Camera"/> 55: <rdfs:range rdf:resource="#Lens"/> 56: </rdf:Property> 57: 58: <rdf:Property 58a: rdf:about="http://www.liyangyu.com/camera#model"> 59: <rdfs:domain rdf:resource="#Camera"/> 60: <rdfs:range 60a: rdf:resource="http://www.w3.org/2001/XMLSchema#string"/> 61: </rdf:Property> 62: 63: <rdf:Property 63a: rdf:about="http://www.liyangyu.com/camera#effectivePixel"> 64: <rdfs:domain rdf:resource="#Digital"/> 65: <rdfs:range 65a: rdf:resource="http://www.w3.org/2001/XMLSchema#decimal"/> 66: </rdf:Property> 67: 68: <rdf:Property 68a: rdf:about="http://www.liyangyu.com/camera#shutterSpeed"> 69: <rdfs:domain rdf:resource="#Body"/> 70: <rdfs:range rdf:resource="#ValueRange"/> 71: </rdf:Property> 72: 73: <rdf:Property 73a: rdf:about="http://www.liyangyu.com/camera#focalLength"> 74: <rdfs:domain rdf:resource="#Lens"/> 75: <rdfs:range 75a: rdf:resource="http://www.w3.org/2001/XMLSchema#string"/> 76: </rdf:Property> 77: 78: <rdf:Property 78a: rdf:about="http://www.liyangyu.com/camera#aperture"> 79: <rdfs:domain rdf:resource="#Lens"/> 80: <rdfs:range rdf:resource="#ValueRange"/> 81: </rdf:Property> 82: 83: <rdf:Property 83a: rdf:about="http://www.liyangyu.com/camera#minValue"> 84: <rdfs:domain rdf:resource="#ValueRange"/> 85: <rdfs:range 85a: rdf:resource="http://www.w3.org/2001/XMLSchema#float"/> 86: </rdf:Property> 87: 88: <rdf:Property 88a: rdf:about="http://www.liyangyu.com/camera#maxValue"> 89: <rdfs:domain rdf:resource="#ValueRange"/> 90: <rdfs:range 90a: rdf:resource="http://www.w3.org/2001/XMLSchema#float"/> 91: </rdf:Property> 92: 93: </rdf:RDF> Subpropiedades Las propiedades son heredables desde la clase base a las subclases. Una clase siempre hereda propiedades de su clase base. Se define una propiedad como una subpropiedad de otra propiedad, usando rdfs:subPropertyOf. Ejemplo: declara la propiedad officialModel como una especialización de la propiedad model. La propiedad officialModel hereda los valores de rdfs:domain y rdfs:range desde la propiedad base model. También se pueden usar múltiples rdfs:subPropertyOf cuando se define una propiedad. En este caso, estamos declarando la propiedad como subpropiedad de cada una de las propiedades base. <rdf:Property rdf:about="http://www.liyangyu.com/camera#officialModel"> <rdfs:subPropertyOf rdf:resource="#model"/> </rdf:Property> Tipos de Datos RDFS La propiedad rdfs:range se usa para especificar los posibles valores de una propiedad declarada. La propiedad puede tener cadenas sin tipo como valores, y se presentan por la clase rdfs:Literal <rdf:Property rdf:about="http://www.liyangyu.com/camera#model"> <rdfs:domain rdf:resource="#Camera"/> <rdfs:range rdf:resource="http://www.w3.org/2001/01/rdf-schema#Literal"/> </rdf:Property> El uso de rdfs:Literal no es una solución recomendada en muchos casos. Lo mejor es proveer un valor de tipo. Por ejemplo, un tipo de dato en XMLS es: http://www.w3.org/2001/XMLSchema#string Tipos de datos Siempre, es útil declarar claramente que un URI dado representa un tipo de dato, ejemplo: <rdf:Property rdf:about="http://www.liyangyu.com/camera#model"> <rdfs:domain rdf:resource="#Camera"/> <rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#string"/> </rdf:Property> <rdfs:Datatype rdf:about="http://www.w3.org/2001/XMLSchema#string"/> Otra definición El analizador concluirá que tiene una literal como valor. <rdf:Property rdf:about="http://www.liyangyu.com/camera#effectivePixel"> <rdfs:domain rdf:resource="#Digital"/> <rdfs:range rdf:resource="http://www.liyangyu.com/camera#MegaPixel"/> </rdf:Property> <rdfs:Datatype rdf:about="http://www.liyangyu.com/camera#MegaPixel"> <rdfs:subClassOf rdf:resource="http://www.w3.org/2001/XMLSchema#decimal"/> </rdfs:Datatype> Note que si rdfs:Datatype se utiliza en el documento RDFS esto indicará un tipo de dato. Por lo tanto, la correspondiente declaración de instancia RDF debe usar la propiedad rdf:datatype, como sigue: <model rdf:datatype="http://www.w3.org/2001/XMLSchema#string"> Nikon_D300 </model> <effectivePixel rdf:datatype="http://www.liyangyu.com/camera#MegaPixel"> 12.3 </effectivePixel> Ejercicio Construir una ontología acerca de geografía que modele ciudades, países, capitales, fronteras, estados, etc. Modela una ontología acerca de una biblioteca que incluya libros, autores, editores, fechas, copias, etc. Otras propiedades rdfs:seeAlso rdfs:isDefinedBy rdfs:label rdfs:comment rdfs:seeAlso rdfs: seeAlso es una propiedad que se puede utilizar en cualquier recurso, e indica que otro recurso puede proporcionar información adicional sobre el recurso dado. <?xml version="1.0"?> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" xmlns:myCamera="http://www.liyangyu.com/camera#"> <rdf:Description rdf:about="http://www.liyangyu.com/camera#Nikon_D300"> <rdf:type rdf:resource="http://www.liyangyu.com/camera#DSLR"/> <rdfs:seeAlso rdf:resource="http://dbpedia.org/resource/Nikon_D300"/> </rdf:Description> </rdf:RDF> rdfs:isDefinedBy rdfs:isDefinedBy es similar a rdfs:seeAlso, y es una subpropiedad de rdfs:seeAlso. Se pretende especificar la fuente primaria de información sobre un recurso determinado. Por ejemplo, la siguiente declaración: subject rdfs:isDefinedBy object Se dice que el recurso sujeto se define por el recurso objeto, y más específicamente, este recurso objeto se supone que es una descripción original o autorizada del recurso. rdfs:label se utiliza para proporcionar un nombre de clase/propiedad para los ojos humanos. rdfs:comment proporciona una descripción legible por humanos de la propiedad/clase que se está definiendo. Ejemplo 1: <rdf:Property rdf:ID="officialModel"> 2: <rdfs:subPropertyOf rdf:resource="#model"/> 3: <rdfs:label xml:lang="EN">officialModelName</rdfs:label> 4: <rdfs:comment xml:lang="EN"> 4a: this is the official name of the camera. 4b: the manufacturer may use different names when 4c: the camera is sold in different regions/countries. 5: </rdfs:comment> 6: </rdf:Property> Ejercicio