wake-up-neo.com

generieren PHP Klassen von XSD?

Gibt es weltweit Analoga von JavaBeans oder JAXB für PHP? Ist es möglich, PHP Klassen aus einem XML-Schema zu generieren?

Es ist üblich, APIs als XSD-Schemata zu veröffentlichen. Java und C # können dies nutzen, indem sie Klassen direkt aus XSD generieren. Gibt es das gleiche Tool für PHP?

21
Qwerty

Ich arbeite jetzt an diesem Problem und werde das Tool veröffentlichen, sobald es einen stabileren Zustand erreicht hat. Überprüfen Sie hier http://mikebevz.com/xsd-to-php-tool/

Upd. Ich habe gerade den ersten funktionierenden Prototyp veröffentlicht, er funktioniert gut mit UBL 2.0-Schemata und einem einfachen Schema, aber ernsthaftere Tests sind in Vorbereitung. Ich würde mich freuen, wenn Sie Schemas senden, mit denen Sie arbeiten. Ich würde sie also in die Testsuite aufnehmen.

Upd. 2. XSD2PHP erreichte Version 0.0.5. Überprüfen Sie den Fortschritt auf https://github.com/moyarada/XSD-to-PHP

8
Mike Bevz

Die Hauptgründe für die Verwendung von XSD-Klassengeneratoren sind zu

  1. Kompilierzeit prüfen
  2. Eine einfachere Syntax als einfache alte XML-APIs
  3. Automatische Vervollständigung in Ihrer IDE. 

Stellen Sie sich dies nun mit PHP gegenüber. PHP hat nichthat Kompilierzeitprüfung und hatUnterstützung für dynamische Methoden/Eigenschaften. Dies macht zwei der Hauptgründe aus dem oben genannten Sinn und macht dies zu einem Problem, es sei denn, Sie haben reallyneed auto Completion Mit anderen Worten, es gibt einen Grund, einen XSD-Klassengenerator in PHP zu verwenden, und das ist wahrscheinlich auch der Grund, warum es keinen gibt.

Mein Vorschlag ist die Verwendung von PHPs Simple XML , mit dem Eigenschaften erstellt werden, die dynamisch zur XML-Laufzeit passen. Wenn Sie Ihr XML anhand der XSD-Datei validieren und anschließend ein einfaches XML-Objekt erstellen, verfügen Sie über eine XML-Objektstruktur mit Methoden und Eigenschaften, ohne Code generieren zu müssen. Ein perfekter Ansatz in PHP.

Beachten Sie, dass ich nicht behaupte, dass SimpleXML den generierten XSD-Klassen entspricht, natürlich nicht. . Aber es ist ziemlich nah am Gebrauch und an der API. Am Ende tun Sie sowieso sowas wie $company->employee[2]->firstname.

4
Martin Wickman

XSD-Schemas werden normalerweise in WSDL-Dateien auf SOAP Web Services geschrieben.

wsdl2php ist ein Tool zum Parsen von WSDL (XSD) -Schemas in PHP-Klassen. Es verwendet den nativen SoapClient von php als Client.

In diesem Beitrag finden Sie eine kurze Einführung und Verwendung von wsdl2php:

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

1
Martin Taleski

Es gibt ein weiteres aktuelles Werkzeug namens PiBX a JiBX inspiriertes Werkzeug.

Von der Website:

PiBX ist ein XML-Datenbindungs-Framework für PHP.

Mit PiBX können Sie PHP Klassen basierend auf einem verfügbaren XML-Schema generieren. Diese Klassen können verwendet werden, um die Informationen in XML zu marshallen, ohne sich mit Schemaüberprüfungen, Einschränkungen oder Einschränkungen zu beschäftigen.

1
Boy Baukema

Dies scheint eine anständige Arbeit zu leisten https://github.com/goetas-webservices/xsd2php

Ich wünschte, die Enumeration-Validierung würde gehandhabt werden, schien aber in meinem Anwendungsfall gut zu funktionieren. Ich fand die erzeugten META-.yml-Dateien hilfreich.

0
Tim Ramsey

Ich habe mir das vor einiger Zeit angesehen, und ich konnte sicherlich keinen finden. Wenn Ihr Schema einfach ist, gibt es einen Mann, der eine einfache Version zusammengehackt hat für flache Schemas.

Das ist alles was ich weiß. Normalerweise sind diese Jungs gut darin, andere Sprachen als die Hauptsprachen zu unterstützen, aber sie tun auch nicht PHP.

0
xcut

Das DMS Software Reengineering Toolkit ist eine konfigurierbare Codegenerierungsmaschine, mit der beliebige formale Dokumente als Eingabe verarbeitet werden können. Mit DMS kann Code in beliebigen Ausgabesprachen generiert werden.

Wir haben es verwendet, um native Java- und COBOL-XML-Reader und -Reporter aus DTDs zu generieren, die der älteste Verwandter von Schemata sind. Die gleichen Ideen lassen sich leicht auf PHP anwenden.

0
Ira Baxter