{{tag>Brouillon DB sqlite}} = Dokuwiki - Strata semi-structured data == Intro Voir : * https://www.dokuwiki.org/plugin:strata * http://www.opensym.org/os2014/proceedings-files/p807.pdf * http://eprints.eemcs.utwente.nl/24181/01/Davison_thesis_v11.pdf * SPARQL DokuWiki utilise des fichiers plats, nul besoin de base de données relationnelle. Cependant il peut être utile d'utiliser des données structurées, sémantique et autre. Une solution intéressante est l’extension **Strata** (semi-structured data) qui utilise par défaut sqlite (possibilité d'utiliser PostgreSQL ou MySQL). Nous avons que les avantages d'une base de données relationnelle, sans les inconvénients. En effet, toutes les données sont dans les pages du Wiki au format texte. Un effacement de la base ne serait donc pas catastrophique ! == Install Nécessite l’extension DokuWiki **sqlite** * https://www.dokuwiki.org/plugin:sqlite Module PHP pour communiquer avec sqlite. Sur Debian : apt-get install php5-sqlite Install sur alpine / PHP7 apk add php7-sqlite3 sqlite php7-pdo_sqlite Note fichier : |Conf DW | ''sqlite:@METADIR@/strata.sqlite3'' | |Emplacement | ''./data/meta/strata.sqlite3'' | == Notes Pour commenter une ligne, préfixer là par "--" comme en SQL Les données ne peuvent être saisi que par la balise **%%%%** Pour requêter il existe les balises **%%%%** et **%%%%** == Exemple === Données Création d'un page sur DokuWiki ''people:alice_king'' Full Name: Alice King Birthday [date::Y-m-d]: 1985-11-12 Birthplace [page::places]: London Contact [link]: alice.king@example.org Friends [ref]*: Bob Marley, Jean Paul page ''people:bob_marley'' Full Name: Bob Marley Birthday [date::Y-m-d]: 1945-02-06 Birthplace [page::places]: Nine Miles Contact [link]: Friends [ref]*: Alice King, Jean Paul NB : Le ligne ''Contact [link]:'' ne contenant aucune valeur sera ignorée, elle ne sert à rien La syntaxe basée sur SPARQL est assez simple pour la saisi de donnés. -- Les lignes commençant par -- sont ignorées -- Exemple Clef: Valeur -- Ou Clef [type]: valeur -- Ou encore -- Le symbole "*" signifie que plusieurs valeurs sont possibles Clef [type]*: valeur Clef [type::hint]: valeur -- Exemple DateFacture [date::Y-m-d]: 2016-03-04 Le **type** sert à la fois au stockage des données ainsi qu'à la présentation === Requête Sur une autre page ~~NOCACHE~~
?p is a: person ?p Contact [link]: ?contact ?p Birthday [date]: ?birthday ?p Birthplace [page::places]: ?birthplace
Bob Marley n’apparaît pas. Ce n'est pas parce que vous n'avez pas assez fumé. En fait ici tous les champs demandés sont obligatoires alors que le champ **Contact** est vide Réécrivons notre requête avec le champ **Contact** optionnel ?p is a: person optional { ?p Contact [link]: ?contact } ?p Birthday [date]: ?birthday ?p Birthplace [page::places]: ?birthplace
------------ Exemple avec **Union** ?p is a: person optional { ?p Contact [link]: ?contact } ?p Birthday [date]: ?birthday --Lignes commentées --?p Birthplace [page::places]: ?birthplace --?birthplace = London union { { ?p Birthplace [page::places]: ?birthplace ?birthplace = London } { ?p Birthplace [page::places]: ?birthplace ?birthplace = Nine Miles } }