Réponses:
Le web sémantique se décline en couches. Voici un bref résumé de ceux qui vous intéressent.
Mise à jour : veuillez noter que RDFS est utilisé pour définir la structure des données, pas OWL. OWL décrit les relations sémantiques dont la programmation normale, telle qu'une structure C, n'est pas préoccupée et est plus proche de la recherche en IA et de la théorie des ensembles.
Triples et URI
Subject - Predicate - Object
Ceux-ci décrivent un seul fait. En général, les URI sont utilisés pour le sujet et le prédicat. L'objet est soit un autre URI, soit un littéral tel qu'un nombre ou une chaîne. Les littéraux peuvent avoir un type (qui est également un URI), et ils peuvent également avoir une langue. Oui, cela signifie que les triplets peuvent avoir jusqu'à 5 bits de données!
Par exemple, un triple pourrait décrire le fait que Charles est le père de Harry.
<http://example.com/person/harry> <http://familyontology.net/1.0#hasFather> <http://example.com/person/charles> .
Les triples sont la normalisation de la base de données poussée à l'extrême logique. Ils ont l'avantage de pouvoir charger des triplets de plusieurs sources dans une seule base de données sans reconfiguration.
RDF et RDFS
La couche suivante est RDF - The Resource Description Framework. RDF définit une structure supplémentaire pour les triplets. La chose la plus importante que RDF définit est un prédicat appelé "rdf: type". Ceci est utilisé pour dire que les choses sont de certains types. Tout le monde utilise rdf: type ce qui le rend très utile.
RDFS (RDF Schema) définit certaines classes qui représentent le concept de sujets, d'objets, de prédicats, etc. Cela signifie que vous pouvez commencer à faire des déclarations sur les classes d'objets et les types de relations. Au niveau le plus simple, vous pouvez énoncer des choses comme http://familyontology.net/1.0#hasFather est une relation entre une personne et une personne. Il vous permet également de décrire dans un texte lisible par l'homme la signification d'une relation ou d'une classe. Ceci est un schéma. Il vous indique les utilisations légales de diverses classes et relations. Il est également utilisé pour indiquer qu'une classe ou une propriété est un sous-type d'un type plus général. Par exemple, "HumanParent" est une sous-classe de "Person". "Loves" est une sous-classe de "Knows".
Sérialisations RDF
RDF peut être exporté dans un certain nombre de formats de fichiers. Le plus courant est RDF + XML mais cela présente quelques faiblesses.
N3 est un format non XML qui est plus facile à lire, et il y a quelques sous-ensembles (Turtle et N-Triples) qui sont plus stricts.
Il est important de savoir que RDF est une façon de travailler avec des triplets, PAS les formats de fichiers.
XSD
XSD est un espace de noms principalement utilisé pour décrire les types de propriétés, comme les dates, les entiers, etc. On le voit généralement dans les données RDF identifiant le type spécifique d'un littéral. Il est également utilisé dans les schémas XML, qui sont une marmite de poisson légèrement différente.
HIBOU
OWL ajoute une sémantique au schéma. Il vous permet de spécifier beaucoup plus sur les propriétés et les classes. Il est également exprimé en triplets. Par exemple, cela peut indiquer que "Si A est Marié à B", cela signifie que "B est Marié à A". Ou que si " C isAncestorOf D " et " D isAncestorOf E " alors " C isAncestorOf E ". Une autre chose utile que Owl ajoute est la possibilité de dire que deux choses sont identiques. Ceci est très utile pour joindre des données exprimées dans différents schémas. Vous pouvez dire que la relation" engendrée "dans un schéma est Owl: sameAs" engendré "dans un autre schéma. Vous pouvez également l'utiliser pour dire que deux choses sont identiques, par exemple "Elvis Presley" sur Wikipédia est le même sur la BBC. C'est très excitant car cela signifie que vous pouvez commencer à regrouper les données de plusieurs sites (il s'agit de «données liées»).
Vous pouvez également utiliser OWL pour déduire des faits implicites, tels que " C isAncestorOf E ".
En bref:
Comme l'a écrit l'affiche précédente, RDF est une spécification qui vous indique comment définir des triplets.
Le problème est que RDF vous permet de tout définir, vous pouvez donc composer une déclaration comme celle-ci:
| subject | predicate | object |
|---------|-----------|--------|
| Alex | Eats | Apples |
| Apples | Eats | Apples |
| Apples | Apples | Apples |
Ces triplets forment des documents RDF valides.
Mais, sémantiquement, vous comprenez que ces déclarations sont incorrectes et RDF ne peut pas vous aider à valider ce que vous avez écrit.
Ce n'est pas une ontologie valide.
La spécification OWL définit exactement ce que vous pouvez écrire avec RDF afin d'avoir une ontologie valide.
Les ontologies peuvent avoir plusieurs propriétés.
C'est pourquoi OWL (ver 1) définit plusieurs versions comme OWL DL, OWL Lite, OWL Full.
RDF, RDFS et OWL sont des moyens d'exprimer des informations ou des connaissances de plus en plus complexes. Tous peuvent être sérialisés dans la syntaxe RDF / XML (ou toute autre syntaxe de sérialisation RDF comme Turtle ou N3 par exemple).
Ces technologies sont liées et supposées être interopérables, mais elles ont des origines différentes, c'est peut-être pourquoi la relation entre elles est compliquée à appréhender. Le choix de l'un ou de l'autre dépend de la complexité de la situation que vous modélisez.
Résumé de l'expressivité
RDF : représentation simple, focalisée sur les instances et sur la correspondance avec leurs types ( rdf:type
). Il est possible de définir des propriétés personnalisées pour lier des données et créer des triplets. Les données RDF sont interrogées avec SPARQL. Exemple de RDF sérialisé dans Turtle:
@prefix : <http://www.example.org/> .
:john rdf:type :Man .
:john :livesIn "New-York" .
:livesIn rdf:type rdf:Property .
RDFS: Certaines situations ne sont pas facilement modélisées par RDF seul, il est parfois intéressant de représenter des relations plus complexes comme des sous-classes ( le type d'un type ) par exemple. RDFS fournit des moyens spéciaux pour représenter de tels cas, avec des constructions comme rdfs:subClassOf
, rdfs:range
ou rdfs:domain
. Idéalement, un raisonneur peut comprendre la sémantique RDFS et augmenter le nombre de triplets en fonction des relations: par exemple, si vous avez les triplets John a Man
, Man rdfs:subClassOf
Human
vous devez générer également le triplet John a Human
. Notez que cela n'est pas possible avec RDF seul. Les données RDFS sont interrogées à l'aide de SPARQL. Exemple de RDFS sérialisé dans Turtle:
@prefix : <http://www.example.org/> .
:john rdf:type :Man .
:Man rdfs:subClassOf :Human .
:john :livesIn "New-York" .
:livesIn rdf:type rdf:Property .
# After reasoning
:john rdf:type :Human .
OWL: Le plus haut niveau d'expressivité. La relation entre les classes peut être formellement modélisée sur la base de la logique de description (théorie mathématique). OWL s'appuie fortement sur le raisonneur, il est possible d'exprimer des constructions complexes telles que des propriétés chaînées par exemple ou des restrictions entre classes. OWL sert à construire des ontologies ou des schémas au-dessus des ensembles de données RDF. Comme OWL peut être sérialisé en RDF / XML, il est théoriquement possible de l'interroger via SPARQL, mais il est beaucoup plus intuitif d'interroger une ontologie OWL avec une requête DL (qui est généralement une expression de classe OWL standard). Exemple de constructions OWL sérialisées dans Turtle.
@prefix : <http://www.example.org/> .
:livesIn rdf:type owl:DatatypeProperty .
:Human rdf:type owl:Class .
:Man rdf:type owl:Class .
:Man rdfs:subClassOf :Human .
:John rdf:type :Man .
:John rdf:type owl:NamedIndividual .
Tout d'abord, comme cela a été souligné précédemment, owl peut être sérialisé en RDF.
Deuxièmement, OWL ajoute une capacité ontologique à RDF (qui à lui seul ne fournit qu'une capacité extrêmement limitée pour la représentation formelle des connaissances connues), en fournissant l'appareil pour définir les composants de votre triplet en utilisant une logique de description formelle calculable du premier ordre. C'est ce que les affiches entendent ici quand elles parlent de «richesse sémantique».
Troisièmement, il est important de réaliser que dans OWL-Full (pour OWL 1) rdfs: class et owl: class sont équivalents et dans OWL-DL, owl: class est une sous-classe de rdfs: class. En effet, cela signifie que vous pouvez utiliser une ontologie OWL comme schéma pour RDF (qui ne nécessite pas formellement de schémas).
J'espère que cela aidera à clarifier davantage.
Lorsque vous utilisez le terme RDF, vous devez distinguer deux choses:
Vous pouvez désigner RDF comme un concept :
Une manière de décrire les choses / la logique / tout en utilisant des collections de triplets.
Exemple:
"Anna a des pommes." "Les pommes sont saines."
Ci-dessus, vous avez deux triplets qui décrivent deux ressources «Anna» et «pommes». Le concept de RDF (Resource Description Framework) est que vous pouvez décrire des ressources (n'importe quoi) avec des ensembles de seulement 3 mots (termes). À ce niveau, vous ne vous souciez pas de la façon dont vous stockez les informations, si vous avez une chaîne de 3 mots, ou une peinture sur un mur, ou un tableau avec 3 colonnes, etc.
À ce niveau conceptuel, la seule chose qui est importante est que vous puissiez représenter tout ce que vous voulez en utilisant des instructions triples.
Vous pouvez vous référer à RDF comme un vocabulaire
Un vocabulaire est simplement une collection de définitions de termes stockées dans un fichier ou quelque part. Ces termes définis ont pour but d'être généralement réutilisés dans d'autres descriptions afin que les gens puissent décrire les données (ressources) plus facilement et de manière standard.
Sur le Web, vous pouvez trouver des vocabulaires standard tels que:
RDF ( https://www.w3.org/1999/02/22-rdf-syntax-ns )
RDFS ( https://www.w3.org/2000/01/rdf-schema# )
OWL ( https://www.w3.org/2002/07/owl )
Le vocabulaire RDF définit des termes qui vous aident à décrire (au niveau le plus élémentaire possible) des individus / instances de classes. Exemple: rdf: type, rdf: Property.
Avec rdf: type, vous pouvez décrire qu'une ressource est une instance d'une classe:
<http://foo.com/anna> rdf:type <http://foo.com/teacher>
Ainsi, le vocabulaire RDF a des termes qui ciblent des descriptions de base des instances de classe et quelques autres descriptions (comme la définition de la triple déclaration, ou la définition du prédicat ... en général, des choses qui sont liées au concept RDF).
Le vocabulaire RDFS contient des définitions de termes qui vous aident à décrire les classes et les relations entre elles. Le vocabulaire RDFS ne se soucie pas des instances de classes (individus) comme le vocabulaire RDF. Exemple: la propriété rdfs: subClassOf que vous pouvez utiliser pour décrire qu'une classe A est une sous-classe de la classe B.
Les vocabulaires RDF et RDFS sont dépendants l'un de l'autre. RDF définit ses termes en utilisant RDFS, et RDFS utilise RDF pour définir ses propres termes.
Les vocabulaires RDF / RDFS fournissent des termes qui peuvent être utilisés pour créer des descriptions très basiques de ressources. Si vous voulez avoir des descriptions plus complexes et précises, vous devez utiliser le vocabulaire OWL.
Le vocabulaire OWL est livré avec un ensemble de nouveaux termes ciblant des descriptions plus détaillées. Ces termes sont définis à l'aide de termes issus des vocabulaires RDF / RDFS.
owl:ObjectProperty a rdfs:Class ;
rdfs:label "ObjectProperty" ;
rdfs:comment "The class of object properties." ;
rdfs:isDefinedBy <http://www.w3.org/2002/07/owl#> ;
rdfs:subClassOf rdf:Property .
owl:DatatypeProperty a rdfs:Class ;
rdfs:label "DatatypeProperty" ;
rdfs:comment "The class of data properties." ;
rdfs:isDefinedBy <http://www.w3.org/2002/07/owl#> ;
rdfs:subClassOf rdf:Property .
owl:TransitiveProperty a rdfs:Class ;
rdfs:label "TransitiveProperty" ;
rdfs:comment "The class of transitive properties." ;
rdfs:isDefinedBy <http://www.w3.org/2002/07/owl#> ;
rdfs:subClassOf owl:ObjectProperty .
Comme vous pouvez le voir ci-dessus, le vocabulaire OWL étend le concept de rdf: Property en créant de nouveaux types de propriétés qui sont moins abstraits et peuvent fournir des descriptions plus précises des ressources.
Conclusions:
RDF est un moyen de définir un triple «sujet», «prédicat», «valeur» . Par exemple, si je veux dire,
"je m'appelle Pierre"
Je souhaiterai écrire
<mail:me@where.com> <foaf:name> "Pierre"
Voir le <foaf:name>
? il fait partie de l' ontologie FOAF . Une ontologie est une manière formelle de décrire les propriétés, les classes d'un sujet donné et OWL est une manière (RDF) de définir une ontologie.
Vous utilisez C ++, Java, etc ... pour définir une classe, une sous-classe, un champ, etc ...
class Person
{
String email_as_id;
String name;
}
RDF utilise OWL pour définir ces types d'instructions.
Autre endroit pour poser ce genre de question: http://www.semanticoverflow.com/
J'essaye de saisir le concept de Web sémantique. J'ai du mal à comprendre quelle est exactement la différence entre RDF et OWL. OWL est-il une extension de RDF ou ces deux technologies sont-elles totalement différentes?
Bref, oui on pourrait dire que OWL est une extension de RDF.
Plus en détail, avec RDF, vous pouvez décrire un graphe orienté en définissant des triplets sujet-prédicat-objet. Le sujet et l'objet sont les nœuds, le prédicat est le bord, ou en d'autres termes, le prédicat décrit la relation entre le sujet et l'objet. Par exemple:Tolkien :wrote :LordOfTheRings
ou:LordOfTheRings :author :Tolkien
, etc ... Les systèmes de données liés utilisent ces triplets pour décrire les graphiques de connaissances, et ils fournissent des moyens de les stocker, de les interroger. Maintenant, ce sont des systèmes énormes, mais vous pouvez utiliser RDF pour des projets plus petits. Chaque application a une langue spécifique à un domaine (ou par termes DDD langue omniprésente). Vous pouvez décrire ce langage dans votre ontologie / vocabulaire, de sorte que vous pouvez décrire le modèle de domaine de votre application avec un graphique, que vous pouvez visualiser, montrer au ppl commercial, parler des décisions commerciales basées sur le modèle et construire l'application par-dessus de ça. Vous pouvez lier le vocabulaire de votre application aux données qu'elle renvoie et à un vocabulaire connu des moteurs de recherche, comme les microdonnées(par exemple, vous pouvez utiliser HTML avec RDFA pour ce faire), et ainsi les moteurs de recherche peuvent trouver facilement vos applications, car la connaissance de ce qu'il fait sera traitable par machine. C'est ainsi que fonctionne le web sémantique. (Au moins c'est comme ça que je l'imagine.)
Maintenant, pour décrire les applications orientées objet, vous avez besoin de types, classes, propriétés, instances, etc ... Avec RDF, vous ne pouvez décrire que des objets. RDFS (schéma RDF) vous aide à décrire les classes, l'héritage (basé sur des objets ofc.), Mais il est trop large. Pour définir des contraintes (par exemple un enfant par famille chinoise) vous avez besoin d'un autre vocabulaire. OWL (langage d'ontologie Web) fait ce travail. OWL est une ontologie que vous pouvez utiliser pour décrire des applications Web. Il intègre les simplesTypes XSD.
Il en RDF -> RDFS -> OWL -> MyWebApp
va de même pour la description de votre application web de manière de plus en plus précise.
personA friendsWith personB
), que (2) RDFS étend cela en offrant la possibilité de spécifier des relations entre object classes
- ie class Person <has 'friendsWith' relationship> Person
. Cela vous permet de phrase alors RDF par classe: A:typeof:person friendsWith B:<typeof:person>
. Et (3), OWL permet alors de spécifier les contraintes des relations?
RDFS vous permet d'exprimer les relations entre les choses en standardisant sur un format flexible à triple base, puis en fournissant un vocabulaire («mots-clés» tels que rdf:type
ou rdfs:subClassOf
) qui peut être utilisé pour dire des choses.
OWL est similaire, mais plus gros, meilleur et plus méchant. OWL vous permet d'en dire beaucoup plus sur votre modèle de données, il vous montre comment travailler efficacement avec des requêtes de base de données et des raisonneurs automatiques, et il fournit des annotations utiles pour amener vos modèles de données dans le monde réel.
Parmi les différences entre RDFS et OWL, la plus importante est simplement que OWL fournit un vocabulaire beaucoup plus large que vous pouvez utiliser pour dire des choses .
Par exemple, OWL comprend tous vos anciens amis de RDFS tels que rdfs:type
, rdfs:domain
et rdfs:subPropertyOf
. Cependant, OWL vous donne également de nouveaux et meilleurs amis! Par exemple, OWL vous permet de décrire vos données en termes d'opérations d'ensemble:
Example:Mother owl:unionOf (Example:Parent, Example:Woman)
Il vous permet de définir des équivalences entre les bases de données:
AcmeCompany:JohnSmith owl:sameAs PersonalDatabase:JohnQSmith
Il vous permet de restreindre les valeurs de propriété:
Example:MyState owl:allValuesFrom (State:NewYork, State:California, …)
en fait, OWL fournit tellement de vocabulaire nouveau et sophistiqué à utiliser dans la modélisation de données et le raisonnement qui a sa propre leçon!
Une autre différence majeure est que contrairement à RDFS, OWL vous indique non seulement comment vous pouvez utiliser certains vocabulaires, mais aussi comment vous ne pouvez pas l' utiliser. En revanche, RDFS vous offre un monde de tout va dans lequel vous pouvez ajouter à peu près n'importe quel triple que vous voulez.
Par exemple, dans RDFS, tout ce que vous ressentez peut être une instance de rdfs:Class
. Vous pourriez décider de dire que Beagle est un rdfs:Class
, puis dire que Fido est une instance de Beagle :
Example: Beagle rdf:Type rdfs:Class
Example:Fido rdf:Type Example: Beagle
Ensuite, vous pourriez décider que vous aimeriez dire des choses sur les beagles, peut-être voulez-vous dire que Beagle est un exemple de chiens élevés en Angleterre :
Example:Beagle rdf:Type Example:BreedsBredInEngland
Example: BreedsBredInEngland rdf:Type rdfs:Class
La chose intéressante dans cet exemple est qu'il Example:Beagle
est utilisé à la fois comme classe et comme instance . Beagle est une classe dont Fido est membre, mais Beagle est lui-même membre d'une autre classe: Things Bred in England.
En RDFS, tout cela est parfaitement légal car RDFS ne contraint pas vraiment les instructions que vous pouvez et ne pouvez pas insérer. En OWL, en revanche, ou du moins dans certaines versions de OWL, les déclarations ci-dessus ne sont en fait pas légales: vous n'êtes tout simplement pas autorisé à dire que quelque chose peut être à la fois une classe et une instance.
C'est alors une deuxième différence majeure entre RDFS et OWL. RDFS permet un monde gratuit pour tous , tout se passe comme un monde plein de Far West, Speak-Easies et Salvador Dali. Le monde de OWL impose une structure beaucoup plus rigide.
Supposons que vous ayez passé la dernière heure à créer une ontologie décrivant votre entreprise de fabrication de radio. Pendant le déjeuner, votre tâche est de créer une ontologie pour votre entreprise de fabrication d'horloges. Cet après-midi, après un bon café, votre patron vous dit maintenant que vous devrez construire une ontologie pour votre entreprise de radio-réveil très rentable. Existe-t-il un moyen de réutiliser facilement le travail du matin?
OWL permet de faire des choses comme ça très, très facilement. Owl:Import
est ce que vous utiliseriez dans la situation un radio-réveil, mais OWL vous donne également une grande variété d'annotations telles que owl:versionInfo
, owl:backwardsCompatibleWith
etowl:deprecatedProperty
qui peut facilement être utilisé des modèles de liaison de données dans un ensemble cohérent mutuellement.
Contrairement à RDFS, OWL est sûr de satisfaire tous vos besoins de modélisation de méta-méta-données.
OWL vous donne un vocabulaire beaucoup plus large avec lequel jouer, ce qui vous permet de dire facilement tout ce que vous voudrez peut-être dire sur votre modèle de données. Il vous permet même d'adapter ce que vous dites en fonction des réalités informatiques des ordinateurs d'aujourd'hui et d'optimiser pour des applications particulières (pour les requêtes de recherche, par exemple). De plus, OWL vous permet d'exprimer facilement les relations entre différentes ontologies à l'aide d'un cadre d'annotation standard .
Tous ces avantages sont comparés à RDFS et valent généralement l'effort supplémentaire nécessaire pour vous familiariser avec eux.
Source: RDFS contre OWL
Dans le modèle objet de document WC3, un document est une chose abstraite: un élément avec du texte, des commentaires, des attributs et d'autres éléments imbriqués à l'intérieur.
Dans le web sémantique, nous traitons un ensemble de «triplets». Chaque triple est:
OWL est au web sémantique comme les schémas sont au modèle objet de document du W3C. Il documente ce que signifient les différents URI et spécifie comment ils sont utilisés d'une manière formelle qui peut être vérifiée par une machine. Un web sémantique peut être valide ou non par rapport à l'OWL qui lui est applicable, tout comme un document peut ou non être valide par rapport à un schéma.
RDF est au Web sémantique comme XML l'est au DOM - c'est une sérialisation d'un ensemble de triplets.
Bien sûr, RDF est généralement sérialisé en tant que documents XML ... mais il est important de comprendre que RDF n'est pas la même chose que "la sérialisation XML de RDF".
De même, OWL peut être sérialisé en utilisant OWL / XML, ou (désolé à ce sujet) il peut être exprimé en RDF, qui lui-même est généralement sérialisé en XML.
La pile Web sémantique de base a déjà été beaucoup expliquée dans ce fil. Je voudrais me concentrer sur la question initiale et comparer RDF à OWL.
Utiliser OWL est essentiel pour obtenir plus de sens (raisonnement et inférence) en connaissant simplement quelques faits. Ces informations "créées dynamiquement" peuvent en outre être utilisées pour les requêtes correspondantes comme dans SPARQL.
Quelques exemples montreront que cela fonctionne réellement avec OWL - ceux-ci ont été tirés de mon exposé sur les bases du web sémantique au TYPO3camp Mallorca, Espagne en 2015.
Spaniard: Person and (inhabitantOf some SpanishCity)
Cela signifie que a Spaniard
doit être a Person
(et hérite donc de toutes les propriétés de la partie d'inférence) et doit vivre dans au moins une (ou plusieurs) SpanishCity
.
<Palma isPartOf Mallorca>
<Mallorca contains Palma>
L'exemple montre le résultat de l'application inverseOf
aux propriétés isPartOf
et contains
.
<:hasParent owl:cardinality “2“^^xsd:integer>
Cela définit que chacun Thing
(dans ce scénario, très probablement unHuman
) a exactement deux parents - la cardinalité est attribuée à la hasParent
propriété.
Une image vaut mille mots! Ce diagramme ci-dessous devrait renforcer ce que Christopher Gutteridge a dit dans cette réponse que le web sémantique est une "architecture en couches".
Source: https://www.obitko.com/tutorials/ontologies-semantic-web/semantic-web-architecture.html
Le cadre de description des ressources (RDF) est un puissant langage formel de représentation des connaissances et une norme fondamentale du Web sémantique. Il a son propre vocabulaire qui définit les concepts et les relations de base (par exemple, rdf: type correspond à la relation isA), et un modèle de données qui permet des déclarations interprétables par machine sous la forme de sujet-prédicat-objet (ressource-propriété-valeur) triples, appelés triplets RDF, tels que picture-depicts-book. L'extension du vocabulaire RDF avec les concepts nécessaires pour créer des vocabulaires contrôlés et des ontologies de base est appelée RDF Schema ou RDF Vocabulary Description Language (RDFS). RDFS permet d'écrire des déclarations sur les classes et les ressources, et d'exprimer des structures taxonomiques, telles que via des relations superclasse-sous-classe.
Les domaines de connaissances complexes nécessitent plus de capacités que ce qui est disponible dans RDFS, ce qui a conduit à l'introduction d' OWL . OWL prend en charge les relations entre les classes (union, intersection, disjonction, équivalence), les contraintes de cardinalité des propriétés (minimum, maximum, nombre exact, par exemple, chaque personne a exactement un père), un typage riche des propriétés, des caractéristiques des propriétés et des propriétés spéciales (transitive, symétrique, fonctionnelle, fonctionnelle inverse, par exemple, A ex: hasAncestor B et B ex: hasAncestor C implique que A ex: hasAncestor C), en spécifiant qu'une propriété donnée est une clé unique pour les instances d'une classe particulière, et les restrictions de domaine et de plage pour les propriétés.