أكثر

كيفية التعامل مع المعرفات المكررة عند استخدام وظيفة as_sp في حزمة R osmar

كيفية التعامل مع المعرفات المكررة عند استخدام وظيفة as_sp في حزمة R osmar


أحيانًا عندما أرغب في تحويل مجموعة فرعية من الطرق من ملف osm محمل بحزمة osmar ، أواجه خطأ يشكو من تكرار أسماء الصفوف. الكود التالي الذي يتم تشغيله على هذا الملف في إرفاق يلقي هذا الخطأ:

خطأ في 'row.names <-. data.frame' ('* tmp *'، value = c (4067932، 4296467،: تكرار 'row.names' غير مسموح به بالإضافة إلى: رسالة تحذير: قيم غير فريدة عند الإعداد 'row.names': '123074181'، '154043350'، '171826984'، '176273732'، '196520271'، '202157002'، '24240315'، '24913519'، '284493291'، '304517627'، '35556702'، "38210407" ، "4399491" ، "4840974" ، "4840977" ، "60333308" ، "61583424" ، "67627350" ، "67627353" ، "68711084" ، "72157174"

هذا هو الكود:

osm_data <- get_osm (complete_file () ، المصدر = osmsource_file ('extract.osm')) hw_ids <- اعثر (osm_data، way (tags (k == "highway"))) hw_ids <- find_down (osm_data، way (hw_ids )) طرق <- مجموعة فرعية (osm_data ، ids = hw_ids) طرق <- as_sp (طرق ، "خطوط")

أفترض أن هذا بسبب كائنات SpatialLines بنفس osm_id؟ كيف أتجنب هذه المشكلة؟


لست متأكدًا من أنه ما تبحث عنه ، ولكن إليك بداية لهذا الحل البديل (بناءً على هذه الإجابة):

مكتبة (osmar) osm_data <- get_osm (complete_file () ، المصدر = osmsource_file ('extract.osm')) hw_ids <- اعثر (osm_data، way (tags (k == "highway"))) hw_ids <- find_down (osm_data ، way (hw_ids)) way <- subset (osm_data، ids = hw_ids) way_ids <- unique (way $ plans $ refs $ id) way_lns <- vector ("list"، length (way_ids)) لـ (i in 1: length (way_lns)) {way_lns [[i]] <- Lines (osmar ::: way_nodes2Line (way_ids [i]، way $ way، way $ nodes)، way_ids [i])} way_lns <- osmar ::: remove_emptyLines (way_lns) splns <- SpatialLines (way_lns، proj4string = osm_crs ()) dat <- cbind (way $ way $ attrs، type = as.factor ("way")) daf <- data.frame (id = unique (dat $ id)) rownames (daf) <- daf $ id # تستخدم لتكون بيانات $ id ret <- SpatialLinesDataFrame (splns، daf)> class (ret) [1] "SpatialLinesDataFrame" attr (، "package") [1] مؤامرة "sp" (ret)


أسهل طريقة وجدتها هي القيام بشيء على غرار:

قد يكون لهذا بعض مشكلات وقت التشغيل إذا كان هناك عدد كبير من الخيارات ، ولكنه يكفي بالنسبة لنا.

كما سيعمل هذا الرمز مع التحديد المتعدد

ثم يمكنك تحويل الحقل التالي

أخطاء اختيار متعددة مثل ما يلي:

سيتم إصلاحه بمكالمة واحدة:

استخدام هذا النهج هو أيضًا أسرع طريقة. لقد كتبت fast_multiselect كوظيفة مماثلة ل multiselect_set_selections. في اختبار مع 4 مكالمات إلى multiselect_set_selections في قوائم تضم حوالي 20 عنصرًا لكل منها ، يبلغ متوسط ​​وقت التشغيل 16.992 ثانية ، حيث يكون fast_multiselect 10.441 ثانية فقط. كما أن الأخير أقل تعقيدًا.


أنت تستخدم متغير جدول ، أي يجب أن تعلن عن الجدول. هذا ليس جدول مؤقت.

تقوم بإنشاء جدول مؤقت مثل:

تعلن عن متغير جدول كما يلي:

لاحظ أنه تم التصريح عن جدول مؤقت باستخدام # وتم التصريح عن متغير جدول باستخدام @. اذهب للقراءة عن الفرق بين متغيرات الجدول والجداول المؤقتة.

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

الآن للحصول على مثال بسيط (لم أختبر هذا الرمز ولكن يجب أن يعطيك مؤشرًا جيدًا على كيفية القيام بذلك):

يمكن تنفيذ هذا الإجراء المخزن على النحو التالي:

sproc_BuildTable "العملاء" ، "اسم العميل" ، "VARCHAR (32)" ، "NOT NULL"

توجد بعض المشكلات الرئيسية في هذا النوع من الإجراءات المخزنة.

سيكون من الصعب تقديم الطعام للطاولات المعقدة. تخيل هيكل الجدول التالي:

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

يتطلب إنشاء الجداول التخطيط. عند إنشاء الجداول ، يجب وضعها بشكل استراتيجي في مجموعات ملفات مختلفة. هذا للتأكد من أنك لا تتسبب في تنازع على إدخال / إخراج القرص. كيف ستتعامل مع قابلية التوسع إذا تم إنشاء كل شيء في مجموعة الملفات الأساسية؟

هل يمكنك توضيح سبب حاجتك إلى إنشاء الجداول بشكل ديناميكي؟

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

في هذا المثال أفترض الافتراضات التالية:

  1. إنه موقع تجارة إلكترونية به العديد من المتاجر
  2. يمكن أن يحتوي المتجر على العديد من العناصر (البضائع) للبيع.
  3. يمكن بيع سلعة معينة (سلعة) في العديد من المتاجر
  4. سيفرض المتجر أسعارًا مختلفة على سلع مختلفة (سلع)
  5. جميع الأسعار بالدولار الأمريكي

لنفترض أن موقع التجارة الإلكترونية هذا يبيع وحدات تحكم الألعاب (مثل Wii و PS3 و XBOX360).

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

أولاً ، سأحتاج إلى طاولة متجر لتخزين جميع المعلومات حول المتجر.

قد تبدو طاولة متجر بسيطة كما يلي:

دعنا ندخل ثلاثة متاجر في قاعدة البيانات لاستخدامها خلال مثالنا. سوف يقوم الكود التالي بإدراج ثلاثة متاجر:

إذا قمت بتنفيذ SELECT * FROM Shop ، فسترى على الأرجح ما يلي:

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

دعنا نملأ جدول المنتجات ببعض المنتجات. قم بتنفيذ الكود التالي لإدخال بعض المنتجات:

إذا قمت بتنفيذ SELECT * FROM Product ، فسترى على الأرجح ما يلي:

حسنًا ، في هذه المرحلة ، لديك معلومات عن المنتج والمتجر. إذن كيف تجمعهم معًا؟ حسنًا ، نعلم أنه يمكننا تحديد المتجر من خلال عمود المفتاح الأساسي ShopID الخاص به ونعلم أنه يمكننا تحديد منتج من خلال عمود مفتاح ProductID الأساسي الخاص به. أيضًا ، نظرًا لأن لكل متجر سعرًا مختلفًا لكل منتج ، فإننا نحتاج إلى تخزين السعر الذي يفرضه المتجر على المنتج.

لذلك لدينا جدول يحدد المتجر للمنتج. سوف نسمي هذا الجدول ShopProduct. قد تبدو نسخة بسيطة من هذا الجدول كما يلي:

لذلك لنفترض أن متجر American Games R Us يبيع فقط وحدات التحكم الأمريكية ، وتبيع Europe Gaming Experience جميع وحدات التحكم ، ويبيع Asian Games Emporium وحدات التحكم الآسيوية فقط. سنحتاج إلى تعيين المفاتيح الأساسية من المتجر وجداول المنتج في جدول ShopProduct.

إليك كيف سنفعل رسم الخرائط. في المثال الخاص بي ، تمتلك American Games R Us قيمة ShopID 1 (هذه هي قيمة المفتاح الأساسي) ويمكنني أن أرى أن XBOX360 لها قيمة 3 وأن المتجر قد أدرج XBOX360 مقابل 159.99 دولارًا

بتنفيذ الكود التالي ، ستكمل عملية التعيين:

الآن نريد إضافة جميع المنتجات إلى متجر تجربة الألعاب في أوروبا. في هذا المثال ، نعلم أن متجر Europe Gaming Experience لديه ShopID من 3 ، وبما أنه يبيع جميع وحدات التحكم ، فسنحتاج إلى إدخال ProductID 1 و 2 و 3 في جدول الخرائط. لنفترض أن أسعار وحدات التحكم (المنتجات) في متجر Europe Gaming Experience هي كما يلي: 1- تبيع PS3 مقابل 259.99 دولارًا ، 2- تبيع Wii مقابل 159.99 دولارًا ، 3- تبيع XBOX360 بسعر 199.99 دولارًا.

لإنجاز هذا التعيين ، ستحتاج إلى تنفيذ الكود التالي:

في هذه المرحلة ، قمت بتعيين متجرين ومنتجاتهما في جدول الخرائط. حسنًا ، كيف يمكنني الآن تجميع كل هذا معًا لإظهار مستخدم يتصفح موقع الويب؟ لنفترض أنك تريد عرض كل المنتجات الخاصة بتجربة الألعاب الأوروبية لمستخدم على صفحة ويب - ستحتاج إلى تنفيذ الاستعلام التالي:

من المحتمل أن ترى النتائج التالية:

الآن للحصول على مثال أخير ، لنفترض أن موقع الويب الخاص بك يحتوي على ميزة تجد أرخص سعر لوحدة التحكم. يطلب المستخدم العثور على أرخص أسعار XBOX360.

يمكنك تنفيذ الاستعلام التالي:

سيعيد هذا الاستعلام قائمة بجميع المتاجر التي تبيع XBOX360 بأرخص متجر أولاً وما إلى ذلك.

ستلاحظ أنني لم أقم بإضافة متجر الألعاب الآسيوية. كتدريب ، أضف متجر الألعاب الآسيوية إلى جدول الخرائط مع المنتجات التالية: تبيع Asian Games Emporium وحدة ألعاب Wii مقابل 99.99 دولارًا ووحدة التحكم PS3 مقابل 159.99 دولارًا. إذا كنت تعمل من خلال هذا المثال ، يجب أن تفهم الآن كيفية تصميم علاقة أطراف بأطراف.


هادلي ويكهام ، مؤلف كتاب dplyr يشرح:

  • لا تسحب البيانات أبدًا إلى R إلا إذا طلبت ذلك صراحةً.
  • يؤخر القيام بأي عمل حتى آخر لحظة ممكنة - فهو يجمع معًا كل ما تريد القيام به ثم يرسله إلى قاعدة البيانات في خطوة واحدة.

عندما تقوم بإنشاء ملف dplyr الاستعلام ، يمكنك توصيل أفعال متعددة بخط أنابيب واحد. على سبيل المثال ، قمنا بدمج عامل التصفية () وتحديد () الأفعال باستخدام أنبوب٪ & gt٪.

إذا أردنا ذلك ، يمكننا إضافة المزيد من الخطوات ، على سبيل المثال قم بإزالة عمود الجنس في مكالمة تحديد إضافية:

تمامًا مثل استدعاء التحديد الأول (categories_id، sex، weight) ، لا يتم تنفيذ الأمر select (-sex) بواسطة R. بل يتم إرساله إلى قاعدة البيانات بدلاً من ذلك. فقط أخير يتم استرداد النتيجة وعرضها لك.

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

لتوجيه R للتوقف عن الكسل ، على سبيل المثال لاسترداد جميع نتائج الاستعلام من قاعدة البيانات ، نضيف الأمر collect () إلى أنبوبنا. يشير إلى أن استعلام قاعدة البيانات الخاص بنا قد انتهى: حان الوقت للحصول على ملف أخير النتائج وتحميلها في جلسة R.

الآن لدينا جميع الصفوف الـ 17 التي تطابق استعلامنا في data.frame ويمكننا الاستمرار في العمل معهم حصريًا في R ، دون الاتصال بقاعدة البيانات.


7 إجابات 7

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

يمكنك استخدام jQuery UI للربط بحدث الإفلات ثم إلقاء نظرة على الصفحة للحصول على المعرف المناسب ثم استخدام تحديثات خدمة الويب لإجراء تحديث مجمّع للبيانات الوصفية للملفات. لم أر أي أمثلة على ذلك في البرية ، لكن يبدو ذلك ممكنًا من الناحية النظرية.

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

يحتوي ملف DragDrop.js في التخطيطات على وظيفة تسمى UploadProgressFunc وهي في الأساس مجرد عبارة تبديل. تم تحميل أحد الخيارات الموجودة على هذا المفتاح. هذه هي الوظيفة التي يجب الاستفادة منها إذا كنت بحاجة إلى التعامل مع هذا بشكل مختلف.

لقد قمت بإنشاء ملف js منفصل يسمى DragDrop.Extended.js ، يحتوي على نسخة من وظيفة UploadProgressFunc التي تستدعي ببساطة وظيفة جديدة بعد تعيين messageType في الحالة 4.

هذا لاستخدام سلوك Javascripts للكتابة فوق الوظائف الحالية بالوظيفة الجديدة عند تحميل نسخة مكررة. القيام بذلك يعني أنني لست مضطرًا إلى تحرير أي ملفات OOTB. يمكنني فقط تشغيل مقتطف js هذا في صفحتي الرئيسية.

الآن كما هو الحال في الصفحة الرئيسية ، يتم تشغيله إلى الأبد. آمل أن أحصل في النهاية على حل أفضل. يتحقق الكود مما إذا كان ملف dragdrop.js قد تم تحميله من خلال النظر لمعرفة ما إذا كانت الوظيفة غير محددة. إذا تم تحميله ، فسيتم تحميله أيضًا في ملفي للكتابة فوق هذه الوظيفة.

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

باستخدام المعرف والتفاصيل المتاحة في السياق ، يمكنني إنشاء عنوان URL الخاص بـ EditForm لهذا العنصر. ثم أقوم بتمرير عنوان URL الخاص بـ EditForm هذا إلى مربع حوار SP.

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

للحصول على معرّف (معرّفات) الملفات التي تم تحميلها ، استخدمت JSOM واستفسرت عن مكتبة المستندات باستخدام استعلام CAML. يمكنك الحصول على اسم المكتبة من السياق واسم المستخدم الحالي للمستخدمين. باستخدام هذه التفاصيل ، أقوم فقط بالبحث في الملفات التي تم تحميلها بواسطة المستخدم في الدقائق القليلة الماضية ، ثم قمت بإنشاء مجموعة JS من عناوين url للتحرير.

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

لم أعد أعمل على هذا المشروع ، لذا أعتذر عن نقص عينة التعليمات البرمجية في التحرير.


خادم آخر لرسائل العميل ^ أعلى

رسالة سريعة على مدار الساعة

يتم استخدام الأمر "PFT" لمزامنة وقت الساعة السريع. يتم إرسالها من الخادم عند تغيير الوقت أو المعدل ، مما يشير إلى الوقت "الآن" ونسبة الوقت الحالية (أو 0 عند توقف الساعة). الامثله تشمل:

الرقم الأول هو عدد صحيح من الثواني منذ 12:00 منتصف الليل ، الأول من يناير 1970 ، وقت الساعة السريع. تاريخ الصفر هذا قريب جدًا من حقبة وقت Unix ، وهي 12:00 منتصف الليل ، الأول من يناير 1970 بالتوقيت العالمي المنسق ، ويختلف فقط في إزاحة المنطقة الزمنية ، حيثما أمكن ذلك. في الواقع ، هذا يجعل من السهل تحويل هذه القيمة باستخدام مكتبات الوقت القياسية ، طالما تم حذف أي تحويلات منطقة زمنية. ترسل JMRI قيمة بناءً على تاريخ النظام عند بدء الساعة السريعة ، لذلك ستُرجع قيمة بالقرب من تاريخ التقويم. نظرًا لأن ساعة JMRI السريعة لا تدعم تواريخ التقويم حقًا ، فإن الساعة والدقيقة والثانية فقط مفيدة. ترجع Digitrax LNWI القيم ضمن النطاق 0-86400 ، والتي تُترجم إلى الأوقات في الأول من يناير 1970 ، عندما يتم حساب اليوم والشهر والسنة.
لإعطاء مثال: بدأ مثيل JMRI في 13 كانون الأول (ديسمبر) 2020 بوقت ساعة سريع مضبوط على 10:23:45 صباحًا سيعيد 1607855025 ، والذي يمكن تحويله مرة أخرى إلى ساعات ودقائق وثواني عن طريق "قسمة modulo" على 86400 ( عدد الثواني في اليوم) وحساب المزيد على النحو التالي:
1607855025 mod 86400 = 37425 ثانية منذ منتصف الليل.
37425 ثانية منذ منتصف الليل = 10 ساعات و 1425 ثانية منذ منتصف الليل = 10 ساعات و 23 دقيقة و 45 ثانية منذ منتصف الليل = 10:23:45 صباحًا.
الرقم الثاني هو نسبة الوقت السريع الحالية. قد تكون قيمة عددية (4) أو قيمة فاصلة عائمة (4.0). إذا كانت هذه القيمة 0 (أو 0.0) ، يتم إيقاف الساعة.
يتم إرسال التحديثات على كل تغيير في الوقت أو المعدل ، وعندما تتوقف الساعة أو تبدأ ، لذلك توقع رسالة واحدة كل دقيقة ساعة سريعة.

رسالة التنبيه والمعلومات

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

تم إرجاع المثال بعد أن يطلب العميل عنوانًا غير صالح (على سبيل المثال M0 + L23 & lt & gtL23) الاستجابة هي:

رسالة نوع الخادم

يمكن للخادم إرسال "نوع" لتعريف نفسه للعملاء ، وهو أمر مفيد لتمكين سلوكيات معينة. نوعين:
نوع "HT" +. الأنواع المعروفة: "Digitrax" ، "MRC" ، "JMRI"
وصف "Ht" +. سلسلة نصية أطول للمعلومات ، لا يمكن أن تحتوي على أسطر جديدة


2 إجابات 2

من المفترض أنك تريد رؤية إدخال واحد لكل مجموعة فريدة من نوعها لشخص / عنوان / بريد إلكتروني / موقع ويب. إذا كان الأمر كذلك ، فجرب هذا:

تضمن عبارة GROUP BY في النهاية إرجاع صف واحد فقط لكل مجموعة فريدة من الأعمدة في عبارة GROUP BY. يجب أن يمنع هذا الصفوف المكررة التي يتم عرضها في نتائجك.

زوجان من الأشياء ملاحظة:

استخدم دائمًا مؤهل المخطط في عبارة FROM. يجب أن يكون الشخص من dbo.Person -> هذا يزيل أي ارتباك إذا أدخلت مخططات جديدة في المستقبل ، ويمنع مُحسِّن الاستعلام من الاضطرار إلى البحث عن المخطط الافتراضي للمستخدم.

لقابلية الصيانة في المستقبل ، ربما تريد تسمية الأعمدة بنفس الطريقة بغض النظر عن الجدول الموجود فيها. لذلك على سبيل المثال ، بدلاً من عمود المعرف في جدول الأشخاص المسمى ID ، ويتم تسميته باسم الشخص في جدول العناوين ، سميها باسم PersonID على حد سواء الجداول. هذا يمنع الارتباك (أخطاء القراءة) في الصلات مثل dbo.Person LEFT JOIN dbo.Address ON Person.ID = Address.Person.

بدلاً من تسمية الجداول مثل الشخص ، يجب تسميتها بعد مجموعة العناصر التي تحتوي عليها ، بصيغة الجمع. لذلك ، يصبح الشخص أشخاصًا ، ويصبح العنوان عناوين. هذا يزيل الالتباس -> هل يحتوي جدول العناوين بالفعل على عنوان واحد أم عناوين متعددة؟

يجب تجنب WITH (NOLOCK) مثل الطاعون ما لم تفهم تمامًا عواقب قراءة الصفوف التي تم تعديلها بواسطة معاملات أخرى ولكن لم يتم الالتزام بها بعد. من MSDN:

المعاملات التي يتم تشغيلها على مستوى READ UNCOMMITTED لا تصدر أقفالًا مشتركة لمنع المعاملات الأخرى من تعديل البيانات التي تمت قراءتها بواسطة المعاملة الحالية. لا يتم أيضًا حظر المعاملات التي لم تلتزم بالقراءة بواسطة أقفال حصرية تمنع المعاملة الحالية من قراءة الصفوف التي تم تعديلها ولكن لم يتم الالتزام بها بواسطة معاملات أخرى. عند تعيين هذا الخيار ، من الممكن قراءة التعديلات غير الملتزم بها ، والتي تسمى القراءات القذرة. يمكن تغيير القيم في البيانات ويمكن أن تظهر الصفوف أو تختفي في مجموعة البيانات قبل نهاية المعاملة. هذا الخيار له نفس تأثير تعيين NOLOCK على جميع الجداول في جميع عبارات SELECT في المعاملة. هذا هو أقل مستويات العزل تقييدًا.

في SQL Server ، يمكنك أيضًا تقليل تنازع القفل مع حماية المعاملات من القراءات القذرة لتعديلات البيانات غير الملتزم بها باستخدام إما:

تم تعيين مستوى عزل READ COMMITTED مع خيار قاعدة البيانات READ_COMMITTED_SNAPSHOT على ON.

مستوى عزل SNAPSHOT.


كما ذكرت الإجابات على السؤال الآخر (الذي يعتبر هذا السؤال مكررًا) ، هناك (منذ الإصدار 9.5) وظيفة UPSERT أصلية. بالنسبة للإصدارات الأقدم ، استمر في القراءة :)

لقد قمت بإعداد اختبار للتحقق من الخيارات. سأقوم بتضمين الكود أدناه ، والذي يمكن تشغيله في psql على مربع لينكس / يونكس (ببساطة لأنه من أجل الوضوح في النتائج ، قمت بتوصيل إخراج أوامر الإعداد إلى / dev / null - في مربع Windows يمكن للمرء اختيار ملف السجل بدلاً من ذلك).

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

عند التحقق من عدد قليل من عمليات التشغيل الاختبارية ، يبدو أن استخدام القاعدة وإضافة WHERE NOT EXISTS بعد ذلك ، فإن عبارة INSERT تقضي وقتًا مشابهًا ، بينما يستغرق إجراء الاستثناء مزيدًا من الوقت لإكماله.

تلميح: تعتبر الكتلة التي تحتوي على عبارة EXCEPTION أكثر تكلفة بشكل ملحوظ للدخول والخروج من الكتلة التي لا تحتوي على جملة. لذلك ، لا تستخدم EXCEPTION بدون حاجة.

شخصيًا ، نظرًا لقابلية القراءة وقابلية الصيانة ، أفضل إضافة بت WHERE NOT EXISTS إلى INSERT s نفسها. تمامًا كما هو الحال مع المشغلات (التي يمكن اختبارها هنا أيضًا) ، يكون تصحيح الأخطاء (أو ببساطة تتبع سلوك INSERT) أكثر تعقيدًا مع وجود القواعد.

والرمز الذي استخدمته (لا تتردد في الإشارة إلى المفاهيم الخاطئة أو المشاكل الأخرى):


محتويات

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

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

  • سجل مركزي متاح لجميع المشاركين
  • القدرة على تسجيل الأصول الجديدة بسهولة
  • معرّف مادة العرض غير قابل للتغيير (ولا سيما فيما يتعلق بالتغييرات في ملكية مادة العرض أو موقع البيانات الوصفية أو مادة العرض نفسها)
  • الكشف عن / منع التكرارات من نفس الأصل قيد الإنشاء
  • القدرة على إنشاء مجموعة من أصول الفيديو المشتقة من عمل مجرد (مثل الإصدار المسرحي الأصلي ، قص المخرج ، متغيرات اللغة)
  • القدرة على تجميع أصول الفيديو حسب العلاقات العامة (مثل حلقات موسم من مسلسل تلفزيوني)
  • مجموعة أساسية من البيانات الوصفية للتمييز بين الأصول ، حتى عندما تكون مرتبطة ارتباطًا وثيقًا
  • قابل للتحجيم وغير قابل للتغيير ومستمر

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

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

تعديل تنسيق معرف المحتوى

الشكل الأساسي لمعرّف محتوى EIDR هو مثيل لمقبض وله التنسيق:

10.5240 / XXXX-XXXX-XXXX-XXXX-XXXX-C

  • 10.5240 هي بادئة DOI لأصل EIDR. يشير الرقم "10" إلى أن المقبض عبارة عن معرف DOI يتم تعيين البادئات الأخرى لأنواع الأصول الأخرى (مثل المنشورات الأكاديمية). الأرقام بين "." و "/" من البادئة الفرعية ، والتي تشير إلى وكالة التسجيل داخل مؤسسة DOI الدولية (IDF) التي لديها حقوق لإدارة هذه المقابض. تم تخصيص "5240" لجمعية EIDR.
  • XXXX-XXXX-XXXX-XXXX-XXXX-C هي لاحقة DOI. تشير كل علامة "X" إلى رقم سداسي عشري (A-F) ، و "C" هو رقم تحقق ISO 7064 Mod 37،36 [1].

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

  • بادئة فرعية 16 بت: يتم إنشاؤها عن طريق تفسير البادئة الفرعية كقيمة ثنائية ، على سبيل المثال B'0001010001111000 '
  • لاحقة 80 بت: الجزء غير الاختباري من اللاحقة ، ويمثله 10 بايت

تم تحديد نموذج اسم المورد الموحد لمعرّف EIDR في RFC 7302.

للاستخدام على الويب ، يمكن تمثيل معرّف محتوى EIDR كمعرّف URI في أحد هذه النماذج:

  • https://doi.org/10.5240/XXXX-XXXX-XXXX-XXXX-XXXX-C: هذا معرف EIDR يتم تمثيله كمرجع وكيل DOI (سيتم إعادة توجيهه من DOI إلى سجل EIDR)
  • info: doi: 10.5240 / XXXX-XXXX-XXXX-XXXX-XXXX-C [مهملة]: هذا معرف EIDR يتم تمثيله كـ "معلومات" URI المتوافقة مع RFC 4452 (تذكر أن جميع معرفات EIDR هي أيضًا معرفات DOI ، ولكن ليس العكس).

أنواع السجلات تحرير

هناك أربعة أنواع من سجلات المحتوى ، كل منها مرتبط ببادئة محجوزة:

  • معرّف المحتوى (10.5240 / XXXX-XXXX-XXXX-XXXX-XXXX-C): مرتبط بأصل ترفيهي مثل فيلم أو مسلسل تلفزيوني. تعد سجلات المحتوى هرمية ، مما يسمح بالتعبير عن العلاقات مثل السلسلة ، التي سيكون أطفالها مواسم ، والتي سيكون أطفالها بدورهم حلقات فردية. يتم دعم العديد من العلاقات الأخرى ، كما هو موضح أدناه. تشكل سجلات المحتوى الجزء الأكبر من البيانات في سجل EIDR.
  • معرف الحزب (10.5237 / XXXX-XXXX): يحدد الكيانات مثل المسجلين ومنتجي المحتوى والموزعين.
  • معرف خدمة الفيديو (10.5239 / XXXX-XXXX): يحدد خدمة فيديو ، تُعرف بالعامية باسم "قناة" أو "شبكة": تسلسل خطي (عادةً) للمحتوى المقرر بثه في أوقات محددة (على سبيل المثال ، معرف الخدمة لشبكة Cartoon Network هو 10.5239 / 8BE5-E3F6). خدمات الفيديو هرمية: على سبيل المثال ، قد يكون لأحد الوالدين عدة أطفال لحساب الاختلافات الإقليمية أو اللغوية).
  • معرف المستخدم (10.5238 / [0-9a-zA-Z _. # ()] <2-32>): يحدد مستخدمًا باستخدام سلسلة مكونة من 2–32 حرفًا أبجديًا رقميًا وحروفًا خاصة محددة (موضحة هنا باستخدام لغة Perl). المستخدم هو في الأساس مفهوم إداري تابع للأطراف (التي يرثون منها حقوق الوصول). على عكس EIDR DOIs الأخرى ، لا يمكن استخدام معرف المستخدم إلا داخل EIDR (مثل برمجة APIs).

تم تعيين البادئات الفرعية 5237 و 5238 و 5239 و 5240 إلى جمعية EIDR.

تحرير سجلات المحتوى

سجلات المحتوى هي كائنات مصنفة حسب أنواعها وعلاقاتها. لكل منها ثلاثة أنواع مختلفة (متعامدة) من النوع:

  • نوع الكائن: هناك ما مجموعه 10 من هؤلاء. الأول هو النوع الأساسي ، الذي يحتوي على الحد الأدنى من الحقول اللازمة لوصف تسجيلة المحتوى. التسعة الأخرى مشتقة من النوع الأساسي وتحتوي على حقول إضافية لوصف كائنات أكثر تعقيدًا.
  • النوع الهيكلي: هذه تمثيلات مميزة للعمل وهي مدرجة بترتيب متزايد من الخصوصية:
    • التجريد: يستخدم للأشياء التي ليس لها حقيقة ، مثل حاوية سلسلة أو المفهوم الأساسي للعمل الأصلي. يتوافق هذا مع الكود القياسي الدولي للعمل الموسيقي (ISWC) للأعمال الموسيقية ، أو رمز النص القياسي الدولي (ISTC) للأعمال النصية ، أو الرقم القياسي الدولي السمعي البصري (ISAN) للأعمال السمعية البصرية.
    • أداء: يستخدم للعناصر التي هي إصدارات معينة من العمل ، مثل الإصدار المسرحي الأصلي أو نسخة المخرج من فيلم أو نسخة من برنامج تلفزيوني خاضعة للرقابة المحلية. يتوافق هذا تقريبًا مع رمز التسجيل القياسي الدولي (ISRC) للأعمال الموسيقية وبعض استخدامات إصدار ISAN (V-ISAN) للأعمال السمعية البصرية.
    • رقمي: تمثيل رقمي لعمل ما ، مثل ترميز MPEG-2 لفيلم. هذا يتوافق مع بعض استخدامات V-ISAN.
    • مسلسل: تجريد يحتوي على عناصر فردية مرتبة أو غير مرتبة.
    • موسم: مستوى ثاني من التجميع أسفل سلسلة ، وعادة ما يغطي فترة زمنية
    • تلفزيون: المحتوى الذي ظهر لأول مرة عبر البث.
    • فيلم: محتوى طويل ظهر لأول مرة في السينما أو المسرح.
    • قصيرة: مُعرَّف بشكل فضفاض لتغطية عمل مدته 40 دقيقة أو أقل ، مثل مقاطع الفيديو الموسيقية أو الأفلام الإخبارية المسرحية أو الأفلام القصيرة المسرحية أو الرسوم المتحركة DTV.
    • الويب: المحتوى الذي ظهر لأول مرة على الويب. هذا يختلف عن المحتوى من أي مكان آخر والذي تم توفيره على الويب.
    • مادة تفاعلية: المحتوى غير المرئي والمسموع بدقة. يغطي قوائم DVD وتراكبات التلفزيون التفاعلية والمشغلات المخصصة وما إلى ذلك.
    • التحويل البرمجي: محتوى يتألف من عدة مواد عرض أخرى لا يمكن وصفها بدقة أكبر ، مثل مجموعة مربعات من امتياز فيلم.
    • تكميلي: هذا النوع مخصص لمحتوى ثانوي هدفه الأساسي دعم محتوى آخر أو زيادته أو الترويج له. تشمل الأمثلة مقطورات ومقتطفات وأفلام وثائقية ترويجية ("صناعة القطع").

    تحرير البيانات الوصفية الأساسية

    الحقول التالية (مأخوذة من مجموعة أكبر) تشتمل على بيانات الكائن الأساسية لسجل المحتوى:

    • النوع الهيكلي: على سبيل المثال التجريد
    • وضع: على سبيل المثال AudioVisual (لفيلم أو برنامج تلفزيوني) "صوتي" لبرنامج إذاعي "مرئي" لعمل صامت.
    • نوع المرجع: على سبيل المثال فيلم
    • لقب: العنوان الأساسي. يتم تمييز العناوين والعناوين البديلة أيضًا من خلال:
      • لانج: لغة العنوان المعبر عنها برمز ISO 639-1
      • فصل: الإفراج أو الإقليمية

      تحرير سجلات المحتوى المحذوفة

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

      الآلية الأخرى هي استخدام سجلات شواهد القبور. يتم استخدام هذا عندما يكون سجل المحتوى تالفًا ، أو عندما يتم تسجيل أصل غير صالح بطريق الخطأ. في هذه الحالة ، سيتم تسمية المعرف باسم مستعار إلى سجل خاص بشواهد القبور. يمكن التعرف على علامة القبر بواسطة التطبيقات لأنه سيتم تعيين حقل معرف EIDR الخاص به على القيمة المميزة "10.5240 / 0000-0000-0000-0000-0000-X". لاحظ أن" X "تعني الحرف الرابع والعشرين من الأبجدية اللاتينية (ASCII 0x58 أو Unicode U + 0058).

      تحرير المعرف البديل

      يعد الحصول على مجموعة غنية من المعرفات البديلة للمحتوى أحد الأهداف الأساسية لـ EIDR. يسمح ذلك باستخدام معرفات EIDR في كل مكان في مهام سير عمل المحتوى إذا كانت هناك حاجة إلى معرف بديل ، فيمكن العثور عليه في البيانات الوصفية لمعرف EIDR. يدعم EIDR إدراج كل من الملكية ومراجع المعرف القياسية الأخرى (مثل ISAN). يمكن إضافة معرفات بديلة إضافية عند الحاجة (على سبيل المثال من قبل الأطراف الراغبة في دعم مهام سير العمل الجديدة). يوجد أدناه مثال للمعرفات البديلة لأصل EIDR 10.5240 / EA73-79D7-1B2B-B378-3A73-M (الفيلم بليد عداء). إذا كان المعرف البديل قابلاً للحل بطريقة حسابية ، على سبيل المثال عن طريق وضعه بشكل مناسب في عنوان URL للقالب ، فإن EIDR يجعل هذا الارتباط متاحًا.

      معرفات بديلة لـ 10.5240 / EA73-79D7-1B2B-B378-3A73-M
      معرف بديل 0000-0000-14A9-0000-K-0000-0000-E
      اكتب: ISAN
      المعرف البديل # 2 89
      اكتب: IVA
      المعرف البديل # 3 B000SW4DLM
      اكتب: امتلاكي اختصاص: amazon.com
      المعرف البديل # 4 12886
      اكتب: امتلاكي اختصاص: flixster.com
      المعرف البديل # 5 15042
      اكتب: امتلاكي اختصاص: thecinemasource.com
      المعرف البديل # 6 tt0083658
      اكتب: IMDB علاقة: متساوية
      المعرف البديل # 7 E0087486000
      اكتب: امتلاكي اختصاص: spe.sony.com/MPM
      المعرف البديل # 8 3929
      اكتب: امتلاكي اختصاص: spe.sony.com/ProductID
      المعرف البديل # 9 2002029
      اكتب: امتلاكي اختصاص: warnerbros.com/MPM
      المعرف البديل # 10 389785
      اكتب: امتلاكي اختصاص veronicamagazine.nl
      المعرف البديل # 11 B001EC2J1G
      اكتب: امتلاكي اختصاص: amazon.com
      المعرف البديل # 12 150002645
      اكتب: امتلاكي اختصاص: bfi.org.uk

      المعرفات البديلة مقسمة إلى غير مملوكة ومملوكة. The former have distinguished, predefined types (e.g. those issued by ISAN, IMDb, and IVA), whereas proprietary IDs are all of type "Proprietary", and are further distinguished by an associated DNS domain. As of July 2017, there are over 2 million alternate IDs directly available through EIDR.

      Relationships between objects Edit

      Content objects can be related to each other according to the following table. These relations are expressed as additional fields in the content record and are thus relative to that object. Note that the subject object is the child and the target is the parent (e.g. subject is<relation-type>Of parent). Additional constraints are noted in the table.

      Inheritance relationships: The object on which the relationship exists can inherit basic metadata fields from the object to which the relationship refers. Only one inheritance relationship may exist on an object. These relationships produce a tree structure rooted in the EIDR ID for an abstraction.
      isSeasonOf A group of series episodes released over a contiguous span of time (e.g. broadcast year) e.g. 10.5240/AB95-8734-5D98-A282-2DF0-C ("Season 9") is a season of 10.5240/C272-DA64-E2B5-0A78-2AC3-Z ("The X-Files")
      isEpisodeOf على سبيل المثال 10.5240/E008-224D-0397-0560-6300-8 ("Sunshine Days") is an episode of 10.5240/AB95-8734-5D98-A282-2DF0-C ("Season 9").
      isEditOf An instance of a title with unique characteristics that differentiate it from any other version. For example, 10.5240/7290-C8AD-12BA-4F93-3B07-7 ("Blade Runner: The Director's Cut") is an edit of 10.5240/EA73-79D7-1B2B-B378-3A73-M.
      isManifestationOf A manifestation is a more specific instance of a work that can be sold, transmitted, transferred or played. The parent of a manifestation should be an edit. For example, 10.5240/9CE1-DE39-5F3E-073D-4307-7 is the Ultraviolet Standard CFF (standard definition, English audio and subtitles) for "Blade Runner: The Director's Cut". It is a manifestation of the abstract work 10.5240/EA73-79D7-1B2B-B378-3A73-M.
      isClipOf One (and only one) contiguous fragment of an asset.
      Dependence relationships: The objects to which the relationship refers have a strong bearing on the basic nature of the object on which the relationship exists. This means that the objects referred to in the relationship must be taken into account when checking for duplicates when an object is created or modified. These relationships produce directed graphs within and across trees.
      isCompositeOf A single work composed of parts of multiple other records.
      isCompilationOf A collection of multiple whole works that is not more precisely describable.
      Lightweight relationships: There is no inheritance the objects to which they refer do not influence the underlying nature of the object on which the relationship exists. These relationships are used primarily when moving around within the object tree and connecting object trees to each other, producing a directed graph across elements of those trees.
      isPackagingOf For creating a collection of assets that are released together e.g. 10.5240/F219-975E-5990-4570-BA75-2 ("Hannah Montana and Miley. ") is a packaging of 10.5240/9ABE-2BF1-ACE7-EBA2-8E57-N.
      isPromotionOf Promotional objects such as a trailer.
      isSupplementTo Ancillary material that might be found on a DVD, such as an outtake or behind-the-scenes feature.
      isAlternateContentFor Content that in synchronized to the main asset, such as audio or an alternate camera angle.

      EIDR has been incorporated into many standards. A few of the more significant ones are listed here:

      • SMPTE/AMWA: SMPTE Recommended Practice RP 2079 [3] standardizes use of EIDR in MXF media containers, at the heart of professional content workflows, including AMWA AS-03 [4] and AS-11 [5] specifications. SMTPE Recommended Practice 2021-5 [6] allows an EIDR Identifier to be carried wherever BXF is used for exchange of data among broadcast systems.
      • European Broadcasting Union (EBU): EBUCore [7] is a common core set of descriptive and technical metadata that describe media resources (audio, video, still images, subtitling, etc.). EBU and EIDR staff have produced a mapping of EBUCore for base records to EIDR root objects: .. EIDR and EBU are working together in the SMPTE Core working group to define descriptive metadata for SMPTE-based specifications and workflows. EIDR is one of the standards supported by the EBU Core.
      • DVB: EIDR is referenced in draft DVB specifications for companion screens [8] (tm-sm-css-0017r14).
      • MPEG: EIDR has been proposed as a content identifier in the Multimedia Preservation Application Format [9] that is being defined for archival use.
      • CableLabs (US): EIDR is part of the CableLabs Metadata [10] standard for the distribution of video on demand assets. EIDR is one program identifier that can be present in an SCTE-35 2013 [11] segmentation descriptor, a standard used in IP distribution over cable. EIDR is also used in Dynamic Ad Insertion (DAI) products using the SCTE 130 [12] standard architecture.
      • EIDR and Alternate IDs: In order to promote interoperability of EIDR with a wide variety of systems, EIDR includes an "AlternateID" field to cross-reference existing IDs systems. Alternate IDs may include, for example, CRID (RFC 4078), ISAN, ISRC, UPC, or URI, as well as commercial ID systems such as Ad-ID, Baseline, IMDb, etc. Currently about half of EIDR records carry an ID from at least one other system.
      • Mapping from other Standard Metadata and Identifiers to EIDR: Other metadata and identifier systems can be directly mapped into EIDR:
        • EN 15907 and EN 15744: These standards are under the auspices of the European Committee for Standardization CEN/TC 372 and filmstandards.org. [13] Best practices and mappings are available for EN 15907 and EN 15744 root objects. EIDR is also working with film archives to extend interoperability with these standards to a more granular level of detail, including a project with the British Film Institute (BFI) to register their EN 15907-based records with EIDR.
        • International Standard Audiovisual Number (ISAN): ISAN is widely used in rights management and collection systems. A complete mapping of an ISAN registration to an EIDR registration is available. The UK Audio-Visual Registration Agency, a joint venture between EIDR and ISAN-UK provides joint registration services for both identifiers. Precursors to this service have been used to obtain EIDR IDs and ISANs for broadcast content from ITV (a commercial TV network in the United Kingdom).

        EIDR identifiers have found their way into an increasing number of commercial applications. The following are illustrative of some of the advantages of using EIDR:

        • Warner Brothers-Xbox integration: EIDR was used to improve the implementation of an Electronic Sell Through (EST) system for delivering Warner Theatrical titles to Microsoft Xbox Live customers. The operation of an electronic storefront requires several groups within Warner Brothers to coordinate their activities with the Xbox team. The outbound side of the distribution chain included publishing "Avails" (titles available for sale) and tracking order fulfillment the inbound side included placing orders. Other functions such as reports spanned both sides of the distribution chain. The original system required manual intervention and supervision, particularly at boundaries between organizations. An example of the need for manual processing would be verifying that the correct version of an asset (which can vary depending on subtitles or content) was delivered. In the new system Warner Brothers created a new EIDR ID for each content variant, and these were used for all subsequent processing stages. This eliminated ambiguity and facilitated the automation of the inbound, outbound stages. Another advantage was the ability to create reports on the fly.
        • Swisscom EPG integration: Swisscom operates a Pay TV service in Switzerland. In 2014 it completed the rollout of an Electronic Programming Guide (EPG) for its customers based on EIDR. [14] This is an end-to-end system where EIDR IDs are used to represent the assets displayed in the EPG. A key element of the system was that EIDR IDs were also used in the guide metadata supplied to Swisscom by media-press.tv. This included setting up a system for assigning EIDR IDs to assets that were not already in the registry. A key advantage of using EIDR is not having to translate between different identifier systems.

        EIDR is administered by the non-profit EIDR Association, which was founded in October 2010 by MovieLabs, CableLabs, Comcast and Rovi. Membership has grown steadily since then: as of late-2014 it has 79 members divided between the Industry Promoters and Industry Contributor levels. The fastest growing category is non-US companies, which now accounts for about 20% of membership. The EIDR Association operates two EIDR registries: Production and Sandbox. The former is the official site, and the latter is reserved for test and development. Both systems are available publicly online, but the contents of the sandbox are not guaranteed to be correct, complete, or even to refer to assets that exist. Only members of the EIDR association may modify the registry.

        Registration Edit

        Registration of new assets can be done individually or in bulk (up to 100,000 assets at a time). In either case, the workflow comprises a combination of automated (to perform well-defined but tedious tasks) and manual (where human judgment is called for) processes. It is also iterative, as the initial matching process may identify a variety of gaps and errors that need to be dealt with.

        Registering new assets is a complex process that requires some preparation, particularly in the case of bulk submission. The automated processes will check syntax, make sure that the basic metadata is supplied, and that any dependencies (e.g. series records created before constituent episodes) are honored. Manual steps include making sure the correct Parties are associated with the asset. One of the most important steps is ensuring that a new asset does not already exist in the registry: this is covered in the next section.

        In order to register a new asset a user must be associated with a party that has been granted the "Registrant" role by the EIDR operator. A registrant may be a principal agent, such as a studio or an encoding house, but it may also be a Party doing bulk registration of back-catalogue items, or a Party acting on behalf of someone else. It is also a requirement that a registrant be an EIDR member. In general, content ownership, metadata authority, and registration capability are separate and unrelated concepts.

        Deduplication Edit

        This refers to flagging assets being submitted to the registry as falling into one of the following three categories:

        • Candidate asset is unique (with respect to existing registry assets).
        • Candidate asset is a duplicate of an existing record.
        • Candidate asset has a high probability of being a duplicate.

        This assessment is based on applying a (large) set of rules to the candidate asset, which results a numerical score. Bucketing occurs as the result of comparing the score to two thresholds:

        • Low Threshold: any asset with a score below this value is deemed not to be a duplicate. This is the only case when a proposed record addition or modification will succeed.
        • High Threshold: any asset with a score above this value is deemed to (almost certainly) be a duplicate. The proposed record addition/modification will not proceed, and an error status will be returned. Registrants will generally use the pre-existing ID for the item they tried to register, and can add missing information and Alternate IDs to the existing record.

        Assets falling between the low and high threshold are deemed to have a high possibility of being a duplicate: the proposed record addition/modification will not proceed until manually reviewed by EIDR operations staff.

        The components of the EIDR system are shown below.

        The principal functional blocks are as follows:

        • Core Registry: This module is a customization and configuration of the CNRI Digital Object Repository. It performs various functions including registration, generation of unique identifiers, indexing, object storage management, and access control.
        • Repository: This stores and provides access to registered objects for EIDR, these objects are collections of metadata, not the media assets themselves. The metadata includes standard object information, relationships, and access control settings.
        • REST API: A REST interface that provides access to the full set of non-administrative registry features. Services can make individual or batched calls, which can be dispatched synchronously or asynchronously. A general query syntax enables the retrieval (and in some cases modification) of registry records satisfying a set of criteria specified by the caller.
          • EIDR SDK: this is provided to developers to facilitate the creation of third party applications (usually in support of a B2B or intramural workflow). It comprises a Java SDK, a .NET SDK, and sample programs built upon the two SDKs. Using the SDK is recommended over direct calls to the REST API.
          • Command Line Tools: these are simple Java and .NET applications, built on the SDK, each of which provides a single function, such as resolve, query, match, and register.
          • Web UI: a Web-based user interface primarily for search, lookup, and browsing the object hierarchy. It also supports simple registrations.

          Relation to DOI and Handle System Edit

          An EIDR ID is a specialized example of a Digital Object Identifier (DOI), which in turn is built on top of the Handle System developed by the Corporation for National Research Initiatives (CNRI). The EIDR-specific aspects of the lower layers are described in more detail below.

          Digital Object Identifier (EIDR Aspects) Edit

          A Digital Object Identifier, standardized as ISO 26324, [15] seeks to uniquely identify a wide range of digital artifacts including books, recordings, research data, and other digital content. The goal is not just for the IDs to be unique, but persistent and immutable. As opposed to URLs, DOI identifiers stay the same even if the objects move to another location, or become owned by another organization. Here are some of the characteristics of DOI:

          • The International DOI Foundation (IDF) enforces previously agreed rules on the constituent Registration Agencies (e.g. EIDR) to ensure continuity. In particular, if an RA ceases operation, the names it hosts will be taken over by another RA.
          • The IDF defines rules to which all DOI names must adhere (what kinds of object may be named by a specific RA)
          • The DOI system provides a data model, based on a data dictionary, to enable a structured means of expressing metadata (and inter-object relationships).
          • The DOI system has its own highly redundant and distributed set of handle and proxy servers.
          • All DOI prefixes are of the form "10.NNNN" where 10 is a directory indicator and "NNNN" is a registrant code in the range 1-65535 (e.g. EIDR content records use is 10.5240)

          The DOI data model provides the means to associate metadata with each object, as well as policies governing its use. In the words of the DOI Handbook, metadata may include "names, identifiers, descriptions, types, classifications, locations, times, measurements, relationships and any other kind of information related to [an object]." Metadata flows between the following entities:

          • Resource Provider: usually the owner of media asset, which is responsible for inputting metadata to the system.
          • Registration Agency: the entities that serves as the repository of the assets (and associated metadata). As noted DOI supports a federation of independent RA's, each responsible for a set of assets. EIDR is one such RA. Others include CrossRef for scholarly articles, DataCite for research data, and OPOCE for official publications of the European Union.
          • Service User: the entities making queries to RA's retrieve metadata associated with assets. The DOI resolution framework is responsible for dispatching a query to the appropriate RA (the Service User doesn't need to know this).

          To foster interoperability between RAs, DOI has the concept of a metadata Kernel. This is a core set of metadata that all objects stored within the DOI framework should have. The full set may be found in the DOI handbook. Interoperability is a large topic extending beyond the scope of EIDR, but the following subset is particularly relevant to EIDR assets:

          • referent: an object maintained in the DOI system.
          • referentName: the name of the referent (e.g. the title of a movie)
          • primaryReferentType: For EIDR, this includes creation (e.g. entertainment assets) and party (e.g. the creator thereof).
          • structuralType: these are mutually exclusive categories that identify the form of an asset. Two particularly relevant to EIDR assets are an abstraction (an object such as a movie that may exist in multiple forms) and performance (a specific instance of an object such as Director's Cut).
          • principalAgent: for creations, the entity principally responsible for its existence.
          • registrationAuthorityCode: denotes the agency that issued the DOI. This would be the EIDR RA for EIDR assets.

          EIDR metadata is available in standard DOI kernel metadata format as well as EIDR-specific formats. The DOI for the DOI metadata schema is doi:10.1000/276 .

          Handle System (EIDR Aspects) Edit

          DOI is in turn implemented on top of the Handle System, a distributed, highly scalable, name resolution service. A handle is defined as:

          <Handle> ::= <Handle Naming Authority> "/" <Handle Local Name>

          The Naming Authority is globally unique and defines both an administrative space and the syntax of the Handle Local Name. For EIDR in the definition above, the "10.5240" is the EIDR Naming Authority, and is responsible for resolving the suffix (including that it conforms to the expected syntax for an EIDR asset). The range of allowable Naming Authorities is more general than is employed by DOI (or EIDR).

          The distributed nature of the Handle System allows each local namespace to be hosted on multiple geographically distributed service sites. This is a federated model where each local name space has complete control over the placement and operation of its service sites. Furthermore, each service site may contain multiple resolution servers: requests directed to a particular service site will be dispatched evenly across its constituent servers.

          The data model of the Handle System is simple but flexible. An arbitrary number of values may be associated with each handle. Over time, these values may be created, modified, and destroyed. Each such datum has the following attributes:

          • فهرس: an unsigned integer that identifies a data value from the others that may exist for this handle.
          • type: a UTF-8 string identifying the type. The type system is extensible and common types are maintained as handles in the "0.TYPE" naming authority. There are no restrictions on the creation of new types, although using resolvable handles as type names is recommended best practice. Common types include URL for a single of indirection, "10320/loc" for a set of context-based resolution alternatives, and various administrative types for Handle System management, all of which are based on handle resolution.
          • بيانات: the value itself, represented as a sequence of octets which are interpreted in the context of the associated type
          • permission: access rights to this particular value. Note that different data values of a handle may have different permissions
          • TTL: an integer that specifies how long a value may be cached
          • timestamp: an integer (expressed as milliseconds from the Unix epoch) that records the last time the value was updated
          • reference: a list of references to other handle values. These are usually used to add credentials (e.g. a digital signature).

          Accessing the Handle System is done via a wire protocol defined in RFC 3652 EIDR applications don't have to be concerned with this because of the layering of protocols.


          If you are using the Google Drive application on your PC you can copy and paste the folder in the Google Drive directory, and this would copy it. I do not believe it is possible to do this from the web application.

          Have written an App Script just to address this problem. You can copy any folder contents as well as the structure in it. Script will help eliminate the need of Google Drive desktop app. By adding triggers you can even automate the process.

          • this also adds suffix _copy to all subfolders
          • The folder_you_want_copied_copy is in the highest parent hierarchy of your Google Drive, so if you copied a subfolder of your drive, it will bubble up to the highest level when copied

          If you are in the Google Drive web interface.

          Create a new folder and name it what you want.

          Go into the Pre-existing folder, select all the files, right click and hit copy.

          Select all the copies, right click and hit move to. Select the New Folder.

          Note that this method will not work if the folder you wish to copy has subfolders.

          Very late answer for the OP, and I think not even possible at the time of asking, but this is what I do today :

          1. Select the folder I want to duplicate.
          2. Secondary click on it, and then choose "Download" from the pop-up menu
          3. Have my browser save the zipped archive to a temporary directory
          4. Extract the folder from the archive, and give it a new name
          5. Back in Drive click the big blue New button, and select "Folder upload" from the drop down menu.
          6. Back in my computer grab the newly named folder and drag it back into Drive.
          7. Flush the toilet

          Note : This is a solution when you have a lot of little files and sub-folders that together make for a smallish compressed file. It's usefulness decreases as the total compressed file size increases.

          I prefer to abstain from allowing third parties access to my Drive unless I have to so, like Lucky 711, I wrote my own script. I leave it here for future Google results adventurers. It will copy the folder and all its contents. For my use case, I wrote it to handle files with multiple parents by just adding the copied folder as a new parent. If you don't want that, drop the "Count the parents that aren't this parent" part.

          For reference, if you want to create new copies of files with multiple parents rather than just adding the new folder as another parent, the shorter code would look like this:

          You can use the "Copy Folder" add-on for Google Spreadsheets:

          1. create a Google Spreadsheet
          2. click on Add-ons > Get add-ons and add the 'Copy Folder' add-on`
          3. select the folder you want to copy
          4. done

          Or, this chrome web store Google App Script can be used to achieve this result. This one does not require the creation of a Google Spreadsheet.

          I use multiple machines and don't want to put the drive app on all of them so I have written the below script to copy on the site. It’s ugly and basic but it works. It only copies a folder and its files, not sub folders. I am sure there is room for improvement, so feel free to take this and improve it, but I hope it’s at least helpful from the start.

          Per a comment below, this is a Google Apps Script. The way to use it is to open the Google scripting app, then copy and past all of the code into a blank script. After that click the publish option on the Menu, then select deploy as web app. You can then click the Latest code link or copy and paste the URL into your browser. Then, you will find a box where you can type the folder that you want to copy, and the copy button. That should create a copy of the folder you have named, and a copy of all of the files within.

          Note: it will not copy sub-folders, just the files.

          To duplicate a folder drag & drop it on another folder holding CTRL button.