2017 © Pedro Peláez
 

library xsd2php

Convert XSD (XML Schema) definitions into PHP classes

image

goetas/xsd2php

Convert XSD (XML Schema) definitions into PHP classes

  • Monday, October 23, 2017
  • by goetas
  • Repository
  • 21 Watchers
  • 127 Stars
  • 231,985 Installations
  • PHP
  • 16 Dependents
  • 0 Suggesters
  • 64 Forks
  • 21 Open issues
  • 9 Versions
  • 4 % Grown

The README.md

xsd2php

This repository is DEPRECATED, please use goetas-webservices/xsd2php, (*1)

Build Status Code Coverage Scrutinizer Code Quality, (*2)

Convert XSD into PHP classes., (*3)

With goetas/xsd2php you can convert any XSD/WSDL definition into PHP classes., (*4)

XSD2PHP can also generate JMS Serializer compatible metadata that can be used to serialize/unserialize the object instances., (*5)

Installation

There is one recommended way to install xsd2php via Composer:, (*6)

  • adding the dependency to your composer.json file:
  "require-dev": {
      ..
      "goetas/xsd2php":"^2.1",
      ..
  }

Usage

With this example we will convert OTA XSD definitions into PHP classes., (*7)

Suppose that you have allo XSD files in /home/my/ota., (*8)

Generate PHP classes

vendor/bin/xsd2php convert:php \
`/home/my/ota/OTA_HotelAvail*.xsd \

--ns-map='http://www.opentravel.org/OTA/2003/05;Mercurio/OTA/2007B/' \

--ns-dest='Mercurio/OTA/2007B/;src/Mercurio/OTA/V2007B' \

--alias-map='http://www.opentravel.org/OTA/2003/05;CustomOTADateTimeFormat;Vendor/Project/CustomDateClass'

What about namespaces? * http://www.opentravel.org/OTA/2003/05 will be converted into Mercurio/OTA/2007B PHP namespace, (*9)

Where place the files? * Mercurio/OTA/2007B classes will be placed into src/Mercurio/OTA/V2007B directory, (*10)

What about custom types? * --alias-map='http://www.opentravel.org/OTA/2003/05;CustomOTADateTimeFormat;Vendor/Project/CustomDateClass' will instruct XSD2PHP to not generate any class for CustomOTADateTimeFormat type inside the http://www.opentravel.org/OTA/2003/05 namespace. All reference to this type are replaced with the Vendor/Project/CustomDateClass class., (*11)

Use composer scripts to generate classes

  "scripts": {
    "build": "xsd2php convert:php '/home/my/ota/OTA_HotelAvail*.xsd' --ns-map='http://www.opentravel.org/OTA/2003/05;Mercurio/OTA/2007B/' --ns-dest='Mercurio/OTA/2007B/;src/Mercurio/OTA/V2007B'"
  }

Now you can build your classes with composer build., (*12)

Serialize / Unserialize

XSD2PHP can also generate for you JMS Serializer metadata that you can use to serialize/unserialize the generated PHP class instances., (*13)

vendor/bin/xsd2php  convert:jms-yaml \
`/home/my/ota/OTA_HotelAvail*.xsd \

--ns-map='http://www.opentravel.org/OTA/2003/05;Mercurio/OTA/2007B/'  \
--ns-dest='Mercurio/OTA/2007B/;src/Metadata/JMS;' \

--alias-map='http://www.opentravel.org/OTA/2003/05;CustomOTADateTimeFormat;Vendor/Project/CustomDateClass'

What about namespaces? * http://www.opentravel.org/OTA/2003/05 will be converted into Mercurio/OTA/2007B PHP namespace, (*14)

Where place the files? * http://www.opentravel.org/OTA/2003/05 will be placed into src/Metadata/JMS directory, (*15)

What about custom types? * --alias-map='http://www.opentravel.org/OTA/2003/05;CustomOTADateTimeFormat;Vendor/Project/CustomDateClass' will instruct XSD2PHP to not generate any metadata information for CustomOTADateTimeFormat type inside the http://www.opentravel.org/OTA/2003/05 namespace. All reference to this type are replaced with the Vendor/Project/CustomDateClass class. You have to provide a custom serializer for this type, (*16)

  • Add xsd2php dependency to satisfy BaseTypesHandler and XmlSchemaDateHandler.
"require" : {
    "goetas-webservices/xsd2php-runtime":"^0.2.2",
}
use JMS\Serializer\SerializerBuilder;
use JMS\Serializer\Handler\HandlerRegistryInterface;

use GoetasWebservices\Xsd\XsdToPhpRuntime\Jms\Handler\BaseTypesHandler;
use GoetasWebservices\Xsd\XsdToPhpRuntime\Jms\Handler\XmlSchemaDateHandler;

$serializerBuilder = SerializerBuilder::create();
$serializerBuilder->addMetadataDir('metadata dir', 'DemoNs');
$serializerBuilder->configureHandlers(function (HandlerRegistryInterface $handler) use ($serializerBuilder) {
    $serializerBuilder->addDefaultHandlers();
    $handler->registerSubscribingHandler(new BaseTypesHandler()); // XMLSchema List handling
    $handler->registerSubscribingHandler(new XmlSchemaDateHandler()); // XMLSchema date handling

    // $handler->registerSubscribingHandler(new YourhandlerHere());
});

$serializer = $serializerBuilder->build();

// deserialize the XML into Demo\MyObject object
$object = $serializer->deserialize('<some xml/>', 'DemoNs\MyObject', 'xml');

// some code ....

// serialize the Demo\MyObject back into XML
$newXml = $serializer->serialize($object, 'xml');

Dealing with xsd:anyType or xsd:anySimpleType

If your XSD contains xsd:anyType or xsd:anySimpleType types you have to specify a handler for this., (*17)

When you generate the JMS metadata you have to specify a custom handler:, (*18)

bin/xsd2php.php convert:jms-yaml \

 ... various params ... \

--alias-map='http://www.w3.org/2001/XMLSchema;anyType;MyCustomAnyTypeHandler' \
--alias-map='http://www.w3.org/2001/XMLSchema;anyType;MyCustomAnySimpleTypeHandler' \

Now you have to create a custom serialization handler:, (*19)

use JMS\Serializer\XmlSerializationVisitor;
use JMS\Serializer\XmlDeserializationVisitor;

use JMS\Serializer\Handler\SubscribingHandlerInterface;
use JMS\Serializer\GraphNavigator;
use JMS\Serializer\VisitorInterface;
use JMS\Serializer\Context;

class MyHandler implements SubscribingHandlerInterface
{
    public static function getSubscribingMethods()
    {
        return array(
            array(
                'direction' => GraphNavigator::DIRECTION_DESERIALIZATION,
                'format' => 'xml',
                'type' => 'MyCustomAnyTypeHandler',
                'method' => 'deserializeAnyType'
            ),
            array(
                'direction' => GraphNavigator::DIRECTION_SERIALIZATION,
                'format' => 'xml',
                'type' => 'MyCustomAnyTypeHandler',
                'method' => 'serializeAnyType'
            )
        );
    }

    public function serializeAnyType(XmlSerializationVisitor $visitor, $data, array $type, Context $context)
    {
        // serialize your object here
    }

    public function deserializeAnyType(XmlDeserializationVisitor $visitor, $data, array $type)
    {
        // deserialize your object here
    }
}

Naming Strategy

There are two types of naming strategies: short and long. The default is short, this naming strategy can however generate naming conflicts., (*20)

The long naming strategy will suffix elements with Element and types with Type., (*21)

  • MyNamespace\User will become MyNamespace\UserElement
  • MyNamespace\UserType will become MyNamespace\UserTypeType

An XSD for instance with a type named User, a type named UserType, a root element named User and UserElement, will only work when using the long naming strategy., (*22)

  • If you don't have naming conflicts and you want to have short and descriptive class names, use the --naming-strategy=short option.
  • If you have naming conflicts use the --naming-strategy=long option.
  • If you want to be safe, use the --naming-strategy=long option.

Note

The code in this project is provided under the MIT license. For professional support contact goetas@gmail.com or visit https://www.goetas.com, (*23)

The Versions

23/10 2017

dev-try-new-xsd-reader

dev-try-new-xsd-reader

Convert XSD (XML Schema) definitions into PHP classes

  Sources   Download

LGPL

The Requires

 

The Development Requires

by Asmir Mustafic

php xml serializer converter xsd jms

26/09 2016

dev-master

9999999-dev

Convert XSD (XML Schema) definitions into PHP classes

  Sources   Download

LGPL

The Requires

 

The Development Requires

by Asmir Mustafic

php xml serializer converter xsd jms

03/08 2016

2.1.0

2.1.0.0

Convert XSD (XML Schema) definitions into PHP classes

  Sources   Download

LGPL

The Requires

 

The Development Requires

by Asmir Mustafic

php xml serializer converter xsd jms

03/08 2016

dev-official-serializer

dev-official-serializer

Convert XSD (XML Schema) definitions into PHP classes

  Sources   Download

LGPL

The Requires

 

The Development Requires

by Asmir Mustafic

php xml serializer converter xsd jms

25/05 2016

dev-goetas-runtime

dev-goetas-runtime

Convert XSD (XML Schema) definitions into PHP classes

  Sources   Download

LGPL

The Requires

 

The Development Requires

by Asmir Mustafic

php xml serializer converter xsd jms

21/05 2016

2.0.0

2.0.0.0

Convert XSD (XML Schema) definitions into PHP classes

  Sources   Download

LGPL

The Requires

 

The Development Requires

by Asmir Mustafic

php xml serializer converter xsd jms

25/09 2014

2.0.0-alpha

2.0.0.0-alpha

Convert XSD (XML Schema) definitions into PHP classes

  Sources   Download

LGPL

The Requires

 

The Development Requires

by Asmir Mustafic

php xml serializer converter xsd jms

28/02 2014

1.0.1

1.0.1.0

Convert XSD (XML Schema) definitions into PHP classes

  Sources   Download

LGPL

The Requires

 

by Asmir Mustafic

php xml converter xsd

08/01 2014

1.0.0

1.0.0.0

Convert XSD (XML Schema) definitions into PHP classes

  Sources   Download

LGPL

The Requires

 

by Asmir Mustafic

php xml converter xsd