Les structures, classes et associations, sont des entités nommées, voir chapitre Représentation des entités du système, qui appartiennent à l'espace de nommage défini par la base de connaissances. Par conséquent, la création d'une structure ne peut être réalisée qu'à partir de l'objet représentant la base de connaissances, l'objet KnowledgeBase. L'exemple qui suit illustre la création de classes.
Exemple 10-1. Création d'une classe
/**
* Cette exemple montre comment creer une classe AROM.
*
* @author Veronique DUPIERRIS
*/
import arom.kr.model.KnowledgeBase;
import arom.kr.factory.AromSystem;
import arom.AromSetUp;
import arom.kr.model.EntityCreationException;
import arom.kr.model.AMClass;
public class CreateClass {
/**
* Cree une nouvelle base de connaissances nommee 'Test'.
*
* @return la nouvelle KnowledgeBase
*/
public static KnowledgeBase newKB(){
//nom de la nouvelle base de connaissances.
String kbName = "Test";
// recupere une instance la classe AromSystem qui est en charge de la
// creation des objets KnowledgeBase.
AromSystem kbFactory = AromSetUp.getAromSystem();
// creer une nouvelle base de connaissancers AROM nommee Test.
// aucun autre attribut n'est necessaire lors de la creation de cette base.
KnowledgeBase newKb = null;
try {
newKb = kbFactory.createKB(kbName, new Object[0]);
} catch (EntityCreationException ece){
System.out.println("Une erreur est survenue lors de la creation de la base :");
System.out.println(ece.getMessage());
System.exit(1);
}
return newKb;
}
/**
* Cette methode cree une nouvelle classe racine 'Cours' dans
* la base test ainsi qu'une sous classe de la classe
* cours, la classe 'Mathematiques'. La base modifiee est ensuite
* retournee a l'appelant.
*
* @param kb La base de connaissances dans laquelle les classes
* seront inserees.
*/
public static void createClasses(KnowledgeBase kb){
//nom de la nouvelle classe a creer
String className = "Cours";
// 'Cours' est une classe racine, sans superClasse
AMClass parent = null;
try{
AMClass classeCours = kb.createClass(className, parent);
//cree une sous classe de la classe 'Cours'.
//nom de la nouvelle classe
className = "Mathematiques";
//Mathematiques est une sous classe de cours
parent = classeCours;
AMClass classMath = kb.createClass(className, parent);
}catch (EntityCreationException ece){
System.out.println("Un erreur est survenue lors de la creation de classes :");
System.out.println(ece.getMessage());
}
}
public static void main(String[] args){
KnowledgeBase kBase = newKB();
createClasses(kBase);
System.out.println("Nouvelle classes : "+kBase.lookupClass("Mathematiques").getFQName());
AromSetUp.getAromSystem().cleanup();
}
}// CreateClass
La création d'une association est identique à celle d'une classe. Seuls le nom et la structure parente sont spécifiés. Les différents slots de la nouvelle structure, rôles et/ou variables, sont définis par la suite, à partir de cette nouvelle structure qui représente l'espace de nommage des slots.