Генерировать PHP-классы из XSD?
Есть ли в мире аналоги JavaBeans или JAXB для PHP?
Можно ли генерировать PHP-классы из XML-схемы?
Общепринятой практикой является публикация API в виде схем XSD. Ребята из Java и С# могут воспользоваться этим, создав классы прямо из XSD. Есть ли такой же инструмент для PHP?
Ответы
Ответ 1
Теперь я работаю над этой проблемой и собираюсь выпустить инструмент, как только он достигнет более стабильного состояния. Проверьте http://mikebevz.com/xsd-to-php-tool/
Upd. Я только что выпустил первый рабочий прототип, он отлично работает с схемами UBL 2.0 и одной простой схемой, но более серьезное тестирование уже на пути. Я был бы признателен, если вы отправите схемы, с которыми работаете, поэтому я бы включил их в набор тестов.
Upd. 2. XSD2PHP достиг версии 0.0.5. Проверьте прогресс на https://github.com/moyarada/XSD-to-PHP
Ответ 2
Основными причинами использования генераторов классов XSD являются
- Получить проверку времени компиляции
- Более простой синтаксис, чем простой старый XML API
- Автозаполнение в вашей среде IDE.
Теперь сравним это с PHP. PHP не проверяет время компиляции и поддерживает динамические методы/свойства. Это устраняет две из основных причин, указанных выше, и делает это не-вопрос, если вам действительно не нужно автоматическое завершение. Другими словами, есть причина использовать генератор XSD-класса в PHP, и, вероятно, также, почему он не существует.
Мое предложение состоит в том, чтобы использовать PHP Simple XML, который создает свойства для динамического соответствия XML во время выполнения. Если вы проверяете свой XML на XSD файл и затем создаете объект Simple XML, у вас есть структура объектов XML с методами и свойствами без необходимости генерировать код. Совершенно хороший подход в PHP.
Обратите внимание, что я не утверждаю, что SimpleXML совпадает с сгенерированными классами XSD, конечно же.. Но это довольно близко, использование и API-интерфейс. Вы все равно делаете что-то вроде $company->employee[2]->firstname
в любом случае.
Ответ 3
Схемы XSD обычно записываются в WSDL файлах в веб-службах SOAP.
wsdl2php - это инструмент для разбора схем WSDL (XSD) для классов php. Он использует php native SoapClient как клиент.
Отметьте это сообщение для быстрого урока и использования wsdl2php:
http://itworkarounds.blogspot.com/2011/10/simple-soap-client-with-wsdl2php-using.html
Ответ 4
Существует еще один недавний инструмент под названием PiBX a JiBX вдохновил инструмент.
С сайта:
PiBX - это структура привязки XML-данных для PHP.
С PiBX вы можете создавать классы PHP, основанные на доступных XML-схема. Эти классы могут использоваться для маршалирования информации для XML без сбоев с проверками схемы, ограничениями или ограничениями.
Ответ 5
Я изучил это некоторое время назад, и я, конечно, не смог его найти. Если ваша схема проста, есть парень, который взломал простую версию вместе для плоских схем.
Это все, что я знаю. Обычно эти ребята хорошо поддерживают языки, отличные от основных, но они тоже не делают PHP.
Ответ 6
DMS Software Reengineering Toolkit - это настраиваемый механизм генерации кода, который может использоваться для обработки произвольных формальных документов в качестве входных данных. DMS может использоваться для генерации
кода в суровых языках вывода.
Мы использовали его для создания собственных Java и COBOL XML-читателей и писателей из DTD, которые являются старшим кузеном схем. Те же идеи могут быть легко применены к PHP.
Ответ 7
XML - неудобный синтаксис для работы. Существуют генераторы кода, которые используют XML в качестве входных данных, но если XML не является вашим единственным выбором, не ходите по этому маршруту. Я предполагаю, что вы хотите генерировать код во время разработки, а затем загружать его на сервер.
Затем вам, вероятно, понадобится настроить несколько языков (PHP + JavaScript/AJAX + HTML). Поэтому было бы лучше использовать генератор кодов с множеством целевых объектов, особенно если генератор может настраивать несколько активов из одного определения (например, из определения таблицы базы данных, создавать код SQL, HTML-страницы для операций CRUD и любую поддержку JS код).
В настоящее время я работаю над генератором кода, который выполняет многостраничный. Пока нет продукта, но вы можете проверить его методологию на http://www.abse.info.