# RDF Schema

RDF Schema (Resource Description Framework Schema, amb els acrònims RDFS, RDF(S), RDF-S, o RDF/S) és un vocabulari i una extensió semàntica d'RDF. El vocabulari RDFS és general, i s'usa per definir conceptes de vocabularis concrets, com ara per definir els conceptes organització, associació, persona o presideix. Els termes del vocabulari RDFS tenen una semàntica predefinida que permet inferir fets a partir d'altres fets coneguts. Per exemple, si un recurs concret és una associació, llavors es pot inferir que també és una organització, o que si un recurs presideix una associació, llavors aquest recurs ha de ser necessàriament una persona.
La primera versió fou publicada pel World Wide Web Consortium (W3C) l'abril del 1998, i fou seguida per una nova versió el 2004. La versió actual, publicada el 25 de febrer del 2014, és una edició de la del 2004.
RDFS és molt usat per definir nous vocabularis RDF i ontologies.

## Termes principals de l'RDFS

A continuació s'expliquen els termes principals de l'RDFS.
L'espai de noms del vocabulari RDFS és http://www.w3.org/2000/01/rdf-schema# i el seu prefix és rdfs. Aquest vocabulari usa també conceptes definits en el vocabulari RDF, que té l'espai de noms http://www.w3.org/1999/02/22-rdf-syntax-ns# i el prefix rdf. Per als exemples, suposarem que hi ha un espai de noms amb el prefix ex. El graf mostra un exemple d'ús del vocabulari RDFS.

### rdfs:Class i rdf:type

El terme rdfs:Class s'usa, conjuntament amb rdf:type, per definir classes de recursos i per indicar que un recurs és instància d'una classe. L'esquema general d'ús és amb la terna:
<Subjecte> <rdf:type> <rdfs:Class>
amb la qual es defineix que Subjecte és una instància de Class. Per exemple, les ternes següents defineixen tres classes de recursos: Persona, Organització i Associació:
<ex:Persona> <rdf:type> <rdfs:Class>
<ex:Organització> <rdf:type> <rdfs:Class>
<ex:Associació> <rdf:type> <rdfs:Class>
En les ternes, el terme rdfs:Class es pot usar com a subjecte o com a objecte. En canvi, rdf:type només es pot usar com a predicat, també anomenat propietat.
Un cop definides les classes es pot definir, usant el mateix esquema, que recursos concrets són instàncies de les classes definides. Per exemple:
<ex:JordiC> <rdf:type> <ex:Persona>
<ex:Omnium> <rdf:type> <ex:Associació>
Amb la primera terna es defineix que (en l'espai de noms amb el prefix ex) JordiC és una instància de Persona. Amb la segona, que Omnium és una instància d'Associació.

### rdf:Property

El terme rdf:Property s'usa, també conjuntament amb rdf:type, per definir propietats. L'esquema general d'ús és la terna:
<Subjecte> <rdf:type> <rdf:Property>
amb la qual es defineix que Subjecte és una propietat, que es pot usar com a predicat en les ternes. Per exemple, les ternes següents defineixen tres propietats: treballa, és_membre i presideix:
<ex:treballa> <rdf:type> <rdf:Property>
<ex:és_membre> <rdf:type> <rdf:Property>
<ex:presideix> <rdf:type> <rdf:Property>
Un cop definides les propietats, es poden definir ternes en les quals apareguin com a predicats. Per exemple:
<ex:Joan> <ex:treballa> <ex:Omnium>
<ex:JordiC> <ex:presideix> <ex:Omnium>

### rdfs:subClassOf i rdfs:subPropertyOf

El terme rdfs:subClassOf s'usa com a propietat per definir que una classe és una subclasse d'una altra. Per exemple:
<ex:Associació> <rdfs:subClassOf> <ex:Organització>
El significat és que tots els recursos que són instància (rdf:type) d'Associació també ho són d'Organització.
Un terme semblant és el rdfs:subPropertyOf. S'usa per definir que les parelles Subjecte-Objecte que són instància d'una propietat, també ho són d'una altra. Per exemple:
<ex:presideix> <rdfs:subPropertyOf> <ex:és_membre>
Amb aquesta terna és defineix que si un subjecte S presideix un objecte O, llavors S també és_membre de O.

### rdfs:domain i rdfs:range

La propietat rdfs:domain s'usa per definir de quina classe poden ser els recursos que són subjecte d'una propietat. Dit més formalment, rdfs:domain permet definir el domini d'una propietat. Per exemple:
<ex:treballa> <rdfs:domain> <ex:Persona>
defineix que el subjecte d'una terna amb la propietat treballa ha de ser una instància de la classe Persona. Semblantment, s'escriuria:
<ex:és_membre> <rdfs:domain> <ex:Persona>
<ex:presideix> <rdfs:domain> <ex:Persona>
La propietat rdfs:range s'usa per definir de quina classe poden ser els recursos que són objecte d'una propietat. Dit més formalment, rdfs:rangepermet definir el recorregut d'una propietat. Per exemple:
<ex:treballa> <rdfs:range> <ex:Organització>
defineix que l'objecte d'una terna amb la propietat treballa ha de ser una instància de la classe Organització. Semblantment, s'escriuria:
<ex:és_membre> <rdfs:range> <ex:Associació>
<ex:presideix> <rdfs:range> <ex:Associació>
per indicar que els objectes de ternes amb les propietats és_membre i presideix han de ser instàncies d'Associació.

## Inferències en RDFS

Els termes del vocabulari RDFS tenen una semàntica predefinida per permet inferir fets a partir de fets existents. A continuació es descriuen les inferències principals que es poden fer. El graf que hi ha a sota mostra com a exemple, en blau, quatre fets RDF que es poden inferir a partir del fet:
<ex:JordiC> <ex:presideix> <ex:Omnium>
i dels fets indicats anteriorment, que s'ha il·lustrat en el graf anterior.

### Generalització de classe

Si tenim els fets:
<A> <rdf:type> <B>
<B> <rdfs:subClassOf> <C>
llavors es pot inferir que:
<A> <rdf:type> <C>
és a dir, que el recurs A és també de tipus C.
En l'exemple, com que tenim:
<ex:Omnium> <rdf:type> <ex:Associació>
<ex:Associació> <rdfs:subClassOf> <ex:Organització>
podem inferir que:
<ex:Omnium> <rdf:type> <ex:Organització>

### Generalització de propietat

Si tenim els fets:
<A> <p1> <B>
<p1> <rdfs:subPropertyOf> <p2>
llavors es pot inferir que:
<A> <p2> <B>
és a dir, que si A i B estan relacionats per la propietat p1, també ho estan per la p2.
En l'exemple esmentat anteriorment, com que tenim:
<ex:JordiC> <ex:presideix> <ex:Omnium>
<ex:presideix> <rdfs:subPropertyOf> <ex:és_membre>
llavors es pot inferir que:
<ex:JordiC> <ex:és_membre> <ex:Omnium>

### Restricció de domini

Si tenim els fets:
<A> <p> <B>
<p> <rdfs:domain> <C>
llavors es pot inferir que:
<A> <rdf:type> <C>
és a dir, que si A és el subjecte de la propietat p, i el domini d'aquest propietat han de ser recursos de la classe C, llavors A ha de ser un recurs del tipus C. En l'exemple esmentat anteriorment, com que tenim:
<ex:JordiC> <ex:presideix> <ex:Omnium>
<ex:presideix> <rdfs:domain> <ex:Persona>
llavors es pot inferir que:
<ex:JordiC> <rdf:type> <ex:Persona>

### Restricció de recorregut

Si tenim els fets:
<A> <p> <B>
<p> <rdfs:range> <C>
llavors es pot inferir que:
<B> <rdf:type> <C>
és a dir, que si B és l'objecte de la propietat p, i el recorregut d'aquesta propietat ha de ser recursos de la classe C, llavors B ha de ser un recurs del tipus C. En l'exemple esmentat anteriorment, com que tenim:
<ex:JordiC> <ex:presideix> <ex:Omnium>
<ex:presideix> <rdfs:range> <ex:Associació>
llavors es pot inferir que:
<ex:Omnium> <rdf:type> <ex:Associació>

## Referències

* 1 2 «RDF Schema 1.1. W3C Recommendation 25 February 2014» (en anglès). Dan Brickley, R.V. Guha. [Consulta: 15 abril 2017].
* ↑ «XML RDF» (en anglès). [Consulta: 2 juliol 2018].
* ↑ Allemang, Dean; Hendler, Jim. Semantic web for the working ontologist. Effective modeling in RDFS and OWL. (en anglès). Morgan Kaufmann, 2011, p. 354. ISBN 978-0-12-385965-5.
* ↑ Yu, Liyang. A developer's guide to the semantic web (en anglès). Second edition. Springer, 2015, p. 121-166. ISBN 9783662437957.
* ↑ «Learn OWL and RDFS» (en anglès). [Consulta: 2 juliol 2018].