{"id":218,"date":"2011-06-21T07:00:47","date_gmt":"2011-06-21T05:00:47","guid":{"rendered":"https:\/\/blog.georezo.net\/geointerop\/?p=218"},"modified":"2011-07-19T12:02:58","modified_gmt":"2011-07-19T10:02:58","slug":"pourquoi-utiliser-gml","status":"publish","type":"post","link":"https:\/\/blog.georezo.net\/geointerop\/2011\/06\/21\/pourquoi-utiliser-gml\/","title":{"rendered":"Pourquoi utiliser GML ?"},"content":{"rendered":"<h1>1. Introduction<\/h1>\n<p>Au moment o\u00f9 l&rsquo;on reparle d&rsquo;imposer l&rsquo;utilisation du format EDIGEO  pour l&rsquo;\u00e9change de certains jeux de donn\u00e9es g\u00e9ographiques, il nous a  sembl\u00e9 opportun de pr\u00e9senter une s\u00e9rie d&rsquo;articles sur GML, format que  tout le monde connait de nom mais qui est finalement peu utilis\u00e9 malgr\u00e9  ses nombreuses qualit\u00e9s.<\/p>\n<p>Ce premier article est consacr\u00e9 \u00e0 la description g\u00e9n\u00e9rale de GML.<\/p>\n<p>Un second article d\u00e9crira de mani\u00e8re plus d\u00e9taill\u00e9e les capacit\u00e9s de validation offertes par GML.<\/p>\n<p>Un troisi\u00e8me et dernier article sera consacr\u00e9 \u00e0 une \u00e9tude de cas : l&rsquo;utilisation de GML par la Communaut\u00e9 Urbaine du Grand Lyon.<br \/>\n<!--more--><\/p>\n<h1>2. Description g\u00e9n\u00e9rale<\/h1>\n<p><strong>GML (Geography Markup Language) <\/strong>est un standard de\u00a0 l&rsquo;OGC (<em>Open Geospatial Consortium<\/em>)  pour la repr\u00e9sentation des entit\u00e9s g\u00e9ographiques vectorielles. La  version 3.2.1 de GML\u00a0 a \u00e9t\u00e9 normalis\u00e9e en 2007 par l&rsquo;ISO (Norme <strong>ISO 19136).<\/strong><\/p>\n<p>GML n&rsquo;est pas un format \u00e0 proprement parler mais un langage qui permet de d\u00e9finir ses propres formats.<\/p>\n<p>GML est un langage d\u00e9riv\u00e9 de XML, particuli\u00e8rement con\u00e7u pour  permettre la repr\u00e9sentation d&rsquo;entit\u00e9s, notamment d&rsquo;entit\u00e9s  g\u00e9ographiques. Une entit\u00e9 est un objet concret ou abstrait du monde r\u00e9el  : une route, une parcelle, une soci\u00e9t\u00e9, une personne\u2026<\/p>\n<p>Une entit\u00e9 peut \u00eatre caract\u00e9ris\u00e9e par ses propri\u00e9t\u00e9s g\u00e9om\u00e9triques et  non g\u00e9om\u00e9triques. Par exemple, une route (entit\u00e9) peut \u00eatre d\u00e9crite par  son identifiant, sa largeur, son \u00e9tat et la g\u00e9om\u00e9trie de son axe qui  repr\u00e9sentent autant de propri\u00e9t\u00e9s. Les entit\u00e9s de m\u00eame type sont  regroup\u00e9es en types d&rsquo;entit\u00e9s. Par exemple l&rsquo;autoroute \u00ab\u00a0A9\u00a0\u00bb et la  \u00ab\u00a0RN113\u00a0\u00bb sont deux entit\u00e9s du type d&rsquo;entit\u00e9s \u00ab\u00a0ROUTE\u00a0\u00bb.<\/p>\n<p>L\u00e0 o\u00f9 XML ne connait que les notions d&rsquo;\u00e9l\u00e9ments et d&rsquo;attributs, GML  apporte donc des concepts tr\u00e8s proches de ceux employ\u00e9s par les  utilisateurs d&rsquo;information g\u00e9ographique et les informaticiens de mani\u00e8re  g\u00e9n\u00e9rale : types d&rsquo;entit\u00e9s, entit\u00e9s, propri\u00e9t\u00e9s, g\u00e9om\u00e9trie, syst\u00e8me de  coordonn\u00e9es&#8230;<\/p>\n<p>Contrairement \u00e0 KML ou SVG, autres langages XML destin\u00e9s \u00e0  repr\u00e9senter des donn\u00e9es g\u00e9ographiques, GML n&rsquo;est pas li\u00e9 \u00e0 une  technologie particuli\u00e8re (Google Earth pour KML, navigateur web pour  SVG).<\/p>\n<p>L&rsquo;utilisation potentielle de GML est beaucoup plus large et il est  possible de l&rsquo;utiliser comme format d&rsquo;\u00e9change ou dans le cadre de  services de type WFS.<\/p>\n<p>Les formats conformes \u00e0 GML b\u00e9n\u00e9ficient des avantages de XML. Parmi d&rsquo;autres qualit\u00e9s, on peut dire qu&rsquo;ils sont :<\/p>\n<ul>\n<li>ouverts<\/li>\n<li>d\u00e9finis de mani\u00e8re formelle<\/li>\n<li>lisibles et compr\u00e9hensibles par une machine ou un humain<\/li>\n<li>validables<\/li>\n<li>distribu\u00e9s (les donn\u00e9es peuvent \u00eatre regroup\u00e9es dans un seul document ou bien r\u00e9parties sur plusieurs serveurs)<\/li>\n<li>r\u00e9utilisables (par h\u00e9ritage des types d\u00e9crits dans les sch\u00e9mas d&rsquo;application)<\/li>\n<li>manipulables par des outils g\u00e9n\u00e9riques avec des langages et techniques standardis\u00e9s : xPath, xQuery, xslt&#8230;<\/li>\n<\/ul>\n<p>Toutes ces qualit\u00e9s n&#8217;emp\u00eachent d&rsquo;ailleurs pas de pouvoir produire  des choses horriblement complexes en GML. Un bon outil ne suffit pas \u00e0  produire des chefs-d&rsquo;\u0153uvre&#8230;<\/p>\n<h1>3. Cr\u00e9ation d&rsquo;un format GML<\/h1>\n<p>GML a d\u00e9j\u00e0 servi \u00e0 cr\u00e9er de nombreux formats : CityGML, GeoSciML, Dutch Top 10 GML, German AA-GML, NEN3610, AIXM&#8230;<\/p>\n<p>Mais il ne faut pas croire que seuls des formats riches et complexes  tels que ceux-ci peuvent b\u00e9n\u00e9ficier de GML. Nous allons le d\u00e9montrer en  cr\u00e9ant en quelques lignes un nouveau format.<\/p>\n<h2>3.1 Sch\u00e9ma d&rsquo;application<\/h2>\n<p>Pour cr\u00e9er un nouveau format GML, il suffit de d\u00e9crire un <strong>sch\u00e9ma d&rsquo;application<\/strong>.<\/p>\n<p>Un sch\u00e9ma d&rsquo;application est un simple fichier au format <em>Schema XML\u00a0 \u00ab\u00a0.xsd\u00a0\u00bb <\/em>(<a href=\"http:\/\/fr.wikipedia.org\/wiki\/XML_Schema\"><em>http:\/\/fr.wikipedia.org\/wiki\/XML_Schema<\/em><\/a>) qui permet de d\u00e9crire totalement et de mani\u00e8re formelle la structure d&rsquo;un format.<\/p>\n<p>Un sch\u00e9ma d&rsquo;application a des caract\u00e9ristiques tr\u00e8s int\u00e9ressantes :<\/p>\n<ul>\n<li>il permet de remplacer des centaines de pages de sp\u00e9cifications\u00a0;<\/li>\n<li>il permet de d\u00e9crire un mod\u00e8le de donn\u00e9es ainsi que l&rsquo;ensemble des  contraintes associ\u00e9es (cl\u00e9 primaire, int\u00e9grit\u00e9 r\u00e9f\u00e9rentielle, domaine de  valeurs&#8230;)\u00a0;<\/li>\n<li>il permet de valider des documents contenant les donn\u00e9es, c&rsquo;est \u00e0  dire de v\u00e9rifier si un fichier de donn\u00e9es est totalement conforme aux  sp\u00e9cifications du format.<\/li>\n<\/ul>\n<p>Pour d\u00e9tailler le contenu d&rsquo;un sch\u00e9ma d&rsquo;application nous allons cr\u00e9er un nouveau format : \u00ab\u00a0big\u00a0\u00bb.<\/p>\n<p>Le format \u00ab\u00a0big\u00a0\u00bb est destin\u00e9 \u00e0 d\u00e9crire un seul type d&rsquo;entit\u00e9  \u00ab\u00a0Departement\u00a0\u00bb, lui-m\u00eame compos\u00e9 de deux attributs \u00ab\u00a0NOM\u00a0\u00bb et  \u00ab\u00a0POPULATION\u00a0\u00bb.<\/p>\n<p>La figure ci-dessous montre le sch\u00e9ma d&rsquo;application correspondant :<\/p>\n<figure id=\"attachment_219\" aria-describedby=\"caption-attachment-219\" style=\"width: 609px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/blog.georezo.net\/geointerop\/files\/2011\/06\/A1_fig1.png\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-219\" src=\"https:\/\/blog.georezo.net\/geointerop\/files\/2011\/06\/A1_fig1.png\" alt=\"Exemple de sch\u00e9ma d'application GML\" width=\"609\" height=\"426\" srcset=\"https:\/\/blog.georezo.net\/geointerop\/files\/2011\/06\/A1_fig1.png 609w, https:\/\/blog.georezo.net\/geointerop\/files\/2011\/06\/A1_fig1-300x209.png 300w\" sizes=\"auto, (max-width: 609px) 100vw, 609px\" \/><\/a><figcaption id=\"caption-attachment-219\" class=\"wp-caption-text\">Figure 1 : Exemple de sch\u00e9ma d&#039;application GML<\/figcaption><\/figure>\n<p>Sans trop rentrer dans les d\u00e9tails, il est int\u00e9ressant de d\u00e9crire grossi\u00e8rement le contenu de ce fichier.<\/p>\n<h3>3.1.1 Espace de nommage<\/h3>\n<p>Le sch\u00e9ma d&rsquo;application GML doit d\u00e9clarer un espace de nommage cible  qui correspond \u00e0 l&rsquo;espace de nommage dans lequel les types du sch\u00e9ma  d&rsquo;application sont d\u00e9clar\u00e9s. La d\u00e9claration est effectu\u00e9e dans les  attributs de l&rsquo;\u00e9l\u00e9ment racine :<\/p>\n<div>\n<p>targetNamespace=\u00a0\u00bbhttp:\/\/www.veremes.com\/big\u00a0\u00bb<\/p>\n<\/div>\n<p>L&rsquo;espace de nommage est une URI (Uniform Resource Identifier)  contr\u00f4l\u00e9e par l&rsquo;organisation qui g\u00e9n\u00e8re le sch\u00e9ma d&rsquo;application (Veremes  dans notre exemple). Cette URI est simplement utilis\u00e9e comme  identifiant unique pour \u00e9viter les confusions entre types de m\u00eame nom  d\u00e9finis par deux organismes diff\u00e9rents.<\/p>\n<p>Tous les espaces de nommage utilis\u00e9s dans ce sch\u00e9ma sont \u00e9galement  d\u00e9clar\u00e9s avec leur pr\u00e9fixe (gml, xlink, big). Ce pr\u00e9fixe est utilis\u00e9  dans le document XML pour identifier l&rsquo;origine des \u00e9l\u00e9ments et  attributs. Dans notre exemple le pr\u00e9fixe de l&rsquo;espace de nommage cible  est \u00ab\u00a0big\u00a0\u00bb :<\/p>\n<div>\n<p>xmlns:big=\u00a0\u00bbhttp:\/\/www.veremes.com\/big\u00a0\u00bb<\/p>\n<\/div>\n<h3>3.1.2 Importation des types GML<\/h3>\n<p>La ligne suivante permet d&rsquo;importer la d\u00e9finition de tous les types pr\u00e9d\u00e9finis par GML et d\u00e9crits dans le sch\u00e9ma \u00ab\u00a0gml.xsd\u00a0\u00bb :<\/p>\n<div>\n<p>&lt;import namespace=\u00a0\u00bbhttp:\/\/www.opengis.net\/gml\/3.2&Prime; schemaLocation=\u00a0\u00bbhttp:\/\/schemas.opengis.net\/gml\/3.2.1\/gml.xsd\u00a0\u00bb\/&gt;<\/p>\n<\/div>\n<p>Il est n\u00e9cessaire d&rsquo;importer ces types pr\u00e9d\u00e9finis pour pouvoir  d\u00e9clarer un nouveau type par h\u00e9ritage, par exemple pour la d\u00e9finition  des types d&rsquo;entit\u00e9s.<\/p>\n<h3>3.1.3 D\u00e9finition des types d&rsquo;entit\u00e9s<\/h3>\n<p>La d\u00e9finition d&rsquo;un type d&rsquo;entit\u00e9s s&rsquo;effectue obligatoirement par d\u00e9rivation (h\u00e9ritage) du type GML pr\u00e9d\u00e9fini <strong>AbstractFeatureType.<\/strong><\/p>\n<p>Ainsi, les lignes suivantes d\u00e9finissent un nouveau type  \u00ab\u00a0DepartementType\u00a0\u00bb d\u00e9riv\u00e9 de \u00ab\u00a0AbstractFeatureType\u00a0\u00bb et affectent ce  type \u00e0 l&rsquo;\u00e9l\u00e9ment \u00ab\u00a0Departement\u00a0\u00bb\u00a0\u00bb qui devient ainsi un type d&rsquo;entit\u00e9s au  sens GML.<\/p>\n<div>\n<p>&lt;element name=\u00a0\u00bbDepartement\u00a0\u00bb type=\u00a0\u00bbbig:DepartementType\u00a0\u00bb substitutionGroup=\u00a0\u00bbgml:AbstractFeature\u00a0\u00bb\/&gt;<\/p>\n<p>&lt;complexType name=\u00a0\u00bbDepartementType\u00a0\u00bb&gt;<\/p>\n<p>&lt;complexContent&gt;<\/p>\n<p>&lt;extension base=\u00a0\u00bbgml:AbstractFeatureType\u00a0\u00bb&gt;<\/p>\n<\/div>\n<h3>3.1.4 D\u00e9finition des attributs\/propri\u00e9t\u00e9s<\/h3>\n<p>Pour \u00e9viter toute confusion entre les d\u00e9finitions \u00ab\u00a0base de donn\u00e9es\u00a0\u00bb  et\u00a0 \u00ab\u00a0xml\u00a0\u00bb du terme \u00ab\u00a0attribut\u00a0\u00bb, il est pr\u00e9f\u00e9rable de parler de  propri\u00e9t\u00e9s.<\/p>\n<p>Le sch\u00e9ma d\u00e9crit donc trois propri\u00e9t\u00e9s pour les objets du type  d&rsquo;entit\u00e9s \u00ab\u00a0departement\u00a0\u00bb :\u00a0 \u00ab\u00a0NOM\u00a0\u00bb, \u00ab\u00a0POPULATION\u00a0\u00bb et la g\u00e9om\u00e9trie qui  est d\u00e9crite par le type GML \u00ab\u00a0surfaceProperty\u00a0\u00bb. Ce type permet de  repr\u00e9senter la g\u00e9om\u00e9trie d&rsquo;un polygone simple.<\/p>\n<div>\n<p>&lt;element ref=\u00a0\u00bbgml:surfaceProperty\u00a0\u00bb minOccurs=\u00a0\u00bb0&Prime;\/&gt;<\/p>\n<\/div>\n<h2>3.2 Structure d&rsquo;un document GML<\/h2>\n<p>Le code suivant montre un exemple de document au format \u00ab\u00a0big\u00a0\u00bb. Ce  document contient la description d\u2019un d\u00e9partement conform\u00e9ment au sch\u00e9ma  d&rsquo;application d\u00e9fini pr\u00e9c\u00e9demment.<\/p>\n<figure id=\"attachment_220\" aria-describedby=\"caption-attachment-220\" style=\"width: 609px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/blog.georezo.net\/geointerop\/files\/2011\/06\/A1_fig2.png\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-220\" src=\"https:\/\/blog.georezo.net\/geointerop\/files\/2011\/06\/A1_fig2.png\" alt=\"Exemple de document GML au format big\" width=\"609\" height=\"416\" srcset=\"https:\/\/blog.georezo.net\/geointerop\/files\/2011\/06\/A1_fig2.png 609w, https:\/\/blog.georezo.net\/geointerop\/files\/2011\/06\/A1_fig2-300x204.png 300w\" sizes=\"auto, (max-width: 609px) 100vw, 609px\" \/><\/a><figcaption id=\"caption-attachment-220\" class=\"wp-caption-text\">Figure 2 : Exemple de document GML au format big<\/figcaption><\/figure>\n<p>Sans trop rentrer dans la structure on peut faire les constatations suivantes :<\/p>\n<ul>\n<li>le fichier est lisible. On y trouve en effet sans difficult\u00e9 le nom  du type d&rsquo;entit\u00e9 \u00ab\u00a0Departement\u00a0\u00bb, les attributs \u00ab\u00a0NOM\u00a0\u00bb &amp;  \u00ab\u00a0POPULATION\u00a0\u00bb et leurs valeurs ainsi que la g\u00e9om\u00e9trie (syst\u00e8me de  coordonn\u00e9es et coordonn\u00e9es).<\/li>\n<li>toutes les entit\u00e9s contenues dans le document sont d\u00e9crites sous  l&rsquo;\u00e9l\u00e9ment \u00ab\u00a0gml:featureMember\u00a0\u00bb dans un sous-\u00e9l\u00e9ment portant le nom du  type d&rsquo;entit\u00e9 (\u00ab\u00a0big:Departement\u00a0\u00bb dans notre exemple)<\/li>\n<li>les propri\u00e9t\u00e9s (attributs) de l&rsquo;entit\u00e9 sont d\u00e9crites sous forme d&rsquo;\u00e9l\u00e9ments et non d&rsquo;attributs XML<\/li>\n<li>dans cet exemple, l&rsquo;\u00e9l\u00e9ment \u00ab\u00a0gml:surfaceProperty\u00a0\u00bb d\u00e9crit la  g\u00e9om\u00e9trie de l&rsquo;objet mais il existe un grand nombre de types permettant  de repr\u00e9senter une grande diversit\u00e9 de structures g\u00e9om\u00e9triques simples  ou complexes (2D ou 3D)<\/li>\n<li>l&#8217;emplacement du sch\u00e9ma d&rsquo;application est d\u00e9fini dans l&rsquo;attribut  xsi:schemaLocation de l&rsquo;\u00e9l\u00e9ment racine. La valeur  \u00ab\u00a0http:\/\/www.veremes.com\/big big.xsd\u00a0\u00bb peut se lire ainsi : le sch\u00e9ma  d&rsquo;application correspondant \u00e0 l&rsquo;espace de nommage  \u00ab\u00a0http:\/\/www.veremes.com\/big\u00a0\u00bb est le fichier \u00ab\u00a0big.xsd\u00a0\u00bb (m\u00eame  r\u00e9pertoire que le jeu de donn\u00e9es source). Pour \u00e9viter de fournir le  fichier .xsd avec le fichier .gml il est g\u00e9n\u00e9ralement pr\u00e9f\u00e9rable de  d\u00e9poser le sch\u00e9ma d&rsquo;application sur Internet et de fournir une  d\u00e9finition du type \u00ab\u00a0xsi:schemaLocation=\u00a0\u00bbhttp:\/\/www.veremes.com\/big http:\/\/www.veremes.com\/schemas\/big.xsd\u00a0\u00bb\u00a0\u00bb<\/li>\n<\/ul>\n<p>A titre de comparaison, l&rsquo;image ci-dessous montre la description des attributs d&rsquo;une parcelle dans un fichier EDIGEO\u00a0:<\/p>\n<figure id=\"attachment_221\" aria-describedby=\"caption-attachment-221\" style=\"width: 369px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/blog.georezo.net\/geointerop\/files\/2011\/06\/A1_fig3.png\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-221\" src=\"https:\/\/blog.georezo.net\/geointerop\/files\/2011\/06\/A1_fig3.png\" alt=\"Extrait d'un fichier Edigeo d\u00e9crivant la valeur des attributs d'une parcelle\" width=\"369\" height=\"220\" srcset=\"https:\/\/blog.georezo.net\/geointerop\/files\/2011\/06\/A1_fig3.png 369w, https:\/\/blog.georezo.net\/geointerop\/files\/2011\/06\/A1_fig3-300x178.png 300w\" sizes=\"auto, (max-width: 369px) 100vw, 369px\" \/><\/a><figcaption id=\"caption-attachment-221\" class=\"wp-caption-text\">Figure 3 : Extrait d&#039;un fichier Edigeo d\u00e9crivant la valeur des attributs d&#039;une parcelle<\/figcaption><\/figure>\n<p>La  diff\u00e9rence avec l&rsquo;exemple GML pr\u00e9c\u00e9dent est \u00e9vidente : dans un cas la  structure de donn\u00e9es est facilement compr\u00e9hensible, dans l&rsquo;autre il est  n\u00e9cessaire de faire appel \u00e0 la documentation de r\u00e9f\u00e9rence pour essayer  de comprendre comment est structur\u00e9e l&rsquo;information.<\/p>\n<h2>3.3 Validation<\/h2>\n<p>Un des grands int\u00e9r\u00eats des documents GML est leur capacit\u00e9 \u00e0 \u00eatre facilement valid\u00e9s.<\/p>\n<p>La validation permet d&rsquo;assurer que le document est totalement conforme au sch\u00e9ma d&rsquo;application du format.<\/p>\n<p>Pour valider un document GML il suffit d&rsquo;utiliser un outil de  validation XML. Il en existe de nombreux, libres \u00a0ou propri\u00e9taires, en  ligne ou autonomes.<\/p>\n<p>Par exemple, si nous modifions le document pr\u00e9c\u00e9dent en attribuant  une valeur d\u00e9cimale \u00e0 l&rsquo;attribut \u00ab\u00a0POPULATION\u00a0\u00bb alors qu&rsquo;il est d\u00e9fini  comme un entier, la validation va g\u00e9n\u00e9rer un message d&rsquo;erreur\u00a0:<\/p>\n<figure id=\"attachment_223\" aria-describedby=\"caption-attachment-223\" style=\"width: 493px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/blog.georezo.net\/geointerop\/files\/2011\/06\/A1_fig41.png\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-223\" src=\"https:\/\/blog.georezo.net\/geointerop\/files\/2011\/06\/A1_fig41.png\" alt=\"Message d'erreur lors de la validation d'un document GML (logiciel XMLSpy)\" width=\"493\" height=\"83\" srcset=\"https:\/\/blog.georezo.net\/geointerop\/files\/2011\/06\/A1_fig41.png 493w, https:\/\/blog.georezo.net\/geointerop\/files\/2011\/06\/A1_fig41-300x50.png 300w\" sizes=\"auto, (max-width: 493px) 100vw, 493px\" \/><\/a><figcaption id=\"caption-attachment-223\" class=\"wp-caption-text\">Figure 4 : Message d&#039;erreur lors de la validation d&#039;un document GML (logiciel XMLSpy)<\/figcaption><\/figure>\n<p>La  validation n&rsquo;est pas un gadget. C&rsquo;est une fonctionnalit\u00e9 indispensable \u00e0  la cr\u00e9ation de tous nouveaux formats d\u00e8s lors que l&rsquo;on cherche \u00e0  satisfaire les exigences minimum de qualit\u00e9. La validation permet  d&rsquo;\u00e9conomiser de nombreux co\u00fbts et facilite l&rsquo;automatisation des cha\u00eenes  de production.<\/p>\n<p>Sur le terrain de la qualit\u00e9, la possibilit\u00e9 de valider un jeu de  donn\u00e9es est sans doute plus importante que la normalisation du format.<\/p>\n<p>Bien qu&rsquo;Edigeo soit une norme AFNOR, l&rsquo;absence d&rsquo;outils de validation  publics a permis la diffusion d&rsquo;un nombre important de fichiers non  conformes avec tous les probl\u00e8mes et les co\u00fbts que cela engendre :<\/p>\n<ul>\n<li>un fichier lisible par un logiciel X peut \u00eatre non lisible ou afficher des donn\u00e9es diff\u00e9rentes dans un logiciel Y&#8230;<\/li>\n<li>il faut parfois modifier manuellement certains fichiers pour les rendre lisibles par certains logiciels.<\/li>\n<\/ul>\n<p>Dans la suite de cet article nous verrons comment il est possible  d&rsquo;impl\u00e9menter des structures de donn\u00e9es complexes avec GML et comment  sp\u00e9cifier des contraintes particuli\u00e8rement utiles dans un sch\u00e9ma  d&rsquo;application : unicit\u00e9, int\u00e9grit\u00e9 r\u00e9f\u00e9rentielle, domaines de valeurs&#8230;<\/p>\n<p>Auteurs : <a href=\"mailto:olivier.gayte@veremes.com\">Olivier Gayte<\/a> (Veremes) et <a href=\"mailto:matthieu.ambrosy@veremes.com\">Matthieu Ambrosy<\/a> (Veremes)<\/p>\n","protected":false},"excerpt":{"rendered":"<p>1. Introduction Au moment o\u00f9 l&rsquo;on reparle d&rsquo;imposer l&rsquo;utilisation du format EDIGEO pour l&rsquo;\u00e9change de certains jeux de donn\u00e9es g\u00e9ographiques, il nous a sembl\u00e9 opportun de pr\u00e9senter une s\u00e9rie d&rsquo;articles &#8230;<\/p>\n","protected":false},"author":60,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4648],"tags":[21],"class_list":["post-218","post","type-post","status-publish","format-standard","hentry","category-big-articles","tag-ogc"],"_links":{"self":[{"href":"https:\/\/blog.georezo.net\/geointerop\/wp-json\/wp\/v2\/posts\/218","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.georezo.net\/geointerop\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.georezo.net\/geointerop\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.georezo.net\/geointerop\/wp-json\/wp\/v2\/users\/60"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.georezo.net\/geointerop\/wp-json\/wp\/v2\/comments?post=218"}],"version-history":[{"count":8,"href":"https:\/\/blog.georezo.net\/geointerop\/wp-json\/wp\/v2\/posts\/218\/revisions"}],"predecessor-version":[{"id":228,"href":"https:\/\/blog.georezo.net\/geointerop\/wp-json\/wp\/v2\/posts\/218\/revisions\/228"}],"wp:attachment":[{"href":"https:\/\/blog.georezo.net\/geointerop\/wp-json\/wp\/v2\/media?parent=218"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.georezo.net\/geointerop\/wp-json\/wp\/v2\/categories?post=218"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.georezo.net\/geointerop\/wp-json\/wp\/v2\/tags?post=218"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}