Jump to content

بارسويد

From mediawiki.org
This page is a translated version of the page Parsoid and the translation is 99% complete.
Outdated translations are marked like this.
رسم تخطيطي لوقت تشغيل بارسويد HTML5+RDFa wiki
{{{text}}}

بارسويد هو مكتبة بي إتش بي محزومة في برمجيات ميدياويكي (1.35 وما بعدها) تستخدم في التحويل ذهابا وإيابا بين نصوص الويكي وإتش تي إم إل. لقد كان قيد التطوير منذ عام 2012، وقد كُتب في الأصل بلغة جافا سكريبت وتم بناؤه لدعم VisualEditor . تم تجميعه مع ميدياويكي منذ الإصدار 1.35. في ميدياويكي 1.47، من المخطط أن يصبح بارسويد هو المحلل الافتراضي لميدياويكي، ليحل محل المحلل الأصلي الحالي، في مشروع يُعرف باسم توحيد المحلل .

التفاصيل التقنية

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

عكف على تطويره فريق تابع لمؤسسة ويكيميديا منذ سنة 2012. يُستخدم حاليًا على نطاق واسع في VisualEditor و أداة ترجمة المحتوى وتطبيقات أخرى.

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

في مواقع ويكي ويكيميديا، بالنسبة للعديد من التطبيقات، يعمل بارسويد حاليًا كوكيل خلف RESTBase ، الذي يخزن HTML الذي ترجمه بارسويد. من المتوقع أن يُستبدل RESTBase في النهاية بذاكرة تخزين مؤقت مدمجة دمجا لصيقا ببرمجيات ميدياويكي.

لمزيد من المعلومات حول المشروع بشكل عام، انظر منشور المدونة هذا من مارس/آذار 2013. للاطلاع على نموذج إتش تي إم إل المستخدم، طالع مواصفات DOM في برمجيات ميدياويكي.

بُني بارسويد في الأصل كهيئة خدمة ويب وكُتب بلغة جافاسكريبت، مستخدمًا Node.js. يصف عرض تقني من فبراير/شباط 2019 (الشرائح) ومنشور مدونة عملية نقله إلى PHP. واجهة برمجة تطبيقات امتداد بارسويد قيد التطوير النشط حاليًا؛ يصف عرض تقني من أغسطس/آب 2020 هذا العمل.

مستودع غت هاب: https://github.com/wikimedia/parsoid

الاستخدام

التثبيت

هذا الامتداد يأتي مع إصدار ميدياويكي 1.35 وما بعده. يتعيّن أن تتبع كافة تعليمات الضبط الباقية.

تم تضمين البارسويد في ميدياويكي منذ الإصدار 1.35. لا يوجد تكوين ضروري لتفعيلها.

يقوم البارسويد بتصدير واجهة برمجة تطبيقات REST داخلية كانت تستخدم تاريخيًا بواسطة RESTBase ولم يكن من الممكن الوصول إليها خارج مجموعة مؤسسة ويكيميديا الداخلية. لم يعد هذا مطلوبًا للمحرر المرئي أو طرق عرض القراءة الأساسية، ويتم إيقاف واجهة برمجة التطبيقات الداخلية ومن المخطط إزالتها في ميدياويكي 1.43.

البارسويد هي في الأساس مكتبة تأليف موسيقي يستخدمها نظام ميدياويكي الأساسي. إذا كنت لا تزال بحاجة إلى واجهة برمجة التطبيقات الداخلية لسبب ما، فيمكنك تحميل البارسويد بشكل صريح "كملحق" عن طريق إضافة ما يلي إلى LocalSettings.php:

wfLoadExtension( 'Parsoid', "$IP/vendor/wikimedia/parsoid/extension.json" );

يُنصح بشدة أي مستخدمين متبقين من جهات خارجية لواجهة برمجة تطبيقات البارسويد الداخلية بالانتقال إلى نقطة نهاية صفحة REST HTML الأساسية التي توفر وظائف مكافئة.

التطوير

يحدث التطوير في Parsoid Git repository. تتم مراجعة الأكواد في غيريت. انظر غيريت/البدء للبدء في إعداد حساب لنفسك.

إذا كنت تستخدم بيئة تطوير MediaWiki-Vagrant باستخدام جهاز افتراضي، يمكنك ببساطة إضافة دور visualeditor إليها وسيقوم بإعداد بارسويد عامل جنبًا إلى جنب مع Extension:VisualEditor .

التعليمات أدناه مخصصة لميدياويكي 1.35 أو الإصدارات الأحدث. حدد Parsoid/JS إذا كنت تستخدم الإصدار القديم من البارسويد المكتوب بلغة الجافاسكريبت، والمستخدم في ميدياويكي 1.34 والأقدم.

ربط نسخة مطور من بارسويد

في تثبيت ميدياويكي القياسي، يتم تضمين البارسويد من ميدياويكي كمكتبة مؤلفين، wikimedia/parsoid.

لأغراض التطوير، عادةً ما ترغب في استخدام نسخة غيت من البارسويد، وليس الإصدار المضمن في ميدياويكي core كمكتبة Composer. تسمح الأسطر التالية المضافة إلى LocalSettings.php باستخدام نسخة غيت من بارسويد (اختياريًا)، وتحميل واجهة برمجة تطبيقات REST الخاصة ببارسويد باستخدام wfLoadExtension (بدلاً من استخدام الإصدار المدمج في المحرر المرئي) وإجراء تكوين البارسويد يدويًا والذي يتم عادةً بواسطة المحرر المرئي:

$parsoidInstallDir = 'vendor/wikimedia/parsoid'; # نسخة مُجمعة
#$parsoidInstallDir = '/my/path/to/git/checkout/of/Parsoid';

// للمطورين: تأكد من أن يتم تنفيذ البارسويد من $parsoidInstallDir،
// (ليس الإصدار المدرجة في mediawiki-core بطبيعة الحال)
// يجب أن يحدث *قبل* wfLoadExtension()
if ( $parsoidInstallDir !== 'vendor/wikimedia/parsoid' ) {
    function wfInterceptParsoidLoading( $className ) {
        // فقط إيقاف فئات نطاقات بارسويد
        if ( preg_match( '/(MW|Wikimedia\\\\)Parsoid\\\\/', $className ) ) {
           $fileName = Autoloader::find( $className );
           if ( $fileName !== null ) {
               require $fileName;
           }
        }
    }
    spl_autoload_register( 'wfInterceptParsoidLoading', true, true );
    // تم إضافة AutoLoader::registerNamespaces في ميدياويكي 1.39
    AutoLoader::registerNamespaces( [
        // احفظ هذا في المزامنة مع "شحن الذاتي" الفقرة حافظ على تزامن هذا مع عبارة "التحميل التلقائي" في
        // $parsoidInstallDir/composer.json
        'Wikimedia\\Parsoid\\' => "$parsoidInstallDir/src/",
    ] );
}

wfLoadExtension( 'Parsoid', "$parsoidInstallDir/extension.json" );
unset( $parsoidInstallDir );

هذه الخطوط ليست ضرورية لمعظم مستخدمي المحرر المرئي، الذين يمكنهم استخدام تشكيل المحرر المرئي الذاتي والرقم المجمّع بارسويد المشمول في ميدياويكي، لكنهم سيتمّت الإلزام بها لمعظم المطورين.

إذا كنت تخدم ميدياويكي مع Nginx، ستحتاج أيضا إلى إضافة شيء كهذا في كتلة الخادم الخاص بك (فإفترض أن إعداد ميدياويكي الخاص بك لديه ملفات مقيمة في /w/):

location /w/rest.php/ {
    try_files $uri $uri/ /w/rest.php?$query_string;
}

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

services:
  mediawiki:
    volumes:
      - ./:/var/www/html/w:cached
      - /my/path/to/git/checkout/of/Parsoid:/my/path/to/git/checkout/of/Parsoid

لاختبار التكوين الصحيح، قم بزيارة {$wgScriptPath}/rest.php/{$domain}/v3/page/html/Main%20Page حيث $domain هو اسم المضيف في $wgCanonicalServer. (لاحظ أن خادمات مؤسسة ويكيميديا الإنتاج لا تعرض API REST الخاص بالبارسويد للشبكة الخارجية.)

تشغيل الاختبارات

لتشغيل جميع اختبارات المحلل اللغوي واختبارات موكا:

$ composer test

اختبارات المصفح لديها عدد قليل من الخيارات الآن التي يمكن أن يتم سردها باستخدام php bin/parserTests.php --help.

إذا كان لديك متغير البيئة MW_INSTALL_DIR يشير إلى تثبيت مدياويكي المحدد، يمكنك تشغيل بعض الاختبارات الإضافية بـ:

$ composer phan-integrated

تحويل نص ويكي بسيط

يمكنك تحويل مقاطع النص الويكي البسيطة من خط الأوامر باستخدام النص parse.php في دليل bin/:

$ echo '[[Foo]]' | php bin/parse.php

النص البحثي لديه الكثير من الخيارات. php bin/parse.php --help يعطيك معلومات عن هذا.

تصحيح أخطاء البارسويد (للمطورين)

انظر Parsoid/Debugging لنصائح الإصلاح الأخطاء.

التكامل المستمر

يتوفر بارسويد دائمًا كمكتبة لأنه أحد مكونات ميدياويكي الأساسية. لكن هناك جزأين غير مفعلين:

  • Parsoid ServiceWiring
  • الـ REST API الخارجية الخاصة ببارسويد

سيقوم برنامج تشغيل الاختبار Quibble بتمكينه إذا اكتشف أنه تم استنساخ mediawiki/services/parsoid.git كجزء من عملية البناء. في هذه الحالة:

  • يُشير المحمول الآلي لـ Wikimedia\Parsoid إلى الرمز المستنسخ (بإستبدال النسخة التي قام بها المُصنّف)
  • حمل الامتداد wfLoadExtension( 'Parsoid', '/path/to/cloned/repo' );

يجب تمكين خدمة ServiceWiring في ميدياويكي بدءاً من إصدار 1.38.

من الناحية النظرية، لن يتم دمج واجهة برمجة تطبيقات REST في ميدياويكي أبدًا: أ) لم يتم الكشف عنها للجمهور في بيئة الإنتاج، فهي واجهة برمجة تطبيقات داخلية تستخدمها RESTBase والتي ستختفي؛ ب) لم يتم تدقيقها أمنيًا أبدًا؛ ج) إنها زائدة عن الحاجة مع واجهة برمجة تطبيقات ميدياويكي للشركات. الحل سيكون من أجل المحرر المرئي استدعاء البارسويد مباشرة عبر Action API الخاصة بالمحرر المرئي الذي سيوفر رحلة ذهابًا وإيابًا عبر REST API.

لذا فإن تحميل الامتداد هو اختراق يسمح باستخدام واجهات عرضة للتغيير والتي لا نريد حقاً من الناس استخدامها بعد.

في معظم الأغراض، يجب عدم إضافة البارسويد كاعتماد على CI، والإستثناء الوحيد اعتبارًا من أكتوبر 2021 هو امتداد Disambiguator.

تحميل البارسويد كامتداد دعونا ندير أعمال اختبار دمج ميدياةيكي مقابل mediawiki/services/parsoid.git (مثل Quibble، apitesting) وضمان البارسويد وميدياويكي تعمل معا.

قد يكون التوسع قادرًا على كتابة الاختبارات مع البارسويد حتى عندما لم يتم استنساخ المستودع. نظرًا لأنه يعتمد على المؤلف من الملفات ميدياويكي الأساسية، فالنطاق MediaWiki\Parsoid متاح، ولكن جزء تشبيه الخدمات ليس كذلك (إنها extension/src في مخزن بارسويد ومتفشأة باسم نطاق \MWParsoid). يُجري رمز ParsoidTestFileSuite.php اختبارات المصفح فقط إذا تم تحميل بارسويد (وهو يجب أن يكون الافتراض مع ميدياويكي 1.38).

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

الإصدارات

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

التوثيق التقني

الروابط لمطوري بارسويد

روابط لمشغلي بارسويد (إلى مجموعة ويكيميديا)

التاريخ

كُتب التطبيق الأصلي بلغة جافاسكريبت (باستخدام Node.js) وبدأ تشغيله على مجموعة ويكيميديا في ديسمبر 2012. في عام 2019، نُقل بارسويد إلى PHP، وحلت نسخة PHP محل نسخة جافاسكريبت على مجموعة ويكيميديا في ديسمبر 2019. يُدمج بارسويد في نواة ميدياويكي، بهدف استبدال محلل ميدياويكي الأصلي الحالي في نهاية المطاف. في أوائل عام 2024، بدأ بارسويد في استخدامها على بعض النسخ الإنتاجية لمؤسسة ويكيميديا كمحلل افتراضي لمشاهدة القراءة. يمكنك رؤيتهم في قائمة إعدادات الإنتاج.

حُزم بارسويد (نسخة بي إتش بي) أصلاً مع ميدياويكي منذ الإصدار 1.35، الذي صدر في سبتمبر 2020. بالنسبة للتثبيتات غير التابعة لميدياويكي، دُعم بارسويد/ جافاسكريبت حتى نهاية عمر ميدياويكي 1.31 (LTS) في سبتمبر 2021.

الأسئلة المكررة

  • كيف أكتشف إن كانت صفحة تمّ إظهارها بالبارسويد؟
    • سوف يكتب في التذييل "تمت معالجة الصفحة باستخدام Parsoid."
  • كيف أضع صفحة لتسجيلها مؤقتاً مع بارسويد؟
  • كيف يمكنني الحصول على ويكي كامل لمعالجته مع بارسويد؟
    • حمِّل Extension:ParserMigration
    • حدد $wgParserMigrationEnableParsoidArticlePages = true;
    • حدد $wgParserMigrationEnableParsoidDiscussionTools = true;
  • أي من مواقع ويكي ويكيميديا يُعالجها البارسويد؟
    • القائمة هي في صفحة parsoidrendered.dblist. اعتبارا من أغسطس 2025، العدد هو حوالي 250 من 1000 موقع ويكي. سيتم استمرار الإطلاق حتى تستخدم جميع الويكي البارسويد.

انظر أيضا

روابط خارجية

الاتصال

إذا كنت بحاجة إلى مساعدة أو لديك أسئلة/ملاحظات، يمكنك الاتصال بنا في #mediawiki-parsoid تواصل أو قائمة wikitext-l البريدية. إذا فشلت كل هذه المحاولات، يمكنك أيضًا الاتصال بنا عبر البريد الإلكتروني على content-transform-team على النطاق wikimedia.org.