Comme évoqué en section 5.3.2, l’exploitation de la page Map Features
1sur le
wiki d’OSM est pertinente dans le cadre de notre approche. En effet, cette page Web
répertorie des tags dont l’utilisation a d’ores et déjà fait l’objet d’un consensus au
sein de la communauté OSM. Il nous semble donc judicieux d’initialiser l’ontologie
OF4OSM sur la base des tags qu’elle contient et de la façon dont elle les structure.
Dans cette section, la méthode de récupération du contenu de la page Map features
est abordée en section 6.2.1, tandis que la méthode d’alimentation initiale de
l’onto-logie OF4OSM à partir de l’information récupérée sur cette page Web est expliquée
en section 6.2.2
6.2.1 Récupération du contenu de la page Map features
Sur la pageMap features du wiki OSM, les tags OSM sont rangés sous 3 niveaux
de titres. Cette structure est illustrée sur la figure 6.1. Au premier niveau de la
table des matières, on trouve les deux grands groupes de tags :1) Primary features
et 2) Additional Property. Ceux-ci correspondent respectivement aux tags de type
catégorie (of4osm:IOSMCategoryTag) et aux tags de type propriété
(of4osm:IOS-MPropertyTag). Dans la lignée des travaux de [Auer et al., 2009], et comme nous
l’avons vu dans le chapitre 5, nous ne nous intéressons qu’aux tags de typecatégorie.
Le second niveau de la hiérarchie de la table des matières de la page Map Features
correspond aux clés des tags OSM. Par exemple, les titres 1.1) Aerialway, 1.2)
Aeroway ou encore 1.3) Amenity visibles sur la figure 6.1 font référence à des clés
utilisées dans des tags de la base de données OSM (par exemple,
Figure 6.1 – Structure de la pageMap Features du wiki OSM.
lift, aeroway=aerodromeou encore amenity=school). Les tags de type catégorie
qui partagent la même clé étant, a priori, plus proches sémantiquement que les
autres tags, chaque concept de l’ontologie OF4OSM extrait d’un tag OSM sera lié
à un concept représentant sa clé par une relation de subsomption (cf. section 5.3.1).
Afin de créer cette hiérarchie clé-tag, et puisque les titres de niveau 2 de la table
des matières de la page Web Map Features correspondent aux clés des tags OSM,
un conceptof4osm:IOSMCategoryTagKeyConceptest créé pour chacun d’entre eux.
Tous les concepts de l’ontologie OF4OSM disposent d’un attribut sous la forme
d’un tableau associatif qui permet de stocker des labels internationalisés. Lors de
la création d’un concept à partir d’une clé, le label correspondant au concept est
la chaîne de caractères représentant la clé préalablement convertie au format Upper
Camel Case
2. Par ailleurs, la page Map Features n’étant disponible qu’en anglais
à ce jour, le label est associé au code langage "en_EN". Par exemple, à partir des
3 titres de niveau 2 1.1) Aerialway,1.2) Aeroway et 1.3) Amenity, les 3 instances
correspondantes, de type of4osm:IOSMCategoryTagKeyConcept, sont créées : les
conceptsAerialway,Aeroway etAmenitysont alors ajoutés à l’ontologie OF4OSM.
Le niveau 3 de la table des matières est le niveau le plus fin sous lequel sont rangés
les tags OSM sur la pageMap Features du wiki OSM. Par exemple, sous le titre1.3
Amenity, il existe les titres de niveau 3 1.3.1) Sustenance,1.3.2) Education,1.3.3)
Transportation, etc. (cf figure 6.1). À la différence des titres de niveau 2 qui font
référence aux clés des tags OSM, les titres de niveau 3 ne font pas référence à la base
de données OSM. Par exemple, pour décrire les écoles dans OSM, il n’existe pas de
tageducation=school mais un tagamenity=school. Toutefois, cette classification
implique que certains tags partagent une caractéristique commune implicite qui
dépasse la sémantique exprimée par la clé. Parmi les tags qui partagent une même
clé, il existe donc des groupes de tags entre lesquels le lien de similarité est plus étroit.
Afin de tirer parti de cette sémantique, nous nous proposons d’ajouter le troisième
niveau de la table des matières de la pageMap Fatures à l’ontologie OF4OSM. Pour
ce faire, un concept de haut niveau (of4osm:IHighLevelConcept) est créé pour
chaque titre de niveau 3. Par exemple, le titre de niveau 1.3.2) Education,
sous-niveau de1.3) Amenity, lui-même sous-niveau de1) Primary features, donne lieu à
un concept de haut niveau auquel le label internationalisé "en_EN", "Education"
est associé.
Le label est ici formé par la concaténation du titre de niveau 3 et du titre de
niveau 2 sous lequel il se trouve, ceci dans le but de lever toute ambiguïté. En effet,
la pageMap Features peut potentiellement recenser des titres de niveau 3 identiques
du point de vue de leur orthographe mais très différents sur le plan conceptuel. En
l’état, la page Map Features ne compte qu’un seul cas d’ambiguïté : le titre de
niveau 3 Others, placé sous les titres de niveau 2 Amenity, Emergency et Shop.
Un traitement spécifique pour la chaîne de caractères "Others" peut être envisagé
comme solution. Cependant, dans le but d’éviter que ce type de problème se pose
dans des versions ultérieures du wiki OSM pour différents titres de niveau 3, le
recours à la concaténation nous paraît plus pertinent pour lever toute ambiguïté.
Enfin, chacun des tags de la pageMap Featuresdu wiki OSM est utilisé pour créer
un concept de type of4osm:IOSMCategoryTagConcept dans l’ontologie OF4OSM.
Au moment de sa création, un label correspondant à la concaténation de sa
va-leur puis de sa clé, converti au format UpperCamelCase, lui est associé. À titre
d’exemple, le tag amenity=school donne lieu au concept de type
of4osm:IOSM-CategoryTagConcept initialisé avec le label "en_EN", "SchoolAmenity". Ensuite,
un lien de subsomption est établi entre le concept extrait d’un tag et les concepts
Figure 6.2 – Alimentation initiale de l’ontologie OF4OSM à partir de page Map
Features du wiki OSM.
précédemment extraits des niveaux 2 et 3 de la hiérarchie de titres. Par exemple,
le concept SchoolAmenityest lié au concept de typeIOSMCategoryTagKeyConcept
Amenity (extrait du titre de niveau 2 1.3) Amenity), mais également au concept
IHighLevelConcept Education (extrait du titre de niveau 3 1.3.2) Education).
Afin de pouvoir mettre à jour l’ontologie OF4OSM au gré des évolutions du wiki
OSM, l’intégration des tags répertoriés sur la page Map Features se fait de façon
automatique. La figure 6.2 illustre le processus en deux étapes que nous avons
implé-menté dans un prototype écrit dans le langage de programmation Java
3. En l’état,
notre prototype n’effectue pas de mises à jour en fonction des changements opérés
sur le wiki. Cependant, le passage en revue des tags de la page Map Features peut
être lancé périodiquement (par exemple, via une tâche cron
4) afin de synchroniser
3. https://www.java.com/
OF4OSM avec le wiki OSM.
La première étape opérée par le prototype consiste en l’extraction du contenu
de la page Map Features du wiki OSM. Dans cette optique, nous avons réalisé un
client HTTP qui interroge l’interface de programmation du système de gestion de
contenu (Content Management System, CMS) sur lequel s’appuie le wiki OSM, à
savoir MediaWiki
5. Cette API permet de récupérer, pour une page donnée du wiki
OSM, ses méta-données et son contenu textuel formaté en HTML (cf. annexe E). Le
client HTTP fait appel à la bibliothèque Java Jackson
6dans le but de manipuler
facilement les informations au formatJavaScript Object Notation (JSON) renvoyées
par le serveur.
6.2.2 Alimentation initiale de OF4OSM à partir du contenu de la
page Map features
La seconde étape opérée par le prototype, et illustrée sur le schéma 6.2, consiste
en l’analyse de l’information de la pageMap Featuresextraite au cours de la première
étape (cf. section 6.2.1). Le document HTML est alors manipulé au moyen de la
bibliothèque Java JSoup
7. Cette dernière offre un accès facilité auDocument Object
Model (DOM) du document HTML. Ainsi, le parcours des différents niveaux de
titre de la page Web Map Features est effectué grâce à des sélecteurs Cascading
StyleSheet (CSS)
8. En s’appuyant sur le modèle conceptuel du méta-modèle de
OF4OSM présenté en section 5.3, le système ajoute les concepts correspondant aux
tags OSM (of4osm:IOSMCategoryTagConcept) répertoriés sur la pageMap Features,
ainsi que les concepts correspondant aux titres de niveau 2
(of4osm:IOSMCategory-TagKeyConcept) et 3 (of4osm:IHighLevelConcept) sous lesquels ces mêmes tags
sont rangés. L’algorithme suivant décrit ce processus :
1 func initOF4OSM ( of4osm : OF4OSMOnto) 2 var m a p F e a t u r e s C l i e n t : M a p F e a t u r e s C l i e n t 3 var html : s t r i n g
4 var h t m l P a r s e r : H t m l P a r s e r 5 var htmlDoc : HtmlDocument
6 var p r i m a r y F e a t u r e s : HtmlElement 7 var s i b l i n g s : a r r a y [ HtmlElement ]
8 var keyConcept : IOSMCategoryTagKeyConcept 9 var t a g C o n c e p t : IOSMCategoryTagConcept 10 var h i g h L e v e l C o n c e p t : I H i g h L e v e l C o n c e p t 11
5. http://www.mediawiki.org/wiki/API:Main_page
6. https://github.com/FasterXML/jackson
7. https://jsoup.org/
8. http://www.w3schools.com/cssref/css_selectors.asp
12 begin 13 html← m a p F e a t u r e s C l i e n t . s e n d R e q u e s t ( ) 14 htmlDoc← p a r s e r . p a r s e ( html ) 15 p r i m a r y F e a t u r e s← htmlDoc . g e t E l e m e n t B y I d ( " Primary_f e a t u r e s " ) 16 s i b l i n g s ← p r i m a r y F e a t u r e s . g e t S i b l i n g s ( ) 17 f o r each s i b l i n g i n s i b l i n g s do 18 i f s i b l i n g . tagName = " h3 " then 19 keyConcept← createOSMCategoryTagKeyConcept ( s i b l i n g . t e x t ) 20 addConcept ( onto , keyConcept )
21 e l s e i f s i b l i n g s . tagName = " h4 " then
22 h i g h L e v e l C o n c e p t ← c r e a t e H i g h L e v e l C o n c e p t ( s i b l i n g . t e x t ) 23 add Paren t ( h i g h L e v e l C o n c e p t , keyConcept )
24 addConcept ( onto , h i g h L e v e l C o n c e p t ) 25 e l s e i f s i b l i n g s . tagName = " l i " then 26 t a g C o n c e p t← createOSMCategoryTagConcept ( s i b l i n g . t e x t ) 27 add Paren t ( ta gC on ce pt , h i g h L e v e l C o n c e p t ) 28 addConcept ( onto , t a g C o n c e p t ) 29 end i f 30 end f o r 31 end