يحتاج تطبيق PHP الخاص بي إلى التصدير إلى مجموعة من تنسيقات XML المختلفة:هل يجب علي استخدام XSLT أو PHP الأصلي؟

StackOverflow https://stackoverflow.com/questions/818679

  •  03-07-2019
  •  | 
  •  

سؤال

سيحتاج تطبيق PHP الخاص بي إلى أن يكون قادرًا على التصدير إلى (والاستيراد من) مجموعة من تنسيقات البيانات المختلفة، والتي يعتمد معظمها على XML.

لدي خيار

  • في PHP، استخدم DOM للتصدير إلى بعض التنسيقات المستندة إلى XML والتي تعد مجموعة شاملة لجميع البيانات التي يحتاجها الآخرون، وقم بإنشاء ورقة أنماط XSLT منفصلة لكل تنسيق إخراج أرغب في دعمه، وتشغيل إخراج DOM من خلال ملحق XSL الخاص بـ PHP.

أو

  • لا يستخدم ملحق XSL الخاص بـ PHP، ولكن يتم تنفيذ كل تنسيق إخراج كفئة في PHP الأصلي الذي يترجم مباشرة من الكائنات/الهياكل الداخلية إلى تنسيق XML معين باستخدام DOM، حيث تطبق كل فئة نفس الواجهة بحيث تكون قابلة للتبديل.

سيتم استخدام التطبيق من قبل الجامعات وهو أداة تدير سجلات "الأشخاص" بطرق مختلفة، والواردات/الصادرات من مصادر مختلفة مثل نظام الموارد البشرية الخاص بها، وما إلى ذلك.سأقوم بتنفيذ مجموعة تنسيقات الإدخال والإخراج بنفسي، ولكن في المستقبل هناك احتمال أن يرغب شخص يستخدمها في تعديلها لدعم التنسيق الخاص به.

أحد الأسباب التي تجعلني أفكر في عدم استخدام XSLT هو أنه إذا كان أي شخص آخر سيحتفظ بالتطبيق في المستقبل غيري، فيبدو أن عددًا قليلًا جدًا من الأشخاص يعرفون XSLT - ويبدو أن عددًا أكبر بكثير من الأشخاص يعرفون PHP.

والسبب الآخر هو أن الحل الثاني يبدو وكأنه حل "برمجي" أكثر كفاءة، وأكثر مرونة بمعنى أنني سأكون قادرًا على الإخراج والاستيراد من تنسيقات غير XML مثل CSV أو النص المستند إلى العمود بنفس السهولة عن طريق التحميل الزائد على الأجزاء الضرورية من الفصل، وليس أن ذلك قد يكون ضروريًا في كثير من الأحيان.

السبب الثالث، ولكنه صغير جدًا وغير مهم، هو أن PHP تحتاج إلى إعادة الترجمة لتمكين XSL بينما يتم تمكين DOM افتراضيًا، لذلك سيكون أكثر سهولة في النقل.لكن هذه ليست مشكلة كبيرة لأنه من السهل إعادة تكوين PHP.

ما رأيك في منطقتي؟

هل كانت مفيدة؟

المحلول

رأيي الشخصي هو أن قرارك يجب أن يعتمد بقوة على حقيقة كيفية حكمك على معرفة XSLT لدى جمهورك المستهدف.إذا كان من الواضح أن XSLT هو بطريقة أو بأخرى "أرض مجهولة" بين الأشخاص الذين يتعين عليهم العمل مع النظام (بما في ذلك أنت)، فيمكنك استبعاد حل 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 غير المعدل.

إذا كنت ستقوم دائمًا بإنتاجها، فمن المحتمل أن لا يهم وسيكون من الأسهل صيانة الحل المشفر في معظم الأوقات.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top