Мое PHP-приложение должно экспортироваться в различные XML-форматы: должен ли я использовать XSLT или нативный PHP?

Мое PHP-приложение должно иметь возможность экспортировать (и импортировать из) различные форматы данных, в основном на основе XML.

У меня есть возможность

  • В PHP используйте DOM для экспорта в некоторый формат на основе XML, который является расширенным набором всех данных, необходимых для других, и создайте отдельную таблицу стилей XSLT для каждого выходного формата, который я хочу поддерживать, запустив вывод DOM через расширение XSL в PHP.

или же

  • Не использует расширение XSL в PHP, но реализует каждый выходной формат как класс в нативном PHP, который переводит напрямую из внутренних объектов / структур в заданный формат XML с использованием DOM, причем каждый такой класс реализует один и тот же интерфейс, поэтому они взаимозаменяемы.

Приложение будет использоваться университетами и является инструментом, который по-разному управляет записями людей, а также импортирует / экспортирует из различных источников, таких как их система управления персоналом и т. Д. Я сам буду реализовывать набор форматов ввода и вывода, но в будущем есть вероятность, что кто-то, использующий его, захочет изменить его для поддержки своего собственного формата.

Одна из причин, по которой я рассматриваю НЕ использовать XSLT, заключается в том, что если кто-то еще собирается поддерживать приложение в будущем, кроме меня, то кажется, что очень немногие люди даже знают XSLT - гораздо больше людей знают PHP.

Другое заключается в том, что второе выглядит как более эффективное и "программируемое" решение и более гибкое в том смысле, что я мог бы легко выводить и импортировать из не XML-форматов, таких как CSV или текст на основе столбцов, перегружая необходимые части класса, а не то, что часто будет необходимо.

Третья, но очень маленькая и незначительная причина заключается в том, что PHP необходимо перекомпилировать для включения XSL, тогда как DOM включен по умолчанию, поэтому он будет немного более переносимым. Однако это не слишком большая проблема, так как легко перенастроить PHP.

Что вы думаете о моих рассуждениях?

3 ответа

Решение

Мое личное мнение заключается в том, что ваше решение должно основываться на том факте, как вы будете оценивать знания XSLT в вашей целевой аудитории. Если ясно, что XSLT является каким-то "terra incognita" среди людей, которым приходится работать с системой (включая вас самих), вы можете исключить XSLT-решение. Необходимость и усилия по изучению XSLT сведут на нет преимущества (очень элегантные - особенно при преобразовании XML в XML, не нужно связываться с PHP-кодом, не требуются знания PHP), которые вы получите от XSLT-решения.

Возможно, двустороннее решение может быть правильным решением. Вы можете создать систему-адаптер для импорта и экспорта, которая использует XSLT для форматов данных XML и предоставляет возможность использовать код PHP для всех форматов данных, которые не основаны на XML. Таким образом, каждый разработчик может выбрать наиболее удобный для себя способ.

interface My_DataConverter_Interface
{
    /**
          * @param string                $file
          * @return My_DataObject
          */
    function import($file);

    /**
          * @param My_DataObject $data
          * @param string                $file
          */
    function export(My_DataObject $data, $file);
}

abstract class My_DataConverter_Xslt implements My_DataConverter_Interface
{ /* ... */ }

class My_DataConverter_XmlFormat1 extends My_DataConverter_Xslt
{ /* ... */ }

class My_DataConverter_XmlFormat2 extends My_DataConverter_Xslt
{ /* ... */ }

class My_DataConverter_Csv implements My_DataConverter_Interface
{ /* ... */ }

Я думаю, что твои рассуждения верны, и я тоже так поступил.

В основном, вы говорите о классах моста / адаптера / фасада. Они (imho) более гибкие и понятные, чем шаблоны XSL.

Третья причина на самом деле не одна, потому что поддержка XSL включает не что иное, как раскомментирование расширения PHP.

Я также рад видеть, что вы хотите сделать это с помощью расширений DOM (или эквивалентной библиотеки), вместо того, чтобы писать XML в виде текста, который вводит все проблемы с выходом из строя и все, что вы избежите на своем пути.

Лично я также считаю, что XSL-шаблоны более хрупки для изменения (поскольку они несколько более загадочны для подавляющего большинства программистов), поэтому, если ваш суперсетный формат когда-либо изменится (что, скажем прямо, он будет), вам потенциально понадобится изменить все ваши шаблоны. Конечно, вам, возможно, придется делать это и с кодом, но код, вероятно, будет проще поддерживать.

Интересная проблема.

Оба решения будут работать, я думаю, вы это знаете, однако.

Я бы, наверное, сам пошел с закодированным решением. Но это, вероятно, связано с тем, что XSLT вызывает у меня головную боль.

У XSLT есть свои плюсы, и вы можете попросить, чтобы их изготовили люди, давшие вам неизмененный XML.

Если вы всегда будете их производить, то, вероятно, это не имеет значения, и большую часть времени будет проще поддерживать кодированное решение.

Другие вопросы по тегам