كيف يمكنني التحقق من صحة المستندات ضد مخططات Schematron في جافا؟

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

سؤال

بقدر ما أستطيع أن أقول، يدعم Jaxp افتراضيا مخطط W3C XML واسترخاء من Java 6.

أستطيع أن أرى بعض واجهات برمجة التطبيقات، معظمها تجريبية أو غير مكتملة، على روابط Schematron.com الصفحة.

هل هناك نهج حول التحقق من صحة المخطط في جافا كاملة وكفاءة ويمكن استخدامها مع API Jaxp؟

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

المحلول

جينغ يدعم التحقق من صحة Schematron قبل ISO (لاحظ أن تطبيق Jing هو أيضا على XSLT).

هناك أيضا تطبيقات XSLT التي يمكن الاحتجاج بها بسهولة شديدة من جافا. تحتاج إلى تحديد إصدار Schematron الذي تهتم به ثم احصل على ورقة الأنماط المقابلة - يجب أن تكون كلها متاحة من Schematron.com. العملية بسيطة للغاية بسيطة، تنطوي أساسا خطوتين:

  • قم بتطبيق الهيكل العظمي XSLT على مخطط Schematron الخاص بك للحصول على ورقة قصص XSLT جديدة تمثل مخطط Schematron الخاص بك في XSLT
  • تطبيق XSLT تم الحصول عليها على مستند مثيل أو المستندات للتحقق من صحةها

Jaxp هو مجرد واجهة برمجة تطبيقية ولا تتطلب دعم للاسترخاء NG من التنفيذ. تحتاج إلى التحقق من التنفيذ المحدد الذي تستخدمه لمعرفة ما إذا كان هذا يدعم الاسترخاء NG أم لا.

نصائح أخرى

يوجد تطبيق Java Schematron النقي في https://github.com/phax/ph-schematron/يجلب الدعم لنهج XSLT ونهج جافا النقي.

يمكنك التحقق من Schematronassert. (الإفصاح: التعليمات البرمجية الخاصة بي). من المفترض في المقام الأول عن اختبار الوحدة، ولكن يمكنك استخدامه للحصول على الكود العادي أيضا. يتم تنفيذها باستخدام XSLT.

مثال اختبار الوحدة:

ValidationOutput result = in(booksDocument)
    .forEvery("book")
    .check("author")
    .validate();
assertThat(result).hasNoErrors();

مثال التحقق المستقل:

StreamSource schemaSource = new StreamSource(... your schematron schema ...);
StreamSource xmlSource = new StreamSource(... your xml document ... );
StreamResult output = ... here your SVRL will be saved ... 
// validation 
validator.validate(xmlSource, schemaSource, output);

العمل مع تمثيل كائن SVRL:

ValidationOutput output = validator.validate(xmlSource, schemaSource);
// look at the output
output.getFailures() ... 
output.getReports() ...
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top