ما يعرفه ملف PDF عن نفسه: البيانات الوصفية وحزمة XMP
Spec: ISO 16684-1:2019ISO 16684-1:2019Spec: ISO 32000-2ISO 32000-2
لمحة سريعة
قسم بعنوان «لمحة سريعة»افتح ملف PDF حديثاً وقد يخبرك عن نفسه مرتين. ثمة قائمة مفتاح/قيمة قديمة صغيرة تُسمّى قاموس معلومات المستند، وقد توجد كتلة من XML — حزمة XMP — تقول الشيء نفسه تقريباً في صورة أغنى ومنظَّمة. هذه الصفحة عن هذين النظامين المتوازيين، ولماذا ينجو كلاهما، ولماذا تصرّ خطوط أنابيب الأرشفة والبحث على اتفاقهما.
الإجابة المختصرة عن العنوان: يعرف ملف PDF عنوانه ومؤلفه وموضوعه وكلماته المفتاحية والأداة التي صنعته ومتى. ويخزّن تلك المعرفة في موضعين دفعة واحدة، والهندسة المثيرة في إبقائهما صادقين.
لماذا يهم هذا
قسم بعنوان «لماذا يهم هذا»البيانات الوصفية هي الجزء الذي نادراً ما يراه الإنسان من مستند ودائماً تقريباً تقرؤه الآلة. معاينة الملفات في نظام تشغيلك، ومدير الأصول الرقمية، وفهرس المكتبة، وفهرس البحث، وأداة الاستكشاف القانوني — كثير منها يقرأ البيانات الوصفية قبل نص المستند أو إلى جانبه، ويثق بما تقول.
لذلك حين يختلف النظامان — يقول قاموس المعلومات مؤلفاً وتقول حزمة XMP مؤلفاً آخر — يلتقط شيء ما في مرحلة لاحقة واحداً منهما، ولا يحق لك اختيار أيهما. قد يُظهِر فهرس البحث العنوان الخاطئ. وقد يرفض مدقِّق أرشفة الملف تماماً. يظل الانحراف غير مرئي حتى يتعثر فيه خط أنابيب، وهو أسوأ وقت لاكتشافه.
الخلاصة المختصرة
قسم بعنوان «الخلاصة المختصرة»- يستطيع ملف PDF حمل البيانات الوصفية في نظامين متوازيين: قاموس معلومات المستند القديم وحزمة XMP الحديثة من RDF/XML.
- تُلَفّ حزمة XMP في تعليمة معالجة xpacket — ترويسة
beginوخاتمةend— كي تستطيع أداة العثور عليها، وفي مكانها، حتى إعادة كتابتها دون إعادة تحليل الملف كله. - تستقر الخصائص في مساحات أسمائية:
dc(Dublin Core) للعنوان والمنشئ، وxmpلتاريخَي الإنشاء والتعديل، وpdfللمنتِج، وxmpMMلهوية المستند وسجله التاريخي. - يشترط PDF/A بيانات XMP الوصفية، ويجب أن تطابقها مدخلات DocInfo التي لها مكافئ XMP — الاختلاف إخفاق تحقق.
- يعامل NextPDF الاثنين عملاً واحداً: فهو يكتب كليهما، ويقرأ XMP مجدداً، ويحرس حجم الحزمة، فيفشل مغلقاً بدلاً من إصدار ملف مشوَّه التكوين.
كيف يتعامل NextPDF مع هذا
قسم بعنوان «كيف يتعامل NextPDF مع هذا»التأطير الصادق هو أن هذه مشكلة مزامنة متنكّرة في صورة مشكلة تنسيق. قاموس معلومات المستند (Spec: ISO 32000-2, §14.3.3ISO 32000-2 §14.3.3)، المُشار إليه من الخاتمة بمدخل /Info، قائمة سلاسل مسطَّحة: Title وAuthor وSubject وKeywords وCreator وProducer وتاريخان. بسيط، ويسبق XML، ولا يزال يستقلّ في كل ملف تقريباً لأن أدوات كثيرة لا تزال تقرؤه أولاً.
حزمة XMP (Spec: ISO 16684-1:2019, §7ISO 16684-1:2019 §7) هي النصف الحديث. إنها مستند XML — RDF/XML على وجه الدقة — يَنمذِج الملف بوصفه مجموعة خصائص مسماة مجمَّعة في مخطَّطات، كل مخطَّط مربوط بمساحة أسمائية (Spec: ISO 16684-1:2019, §6ISO 16684-1:2019 §6). تلك البنية هي ما لا يستطيعه القاموس المسطَّح: يمكن أن تكون القيمة قائمة مرتَّبة، أو بديلاً موسوماً بلغة (“عنوان بالإنجليزية، عنوان بالفرنسية”)، أو سجلاً منظَّماً. في ملف PDF، يستقر ذلك الـXML في دفق بيانات وصفية مرفق بفهرس المستند (Spec: ISO 32000-2, §14.3.2ISO 32000-2 §14.3.2)، وهو الموضع النموذجي الذي ينظر فيه القارئ الحالي.
ثلاث تفاصيل تستحق التشريح، لأنها حيث تُخطئ الأدوات الحزمة.
الغلاف. تُحاط حزمة XMP بتعليمة معالجة كي يستطيع برنامج، في التنسيقات التي تُخزَّن فيها الحزمة بايتات قابلة للبحث المباشر، تحديد موضع البيانات الوصفية دون تحليل كامل؛ وفي PDF تحديداً، يكون دفق بيانات الفهرس الوصفية هو المُحدِّد النموذجي للموضع. تحمل ترويسة begin علامة ترتيب بايتات تعلن ترميز النص؛ وتحمل خاتمة end عَلَماً يذكر ما إذا كانت الحزمة للقراءة فقط أم يمكن تحريرها في مكانها. حين تكون قابلة للكتابة، يترك المُسلسِل مسافة بيضاء حشو بعد الـXML كي يستطيع المحرِّر تنمية المحتوى قليلاً دون إزاحة كل بايت يليه. ذلك الحشو ليس زينة — بل هو ما يجعل تحرير البيانات الوصفية في مكانها ممكناً.
المساحات الأسمائية. تكون الخاصية ذات معنى فقط مقابل مساحتها الأسمائية، وحفنة منها شبه عالمية. يحمل Dublin Core (dc) العنوان والمنشئ. ويحمل مخطَّط XMP الأساسي (xmp) تاريخَي الإنشاء والتعديل وأداة التأليف. ويحمل مخطَّط PDF (pdf) سلسلة المنتِج والكلمات المفتاحية. ويحمل مخطَّط إدارة الوسائط (xmpMM) هوية المستند وسجل اشتقاقه — الأثر الذي يقول “جاء هذا الملف من ذاك”. الاتفاق على معرّفات المساحات الأسمائية تلك وأسماء الخصائص — التي تُعرَض عادةً ببادئات اصطلاحية — هو كل غرض المخطَّطات الأساسية (Spec: ISO 16684-1:2019, Annex BISO 16684-1:2019 Annex B)؛ أداتان تتحدثان كلتاهما خاصية عنوان Dublin Core تتعاملان دون ترتيب مسبق.
قاعدة الاتساق. لأن النظامين يستطيعان تسمية الخاصية نفسها، يمكنهما أن يختلفا. ترفض ملفات الأرشفة السماح بذلك. يجب أن يحمل ملف PDF/A دفق بيانات وصفية XMP، وأي مدخل معلومات مستند له مكافئ XMP يجب أن يطابقه؛ والاختلاف إخفاق تحقق. والخلاصة العملية مباشرة: في خط أنابيب أرشفة، ليس الاثنان حقلين مستقلين بل حقيقة واحدة مكتوبة مرتين، وعليهما البقاء متناسقين.
يتولّى NextPDF الثلاثة جميعاً همّاً واحداً. تدفق البيانات الوصفية مسار واحد، لا مساران متنافسان.
- Collect the values onceTitle, author, subject, keywords, creator, producer and dates are set on the document a single time, so there is one source of truth, not two.
- Write the Info dictionaryThe DocInfo writer emits the legacy Title, Author, Subject, Keywords, Creator, Producer and date entries that older tools read first.
- Build the XMP packetThe XMP builder serializes the same values as RDF/XML under dc, xmp, pdf and xmpMM, wrapped in the xpacket header and trailer with writable padding.
- Guard the packet sizeBefore serialization is accepted, the engine checks the packet against a size bound and fails closed with a typed exception rather than emit a malformed or oversized stream.
- Read XMP back to verifyThe XMP reader parses the packet so a pipeline can confirm the engine wrote the metadata it was given — the kind of check an archival validator builds on.
مثال عملي
قسم بعنوان «مثال عملي»الشكل أدناه يضبط البيانات الوصفية مرة واحدة ويدع المحرك يوزّعها على النظامين، ثم يقرأ عنوان XMP مجدداً كي يستطيع خط أنابيب فحصه. حارس الحجم هو السطر الذي يحوّل “على الأرجح بخير” إلى “مرفوض على نحو مُثبَت إذا لم يكن كذلك”.
<?php
declare(strict_types=1);
use NextPDF\Core\Document;use NextPDF\Metadata\Exception\XmpPacketTooLargeException;
$document = Document::createStandalone();
// Set the values ONCE. The engine writes them to both the Info dictionary// and the XMP packet, so the two systems cannot drift apart at the source.$document->setTitle('Annual Report 2026');$document->setAuthor('Records Office');$document->setSubject('Statutory annual filing');$document->setKeywords('annual report, statutory, 2026');
try { // Building the document serializes the XMP packet. The engine guards the // packet size and fails closed: a packet that exceeds the bound is a // typed exception, never a silently truncated or malformed stream. $bytes = $document->getPdfData();} catch (XmpPacketTooLargeException $e) { // Decide deliberately: trim the metadata, not the guarantees. error_log('XMP packet exceeded the size bound: ' . $e->getMessage()); throw $e;}
// Read the packet back. This confirms the XMP the engine serialized carries the// value you set — the kind of integrity check an archival pipeline runs before// it trusts the file. (Both systems are written from one source, so they agree// by construction; reading the XMP back proves it serialized as intended.)$xmp = $document->readXmpMetadata($bytes);$xmpTitle = $xmp->get('dc', 'title'); // 'Annual Report 2026'
if ($xmpTitle !== $document->getTitle()) { throw new \RuntimeException('XMP title does not match the value that was set.');}لا يوجد هنا مسار يتباعد فيه النظامان بهدوء: تدخل القيم مرة واحدة، ويستهلك كلا الكاتبين المصدر نفسه، ويتيح القارئ لخط أنابيب فحص النتيجة.
مفهوم خاطئ شائع
قسم بعنوان «مفهوم خاطئ شائع»الاعتقاد المتكرر هو أن قاموس المعلومات بائد ويمكنك تجاهله. لا تستطيع — ليس بعد. لا يزال قدر كبير من البرمجيات المثبَّتة، بما فيها بعض معاينات ملفات أنظمة التشغيل وأدوات الأرشفة الأقدم، يقرأ قاموس المعلومات أولاً أو حصراً. إسقاطه لا يحدّث ملفاً؛ بل يجعل الملف يبدو بلا عنوان لأي شيء لم يتبنَّ XMP.
الخطأ المرآوي هو معاملة الاثنين حقلين مستقلين تملؤهما منفصلين. هكذا بالضبط ينحرفان. هما تسلسلان لحقيقة واحدة. اكتبهما من مصدر واحد، أو اقبل أن شيئاً ما في مرحلة لاحقة سيلتقط النسخة التي لم تقصدها.
الحدود والقيود
قسم بعنوان «الحدود والقيود»- يكتب NextPDF كلا النظامين ويقرأ XMP مجدداً. نطاقه هو باني بيانات XMP الوصفية، وكاتب DocInfo، وقارئ XMP. لا يَعِد بأن يكون محرك استعلام RDF/XML عام الغرض.
- حزمة XMP محروسة بقيد حجم وتفشل مغلقة. الحزمة التي تتجاوز قيد المحرك تثير استثناءً مصنَّفاً. لن يصدر المحرك حزمة مبتورة أو مُحشّاة فوق الحد أو مشوَّهة التكوين على نحو آخر كي “يُلائم” طلباً مفرط الحجم.
- يُفرَض الاتساق وقت الكتابة من مصدر واحد؛ وليس مصالحةً سحرية لملف لم تنتجه. إن استوردت مستنداً يختلف نظاماه أصلاً، فحلّ ذلك قرارك، لا إعادة كتابة ضمنية.
- متطلبات البيانات الوصفية لـPDF/A جزء من ملف الأرشفة. تشرح هذه الصفحة القاعدة؛ أما حكم المطابقة فيعود إلى مدقِّق، كما هو الحال دائماً في عمل الأرشفة. راجع صفحة الأرشفة لذلك الحدّ.
باني البيانات الوصفية، وكاتب DocInfo، وقارئ XMP قدرات أساسية. المؤهِّل الصادق يكمن مع حارس الحجم، أدناه.
| Edition | Availability |
|---|---|
| Core | يُشحَن باني بيانات XMP الوصفية، وكاتب قاموس معلومات المستند، وقارئ XMP في Core، مع حارس الحجم الذي يفشل مغلقاً على حزمة مفرطة الحجم — بما في ذلك مُخرَج مطابقة PDF/A والتحقق اللذان يجعلان دفق بيانات XMP الوصفية إلزامياً ويشترطان تطابق DocInfo معه. |
| Pro | يضيف سير عمل بيانات وصفية دفعياً وبالقوالب فوق كاتب Core وقارئه نفسيهما. |
| Enterprise | يضيف سياسة المطابقة الأوسع وسطح التقارير عبر منظومة مستندات. |
مستندات ذات صلة
قسم بعنوان «مستندات ذات صلة»- الأرشفة وPDF/A — حيث تتوقف حزمة XMP عن كونها اختيارية وتصبح قاعدة اتساق DocInfo-إلى-XMP متطلباً نجاحاً-أو-فشلاً.
- الامتثال الذي يمكنك تسليمه لمدقِّق — لماذا تكون البيانات الوصفية التي تدور ذهاباً وإياباً وتتفق مع نفسها جزءاً من أثرٍ قابل للتدقيق.
- تشريح ملف PDF — أين تستقر الخاتمة والفهرس ودفق البيانات الوصفية في بنية الملف.
- الأدفاق والمرشِّحات — دفق البيانات الوصفية دفق؛ وهكذا تُرمَّز أدفاق PDF وتُحفَظ حتمية.
مسرد المصطلحات
قسم بعنوان «مسرد المصطلحات»- قاموس معلومات المستند — البيانات الوصفية القديمة المسطَّحة بمفتاح/قيمة المُشار إليها من الخاتمة بمدخل
/Info: Title وAuthor وSubject وKeywords وCreator وProducer وتواريخ. يسبق XMP؛ ولا يزال يُقرَأ على نطاق واسع. - XMP — منصة البيانات الوصفية القابلة للتوسيع، تنسيق XML (RDF/XML) لوصف مورد بخصائص مسماة مجمَّعة في مخطَّطات. مُعيَّر بوصفه ISO 16684-1.
- xpacket — تعليمة المعالجة التي تلفّ حزمة XMP، بترويسة
begin(علامة ترميز) وخاتمةend(عَلَم للقراءة فقط أو قابل للكتابة)، كي تستطيع أداة تحديد موضع الحزمة وتحريرها دون تحليل كامل. - المساحة الأسمائية / المخطَّط — مفردات خصائص مسماة مربوطة بمعرّف. بادئات شائعة:
dc(Dublin Core)، وxmp(XMP أساسي)، وpdf(خاص بـPDF)، وxmpMM(إدارة وسائط / هوية مستند). - دفق البيانات الوصفية — كائن PDF، المرفق بفهرس المستند، الذي يحمل حزمة XMP. الموضع النموذجي الذي يفحصه القارئ الحديث أولاً.
- PDF/A — عائلة ملفات أرشفة PDF (ISO 19005). تشترط دفق بيانات وصفية XMP وتُطالب بأن يطابقه أي مدخل معلومات مستند له مكافئ XMP، وإلا فشل التحقق.