Réflexions sur une DTD pour plugin.xml - commentaires Réflexions sur une DTD pour plugin.xml 2010-09-20T19:27:30Z https://blog.smellup.net/spip.php?article6#comment20 2010-09-20T19:27:30Z <p>Ce serait intéressant de rajouter une balise <code class="spip_code spip_code_inline" dir="ltr"><release></code> (ou <code class="spip_code spip_code_inline" dir="ltr"><revision></code>) à la DTD, en plus de <code class="spip_code spip_code_inline" dir="ltr"><version></code>. Même si ce n'est pas utilisé immédiatement, l'idée serait d'y récupérer automatiquement, à terme, le numéro de la dernière révision SVN pour les plugins développés sur spip-zone.</p> Premier lot de remarques sur la structure 2010-08-18T15:10:28Z https://blog.smellup.net/spip.php?article6#comment5 2010-08-18T15:10:28Z <p>J'adhère pas à tout mais il y a encore quelques incompréhensions vis-à-vis de ma modélisation SVP.</p> <blockquote class="spip"> <p> ...il arrive souvent qu'on distingue différentes versions en modernisant le logo. On peut éventuellement le mettre au deux, le premier étant une valeur par défaut.</p> </blockquote> <p>Ouais bof, je suis plutôt d'avis que le logo doit rester identique pour conserver un repère visuel. C'est pour la même raison que je ne trouve pas judicieux de traduire le nom d'un plugin.</p> <blockquote class="spip"> <p> En revanche, je ne comprends pas ton exigence que chaque paquet reproduise telles quelles les informations du plugin...</p> </blockquote> <p>Je ne parle pas à l'intérieur d'un même fichier XML mais entre deux fichiers XML définissant une branche différente d'un même plugin. La modélisation de SVP part du principe :</p> <ul class="spip"><li> Un plugin a une ensemble de caractéristiques intangibles : préfixe, nom, slogan, logo, catégorie, tags</li><li> Un plugin est distribué sous différents paquets, mais chaque paquet possède les mêmes caractéristiques du plugin.</li></ul> <p>Donc à ce titre, je souhaitais que le bloc d'informations du plugin soit bien identifié dans la DTD, donc dans le fichier XML.</p> <blockquote class="spip"> <p> Je ne comprends pas non plus l'introduction des balises « nom » et « slogan » qui ne correspondent pas à ce que tu décris dans ton article 1 car ici elles paraissent redondantes respectivement avec l'attribut ID et la balise « description ».</p> </blockquote> <p>Si si ça correspond exactement à la modélisation SVP. Ben le nom c'est « Association », « Accès restreint »... Je n'avais pas vu ton id mais je ne crois pas que le nom soit la bonne information à mettre en id dans ce cas : le préfixe serait plus adapté et donc il faut bien une balise nom.</p> <p>Pour le slogan c'est ce que j'ai expliqué : une description courte et pertinente qui perdure pour le plugin indépendamment de son évolution. La description est plus au niveau du paquet car elle peut inclure les modifications fonctionnelles apportées.</p> <blockquote class="spip"> <p> ...il faudrait renommer l'actuelle balise « description » de ma DTD par « slogan », et rajouter une balise « description » au niveau de chaque paquet,...</p> <p>...Quant au nom du fichier, c'est tout de même gênant qu'il se nomme « paquet » sans S s'il en décrit plusieurs...</p> </blockquote> <p>Alors là c'est un autre sujet qu'on a pas encore abordé et c'est pour cela que dans l'article sur les règles j'ai fait trois groupes d'informations : plugin, paquet et autres.</p> <p>Un fichier paquet.xml (sans s<small class="fine d-inline"> </small>!) génère bien qu'un seul paquet physique. Quand on a deux blocs à l'intérieur c'est pour que le même paquet fonctionne avec deux versions de SPIP différentes (en général).</p> <p>Regarde par exemple le plugin.xml de Fancybox à cette adresse : <a href="http://zone.spip.org/trac/spip-zone/browser/_plugins_/fancybox/plugin.xml" class="spip_url spip_out auto" rel="nofollow external">http://zone.spip.org/trac/spip-zone/browser/_plugins_/fancybox/plugin.xml</a>, il a deux blocs nommés <code class="spip_code spip_code_inline" dir="ltr"><plugin></code> et <code class="spip_code spip_code_inline" dir="ltr"><plugin spip='[2.1.0-beta;]' ></code>. Par contre, on peut noter dans ce cas que beaucoup d'informations sont inutilement redondantes, celles de l'entité plugin de SVP, mais d'autres aussi comme la version SPIP dans balise plugin et dans le neccesite, alors que seuls le chemin et la version sont dans ce cas différents.</p> <p>Je peux même te dire que je ne traite pas ce cas correctement dans SVP car j'associe l'archive au paquet alors que pour Fancybox l'archive supporte deux paquets<small class="fine d-inline"> </small>! La page du plugin ne fait donc état que du paquet de version 0.4. Donc je crois qu'il faut encore travailler la structure de la DTD pour faire apparaître plus clairement les différents blocs.</p> <p>Donc conclusion provisoire, on parlera des tags plus tard, je proposerais la DTD suivante :</p> <div style="font-size:1.2em;"> <div class="precode"><pre class="spip_code spip_code_block" dir="ltr" style="text-align:left;"><code><!ELEMENT spip-plugin (nom slogan paquet+) > <!ATTLIST spip-plugin prefix ID %NAME #REQUIRED categorie (auteur|communication|date|divers|edition|maintenance| multimedia|navigation|outil|performance|squelette|statistique| theme) #REQUIRED logo %PATH #IMPLIED > <!ELEMENT nom (#PCDATA)> <!ELEMENT slogan (#PCDATA)> <!ELEMENT paquet description (auteur|bouton|chemin|necessite|onglet|pipeline|utilise)* > <!ATTLIST paquet etat (experimental|dev|test|stable) #REQUIRED licence #CDATA #REQUIRED lien %URI #IMPLIED logo %PATH #IMPLIED version %VNUM #REQUIRED version_base %NUMBER #IMPLIED install %PATH #IMPLIED options %PATH #IMPLIED fonctions %PATH #IMPLIED meta %NAME #IMPLIED ></code></pre></div> </div> Premier lot de remarques sur la structure 2010-08-18T09:47:14Z https://blog.smellup.net/spip.php?article6#comment2 2010-08-18T09:47:14Z <p>Il y a effectivement deux notions, le plugin et le paquet, mais il suffit a priori de deux balises, je ne vois pas l'intérêt d'en avoir 3, a fortiori en nommant « spip-paquet » (sans S final) une balise regroupant plusieurs balises « paquet ». Ma proposition a donc comme premier défaut de nommer « plugin » une balise qui aurait dû s'appeler « paquet ». Le deuxième défaut est effectivement d'avoir mis au niveau « paquet » des informations intangibles du plugin, savoir le préfixe et la catégorie, et éventuellement le logo mais c'est moins sûr : il arrive souvent qu'on distingue différentes versions en modernisant le logo. On peut éventuellement le mettre au deux, le premier étant une valeur par défaut.</p> <p>En revanche, je ne comprends pas ton exigence que chaque paquet reproduise telles quelles les informations du plugin : il vaut mieux les mettre une fois pour toutes au niveau de la balise décrivant le plugin, et d'ailleurs dans ta DTD tu ne le fais heureusement pas<small class="fine d-inline"> </small>!</p> <p>Je ne comprends pas non plus l'introduction des balises « nom » et « slogan » qui ne correspondent pas à ce que tu décris dans ton article 1 car ici elles paraissent redondantes respectivement avec l'attribut ID et la balise « description ». Si je suis ton article, il faudrait renommer l'actuelle balise « description » de ma DTD par « slogan », et rajouter une balise « description » au niveau de chaque paquet, ce qui se défend (je pensais plutôt que la description était intangible, mais on peut effectivement la voir comme description des nouveautés). Quant à id_plugin dans ton article il évoque plutôt un clé numérique primaire SQL, autrement dit une information interne qui n'a pas à apparaître dans la DTD a priori.</p> <p>Pour les tags, ta DTD les mentionne comme ID mais ce n'est pas possible à cause des répétitions éventuelles. De plus, ce n'est pas clair pour moi si<br class="autobr"> ça ne devrait pas plutôt être mis au niveau du paquet : il arrive qu'un plugin abandonne un gros bout de code en délégant la fonctionnalité à un autre plugin dont il exige alors la nécessité, et alors les tags repérant cette fonctionnalité ne seront plus d'actualité pour les paquets qui suivront. J'aurais besoin de plus d'informations sur leur rôle pour me faire une idée, pour l'instant je continue à les ignorer.</p> <p>Quant au nom du fichier, c'est tout de même gênant qu'il se nomme « paquet » sans S s'il en décrit plusieurs. Dans ma DTD je prend comme balise racine « spip-plugin » parce que je crois important que le nom SPIP apparaisse dedans, pourquoi ne pas nommer le fichier « spip-plugin.xml »<small class="fine d-inline"> </small>?</p> <p>Je modifie donc ma DTD ci-dessus en remplaçant les deux éléments « spip-plugin » et « plugin » par les trois suivants :</p> <div style="font-size:1.2em;"> <div class="precode"><pre class="spip_code spip_code_block" dir="ltr" style="text-align:left;"><code><!ELEMENT spip-plugin (slogan paquet+) > <!ATTLIST spip-plugin id ID #REQUIRED prefix %NAME #REQUIRED categorie %NAME #IMPLIED logo %PATH #IMPLIED > <!ELEMENT slogan (#PCDATA)> <!ELEMENT paquet description (auteur|bouton|chemin|necessite|onglet|pipeline|utilise)* > <!ATTLIST paquet etat (experimental|dev|test|stable) #REQUIRED licence #CDATA #REQUIRED lien %URI #IMPLIED logo %PATH #IMPLIED version %VNUM #REQUIRED version_base %NUMBER #IMPLIED install %PATH #IMPLIED options %PATH #IMPLIED fonctions %PATH #IMPLIED meta %NAME #IMPLIED ></code></pre></div> </div> Premier lot de remarques sur la structure 2010-08-18T08:34:52Z https://blog.smellup.net/spip.php?article6#comment1 2010-08-18T08:34:52Z <p>Voici un premier lot de remarques uniquement liées à la structure générale du fichier.</p> <p>Le nom du fichier : je rappelle la proposition faite sur la liste, <code class="spip_code spip_code_inline" dir="ltr">paquet.xml</code>.</p> <p>Dans l'article <a href='https://blog.smellup.net/spip.php?article1' class="spip_in" rel='nofollow'>SVP, objectifs et mise en oeuvre</a> je modélise les deux notions de plugin et paquet en donnant la liste des informations constitutives de l'une et l'autre. Dans l'article <a href='https://blog.smellup.net/spip.php?article4' class="spip_in" rel='nofollow'>Développement de SVP v0</a>, je précise que les informations propres au plugin doivent être uniques et reproduites telles quelles de paquet en paquet.</p> <p>Donc je proposerais que la DTD du fichier XML instaure cette distinction entre plugin et paquet afin que les développeurs identifie rapidement le bloc plugin à ne pas modifier. Ca pourrait donner ceci :</p> <div style="font-size:1.2em;"> <div class="precode"><pre class="spip_code spip_code_block" dir="ltr" style="text-align:left;"><code><!ELEMENT spip-paquet (description plugin paquet+) > <!ATTLIST spip-paquet id ID #REQUIRED > <!ELEMENT description (#PCDATA)> <!ELEMENT plugin (nom slogan tags*) > <!ATTLIST plugin prefix %NAME #REQUIRED categorie (liste des 13 alias prédéfinis) #REQUIRED logo %PATH #IMPLIED > <!ELEMENT nom (#PCDATA)> <!ELEMENT slogan (#PCDATA)> <!ELEMENT tag (#NAME)> <!ATTLIST tag id ID (liste des tags prédéfinis) #IMPLIED > <!ELEMENT paquet (auteur|bouton|chemin|necessite|onglet|pipeline|utilise)* > <!ATTLIST paquet etat (experimental|dev|test|stable) #REQUIRED licence #CDATA #REQUIRED lien %URI #IMPLIED version %VNUM #REQUIRED version_base %NUMBER #IMPLIED install %PATH #IMPLIED options %PATH #IMPLIED fonctions %PATH #IMPLIED meta %NAME #IMPLIED ></code></pre></div> </div> <p>J'espère que j'ai pas fait d'erreurs d'écriture mais rien n'est moins sur....</p>