Deprecated: Return type of YDataTable::getIterator() should either be compatible with IteratorAggregate::getIterator(): Traversable, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/bdavid/prod/georef/yamldoc/ydclasses/ydata.inc.php on line 428

Deprecated: Return type of YamlDataTable::getIterator() should either be compatible with IteratorAggregate::getIterator(): Traversable, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/bdavid/prod/georef/yamldoc/ydclasses/yamldata.inc.php on line 295
/yamldoc (pub)
Menu : html yaml json edit check reindex dump unset
* 

{
    "title": "Présentation résumée de YamlDoc",
    "modified": "2020-02-18T00:00:00+00:00",
    "abstract": "YamlDoc\n-------\nYamlDoc est un système de gestion documentaire fondé sur :\n\n  1. l'organisation de documents correspondants principalement à des fichiers texte\n    structurés au **[format Yaml](?ypath=/yaml)**,\n  2. l'utilisation, quand cela est adapté, pour les champs d'une **[sémantique bien connue](?ypath=/semantic)**\n    (DublinCore, DCAT, Skos, Schema.org, GeoJSON, ...), conformément aux principes\n    du [Web des données](https://fr.wikipedia.org/wiki/Web_des_donn%C3%A9es),\n  3. la définition de [classes de documents](?ypath=/ydclass) permettant,\n    d'une part, de spécifier le contenu des documents par un [schéma JSON](https://json-schema.org/)\n    et, d'autre part, d'associer à un document un comportement défini par une classe Php,\n  4. la possibilité de formatter les textes contenus dans un champ du fichier Yaml\n    en utilisant le **[langage Markdown](?ypath=/markdown)**,\n  5. la visualisation des documents et fragments au moyen d'un [visualiseur Web](?ypath=/viewer)\n    extensible grâce aux classes de documents,\n  6. un mécanisme de [requête simple (ypath)](?ypath=/ypath) dans les documents,\n  7. l'[identification](?ypath=/id) par un URI de chaque document et chacun de ses fragments,\n    dont le déréférencement expose son contenu en JSON ou en JSON-LD,\n  8. la possibilité d'effectuer des [recherches plein texte](?ypath=/textSearch) dans les documents,\n  9. l'[organisation d'espaces documentaires partagés chacun sous la forme d'une archive Git](?ypath=/git),\n    pouvant ainsi utiliser soit [Github](https://github.com/benoitdavidfr/yamldocs),\n    soit une archive Git privée,\n  10. la définition de [requêtes sur les documents](?ypath=/query) en Php,\n    \nYamlDoc est notamment étendu pour permettre :\n  \n  - l'[accès aux données géographiques et la définition de cartes Leaflet](?doc=geodata),\n  - l'[exploitation de catalogue de données géographiques](?doc=geocats),\n  - l'utilisation de thésaurus Skos comme [EuroVoc](?doc=eurovoc),\n  - l'[utilisation d'API de l'INSEE](?doc=insee).\n  \n[Idées pour la suite](?ypath=/next).\n  \n",
    "yaml": "### Fondé sur le format Yaml\nLe format [Yaml](https://fr.wikipedia.org/wiki/YAML) permet de structurer des documents ou des données\npar combinaison de listes, tableaux associatifs et données scalaires.\nSimilaire au format JSON, il a l'avantage d'être très **lisible** pour nous les humains\ntout en étant facile à comprendre pour les machines.  \nIl permet de structurer aussi bien des documents composés principalement de textes comme le présent document,\nque des bases de données comme par exemple la [base historique des communes](?doc=geohisto/communes),\ndes structures de graphe comme le [thésaurus EuroVoc](?doc=eurovoc)\nou des documents strcturés complexes comme le\n[modèle de données Inspire](?doc=isnpire-datamodel) déduit du règlement interopérabilité.  \nEnfin, l'édition de documents Yaml est fournie par divers éditeurs de texte comme\n[Notepad++ sous Windows](https://notepad-plus-plus.org/fr/) ou [TextMate sur Mac](https://macromates.com/).\n",
    "semantic": "### Sémantique bien connue\nLorsque cela est adapté, la sémantique des champs des tableaux associatifs Yaml respecte les standards suivants :\n  \n  - le [standard Dublin Core](https://fr.wikipedia.org/wiki/Dublin_Core) pour décrire les métadonnées\n    d'un document ; ainsi il est recommandé d'utiliser des champs Dublin Core (comme title, subject, description,\n    date, ...) pour définir les métadonnées de chaque document\n    ([synthèse des principaux champs ici](?doc=dublincore&ypath=/abstract)) ;\n  - le [standard W3C DCAT](https://www.w3.org/TR/vocab-dcat-2/) pour décrire les catalogues de jeux de données,\n  - le [standard W3C SKOS](https://fr.wikipedia.org/wiki/Simple_Knowledge_Organization_System)\n    ([résumé ici](?doc=skos)) encodé en Yaml pour représenter des thésaurus\n    comme le [thésaurus EuroVoc](?doc=eurovoc) ou le [lexique topographique](?doc=topovoc) de l'AFT ;\n  - le [standard Schema.org](https://fr.wikipedia.org/wiki/Schema.org) pour structurer\n    des bases de données, telles que par exemple des listes d'organismes en utilisant le\n    [type Organization](https://schema.org/Organization),\n  - le [standard IETF GeoJSON](https://tools.ietf.org/html/rfc7946) pour décrire des bases de données\n    géographiques vecteur, [plus de détails ici](?doc=geodata).\n",
    "ydclass": "### Définition de classes de documents\nUne classe de documents correspond à:\n  \n  - un [schéma JSON](https://json-schema.org/),\n  - une classe d'objets Php définissant:\n    - des méthodes de consultation interactive du document,\n    - une API REST de consultation en machine to machine,\n    - une API Php d'utilisation du document en interne à YamlDoc.\n    \nPar exemple la classe YamlSkos définit des documents qui correspondent à un thésaurus décrit en SKOS.\nAinsi, le schéma JSON précise coment le thésaurus doit être structuré en Yaml,\net la classe Php permet :\n  \n  - d'afficher en HTML le thésaurus ou une de ses parties (Concept, micro-thésaurus),\n  - d'exposer une API REST de consultation du thésaurus ou d'une de ses parties,\n  - de fournir des méthodes Php pour utiliser le thésaurus.\n\nLa gestion des classes est développée dans [ce document](?doc=yamldoc/ydclasses).\n",
    "markdown": "### Markdown\nLe [langage Markdown](https://fr.wikipedia.org/wiki/Markdown) est utilisé pour formatter des textes (titres, gras,\nitalique, liste de puces, liens URL, ...) ;\nson utilisation est [illustrée ici](?doc=markdown).\nLes différentes parties du présent document constituent un autre exemple d'utilisation du Markdown.\n",
    "viewer": "### Visualiseur\nUn visualiseur en mode web permet de visualiser les documents et de naviguer entre eux.\nIl permet de vérifier qu'un document est conforme à son schéma.\nIl offre aussi une fonctionnalité limitée de modification.  \nUn mode de visualisation par défaut est défini mais le visualisateur peut être étendu pour s'adapter aux\ndifférentes structures de document. Par exemples:\n  \n  - l'extension YamlData permet de visualiser le contenu d'une base de données,\n  - l'extension YamlSkos permet de naviguer facilement au sein d'un thésaurus Skos,\n  - l'extension DataModel permet de naviguer facilement au sein d'un modèle de données.\n  \nLe visualisateur de l'espace public est accessible sous\n[http://georef.eu/yamldoc/?doc=index](http://georef.eu/yamldoc/?doc=index).  \nSon code source est disponible sur: [Github](https://github.com/benoitdavidfr/yamldoc).\n",
    "ypath": "### Ypath: mécanisme de requêtes simples\nLa fourniture d'une chaine de caractères particulière (appelée Ypath), permet de sélectionner\nune partie d'un document ou d'une base de données.\nSon utilisation est illustrée par les exemples ci-dessous :\n  \n  - dans le présent document, la sélection de la partie *yaml* du document s'effectue en entrant\n    dans le champ de saisie en dessous du menu la chaine `/yaml`,\n  - il est aussi possible d'afficher ce même champ en suivant\n    l'url [`?doc=yamldoc&ypath=/yaml`](?doc=yamldoc&ypath=/yaml),\n  - dans un thésaurus comme le [lexique topographique](?doc=topovoc),\n    on peut référencer le micro-thésaurus `lexiquecadastre`\n    par la chaine [`/schemes/lexiquecadastre`](?doc=topovoc&ypath=/schemes/lexiquecadastre)\n    ou le terme `matrice_cadastrale`\n    par la chaine [`/concepts/matrice_cadastrale`](?doc=topovoc&ypath=/concepts/matrice_cadastrale),\n  - dans la table des départements :\n    - la sélection de l'enregistrement ayant pour *name* `Guadeloupe` s'effectue\n      par la chaine [`/data/name=Guadeloupe`](?doc=geohisto/departements&ypath=/data/name=Guadeloupe)\n    - la sélection des enregistrements ayant pour *insee_code* `04` s'effectue\n      par la chaine [`/data/insee_code=04`](?doc=geohisto/departements&ypath=/data/insee_code=04)\n    - la projection sur les champs *insee_code*, *name* et *successors* s'effectue par la \n      chaine [`/data/insee_code,name,successors`](?doc=geohisto/departements&ypath=/data/insee_code,name,successors)\n",
    "id": "### Identification des documents et de leurs fragments et leur exposition en JSON\nChaque document correspond à un URI de la forme `http://id.georef.eu/{path}` où `{path}` est le chemin du document.  \nLe déréférencement de cet URI expose le document en JSON.\n\nDe même chaque fragment d'un document correspond à un URI de la forme `http://id.georef.eu/{path}{ypath}`,\noù `{ypath}` est le chemin du fragment dans le document,\nqui peut être déréférencé pour exposer le fragment en JSON.\n\nExemples:\n  \n  - Le présent document : [`http://id.georef.eu/yamldoc`](http://id.georef.eu/yamldoc)\n  - Le présent fragment : [`http://id.georef.eu/yamldoc/id`](http://id.georef.eu/yamldoc/id)\n  - Codification des langues selon la norme ISO 639 : [`http://id.georef.eu/iso639`](http://id.georef.eu/iso639)\n  - Définition du code `fre` selon la norme ISO 639 :\n    [`http://id.georef.eu/iso639/concepts/fre`](http://id.georef.eu/iso639/concepts/fre)\n",
    "textSearch": "### Recherche plein texte\nEn tapant un mot ou plusieurs dans le champ de saisie, une recherche plein texte est effectuée dans les documents.\nSi la chaine ne commence pas par un '/' la chaine est interprétée comme une liste de mots.  \nPar exemple, en tapant le mot `bourgogne` on trouve les fragments d'EuroVoc et de geohisto qui\ncontiennent ce mot.  \nOn notera que l'indexation est effectuée par fragment, c'est à dire chaine ou texte à l'intérieur du document,\net non document par document.\nC'est un point important par exemple pour indexer des bases de données.  \nAinsi, par exemple, lors de la recherche du mot `bourgogne`, un des résultats est le fragment d'Eurovoc\ncorrespondant au ypath `/concepts/5032/historyNote/fr/0` ; il s'agit donc de la première note historique\nen français associée au concept 5032. Il est simple de remonter ici au concept en modifiant le ypath.\n\nDifférentes possibilités de recherche sont proposées :\n  \n  - en indiquant plusieurs mots on cherche les fragments contenant au moins un des mots,\n    par exemple la chaine `Franche Comté` permet de trouver les fragments contenant soit Franche soit Comté,\n  - en faisant précéder les mots par un + on cherche les fragments contenant tous les mots,\n    par exemple la chaine `+Franche +Comté` permet de trouver les fragments contenant à la fois Franche et Comté,\n  - en faisant précéder un mot par un - on exclue les fragments contenant ce mot,\n    par exemple la chaine `+Franche -Comté` permet de trouver les fragments contenant Franche mais pas Comté,\n  - en faisant suivre un mot par * on cherche les mots commencant par le mot,\n    par exemple la chaine `geograph*` permet de trouver géographie et geography.\n  \nIl est aussi possible de restreindre la recherche à un document, voire à certains fragments,\npar exemple on peut rechercher le mot géographie uniquement dans les concepts d'Eurovoc\nen indiquant dans le champ key `eurovoc/concepts`.\n",
    "git": "### Organisation d'espaces documentaires partagés chacun sous la forme d'une archive Git\nLes documents sont partitionnés en différents espaces documentaires\navec pour chacun des accès en lecture et/ou en écriture pour certains utilisateurs.  \nChaque espace documentaire correspond à une [archive Git](https://fr.wikipedia.org/wiki/Git)\nqui peut ainsi être partagée.\nOutre l'utilisation en mode web,\nles différents utilisateurs d'un espace peuvent ainsi modifier les documents sur leur poste local\nau moyen d'un éditeur de texte.\nLe logiciel Git est utilisé pour assurer la synchronisation entre les différentes copies. \n\nDans un premier temps, seuls 2 espaces sont définis: un espace public et un espace privé.  \nL'archive Git de l'espace public est accessible à l'URL:\n[https://github.com/benoitdavidfr/yamldocs](https://github.com/benoitdavidfr/yamldocs) et\nle visualisateur de cet espace est accessible sous\n[http://georef.eu/yamldoc/?doc=index](http://georef.eu/yamldoc/?doc=index).  \n\nL'utilisation du mécanisme des branches de git permet d'isoler les modifications de différents utilisateurs ;\ncette fonctionnalité potentielle n'a pas encore été mise en oeuvre.\n",
    "query": "### Requêtes en Php\nLes documents correspondant à des bases de données peuvent facilement être exploités par des scripts Php\nqui effectuent des requêtes dans les données.\nCes requêtes sont appelées comme des documents.  \nPar exemples :\n  \n  - le document [jregdept](?doc=jregdept) réalise une jointure entre les régions actuelles et les départements\n    actuels et renvoie la liste des régions actuelles avec pour chacune la liste de ses départements\n    ([consulter le code source Php de la requête](?action=showPhpSrc&doc=jregdept)),\n  - il est possible de sélectionner une partie du document jregdept en indiquant un ypath,\n    ainsi [ypath=`/data/insee_code=32/depts`](?doc=jregdept&ypath=/data/insee_code=32/depts)\n    sélectionne la liste des départements de la région ayant 32 comme insee_code.\n  - autre exemple, le document [cregions](?doc=cregions) sélectionne les régions actuelles\n    ([consulter le code source Php de la requête](?action=showPhpSrc&doc=cregions)).\n    \nDu point de vue implémentation, un document requête est un script Php qui renvoie un array Php \nà partir duquel sera créé un objet Yamldoc par exemple pour afficher le résultat de la requête.\n",
    "next": "### Réflexions pour la suite\nReconstruire YamlDoc fondé sur les mécanismes suivants :\n  \n  - un document contient, outre ses métadonnées, un ensemble de ressources liées (RDF)\n    dans l'[hypothèse du monde ouvert](https://fr.wikipedia.org/wiki/Hypoth%C3%A8se_du_monde_ouvert).  \n    Chaque ressource est identifiée par un URI et exposée en JSON-LD.  \n    Aujourd'hui 3 prototypes :\n      - les thésaurus Skos comme [EuroVoc](http://localhost/yamldoc/?doc=/eurovoc)\n        fondés sur la classe [YamlSkos](http://localhost/yamldoc/ydclasses.php/YamlSkos/schema)\n      - le [catalogue des données](http://localhost/yamldoc/id.php/cdmet)\n        fondé sur la classe [YamlRdf](http://localhost/yamldoc/ydclasses.php/YamlRdf)\n      - le [registre des organisations](http://localhost/yamldoc/id.php/organizations)\n        fondé sur la classe [AutoDescribed](http://localhost/yamldoc/ydclasses.php/AutoDescribed)  \n\n    Ces 3 prototypes sont assez différents:\n      - le registre des organisations comporte un schéma qui permet de vérifier le contenu du document\n        alors que le catalogue des données n'en contient pas\n      \n  - un document contient un dictionnaire de collections homogènes d'enregistrements,\n    chaque enregistrement étant censé respecter le schéma JSON défini au niveau de la collection.  \n    C'est la logique des bases de données\n    et donc [hypothèse du monde clos](https://fr.wikipedia.org/wiki/Hypoth%C3%A8se_du_monde_clos).  \n    Chaque enregistrement est identifié par un URI et est exposé en JSON (pourquoi pas en JSON-LD ?).\n    \n  - accès aux API en mode RESTfull\n    \nPeut-on gérer simplement la structure Skos comme un cas particulier de Rdf ?\n\nL'exemple du registre des organisations avec la classe AutoDescribed montre:\n  \n  - l'intérêt d'utiliser conjointement:\n      - le schema JSON pour vérifier la syntaxe des données saisies\n      - JSON-LD pour exposer de manière standardisée et formalisée la sémantique des données\n  - pour YamlDoc que les 2 mécanismes ne s'opposent pas\n\n#### JSON-LD vs. JSON Schema\nIn `https://lists.w3.org/Archives/Public/public-linked-json/2014Oct/0010.html`  \n<markus.lanthaler@gmx.net> wrote:\n  \n> They serve different purposes. The short version is:\n> \n>   - JSON-LD give JSON messages a well-defined meaning by mapping most things to IRIs.\n>   - JSON Schema describes the syntactic structure of a JSON document.\n> \n> Both work with JSON so you can use them together.\n",
    "ld": "### Réflexions pour la gestion de données liées\n\nUn document RDF assez générique derait être décrit par:\n  \n  - un schéma JSON pour contrôler la saisie des données et documenter la structure de données\n  - un champ permettant la simplification de la traversée hiérarchique des objets,\n    permettant ainsi la définition d'URI simples\n      - exemple: http://id.georef.eu/organizations/fr.ign/DP/SPRI/DGT\n  - un champ explicitant le formattage JSON-LD du retour d'une URI\n  \n  \nExemples:\n  \n  - http://id.georef.eu/organizations\n  - http://bdavid.alwaysdata.net/yamldoc/id.php/contacts\n  - http://id-benoit.georef.eu/contacts\n  \nTest dans http://id.georef.eu/organizations d'utilisation de l'URI schema.org dans un schema JSON\n\nVoir l'utilisation de ce principe dans:\n  \n  - http://id.georef.eu/cdmet\n  - http://id.georef.eu/eurovoc\n"
}