web-dev-qa-db-fra.com

produire PHP classes de XSD?

Existe-t-il dans le monde des analogues de JavaBeans ou JAXB pour PHP? Est-il possible de générer des classes PHP à partir d'un schéma XML?

Il est courant de publier les API sous forme de schémas XSD. Les utilisateurs Java et C # peuvent en tirer parti en générant des classes directement à partir de XSD. Existe-t-il le même outil pour PHP?

21
Qwerty

Je travaille maintenant sur ce problème et vais publier l'outil dès qu'il atteindra un état moins stable. Vérifiez ici http://mikebevz.com/xsd-to-php-tool/

Upd. Je viens de publier le premier prototype fonctionnel, il fonctionne bien avec les schémas UBL 2.0 et un schéma simple, mais des tests plus sérieux sont en cours. J'apprécierais si vous envoyez des schémas avec lesquels vous travaillez, alors je les inclure dans la suite de tests.

Upd. 2. XSD2PHP a atteint la version 0.0.5. Vérifiez l'état d'avancement sur https://github.com/moyarada/XSD-to-PHP

8
Mike Bevz

Les principales raisons d'utiliser des générateurs de classe XSD sont:

  1. Obtenez le temps de compilation
  2. Une syntaxe plus simple que les anciennes API XML simples
  3. Complétion automatique dans votre IDE. 

Maintenant, comparez cela avec PHP. PHP est-ce que pas a la vérification du temps de compilation et il a prend en charge les méthodes/propriétés dynamiques. Cela annule deux des principales raisons ci-dessus et en fait un problème qui ne se pose pas, sauf si vous (vraiment} _ avez besoin de l'achèvement automatique. En d'autres termes, il y a une raison d'utiliser un générateur de classe XSD en PHP, et c'est probablement aussi pourquoi aucun n'existe.

Ma suggestion est d'utiliser PHP Simple XML qui crée des propriétés pour faire correspondre dynamiquement le XML au cours de l'exécution. Si vous validez votre fichier XML par rapport au fichier XSD, puis créez un objet XML simple, votre structure d'objet XML complète avec des méthodes et des propriétés, sans générer de code. Une très bonne approche en PHP.

Notez que je ne déclare pas que SimpleXML est identique aux classes XSD générées, bien sûr que non. . Mais c'est assez proche, utilisation et API. Vous finissez toujours par faire quelque chose comme $company->employee[2]->firstname de toute façon.

4
Martin Wickman

Les schémas XSD sont généralement écrits dans des fichiers WSDL sur SOAP Web Services.

wsdl2php est un outil d’analyse de schémas WSDL (XSD) en classes php. Il utilise SoapClient en tant que client.

Découvrez ce post pour un tutoriel rapide et l'utilisation de wsdl2php:

http://itworkarounds.blogspot.com/2011/10/simple-soap-client-with-wsdl2php-using.html

1
Martin Taleski

Il existe un autre outil récent appelé PiBX a JiBX outil inspiré.

Du site:

PiBX est un framework XML-Data-Binding pour PHP.

Avec PiBX, vous pouvez générer PHP classes basées sur un schéma XML Disponible. Ces classes peuvent être utilisées pour regrouper les informations dans XML sans se soucier des vérifications de schéma, des contraintes ou des restrictions.

1
Boy Baukema

Cela semble faire un travail décent https://github.com/goetas-webservices/xsd2php

Je souhaite qu'il gère la validation de l'énumération, mais semble fonctionner correctement dans mon cas d'utilisation. J'ai trouvé les fichiers .yml META générés utiles.

0
Tim Ramsey

J'ai examiné cela il y a un moment et je ne pouvais certainement pas en trouver un. Si votre schéma est simple, il y a un gars qui a piraté une version simple ensemble pour des schémas plats.

C'est tout ce que je sais. Normalement ces gars sont bons pour supporter des langues autres que les langues principales, mais ils ne font pas non plus PHP.

0
xcut

Le DMS Software Reengineering Toolkit est une machine de génération de code configurable, qui peut être utilisée pour traiter des documents formels arbitraires en entrée. DMS peut être utilisé pour générer du code Dans des langues de sortie arbitraires.

Nous l'avons utilisé pour générer des lecteurs et des écrivains XML Java et COBOL natifs à partir de DTD, cousin aîné des schémas. Les mêmes idées s'appliqueraient facilement à PHP.

0
Ira Baxter