• Aucun résultat trouvé

Langage de Définition de Données (LDD)

Chapitre 2 Exigences pour un langage d’exploitation de BDBO 51

3.3 Langage de Définition de Données (LDD)

Le LDD doit permettre de créer les éléments du modèle de données définis précédemment, c’est-à-dire les classes et les propriétés des ontologies ainsi que les extensions de ces classes.

3.3.1 Création, modification et suppression des classes et des propriétés des ontologies

En SQL, les instructions CREATE, ALTER et DROP TYPE permettent de définir les types utilisateur et leurs attributs. Par contre, elles ne prennent pas en compte les spécificités suivantes des classes et des propriétés d’une ontologie :

1. un modèle d’ontologies peut permettre de créer différents types de classes. Par exemple, PLIB permet de définir des classes dont le type peut être Item_class ou Model_class. De même, OWL permet de définir des classes primitives (Class) ou des classes définies telles que les res-trictions (par exemple, HasValue). De même, différents types de propriétés peuvent être définis. Par exemple le modèle PLIB permet de définir des propriétés dépendantes (Dependent_p_det) ou non (Non_dependent_p_det) du contexte ;

2. chaque classe et chaque propriété est décrite par un ensemble de valeurs d’attributs ; 3. les classes sont organisées dans une hiérarchie autorisant l’héritage multiple.

Nous avons adapté la syntaxe des instructions de création, modification et suppression d’un type utilisateur à ces spécificités.

3.3.1.1 Création de classes et de propriétés dans une ontologie La syntaxe de création d’une classe et de ses propriétés est la suivante :

hclass definitioni ::= CREATE hentity idi hclass idi [ hunder clausei ] [ hdescriptor clausei ] [ hproperties clause listi ] hunder clausei ::= UNDER hclass id listi

hdescriptor clausei ::= DESCRIPTOR ( hattribute value listi ) hattribute valuei ::= hattribute idi = hvalue expressioni hproperties clausei ::= hentity idi ( hproperty definition listi ) hproperty definitioni ::= hprop idi hdatatypei [hdescriptor clausei]

L’en-tête de cette instruction débute par le mot clé CREATE. L’élément hentity idi permet ensuite de spécifier le type de la classe créée (spécificité 1) en indiquant le nom d’une entité. Dans le chapitre suivant, nous précisons les entités et les attributs qui peuvent être utilisés dans cette instruction. Pour la compréhension de ce chapitre, il est nécessaire d’indiquer (1) que les noms des entités et des attributs sont préfixés par le caractère # afin de distinguer les éléments d’une ontologie (par exemple, la propriété title) des éléments du modèle d’ontologies (par exemple, l’attribut #name) et (2) qu’il existe deux entités prédéfinies #Class et #Property regroupant respectivement les classes et les propriétés des ontologies.

Le nom du type de la classe créée est suivi de l’identifiant de la classe créée (hclass idi) et de l’éven-tuelle liste de ses super-classes après le mot clé UNDER (spécificité 3). Le support de l’héritage multiple peut provoquer le problème d’héritage répété, c’est-à-dire qu’une propriété soit héritée via plusieurs chemins de la hiérarchie. Nous avons suivi l’approche des modèles d’ontologies supportant l’héritage multiple pour résoudre ce problème, c’est-à-dire que cette propriété ne soit héritée qu’en un seul exem-plaire. Le corps de cette instruction est composé de plusieurs clauses optionnelles. La clause DESCRIPTOR peut être utilisée pour décrire la classe créée (spécificité 2) en permettant de spécifier des valeurs d’at-tributs (hattribute idi). D’autres clauses (hproperties clausei) permettent de créer, en même temps que la classe, des propriétés (hprop idi) définies sur cette classe. Ces clauses débutent par hentity idi qui permet d’indiquer le type des propriétés créées (spécificité 1). Il est suivi par le type de données de la propriété créée (hdatatypei) et éventuellement d’une nouvelle clause DESCRIPTOR qui permet d’indiquer la description de ces propriétés (spécificité 2).

Exemple. Créer la classe Post de l’exemple en indiquant que sa version est 001. CREATE #Class Post UNDER Item (

DESCRIPTOR (#version = ’001’) #Property (

title String, content String, note Int,

has_creator REF(User) DESCRIPTOR (#version = ’001’)) )

Explication. La classe Post est définie comme une classe (#Class) ayant pour super-classe la classe Item. La version de cette classe est indiquée dans la clause DESCRIPTOR en utilisant l’attribut #version. La clause #Property permet de créer des propriétés dont le domaine est la classe Post. Les propriétés title et content sont des propriétés du type primitif chaîne de caractères (String). La propriété note est de type entier (Int). Le type de la propriété has_creator est un type réfé-rence vers les instances de la classe User. La définition du type de données de cette propriété est suivie d’une clause DESCRIPTOR qui permet d’indiquer la version de cette propriété.

3.3.1.2 Modification de classes et de propriétés dans une ontologie

Nous avons étendu, de la même façon, l’instruction permettant de modifier un type utilisateur. La syntaxe obtenue est la suivante :

halter class statementi ::= ALTER hclass idi [ hdescriptor clausei ] [ halter class actioni ] halter class actioni ::= hadd property definitioni | hdrop property definitioni

hadd property definitioni ::= ADD [hentity idi] hproperty definitioni [hdescriptor clausei] hdrop property definitioni ::= DROP hproperty idi

Cette instruction permet de modifier la description d’une classe dans une clause DESCRIPTOR. Les valeurs d’attributs indiquées dans cette clause surchargent celles qui peuvent avoir été définies précédemment. Cette instruction permet également d’ajouter (ADD) ou de supprimer (DROP) une propriété définie sur cette classe. Pour l’ajout d’une propriété, si son type n’est pas indiqué, le type #Property est utilisé par défaut.

La sémantique de cette instruction est similaire à celle de modification d’un type utilisateur. Ainsi, la suppression d’une propriété héritée n’est pas autorisée. De même, il n’est pas possible de supprimer une propriété si elle est la seule propriété définie sur une classe.

Exemple. Indiquer que la version de la classe Post est maintenant 002. Ajouter également la propriété sizede type entier à cette classe.

ALTER Post DESCRIPTOR (#version=’002’) ADD size INT

Explication. La clause DESCRIPTOR indique les nouvelles valeurs d’attributs de la classe à modifier. Après l’exécution de cette instruction, la classe Post aura donc la valeur 002 pour l’attribut #ver-sion. La clause ADD permet d’ajouter une propriété à la classe modifiée. La propriété size est ainsi ajoutée à la classe Post. L’entité dont cette propriété est une instance n’étant pas précisée, #Pro-pertyest utilisé par défaut.

3.3.1.3 Suppression de classes et de propriétés dans une ontologie

Enfin, voici la syntaxe permettant de supprimer une classe et les propriétés associées : hdrop class definitioni ::= DROP hclass idi

Cette instruction permet de supprimer la classe d’identifiant hclass idi et les propriétés définies sur cette classe. Cette suppression ne sera effectuée que si cette classe n’est pas référencée. Ainsi, cette classe ne doit pas avoir des sous-classes, ni d’extension et ne doit pas être utilisée dans un type référence. Notons que nous n’avons pas offert la possibilité de réaliser des suppressions en cascade (mot clé CASCADE en SQL) à cause de la complexité des traitements engendrés. Cette fonctionnalité est d’ailleurs peu implantée dans les SGBD.

Exemple. Supprimer la classe Post. DROP Post

Explication. La classe Post n’ayant aucune sous-classe et n’étant pas utilisée dans un type référence, elle ne sera supprimée que si elle n’a pas d’extension. Si c’est le cas, les propriétés title, content, noteet has_creator, définies sur cette classe, seront également supprimées.

3.3.2 Création, modification et suppression des extensions des classes

A partir des classes et des propriétés créées, le LDD doit permettre de créer les extensions permet-tant de contenir les instances de chaque classe. Une extension correspond à une table typée du modèle relationnel-objet. En SQL, une table typée est créée simplement en indiquant le type utilisateur auquel elle est associée. Ses colonnes se déduisent des attributs de ce type utilisateur. Dans le cas d’une exten-sion, les différences suivantes sont à prendre en compte :

1. une extension peut ne contenir qu’un sous-ensemble des propriétés applicables sur une classe ; 2. il n’existe qu’une seule extension par classe ;

3. il n’y a pas d’héritage entre les extensions ; 4. une extension est implantée au niveau logique.

3.3.2.1 Création de l’extension d’une classe

La syntaxe de création de l’extension d’une classe est la suivante :

hextension definitioni ::= CREATE EXTENT OF hclass idi ( hproperty id listi ) [hlogical clausei] hlogical clausei ::= TABLE [htable and column namei]

htable and column namei ::= htable namei [( hcolumn name listi )]

Plusieurs tables typées pouvant être associées à un type utilisateur, l’instruction de création d’une table typée nécessite de nommer la table créée. Ceci n’est pas nécessaire pour l’instruction de création d’une extension puisqu’elle est unique pour une classe donnée. En conséquence, l’en-tête de cette instruc-tion permet de définir une extension en indiquant seulement le nom de la classe (OF hclass idi) dont elle est l’extension (spécificité 2). Cette en-tête ne comprend pas le mot clé UNDER puisqu’il n’y a pas d’héritage entre les extensions (spécificité 3). Le corps de cette instruction est constitué de l’élément hproperty id listi qui permet d’indiquer la liste des propriétés incluses dans cette extension (spécifi-cité 1). Par défaut, l’interpréteur d’une telle instruction implante l’extension créée au niveau logique selon la représentation horizontale, c’est-à-dire par une table (actuellement non normalisée) comprenant une colonne pour chaque propriété de l’extension (spécificité 4). Les noms de cette table et de ses colonnes sont générés automatiquement. Néanmoins, le corps de cette instruction peut être suivi d’une clause hlogical clausei qui permet à un utilisateur d’indiquer les noms qu’il souhaite (htable and column namei). Notons que cette capacité permet de passer du niveau ontologique au niveau logique et donc de répondre en partie à l’exigence 6. Cette capacité est similaire à la possibilité offerte par SQL de passer du niveau logique au niveau physique en indiquant des informations sur le stockage physique des données d’une table dans une instruction CREATE TABLE.

Exemple. Créer l’extension de la classe Post présentée sur la figure 3.1. CREATE EXTENT OF Post (title, has_creator)

TABLE T_Post (title, has_creator)

Explication. L’extension de la classe Post est créée en indiquant que seules les propriétés title et has_creatorsont utilisées pour en décrire les instances. La clause TABLE impose que cette exten-sion soit créée sous la forme d’une table nommée T_Post. Cette table comportera trois colonnes :

la colonne oid, pour l’identifiant des instances, et les colonnes nommées title et has_creator correspondant aux propriétés du même nom.

3.3.2.2 Modification de l’extension d’une classe

Afin de faciliter la manipulation des extensions d’une classe, nous avons défini la syntaxe suivante pour permettre de modifier une extension :

halter extension statementi ::= ALTER EXTENT OF hclass idi halter extent actioni halter extension actioni ::= hadd property definitioni | hdrop property definitioni hadd property definitioni ::= ADD [PROPERTY] hproperty idi [COLUMN hcolumn namei] hdrop property definitioni ::= DROP [PROPERTY] hproperty idi

Cette instruction permet d’ajouter une propriété (ADD) à une extension en indiquant éventuellement le nom de la colonne créée dans la table du niveau logique correspondant à cette extension. Elle permet également de supprimer une propriété d’une extension (DROP).

Exemple. Ajouter la propriété name à l’extension créée précédemment pour la classe Post. ALTER EXTENT OF Post ADD PROPERTY name COLUMN nom

Explication. L’exécution de cette instruction se traduit par l’ajout d’une colonne nommée nom dans la table utilisée pour représenter l’extension de la classe Post au niveau logique.

3.3.2.3 Suppression de l’extension d’une classe

Une extension peut également être supprimée par une instruction dont la syntaxe est la suivante :

hdrop extension statementi ::= DROP EXTENT OF hclass idi

La suppression d’une extension n’est possible que si ses instances ne sont pas référencées dans un type référence. L’interpréteur de ce type d’instruction a ainsi la charge de vérifier cette condition et de lever une erreur si elle n’est pas satisfaite.

Exemple. Supprimer l’extension de la classe Post. DROP EXTENT OF Post

Explication. Cette instruction n’est valide que si les instances de la classe Post ne sont pas utilisées comme valeurs pour les propriétés de type REF(Post). Si cette précondition est satisfaite, cette instruction supprime l’extension de la classe Post ainsi que la table implantant cette extension au niveau logique.

Dans cette section, nous avons montré le langage de définition de données de OntoQL qui permet de créer des conteneurs pour les instances des classes ainsi que pour leur description. Dans la section suivante, nous décrivons le langage permettant de manipuler ces instances et leur description.