# Métaclasse (web sémantique)

Dans le Web sémantique, une métaclasse est une classe dont les instances sont elles-mêmes des classes. Elles font partie des fonctionnalités de langages de représentation et de modélisation des connaissances du web sémantique comme OWL et RDF. De manière similaire, à leur rôle dans les langages de programmation, les métaclasses du web sémantiques permettent à leurs classes-instances avoir des propriétés qui ne sont dans le cas contraire qu'applicables à des instances propres (des instances de simple classes), tout en conservant la possibilité d'être classées dans une hiérarchie de concepts. Cela permet à des moteurs d'inférence de déduire des informations sur les instances de ces métaclasses à partir de leur métaclasse. Les métaclasses augmentent le pouvoir d'expression du langage tout en conservant une forme habituelle pour les utilisateurs qui ont l'habitude d'utiliser les classes. Les simples classes sont principalement utiles pour classer les populations d'individus, et les métaclasses permettent d'exprimer la dimension conceptuelle d'une ontologie.
Les métaclasses peuvent être représentées, dans les langages qui le permettent, en les utilisant en objet des déclarations du langage de modélisation, dans le cas du langage du RDF du W3C des déclarations construites avec les propriétés rdf:type et rdfs:subClassOf -- des propriétés intégrées au langages qui sont souvent appelées instance de et sous-classe de. Dans une déclaration construite avec Instance de, on peut déduire que le sujet d'une affirmation est l'instance d'une classe, une entité ou un individu. Respectivement dans une déclaration construite avec Sous classe de on peut déduire que le sujet est une classe. Dans ce contexte, une différence clé entre une classe et une métaclasse est que, alors que les classes ordinaires ne sont utilisées qu'en objet des déclarations avec instance de, les méta classes peuvent aussi être utilisées en objet. On déclare ainsi qu'une classe est une instance d'une métaclasse.
Le langage OWL 2, construit autour de RDF mais bien plus expressif, supporte, dans sa variante DL, les métaclasses à l'aide d'une fonctionnalité appelée « punning », du mot anglais pun, calembour). OWL 1 DL, la version précédente, exigeait que chaque élément soit ou une classe, ou une instance, mais pas les deux à la fois. Avec le punning, cette restriction est obsolète, et une entité peut être interprétée soit comme une classe soit comme un individu en fonction du contexte (syntaxique). Par exemple, une ontologie peut avoir une hiérarchie de concepts telle que « Harry l'aigle instance de aigle royal », « aigle royal sous classe de oiseau », et « aigle royal instance de espèces ». Dans cet exemple, l'entité « aigle royal » bénéficie du punning, étant à la fois une classe d'oiseau et une instance d'espèce ; et la métaclasse serait l'entité espèce, parce qu'elle a pour instance une classe. Le punning permet aussi d'appliquer a des classes des propriétés qui, sans punning, seraient applicables seulement a des instances propres (des instances qui ne sont pas aussi des classes), par exemple « golden eagle statut de conservation de l'espèce espèce bien conservée. »
Les langages du web sémantiques, nés des domaines comme la représentation des connaissance, les logiques de description, l'ontologie formelle, ont un lien proche de l'ontologie philosophique plus que les langages de programmation comme Java ou Python. En conséquence, la nature des métaclasses est définie également à l'aide de notions philosophiques comme les objets abstraits, et la dichotomie type-jeton. Les métaclasses permettent à des concepts d'être construits comme des tokens (instances) tout en conservant leur statut ontologique de type. Cela permet d'énumérer des types, tout en préservant la possibilité pour ces types d'hériter des caractéristiques d'autres types. Par exemple, les métaclasses peuvent permettre à un moteur d'inférence d'inférer à partir d'une ontologie compréhensible "combien d'éléments chimiques sont présents dans la table périodique des éléments", ou, "étant donné que nombre de protons est une propriété d'un élément chimique et que les isotopes sont des sous-classes des éléments, combien de protons il y a dans le deutérium".

## Exemples

En suivant la distinction jeton/type, qui divise le monde en objets ou évènement concrets, dits « token » et en « classe », qui sont des ensembles de token qui partagent des caractéristiques communes, des objets du monde comme Abraham Lincoln ou la planète Mars sont regroupées dans des classes d'objets qui leur sont respectivement similaires. Abraham Lincoln pourra alors être une instance de humain, et Mars pourra être une instance de planète. C'est une sorte de relation est-un (is-a en anglais). Les métaclasses sont des classes de classes, comme le concept de nucléide. En chimie, les atomes sont souvent classés en éléments ou, plus spécifiquement, isotopes. Le verre d'eau que l'on a bu pour la dernière fois contenait un grand nombre d'atomes, chacun d'entre eux étant une instance de hydrogène. Le concept d'hydrogène lui-même, une classe d'atomes est une instance de nucléide. Nucléide est une classe de classe, donc une métaclasse.

## Mises en œuvre
### RDF et RDFS

En RDF, la propriété rdf:type est utilisée pour affirmer l'appartenance d'une ressource à une classe. Cela permet la création facile de métaclasses en chaînant les utilisations de rdf:type. Par exemple dans les deux triplets
La ressource espèce est une métaclasse. C'est visible parce que la ressource aigle royal est utilisée comme classe dans la première déclaration, et comme instance de la (méta) classe espèce dans le second.
RDF a une propriété rdf:Property qui permet de déclarer de nouvelles propriétés. Ces propriétés peuvent être utilisées directement sur les métaclasses, par exemple "espèce quantité 8,7 millions", avec quantité une propriété définie grâce à rdf:Property et espèce la métaclasse de l'exemple ci-dessus.
RDFS, la partie schéma de rdf, a introduit rdfs:Class et rdfs:subClassOf et a ainsi étendu les possibilités de modélisation de classification du langage$^,$. Alors que rdf:type permet de représenter la relation d'instantiation, la propriété rdfs:subClassOf permet de représenter la subsomption entre les concepts. RDFS permet donc de représenter des taxonomies, qu'on appelle aussi hiérarchies de subsomption ou de concepts, un ajout important à RDF, qui rendait simplement possible de différencier des "jetons" et des "types", conformément au principe philosophique du même nom.
Il est également notable que la ressource rdfs:Class est une instance d'elle-même, montrant à la fois l'utilisation d'une métaclasse dans la définition du langage lui-même et un usage réflexif de rdf:type. RDFS est son propre metamodèle.

### OWL

Dans la définition d'OWL1-DL, les entités ne peuvent être à la fois des classes et des instances. Cette limitation interdit les métaclasses et le meta-modelage. Ce n'est pas le cas dans la variante OWL1 full, mais le modèle est alors « calculatoirement » indécidable. En OWL2, une fonctionnalité a été introduite, le punning (pun en anglais veut dire calembourg), qui permet d'utiliser des classes comme si elles étaient de simples instances. D'autres possibilités d'utilisation des métaclasses ont été utilisées, qui permettent de vérifier les propriétés des ontologies à un niveau meta.

#### Punning

Dans les métaclasses implantées à l'aide du Punning, le même sujet est interprété comme deux chose différentes—une classe et un individu—en fonction du contexte (syntaxique). C'est similaire à un calembour dans le langage courant, quand un mot est utilisé dans plusieurs sens différents pour illustrer un point. En OWL, ce n'est pas utilisé pour faire une blague ou un bon mot, mais pour faire en sorte de représenter plus facilement les concepts, de manière plus proche de la manière dont ils sont utilisés et nommés dans le langage courant ou académique.

### Protégé

Dans l'éditeur d'ontologie et moteur d'inférence Protégé, les métaclasses sont des modèles pour les classes qui sont leurs instances.