Bonjour,
Je travaille depuis quelques temps, environ 2 ans, sur un framework XML, baptisé Sylma. Il est loin d'être achevé, et pas vraiment prêt pour la production, mais je me demandais si déjà, certain d'entre vous serait intéressé par ce projet.
Dans les grandes lignes, l'idée étais de faire un système qui permette de coder entièrement son site en XML, afin de pouvoir utiliser un éditeur en ligne et de pouvoir modifier chaque aspect du site, autant graphique que structurel du site.
Je n'ai pas publié de version facilement "installable", le coeur se trouve sur google code, les modules sur un serveur privé, et il faut encore qq fichiers de base. Cependant si cela vous motive je pourrais faire un rapide fichier compressé avec quelques explications pour l'installation.
Voici quelques fonctionnalités déjà en place.
Les actions (*.eml) sont ont coeur du système, elle permettent d'agréger le contenu de plusieurs actions, d'appeler des objets PHP via les interfaces, et représentent le point d'entrée des appels au serveur. Un exemple :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
| <?xml version="1.0" encoding="utf-8"?>
<le:action xmlns:le="http://www.sylma.org/execution" xmlns:li="http://www.sylma.org/interface" xmlns="http://www.w3.org/1999/xhtml" xmlns:la="/sylma/processors/action-builder/schema">
<le:settings>
<le:name>WYSIWYG Explorer</le:name>
<le:processor path="/sylma/processors/action-builder" namespace="/sylma/processors/action-builder/schema"/>
<le:argument format="XML_Directory" name="directory"/>
</le:settings>
<le:window>
<li:add-js>/sylma/processors/action-builder/sylma.js</li:add-js>
<li:add-css le:format="string">
<le:directory/>
<le:argument>/main.css</le:argument>
</li:add-css>
</le:window>
<le:action path="../lightbox/slimbox"/>
<la:layer name="galerie" extend-base="sylma.galerie-classes" class="galerie">
<la:property name="pathInterface">
<le:string>
<le:get-settings>module[@name='explorer']/path</le:get-settings>
<le:argument>/interface</le:argument>
</le:string>
</la:property>
<div id="galerie">
<le:action path="tools"/>
<le:action path="mozaic">
<le:string le:name="path">
<le:get-argument name="directory"/>
</le:string>
</le:action>
<le:action path="tools/add"/>
</div>
</la:layer>
</le:action> |
Les interfaces permettent de se connecter aux object PHP, en les créant puis en appelant leurs méthodes. Un exemple :
1 2 3 4 5 6 7 8 9 10 11
| <?xml version="1.0" encoding="utf-8"?>
<class xmlns="http://www.sylma.org/interface">
<file>Users.php</file>
<name>Users</name>
<method return-default="true" name="loadUser" path="load-user">
<argument name="user" format="php-string"/>
</method>
<method name="login_do" path="login_do" return-default="true"/>
<method name="logout" path="logout" return-default="true"/>
<method name="getList" path="list" return-default="true"/>
</class> |
La sécurité, basé sur un système identique à linux (owner, group, mode) qui permet d'indiquer des droits sur les fichiers ou les éléments de fichiers. Deux exemples :
Un fichier 'directory.sml':
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| <?xml version="1.0" encoding="utf-8"?>
<directory xmlns="http://www.sylma.org/directory" xmlns:ls="http://www.sylma.org/security">
<propagate>
<ls:security>
<ls:owner>root</ls:owner>
<ls:group>0</ls:group>
<ls:mode>751</ls:mode>
</ls:security>
</propagate>
<file name="index.eml">
<ls:security>
<ls:owner>root</ls:owner>
<ls:group>0</ls:group>
<ls:mode>750</ls:mode>
</ls:security>
</file>
</directory> |
Un élément sécurisé :
<a id="user-login" ls:owner="root" ls:mode="701" ls:group="famous" href="/sylma/modules/users/login">connexion</a>
XPath et XSLT sont les premières fonctionnalités à avoir été implémentées, voici deux exemples PHP :
$this->getDocument()->get("//category[@absolute-path=\"$sPath\"]");
$oRedirect->getDocument('post')->parseXSL($oTemplate, false);
Le javascript peut être généré lui aussi dans le fichier, via des élément qui vont crocher les événement aux éléments HTML, et créer des objets à partir de classe, liés également aux éléments HTML. J'utilise la librairie Mootools. Un exemple, extrait du module explorer qui liste le contenu des répertoire, ici, un fichier :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
| <?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:la="/sylma/processors/action-builder/schema" xmlns="http://www.w3.org/1999/xhtml" version="1.0">
<xsl:template name="file">
<la:layer key="{@full-path}" class="file">
<la:property name="path">
<xsl:value-of select="@full-path"/>
</la:property>
<la:property name="name">
<xsl:value-of select="@name"/>
</la:property>
<la:property name="owner">
<xsl:value-of select="@owner"/>
</la:property>
<la:property name="group">
<xsl:value-of select="@group"/>
</la:property>
<la:property name="mode">
<xsl:value-of select="@mode"/>
</la:property>
<la:property name="sylma-update-origin">interface</la:property>
<la:property name="sylma-update-path">/update-file</la:property>
<div class="resource {name()}">
<la:event name="mouseenter"><![CDATA[return sylma.explorer.tools.show(this);]]></la:event>
<la:event name="mouseleave"><![CDATA[return sylma.explorer.tools.hide();]]></la:event>
<div class="preview">
<input type="hidden"/>
</div>
<span>
<xsl:value-of select="@name"/>
</span>
</div>
</la:layer>
</xsl:template>
</xsl:stylesheet> |
La librairie, est composée de classes (XML_Document, XML_Element) qui vont remplacer les objets normalement utilisé pour gérer un object DOM en PHP (DOMDocument, DOMElement) en modifiant les appels standards (ex: firstChild) par des appels plus simples (getFirst()) et en ajoutant des fonctionnalités (ex: get() et read() effectuent des requêtes XPath).
Dernièrement, j'ai intégré une base de données XML, et les requête XQuery/XQueryX qui vont avec.
En ce moment je travaille à intégrer les schéma XML (1.1), pour permettre le contrôle de validité, et faciliter la création et l'édition de contenu XML.
Quelques liens :
Le code
Le site officiel (il n'y a encore rien)
La seul page qui contient des infos pour le moment, sur mon site
Voilà pour un premier aperçu, si vous avez des question, des remarques ou critiques ou si vous êtes intéressé à participer au projet, n'hésitez pas à laisser des comms 
PS : Désolé si ce n'est pas le bon endroit pour poster ce message et merci d'avance de m'en informer.
Partager