Le web subit, en ce moment même, une transformation de fond : celle de la sémantique. Oracle 11g Release 2 fournit un moteur pour préparer et gérer vos données dans cette perspective. Cela mérite quelques explications…
Les standards HTTP et HTML s’appuient sur Internet pour présenter les données et permettre aux utilisateurs de naviguer dans ces informations par associations grace aux hyperliens. Les moteurs de recherche et les outils web 2.0 ont radicalement transformé vos accès à ces informations. Pourtant, malgré les avancées de l’informatique, 99,999% des machines, ne comprennent toujours rien à ce qu’elles manipulent. De sorte que si vous recherchez "Larry"
sur le web, vous tomberez aussi bien sur Larry Ellison
, Larry King
que Greg "Larry"
. Si maintenant, vous cherchez Larry Ellison
, vous risquez de tomber sur un de ses homonymes ou sur l’interview de Jennifer Aniston par Larry King. Enfin si vous recherchez Larry Ellison Oracle
, vos passerez à côté des articles qui mentionnent Lawrence J. Ellison
ou négligent qu’il est le patron et principal actionnaire d’Oracle
.
Évidemment si les ordinateurs nous comprenaient, ça aiderait beaucoup ! Quoique…
La sémantique fournit des outils pour permettre aux machines de faire le lien entre ce qu’elles manipulent et le « sens » des informations associées. Pour cela, elle s’appuie sur plusieurs principes, outils et standards que je vous laisse découvrir par vous-même. Pour les besoins de cet article, j’en développerai 2 qui sont :
- L’utilisation de méta-données, organisées sous la forme de triplets {sujet, prédicat, objet}. Voici 2 exemples de tels triplets :
- {<http://en.wikipedia.org/wiki/Larry_Ellison> <http://dbpedia.org/property/reference> <http://www.oracle.com/people/larry>} signifie que l’article de Wikipedia.fr implique « Larry Ellison ».
- { <http://www.oracle.com/people/larry> rdf:sameAS <http://www.linkedin.com/pub/larry-ellison/3/8ba/42a> } indique que Larry Ellison sur
oracle.com
est la même personne que Larry Ellison surLinkedIn.com
; ce second triplet utilise la syntaxe RDF permettant la définition de l’identité
- La définition de règles d’implications (entailments); ces règles peuvent être inhérentes aux vocabulaires utilisés (RDFS, OWL, SKOS) ou spécifiques
Dans un monde idéal, où toute donnée sera liée, vous retrouverez simplement tous les articles qui référencent « Larry Ellison » patron d’Oracle, tous les films dans lesquels il a joué ou tous les films dans lesquels un patron d’une entreprise du Nasdaq a joué. Le champs des applications est illimité ce qui explique sans doute l’engouement autours des standards (RDF, OWL, SKOS, SPARQL), des outils ou le nombre de recherches et de thèses à propos de la sémantique. L’inventeur du web, Tim Berners Lee (cf sa FOAF Card) est d’ailleurs aujourd’hui le premier vecteur de son développement. Et vous voyez que tout ça arrivera sans que les ordinateurs nous comprennent plus qu’ils ne le font aujourd’hui….
Le moteur sémantique d’Oracle
Maintenant que vous avez touché du doigt les possibilités offertes par la sémantique pour (1) tirer partie des informations existantes et (2) déduire des informations complémentaires à partir de celles existantes, les questions que vous vous posez peut-être sont :
- Comment mettre à profit ces concepts sur vos données existantes ?
- Comment mettre en œuvre une plateforme pour manipuler ces données en volume, performance et en toute sécurité ?
Le moteur sémantique d’Oracle répond justement à ces questions; en particulier, il :
- offre un format adhoc et sécurisé pour stocker les informations sémantiques avec vos autres données; il sert d’infrastructure pivot entre les outils et applications sémantiques,
- permet de charger facilement, en masse et rapidement vos données sémantiques,
- implémente les différents standards et outils de requêtes des informations sémantiques,
- offre des propositions de valeur autour de ces concepts (Virtual Private Database, Intégration aux structures relationnelles et documents, Accès aux data mining, Collaboration, Simulation, …)
- propose une intégration « out-of-the-box » aux principaux outils du marché qu’ils soient opensource (Sesame, Pellet, Jena, Gate, Cytoscape, …) ou partenaires (Thomson Reuters, Top Quadrand, Teranode, Ontoprise, Metanomix, …)
Pour cela, le moteur sémantique étend l’infrastructure Network Data Model d’Oracle Spatial et offre des algorithmes et des outils dédiés. Assez disserté, passons à la mise en œuvre…
Exemple « FAMILY » ou le premier modèle sémantique
Pour utiliser le moteur sémantique, il faut commencer par paramétrer votre base de données en conséquence. Vous devrez créer une base de données 11g Release 2 qui inclut les options Spatial, le partitioning et la compression. Dans le script ci-dessous, vous paramètrerez le moteur sémantique, créerez un tablespace dédié (changez le chemin pour qu’il corresponde à votre configuration) et créerez un utilisateur demo
qui stockera les données sémantiques :
connect / as sysdba @?/md/admin/catsem.sql col namespace format a15 col attribute format a15 col value format a15 col description format a60 set lines 120 set pages 1000 select * from MDSYS.RDF_PARAMETER order by attribute; create tablespace sem_ts datafile '/u01/app/oracle/oradata/BLACK/sem_ts01.dbf' size 100M autoextend on segment space management auto; create user demo identified by demo default tablespace sem_ts temporary tablespace temp; grant connect, resource, dba to demo;
Une fois l’environnement créé, connectez-vous avec l’utilisateur DEMO
puis créez:
- Un réseau sémantique pour stocker votre modèle
- Une table
family_rdf_data
avec une colonne de typesdo_rdf_triple_s
qui stocke les triplets de votre modèle - Un modèle sémantique
family
qui fait le lien entre la colonne de la table et les structures de stockage du modèle sémantique
connect demo/demo execute sem_apis.create_sem_network( - tablespace_name => 'sem_ts') create table family_rdf_data (id number, triple sdo_rdf_triple_s); execute sem_apis.create_rdf_model( - model_name => 'family', - table_name => 'family_rdf_data', - column_name => 'triple');
Vous pouvez ensuite charger l’ensemble des triplets du modèle sémantique disponible sous forme d’ordres INSERT dans la documentation Oracle dans l’exemple 1-20.
Remarque:
Sifa:
est l’alias pour"http://www.example.org/family"
, le triplet :{ fa:John fa:fatherOf fa:Suzie }
par exemple est assez explicite;
D’autres triplets qui référencent le schéma RDF en revanche permettront de calculer des implications et donc de réaliser des requêtes avec inférences. Il s’agit par exemple de{fa:fatherOf rdfs:domain fa:Male}
qui signifie littéralement que si quelqu’un estfa:fatherOf
alors, il est aussifa:Male
Premières requêtes sémantiques
La fonction de table SEM_MATCH
permet d’exécuter des requêtes sémantiques en utilisant une syntaxe semblable à SPARQL; par exemple, voici comment interroger le modèle family
et rechercher l’ensemble des personnes de sexe masculin:
SELECT m FROM TABLE(SEM_MATCH( '{?m rdf:type fa:Male}', SEM_Models('family'), null, SEM_ALIASES(SEM_ALIAS('fa','http://www.example.org/family/')), null)); M ---------------------------------- http://www.example.org/family/Jack http://www.example.org/family/Tom
Vous noterez que dans le cas de cette requête, seules 2 personnes sont de sexe masculin; la raison est que nous n’avons pas intégré les inférences liées au vocabulaire RDFS. Pour réaliser l’implication entre "fa:fatherOf"
et "fa:Male"
, il faut créer l’index d’implication (entailment) correspondant à l’aide de la commande ci-dessous :
exec sem_apis.create_entailment( - index_name_in => 'family_ix', - models_in => sem_models('family'), - rulebases_in => sem_rulebases('RDFS'))
Une fois l’index créé, vous pouvez ajouter la règle d’inférence à votre requête SEM_MATCH comme ci-dessous :
SELECT m FROM TABLE(SEM_MATCH( '{?m rdf:type fa:Male}', SEM_Models('family'), sem_rulebases('RDFS'), SEM_ALIASES(SEM_ALIAS('fa','http://www.example.org/family/')), null)); M ----------------------------------- http://www.example.org/family/Jack http://www.example.org/family/Tom http://www.example.org/family/John http://www.example.org/family/Sammy http://www.example.org/family/Matt
Règles d’Implications Personnalisées
Il est possible de créer ses propres règles d’implications. L’API sem_apis.create_rulebase
permet de créer une base de règles que vous alimenterez ensuite avec des commandes INSERT
comme ci-dessous :
execute sem_apis.create_rulebase('family_rb'); INSERT INTO mdsys.semr_family_rb(rule_name, antecedents, filter, consequents, aliases) VALUES('grandparent_rule', '(?x X:parentOf ?y) (?y X:parentOf ?z)', null, '(?x X:grandParentOf ?z)', sem_aliases(sem_alias('X','http://www.example.org/family/')) ); commit; select * from mdsys.semr_family_rb;
Dans cet exemple, le couple (antécédents, conséquents) indique que si x est un parent de y qui est un parent de z, alors x est un grand parent de z. On peut alors créer un index d’implications comme dans l’exemple précédent mais avec des règles définies par l’utilisateur :
exec sem_apis.create_entailment( - index_name_in => 'family_rb_family_ix', - models_in => sem_models('family'), - rulebases_in => sem_rulebases('RDFS','family_rb'),- options => 'USER_RULES=T')
On peut ensuite exécuter des requêtes sémantiques qui prennent en compte la base de règles utilisateur pour savoir, par exemple qui est le grand-père de Tom:
SELECT x FROM TABLE(SEM_MATCH( '{?x fa:grandParentOf fa:Tom . ?x rdfs:type fa:Male}', SEM_Models('family'), SEM_Rulebases('RDFS','family_rb'), SEM_ALIASES(SEM_ALIAS('fa','http://www.example.org/family/'), SEM_ALIAS('rdfs','http://www.w3.org/1999/02/22-rdf-syntax-ns#')), null)); X ------------------------------------- http://www.example.org/family/John
Supprimer le modèle
Pour supprimer votre modèle sémantique, supprimez les index, le modèle, la base de règle, la table et le réseau; vous pourrez ainsi supprimer l’utilisateur et le tablespace associé :
exec sem_apis.drop_entailment( - index_name_in => 'family_rb_family_ix') exec sem_apis.drop_entailment( - index_name_in => 'family_ix') execute sem_apis.drop_rdf_model(model_name => 'family') execute sem_apis.drop_rulebase('family_rb') drop table family_rdf_data purge; execute sem_apis.drop_sem_network(true) connect / as sysdba drop user demo cascade; drop tablespace sem_ts including contents and datafiles;
Un dernier mot
Cet article n’est qu’une toute petite introduction au moteur sémantique d’Oracle 11g Release 2. Je souhaite qu’il vous permette de partager mon enthousiasme. Pour en savoir plus, lisez la documentation, plongez dans tous les standards attenant et découvrez les nombreux produits et frameworks associés. Par ailleurs, concernant encore le moteur sémantique d’Oracle, vous trouverez 2 autres articles en français à propos des plug-ins fournies par Oracle pour les logiciels open-sources Cytoscape et Jena. N’hésitez pas à partager vos expériences avec la sémantique et Oracle en commentant cet article. Enjoy!
2 réflexions sur “Le Moteur Sémantique d'Oracle 11g Release 2”
y t’il une possible pour faire les même requête en JAVA ?
Merci.
Ping : Le Moteur Sémantique d'Oracle 11g Release 2 « EASYTEAM LE BLOG | Information Mining R&D
Les commentaires sont fermés.