كيف يمكنني إدارة مختلفة تتعارض formts Xml القائمة على الوثائق

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

سؤال

لدي طلب وهو يحفظ الوثائق (اعتقد مستندات word) في Xml القائمة على تنسيق - حاليا C# الطبقات المولدة من xsd يتم استخدام ملفات للقراءة / الكتابة على شكل وثيقة وكان كل شيء جيدا حتى وقت قريب عندما اضطررت إلى إجراء تغيير شكل المستند.قلقي هو مع الوراء التوافق كما الإصدارات المستقبلية من التطبيق تحتاج أن تكون قادرا على قراءة الوثائق المحفوظة من قبل جميع الإصدارات السابقة و من الناحية المثالية أريد أيضا الإصدارات القديمة من التطبيق لتكون قادرة على برشاقة التعامل مع قراءة الوثائق المحفوظة من قبل الإصدارات المستقبلية من التطبيق.

على سبيل المثال, لنفترض أنني تغيير مخطط المستند إلى إضافة (اختياري) عنصر إضافي في مكان ما ، ثم الإصدارات القديمة من تطبيق ببساطة تجاهل إضافية elemnt ولن يكون هناك أي مشاكل:

<doc>
    <!-- Existing document -->
    <myElement>Hello World!</myElement>
</doc>

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

مثال على مثل هذا التغيير سيكون xml التالي:

<doc>
    <!-- Existing document -->
    <someElement contents="12" />
</doc>

تغيير إلى:

<doc>
    <!-- Existing document -->
    <someElement>
        <contents>12</contents>
        <contents>13</contents>
    </someElement>
</doc>

من أجل منع الدعم الصداع في المستقبل أردت أن تأتي الكريم استراتيجية التعامل مع التغييرات التي قد تطرأ عليها في المستقبل ، حيث أن الإصدارات من التطبيق الذي أطلق الآن سوف تكون قادرة على التعامل مع هذه التغيرات في المستقبل:

  • أن "رقم الإصدار" الوثيقة أن يتم تخزينها في الوثيقة نفسها ، وإذا كان الأمر كذلك ما الإصدارات الاستراتيجية التي يجب استخدامها ؟ أن الوثيقة نسخة مطابقة .exe إصدار التجميع ، أو أن أكثر تعقيدا الاستراتيجية المستخدمة (على سبيل المثال مراجعة رئيسية غيرت تشير إلى كسر التغييرات ، wheras مراجعة طفيفة زيادات تشير إلى عدم كسر التغييرات - على سبيل المثال إضافية عناصر اختيارية)
  • ما الطريقة التي يجب استخدامها لقراءة الوثيقة نفسها و كيف يمكنني تجنب تكرار كميات هائلة من التعليمات البرمجية للحصول على إصدارات مختلفة من الوثائق ؟
    • على الرغم من أن XPath الواضح الأكثر مرونة هو الكثير من العمل على تنفيذ أكثر من مجرد توليد الطبقات مع xsd.
    • من ناحية أخرى إذا كان دوم تحليل استخدم نسخة جديدة من وثيقة xsd لن تكون هناك حاجة إلى عنصر تحكم مصدر لكل كسر تغيير يسبب مشاكل إذا إصلاحات من أي وقت مضى تحتاج إلى أن تطبق على كبار السن المخططات (الإصدارات القديمة من التطبيق لا تزال معتمدة).

كما عملت كل من هذه loosly على افتراض أن جميع التغييرات التي قمت بإجرائها يمكن تقسيمها إلى نوعين من "beaking التغييرات" و "nonbreaking التغييرات", ولكن أنا لست مقتنعا تماما أن هذا الافتراض.

علما بأنني استخدم مصطلح "الوثيقة" فضفاضة جدا - محتويات لا تشبه وثيقة على الإطلاق!

شكرا على أي نصيحة يمكن أن تقدم لي.

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

المحلول

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

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

مثل إسماعيل قال XSLT هي طريقة جيدة لتحويل تنسيق XML من إصدار واحد إلى آخر حتى لا تصل الرياح مع كومة كاملة من تحليل الروتين في التعليمات البرمجية المصدر.

نصائح أخرى

XSLT هو خيار واضح هنا.بالنظر إلى أن يمكنك تحديد نسخة من المستند الخاص بك ، لكل نسخة من المخطط يخلق XSLT التي تحول إصدار سابق إلى الإصدار الجديد الخاص بك.

يمكنك تطبيق يحول في تسلسل حتى تصل إلى الإصدار الحالي.وهكذا كنت من أي وقت مضى فقط تحرير أحدث إصدار المستند.بالطبع, سوف تكون قادر على حفظ الشكل القديم و يمكن كسر وثيقة الإصدارات القديمة, ولكن هذا هو الحال في العديد من التطبيقات.إذا كنت في حاجة على الإطلاق إلى حفظ النسخة القديمة فقط إنشاء تحويل هذا يذهب في الاتجاه الآخر.

مثل @اندي يقول الاستخدام الرئيسية بناء عدد من التطبيق الخاص بك.

يمكنك إضافة سمة إلى العنصر الجذر تحديد الإصدار ؟

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

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

تحرير:فقط لاحظت قليلا عن رمز الازدواج:

لذلك أود أن استخدام نمط مصنع شيء مثل هذا:

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