Есть ли в мировых аналогах JavaBeans или JAXB для PHP? Действительно ли возможно генерировать классы PHP из XML-схемы?
Это - обычная практика для публикации API как схем XSD. Java и парни C# могут получить преимущество этого путем генерации классов прямо от XSD. Есть ли тот же инструмент для PHP?
XML - это неудобный синтаксис для работы. Существуют генераторы кода, которые используют XML в качестве входных данных, но если только XML не является вашим единственным выбором, не идите этим путем. Я предполагаю, что вы хотите генерировать код во время разработки, а затем загрузить его на сервер.
Тогда, вероятно, вам придется использовать несколько языков (PHP + JavaScript/AJAX + HTML). Поэтому лучше использовать многоцелевой генератор кода, особенно если он может генерировать несколько активов из одного определения (например, из определения таблицы базы данных создать SQL код, HTML страницы для CRUD операций и любой код поддержки JS).
В настоящее время я работаю над созданием генератора кода, способного работать с несколькими объектами. Продукта пока нет, но вы можете ознакомиться с методологией, лежащей в его основе, на http://www.abse.info.
Я искал это некоторое время назад, и, конечно, не нашел. Если ваша схема простая, есть парень, который взломал простую версию вместе для плоских схем.
Это все, о чем я знаю. Обычно эти ребята хорошо поддерживают языки, отличные от основных, но они не делают PHP.
DMS Software Reengineering Toolkit - это настраиваемый механизм генерации кода, который можно использовать для обработки произвольные формальные документы в качестве входных. DMS можно использовать для генерации кода на произвольных языках вывода.
Мы использовали его для создания собственных программ чтения и записи XML для Java и COBOL из DTD, которые являются старшими родственниками схем. Те же идеи легко применить к PHP.
Основными причинами использования генераторов классов XSD являются
Теперь сравните это с PHP. PHP не имеет проверки времени компиляции, а имеет поддержку динамических методов / свойств. Это аннулирует две из основных причин, указанных выше, и делает это несложным, если только вам действительно не требуется автозаполнение. Другими словами, есть причина использовать генератор классов XSD в PHP, и, вероятно, именно поэтому его не существует.
Я предлагаю использовать PHP Simple XML , который создает свойства для динамического соответствия XML во время выполнения. Если вы проверите свой XML по файлу XSD, а затем создадите объект Simple XML, у вас будет структура объекта XML с методами и свойствами без необходимости генерировать код. Совершенно хороший подход в PHP.
Обратите внимание, что я не утверждаю, что SimpleXML - это то же самое, что и сгенерированные классы XSD, конечно же, нет. . Но он довольно близок по использованию и по API. В любом случае вы все равно делаете что-то вроде $ company-> employee [2] -> firstname
.
Upd. Я только что выпустил первый рабочий прототип, он отлично работает со схемами UBL 2.0 и одной простой схемой, но более серьезное тестирование уже на подходе. Буду признателен, если вы пришлете схемы, с которыми работаете, чтобы я включил их в тестовый набор.
Upd. 2. XSD2PHP достиг версии 0.0.5. Проверьте прогресс на https://github.com/moyarada/XSD-to-PHP