Viac

Ako spracovať duplicitné identifikátory pri použití funkcie as_sp v balíku R osmar

Ako spracovať duplicitné identifikátory pri použití funkcie as_sp v balíku R osmar


Niekedy, keď chcem previesť podmnožinu spôsobov zo súboru osm načítaného balíkom osmar, narazím na chybu sťažujúcu sa na duplicitné názvy riadkov. Nasledujúci kód spustený v tomto súbore v prílohe vyvolá túto chybu:

Chyba v riadku.names <-. Data.frame „row.names“: „123074181“, „154043350“, „171826984“, „176273732“, „196520271“, „202157002“, „24240315“, „24913519“, „284493291“, „304517627“, „35556702“, „38210407“, „4399491“, „4840974“, „4840977“, „60333308“, „61583424“, „67627350“, „67627353“, „68711084“, „72157174“

Toto je kód:

osm_data <- get_osm (complete_file (), source = osmsource_file ('extract.osm')) hw_ids <- find (osm_data, way (tags (k == "highway"))) hw_ids <- find_down (osm_data, way (hw_ids) )) spôsoby <- podmnožina (osm_data, ids = hw_ids) spôsoby <- ako_sp (cesty, "riadky")

Predpokladám, že je to kvôli objektom SpatialLines s rovnakým osm_id? Ako sa vyhnem tomuto problému?


Nie ste si istí, čo hľadáte, ale tu je začiatok tohto riešenia (na základe tejto odpovede):

knižnica (osmar) osm_data <- get_osm (complete_file (), source = osmsource_file ('extract.osm')) hw_ids <- find (osm_data, way (tags (k == "highway"))) hw_ids <- find_down (osm_data , way (hw_ids)) spôsoby <- podmnožina (osm_data, ids = hw_ids) way_ids <- jedinečné (spôsoby $ spôsoby $ refs $ id) way_lns <- vektor ("zoznam", dĺžka (way_ids)) pre (i v 1: dĺžka (way_lns)) {way_lns [[i]] <- riadky (osmar ::: way_nodes2Line (way_ids [i], spôsoby $ spôsoby, spôsoby $ uzly), way_ids [i])} way_lns <- osmar ::: remove_emptyLines (way_lns) splns <- SpatialLines (way_lns, proj4string = osm_crs ()) dat <- cbind (spôsoby $ spôsoby $ attrs, typ = as.factor ("cesta")) daf <- data.frame (id = jedinečný (dat $ id)) názvy riadkov (daf) <- daf $ id # bývali dáta $ id ret <- SpatialLinesDataFrame (splns, daf)> trieda (ret) [1] "SpatialLinesDataFrame" attr (, "balíček") [1] zápletka „sp“ (ret)


Najjednoduchší spôsob, ktorý som našiel, bolo urobiť niečo v duchu:

To môže mať nejaké problémy s behom, ak existuje veľké množstvo možností, ale pre nás to stačí.

Tento kód bude fungovať aj s viacnásobným výberom

Potom môžete transformovať nasledujúce pole

Viaceré chyby výberu, ako napríklad nasledujúce:

Bude opravené jediným hovorom:

Používanie tohto prístupu je tiež najrýchlejším spôsobom. Napísal som fast_multiselect ako analogickú funkciu k multiselect_set_selections. Pri teste so 4 volaniami multiselect_set_selections na zoznamoch po asi 20 položkách je priemerná doba chodu 16 992 sekúnd, pričom fast_multiselect je iba 10 441 sekúnd. Aj ten druhý je oveľa menej komplikovaný.


Používate premennú tabuľky, tj. Mali by ste tabuľku deklarovať. Toto nie je dočasná tabuľka.

Vytvoríte dočasnú tabuľku takto:

Deklarujete premennú tabuľky takto:

Všimnite si, že dočasná tabuľka je deklarovaná pomocou # a premenná tabuľky je deklarovaná pomocou @. Čítajte ďalej o rozdieloch medzi premennými tabuľky a dočasnými tabuľkami.

Na základe vášho komentára nižšie sa skutočne pokúšate vytvoriť tabuľky v uloženej procedúre. Na to by ste potrebovali použiť dynamický SQL. V zásade dynamický SQL vám umožňuje vytvoriť príkaz SQL vo forme reťazca a potom ho vykonať. Toto je IBA spôsob, ako budete môcť vytvoriť tabuľku v uloženej procedúre. Ukážem vám ako a potom prediskutujem, prečo to nie je vo všeobecnosti dobrý nápad.

Teraz pre jednoduchý príklad (tento kód som netestoval, ale mal by vám poskytnúť dobré informácie o tom, ako na to):

Túto uloženú procedúru je možné vykonať takto:

sproc_BuildTable 'Zákazníci', 'CustomerName', 'VARCHAR (32)', 'NOT NULL'

S týmto typom uloženej procedúry sú veľké problémy.

Bude ťažké uspokojiť zložité stoly. Predstavte si nasledujúcu štruktúru tabuľky:

Táto tabuľka je o niečo zložitejšia ako v prvom príklade, ale nie veľmi. Uložená procedúra bude oveľa, oveľa zložitejšia. Aj keď by tento prístup mohol fungovať pre malé stoly, bude rýchlo nezvládnuteľný.

Vytváranie tabuliek vyžaduje plánovanie. Keď vytvárate tabuľky, mali by byť strategicky umiestnené v rôznych súborových skupinách. To zaisťuje, že nespôsobíte konflikt I / O disku. Ako budete riešiť škálovateľnosť, ak je všetko vytvorené v primárnej skupine súborov?

Mohli by ste objasniť, prečo je potrebné vytvárať tabuľky dynamicky?

Oneskorená aktualizácia z dôvodu pracovného vyťaženia. Čítal som váš komentár o tom, že je potrebné vytvoriť tabuľku pre každý obchod, a myslím si, že by ste sa na to mali pozrieť ako na príklade, ktorý vám teraz poskytnem.

V tomto príklade uvádzam nasledujúce predpoklady:

  1. Je to stránka elektronického obchodu, ktorá má veľa obchodov
  2. V obchode môže byť veľa tovaru (tovaru) na predaj.
  3. Konkrétna položka (dobrá) sa dá predať v mnohých obchodoch
  4. Obchod bude účtovať rôzne ceny za rôzne položky (tovar)
  5. Všetky ceny sú uvedené v $ (USD)

Povedzme, že tento web s elektronickým obchodom predáva herné konzoly (t. J. Wii, PS3, XBOX360).

Pri pohľade na moje predpoklady vidím klasický vzťah medzi mnohými. V obchode je možné predať veľa predmetov (tovar) a predmety (tovar) je možné predať v mnohých obchodoch. Rozdeľme to na tabuľky.

Najskôr by som potreboval obchodný stôl na uloženie všetkých informácií o obchode.

Jednoduchý stolík v obchode môže vyzerať takto:

Vložme do databázy tri obchody, ktoré použijeme v našom príklade. Nasledujúci kód vloží tri obchody:

Ak vykonáte SELECT * FROM Shop, pravdepodobne uvidíte nasledujúce:

Správne, tak poďme teraz na tabuľku Položky (tovar). Pretože položky / tovar sú výrobkami rôznych spoločností, budem nazývať tabuľkový produkt. Nasledujúci kód môžete vytvoriť a vytvoriť jednoduchú tabuľku produktov.

Vyplníme tabuľku produktov niektorými produktmi. Ak chcete vložiť niektoré výrobky, vykonajte nasledujúci kód:

Ak vykonáte SELECT * FROM Product, pravdepodobne uvidíte nasledujúce:

Dobre, v tomto okamihu máte informácie o produkte aj obchode. Ako ich teda spojiť? Dobre vieme, že obchod môžeme identifikovať podľa stĺpca primárneho kľúča ShopID a vieme, že produkt môžeme identifikovať podľa stĺpca primárneho kľúča ProductID. Pretože každý obchod má rozdielnu cenu každého produktu, musíme tiež uložiť cenu, ktorú si produkt za produkt účtuje.

Máme teda tabuľku, ktorá Shop mapuje k produktu. Túto tabuľku budeme nazývať ShopProduct. Jednoduchá verzia tejto tabuľky môže vyzerať takto:

Predpokladajme teda, že obchod American Games R Us predáva iba americké konzoly, program Europe Gaming Experience predáva všetky konzoly a Asian Games Emporium iba ázijské konzoly. Potrebovali by sme namapovať primárne kľúče z tabuliek obchodu a produktov do tabuľky ShopProduct.

Takto mapovanie urobíme. V mojom príklade má American Games R Us hodnotu ShopID 1 (toto je hodnota primárneho kľúča) a vidím, že XBOX360 má hodnotu 3 a obchod uviedol XBOX360 za 159,99 dolárov

Vykonaním nasledujúceho kódu by ste dokončili mapovanie:

Teraz chceme pridať všetky produkty do obchodu Europe Gaming Experience. V tomto príklade vieme, že obchod Europe Gaming Experience má ShopID 3 a keďže predáva všetky konzoly, budeme musieť vložiť ProductID 1, 2 a 3 do mapovacej tabuľky. Predpokladajme, že ceny konzol (produktov) v obchode Europe Gaming Experience sú nasledovné: 1 - PS3 sa predáva za 259,99 dolárov, 2 - Wii sa predáva za 159,99 dolárov, 3 - XBOX360 sa predáva za 199,99 dolárov.

Na dokončenie tohto mapovania budete musieť vykonať nasledujúci kód:

V tomto okamihu ste do mapovacej tabuľky namapovali dva obchody a ich produkty. Dobre, tak ako to môžem spojiť, aby som zobrazil používateľovi, ktorý prezerá webovú stránku? Povedzme, že chcete používateľovi zobraziť všetok produkt European Gaming Experience na webovej stránke - budete musieť vykonať nasledujúci dotaz:

Pravdepodobne uvidíte nasledujúce výsledky:

Ako posledný príklad predpokladajme, že váš web obsahuje funkciu, ktorá nájde najlacnejšiu cenu pre konzolu. Užívateľ žiada o vyhľadanie najlacnejších cien pre XBOX360.

Môžete vykonať nasledujúci dotaz:

Tento dopyt vráti zoznam všetkých obchodov, ktoré predávajú XBOX360 s najlacnejším obchodom a podobne.

Všimnete si, že som nepridal obchod s ázijskými hrami. Ako cvičenie pridajte ázijský obchod s hrami do mapovacej tabuľky s nasledujúcimi produktmi: Asian Games Emporium predáva hernú konzolu Wii za 99,99 dolárov a konzolu PS3 za 159,99 dolárov. Ak sa dopracujete k tomuto príkladu, mali by ste teraz pochopiť, ako modelovať vzťah mnohých ľudí.


Hadley Wickham, autor dplyr vysvetľuje:

  • Nikdy neťahá dáta do R, pokiaľ o to výslovne nepožiadate.
  • Oneskoruje vykonávanie akejkoľvek práce až do poslednej možnej chvíle - zhromažďuje dohromady všetko, čo chcete, a potom ich v jednom kroku odošle do databázy.

Keď zostrojíte a dplyr dotaz, môžete spojiť viac slovies do jedného potrubia. Napríklad sme spojili filter () a vybrali () slovesá pomocou potrubia% & gt%.

Keby sme chceli, mohli by sme pridať ešte viac krokov, napr. v ďalšom vybranom hovore odstráňte stĺpec pohlavie:

Rovnako ako prvé volanie select (species_id, sex, weight), ani príkaz select (-sex) nevykoná R. Namiesto toho sa odošle do databázy. Len Konečný Výsledok sa načíta a zobrazí sa vám.

Samozrejme, vždy sme mohli pridať ďalšie kroky, napríklad sme mohli filtrovať podľa species_id alebo minimálnej hmotnosti. Preto R nenačíta celú sadu výsledkov - namiesto toho predvolene načíta iba prvých 10 výsledkov z databázy. (Koniec koncov, možno budete chcieť pridať ďalší krok a získať databázu, aby mohla robiť viac práce ...)

Inštruovať R, aby prestal byť lenivý, napr. na získanie všetkých výsledkov dotazu z databázy pridáme do našej rúry príkaz collect (). Znamená to, že náš databázový dopyt je hotový: čas na získanie súboru Konečný výsledky a načítať ich do relácie R.

Teraz máme všetkých 17 riadkov, ktoré zodpovedajú nášmu dotazu v dátovom rámci a môžeme s nimi naďalej pracovať výlučne v R bez komunikácie s databázou.


7 odpovedí 7

Toto je problém už dlho, nahrávanie viacerých súborov má rovnaký problém, pretože pri nahrávaní viacerých súborov naraz nemôžete použiť metadáta na položky. Úlohou tohto postupu je vytvoriť požadované polia metadát. Toto prinúti súbory zostať rezervované pre uploader, kým sa nevyplnia požadované polia a nezačlení sa do nich.

Možno by ste mohli použiť používateľské rozhranie jQuery na pripojenie sa k udalosti poklesu a potom sa pozrieť na stránku, aby ste získali správne ID, a potom pomocou aktualizácií webových služieb vykonať hromadnú aktualizáciu súborov metadát. V divočine som nevidel žiadne príklady, ale teoreticky to znie ako uskutočniteľné.

Pri hľadaní som na to narazil a domyslel som si, že pridám svoje myšlienky. Tiež som hľadal spôsob, ako tento problém vyriešiť.

Súbor DragDrop.js v rozloženiach má funkciu nazvanú UploadProgressFunc, ktorá je v podstate iba príkazom switch. Nahráva sa jedna z možností tohto prepínača. To je funkcia, na ktorú sa môžete opýtať, ak to potrebujete vyriešiť inak.

Vytvoril som samostatný súbor js s názvom DragDrop.Extended.js, ktorý má kópiu funkcie UploadProgressFunc, ktorá po nastavení messageType na prípad 4 jednoducho zavolá novú funkciu.

Toto je použitie správania Javascriptov pri prepísaní existujúcich funkcií novou pri načítaní duplikátu. To znamená, že nemusím upravovať žiadne súbory OOTB. Tento úryvok js môžem jednoducho spustiť na svojej hlavnej stránke.

Teraz, keď je na hlavnej stránke, beží navždy. Dúfam, že sa nakoniec dočkám lepšej opravy. Kód kontroluje, či sa súbor dragdrop.js načítal, a zisťuje, či je funkcia nedefinovaná. Ak sa načítal, načíta sa aj v mojom súbore, aby túto funkciu prepísal.

Nová funkcia, ktorá sa v súčasnosti používa, spracováva iba 1 súbor súčasne, pracujem na tom, aby bol v súčasnosti spracovaný s viacerými súbormi. Nová volaná funkcia využíva JSOM na získanie informácií o nahranom súbore. Potom vytvorí hovor na zoznam, aby získal ID nahraného súboru. To je potrebné, pretože počas prenosu sa toto ID nikdy nedostane do kontextu.

S ID a podrobnosťami dostupnými v kontexte dokážem pre túto položku zostrojiť adresu URL EditForm. Potom iba odovzdám túto adresu URL EditForm do dialógového okna SP.

Keď je toto všetko na mieste, po tom, čo používateľ presunie položku do knižnice dokumentov, zobrazí sa dialógové okno, ktoré ho pridá do metadát. Je to zatiaľ východiskový bod. Momentálne hľadám prácu na viacerých súboroch a hľadám elegantnejšie riešenie pre načítanie funkčného skriptu prepisovania.

Na získanie ID nahraných súborov som použil JSOM a dopytoval sa na knižnicu dokumentov pomocou CAML dotazu. Názov knižnice môžete získať z kontextu a používateľského mena aktuálnych používateľov. S týmito podrobnosťami iba hľadám súbory nahrané používateľom za posledných pár minút. Potom som vytvoril pole JS editovacích adries URL.

Potom som načítal vlastné tlačidlá do modálu pomocou JavaScriptu, cyklicky prechádzali dozadu a dopredu cez množstvo adries URL na úpravy zostavených z výsledkov dotazu. Funkciu odoslania som musel prepísať príliš, inak som po uložení jednu zavrel okno. Po každom uložení som z poľa odstránil editačné URL.

Na tomto projekte už nepracujem, takže sa ospravedlňujem za nedostatok vzorky kódu v editácii.


Správy typu server medzi klientom ^ Hore

Správa s rýchlymi hodinami

Príkaz „PFT“ sa používa na synchronizáciu rýchleho času. Posiela sa zo servera, keď sa zmení čas alebo rýchlosť, s uvedením času „teraz“ a aktuálneho časového pomeru (alebo 0, keď sú hodiny zastavené). Príklady zahŕňajú:

Prvé číslo je celé číslo sekundy od 12:00 polnoci, 1. januára 1970, rýchleho času. Tento nulový dátum je veľmi blízky časovej epoche Unixu, ktorá je o 12.00 h polnoci 1. januára 1970 UTC, líši sa iba posunom časového pásma, ak je to možné. Toto v skutočnosti uľahčuje prevod tejto hodnoty pomocou štandardných časových knižníc, pokiaľ sú vynechané akékoľvek prevody časového pásma. JMRI odošle hodnotu na základe systémového dátumu, keď boli spustené rýchle hodiny, takže vráti hodnotu blízku kalendárnemu dátumu. Pretože rýchle hodiny JMRI skutočne nepodporujú dátumy kalendára, sú užitočné iba hodiny, minúty a sekundy. Digitrax LNWI vracia hodnoty v rozmedzí 0-86400, čo znamená časy k 1. januáru 1970, keď sa počíta deň, mesiac a rok.
Uveďme príklad: Inštancia JMRI spustená 13. decembra 2020 s rýchlym časom hodín nastaveným na 10:23:45 hod. Vráti 1607855025, ktorú je možné previesť späť na hodiny, minúty a sekundy „modulovým vydelením“ číslom 86400 ( počet sekúnd za deň) a ďalej sa počíta takto:
1607855025 mod 86400 = 37425 sekúnd od polnoci.
37425 sekúnd od polnoci = 10 hodín 1425 sekúnd od polnoci = 10 hodín 23 minút 45 sekúnd od polnoci = 10:23:45 hod.
Druhým číslom je aktuálny rýchly časový pomer. Môže to byť celočíselná hodnota (4) alebo hodnota s pohyblivou rádovou čiarkou (4,0). Ak je táto hodnota 0 (alebo 0,0), hodiny sa zastavia.
Aktualizácie sa zasielajú pri každej zmene času alebo rýchlosti. Keď sa hodiny zastavia alebo spustia, počítajte s každou správou každú rýchlu hodinu.

Výstražná a informačná správa

Server môže odoslať reťazec správy, ktorý môže klient zobraziť. Nemôžu mať v správe nové riadky. Dva typy:
Výstražná správa: „HM“ + text správy. Normálne sa používa na vrátenie chýb, ktoré sa majú zobraziť používateľovi.
Informačná správa: „Hm“ + text správy. Rovnaké ako HM, ale iba informačné.

Príklad vrátený po tom, čo klient požaduje neplatnú adresu (napríklad M0 + L23 & lt & gtL23), odpoveď je:

Správa o type servera

Server môže poslať klientovi „typ“, aby sa identifikoval, čo je užitočné na umožnenie konkrétneho správania. Dva typy:
Typ „HT“ +. Známe typy: 'Digitrax', 'MRC', 'JMRI'
„Ht“ + popis. Dlhší informačný textový reťazec, nemôže obsahovať nové riadky


2 odpovede 2

Pravdepodobne chcete vidieť jeden záznam pre každú kombináciu jedinečná osoba / adresa / e-mail / webová stránka. Ak je to tak, vyskúšajte toto:

Klauzula GROUP BY na konci zaisťuje, že sa vráti iba jeden riadok pre každú jedinečnú kombináciu stĺpcov v klauzule GROUP BY. Toto by malo zabrániť tomu, aby sa vo výsledkoch zobrazili duplicitné riadky.

Je potrebné poznamenať niekoľko vecí:

V klauzule FROM vždy používajte kvalifikátor schémy. FROM Person by should be FROM dbo.Person -> to eliminuje akékoľvek nejasnosti, ak v budúcnosti zavediete nové schémy, a zabráni optimalizátoru dotazov v hľadaní predvolenej schémy pre vášho používateľa.

Kvôli zachovateľnosti v budúcnosti budete pravdepodobne chcieť pomenovať stĺpce rovnako bez ohľadu na to, v ktorej tabuľke sa nachádzajú. Takže napríklad namiesto stĺpca ID v tabuľke Ľudia s názvom ID a s názvom Osoba v tabuľke Adresa, Pomenujem to PersonID v oboje stoly. Toto zabráni zámene (čítanie chýb) v spojeniach, ako je dbo.Person LEFT JOIN dbo.Address ON Person.ID = Address.Person.

Namiesto pomenovania tabuliek ako Osoba by mali byť pomenované podľa zbierky položiek, ktoré obsahujú, v množnom čísle. Osoba sa teda stáva ľuďmi a adresa sa stane adresou. To eliminuje zmätok -> obsahuje tabuľka adries v skutočnosti jednu adresu alebo viac adries?

WITH (NOLOCK) by sa malo vyhnúť ako moru, pokiaľ nie je úplne pochopené dôsledky čítania riadkov, ktoré boli zmenené inými transakciami, ale ešte neboli spáchané. Z MSDN:

Transakcie prebiehajúce na úrovni READ UNCOMMITTED nevydávajú zdieľané zámky, aby zabránili iným transakciám upravovať údaje načítané aktuálnou transakciou. Transakcie PREČÍTAJTE NEKOMITOVANÉ taktiež neblokujú výlučné zámky, ktoré by bránili aktuálnej transakcii čítať riadky, ktoré boli zmenené, ale neboli spáchané inými transakciami. Keď je nastavená táto možnosť, je možné čítať nepotvrdené úpravy, ktoré sa nazývajú špinavé čítania. Hodnoty v dátach je možné meniť a v súbore údajov sa môžu pred koncom transakcie zobraziť alebo zmiznúť riadky. Táto možnosť má rovnaký efekt ako nastavenie NOLOCK na všetkých tabuľkách vo všetkých príkazoch SELECT v transakcii. Toto je najmenej obmedzujúce izolačné úrovne.

Na serveri SQL Server môžete tiež minimalizovať tvrdenie o uzamknutí a zároveň chrániť transakcie pred špinavými čítaniami nepovolených úprav údajov pomocou jedného z týchto spôsobov:

Úroveň izolácie READ COMMITTED s voľbou databázy READ_COMMITTED_SNAPSHOT nastavenou na ON.

Úroveň izolácie SNAPSHOT.


Keďže sa spomínajú odpovede na ďalšie otázky (z ktorých sa táto považuje za duplikát), existuje (od verzie 9.5) natívna funkcia UPSERT. Pre staršie verzie čítajte ďalej :)

Nastavil som test na kontrolu možností. Nižšie uvediem kód, ktorý je možné spustiť v psql na linuxovom / unixovom boxe (jednoducho preto, aby som kvôli jasnosti výsledkov poslal výstup príkazov na nastavenie do / dev / null - na Windows box jeden by si mohol zvoliť log súbor).

Snažil som sa dosiahnuť porovnateľné rôzne výsledky pomocou viac ako jedného (tj. 100) INSERT podľa typu, spusteného zo slučky vo vnútri uloženej procedúry plpgsql. Pred každým spustením sa navyše tabuľka vynuluje skrátením a opätovným vložením pôvodných údajov.

Po kontrole niekoľkých testovacích behov to vyzerá tak, že použitie pravidla a výslovné pridanie výrazu INSERT WHERE NOT EXISTS trávi podobný čas, kým dokončenie výnimky trvá podstatne dlhšie.

Tip: Blok obsahujúci klauzulu EXCEPTION je na vstup a výstup podstatne nákladnejší ako blok bez neho. Preto nepoužívajte VÝNIMKU bez potreby.

Osobne kvôli čitateľnosti a udržiavateľnosti radšej pridám bit WHERE NOT EXISTS k samotným INSERT s. Rovnako ako v prípade spúšťačov (ktoré by sa dali otestovať aj tu) je ladenie (alebo jednoduché sledovanie správania INSERT) pri súčasných pravidlách komplikovanejšie.

A kód, ktorý som použil (môžete poukázať na mylné predstavy alebo iné problémy):


Obsah

Systémy identifikácie mediálnych aktív existujú už celé desaťročia. Spoločnou motiváciou pre ich vytvorenie je umožniť správu mediálnych aktív prostredníctvom priradenia jedinečného ID k množine metadát predstavujúcich hlavné charakteristiky každého majetku. Postupom času sa takéto systémy zväčšujú a každý z nich má za následok riešenie konkrétneho súboru problémov. Vo výsledku existujú značné rozdiely medzi systémami, pokiaľ ide o kategorizáciu aktív, metaúdaje, ktoré sú ku každému majetku priradené, a samotnou definíciou majetku. Aby sme vymenovali niekoľko príkladov, mal by sa „režisérsky strih“ filmu líšiť od pôvodného uvedenia v kinách? Ako by sa mali zohľadniť regionálne rozdiely (napr. Preklad názvu alebo dialóg do cudzích jazykov)? Medzi ďalšie komplikácie patria postupy (a požadované poverenia) na pridávanie nových aktív, úpravy existujúcich aktív a vytváranie derivátových aktív.

EIDR bola vytvorená na riešenie týchto problémov, ako aj ďalších, s ktorými sa stretávajú v pracovných tokoch videopríležitostí, a to v kontexte medzi podnikmi, ako aj v rámci intramurálnych postprodukčných aktivít producentov obsahu. EIDR má tieto vlastnosti:

  • Centrálny register prístupný všetkým účastníkom
  • Schopnosť ľahko zaregistrovať nový majetok
  • ID majetku, ktorý je nemenný (a to najmä pokiaľ ide o zmeny vlastníctva majetku alebo umiestnenia metadát alebo samotného majetku)
  • Zistenie / prevencia vytvárania duplikátov rovnakého majetku
  • Schopnosť vytvoriť súbor videosúborov odvodených z abstraktného diela (napr. Pôvodné divadelné vydanie, režisérsky strih, jazykové varianty)
  • Schopnosť zoskupiť videopodklady podľa všeobecnejších vzťahov (napr. Epizódy televízneho seriálu)
  • Základná sada metadát na odlíšenie aktív, aj keď spolu úzko súvisia
  • Škálovateľná, nemenná, vytrvalá

Cieľom EIDR je doplniť, nie nahradiť, existujúce systémy identifikácie aktív. Naopak, kľúčovou vlastnosťou je umožniť záznamu EIDR zahrnúť odkazy na ID tohto majetku v iných systémoch. Táto vlastnosť je obzvlášť užitočná pre filmové a televízne archívy, vďaka čomu môžu ľahko porovnať svoje fondy s inými zdrojmi diela a metaúdajmi o ňom. Podľa návrhu EIDR nereplikuje funkcie iných systémov ID aktív, napr. komerčné systémy, ktoré sa snažia pridať hodnotu prostredníctvom vylepšených metadát (napr. súhrny zápletiek, podrobnosti o produkcii). Nie je tiež cieľom sledovať informácie o vlastníctve a právach, ktoré je však možné implementovať ako aplikácie, ktoré používajú identifikátor EIDR.

EIDR je postavený na zbierke záznamov (ktoré sa ďalej členia na polia), ktoré sú uložené v centrálnom registri. Na tieto záznamy externe odkazujú DOI, ktoré sú priradené pri vytvorení záznamu a každý identifikátor je potom nemenný. Systém rozlíšenia identifikátorov, ktorý je základom DOI, je Handle System, takže každý natívny identifikátor EIDR Content ID je popisovač naformátovaný, aby sa zvýšila špecifickosť, aby spracovával štandardy DOI a EIDR.

Formát ID obsahu Upraviť

Kanonická forma ID obsahu EIDR je inštanciou popisovača a má formát:

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

  • 10.5240 je predpona DOI pre dielo EIDR. „10“ označuje, že popisovač je DOI, ďalšie predpony sú priradené iným typom aktív (napr. Akademické publikácie). Číslice medzi znakom „.“ a „/“ tvoria sub-predponu, ktorá označuje, ktorá registračná agentúra v rámci Medzinárodnej nadácie DOI (IDF) má práva na správu týchto spracovaní. „5240“ je priradený k združeniu EIDR.
  • XXXX-XXXX-XXXX-XXXX-XXXX-C je prípona DOI. Každé „X“ označuje hexadecimálnu číslicu (A-F) a „C“ je kontrolná číslica podľa normy ISO 7064 Mod 37,36 [1].

K dispozícii je tiež 96-bitová kompaktná binárna forma, ktorá je určená na vkladanie do malých užitočných zaťažení, napríklad vodoznakov. Tento formulár je generovaný z kanonického formátu nasledovne:

  • 16-bitová sub-predpona: generovaná interpretáciou sub-predpony ako binárnej hodnoty, napr. B'0001010001111000 '
  • 80-bitová prípona: časť prípony bez kontrolného súčtu, predstavovaná ako 10 bajtov

Formulár Uniform Resource Name pre EIDR ID je uvedený v RFC 7302.

Na použitie na webe možno ID obsahu EIDR predstavovať ako URI v jednej z týchto foriem:

  • https://doi.org/10.5240/XXXX-XXXX-XXXX-XXXX-XXXX-C: toto je ID EIDR predstavované ako referencia proxy DOI (bude presmerovaná z DOI do registra EIDR)
  • informácie: doi: 10.5240 / XXXX-XXXX-XXXX-XXXX-XXXX-C [zastarané]: toto je ID EIDR predstavované ako „informačný“ identifikátor URI vyhovujúci RFC 4452 (nezabúdajte, že všetky identifikátory EIDR sú tiež ID DOI, ale nie naopak).

Typy záznamov Upraviť

Existujú štyri typy záznamov obsahu, z ktorých každý je spojený s vyhradenou predponou:

  • Content ID (10.5240 / XXXX-XXXX-XXXX-XXXX-XXXX-C): je spojená so zábavným dielom, napríklad filmom alebo televíznym seriálom. Záznamy obsahu sú hierarchické a umožňujú vyjadrovať vzťahy, napríklad Seriály, ktorých deťmi by boli Ročné obdobia, ktorých potomkami by boli jednotlivé epizódy. Mnoho ďalších vzťahov je podporovaných, ako je opísané nižšie. Záznamy o obsahu tvoria väčšinu údajov v registri EIDR.
  • ID strany (10.5237 / XXXX-XXXX): identifikuje subjekty, ako sú registrujúci, producenti obsahu a distribútori.
  • ID videoslužby (10.5239 / XXXX-XXXX): Identifikuje videoslužbu, hovorovo označovanú ako „kanál“ alebo „sieť“: (zvyčajne) lineárna sekvencia obsahu naplánovaného na vysielanie v určených časoch (napr. ID služby pre Cartoon Network je 10,5239 / 8BE5-E3F6). Video služby sú hierarchické: napríklad rodič môže mať niekoľko detí, aby zohľadnil regionálne alebo jazykové rozdiely).
  • ID používateľa (10.5238 / [0-9a-zA-Z _. # ()] <2-32>): Identifikuje používateľa pomocou reťazca 2–32 alfanumerických a vybraných špeciálnych znakov (tu ilustrovaných syntaxou Perl). Užívateľ je predovšetkým administratívny koncept, ktorý je podriadený Stranám (od ktorých dedia prístupové práva). Na rozdiel od iných DOI EIDR možno ID používateľa použiť iba v rámci EIDR (napr. Programovacie rozhrania API).

Všetky predpony 5237, 5238, 5239 a 5240 sú priradené k asociácii EIDR.

Úpravy záznamov o obsahu

Záznamy obsahu sú objekty kategorizované podľa typov a vzťahov. Každý z nich má tri rôzne (ortogonálne) druhy písma:

  • Typ objektu: je ich spolu 10. Prvý je základný typ, ktorý obsahuje minimálne polia potrebné na popis záznamu obsahu. Ďalších 9 je odvodených od základného typu a obsahujú ďalšie polia na popis zložitejších objektov.
  • Štrukturálny typ: rozlišujú reprezentácie diela a sú zoradené podľa stúpajúcej špecifickosti:
    • Abstrakcia: Používa sa na objekty, ktoré nemajú realitu, ako napríklad radový kontajner alebo najzákladnejšia koncepcia pôvodného diela. To zodpovedá Medzinárodnému štandardnému kódexu hudobných diel (ISWC) pre hudobné diela, Medzinárodnému štandardnému textovému kódexu (ISTC) pre textové diela alebo Medzinárodnému štandardnému audiovizuálnemu číslu (ISAN) pre audiovizuálne diela.
    • Výkon: Používa sa na položky, ktoré sú konkrétnymi verziami diela, ako napríklad pôvodné uvedenie do kina alebo režisérsky zostrih filmu alebo lokálne cenzurovaná verzia televíznej šou. To zhruba zodpovedá Medzinárodnému štandardnému zákonu o nahrávaní (ISRC) pre hudobné diela a niektorým použitiam verzie ISAN (V-ISAN) pre audiovizuálne diela.
    • Digitálne: Konkrétne digitálne znázornenie diela, napríklad kódovanie MPEG-2 filmu. To zodpovedá niektorým použitiam V-ISAN.
    • Séria: Abstrakcia, ktorá obsahuje objednané alebo neusporiadané jednotlivé položky.
    • Sezóna: Druhá úroveň zoskupenia pod sériou, obvykle pokrývajúca časový interval
    • TV: Obsah, ktorý sa prvýkrát objavil vo vysielaní.
    • Film: Dlhodobý obsah, ktorý sa prvýkrát objavil v kine alebo divadle.
    • Krátky: Voľne definované na pokrytie diela, ktoré je kratšie ako 40 minút, napríklad hudobné videá, divadelné týždenníky alebo divadelné filmy alebo šortky DTV.
    • Web: Obsah, ktorý sa prvýkrát objavil na webe. Líši sa to od obsahu inde, ktorý bol sprístupnený na webe.
    • Interaktívny materiál: Obsah, ktorý nie je striktne audiovizuálny. Zahŕňa DVD ponuky, interaktívne TV prekrytia, prispôsobené prehrávače atď.
    • Kompilácia: Obsah zložený z viacerých ďalších prvkov, ktoré nie je možné presnejšie opísať, ako je napríklad krabica filmovej franšízy.
    • Doplnkové: Tento typ je pre sekundárny obsah, ktorého primárnym účelom je podpora, rozšírenie alebo propagácia iného obsahu. Príklady zahŕňajú upútavky, outtakes a propagačné dokumenty („výroba“ kusov).

    Základné úpravy metadát

    Nasledujúce polia (prevzaté z väčšej množiny) obsahujú základné údaje o objekte záznamu obsahu:

    • Štrukturálny typ: napr. Abstrakcia
    • Režim: napr. AudioVisual (pre film alebo televízny program) „Audio“ pre rozhlasový program „Visual“ pre tichú prácu.
    • Typ referenta: napr. Film
    • Názov: hlavný názov. Tituly a alternatívne tituly sa ďalej rozlišujú podľa:
      • Lang: jazyk názvu vyjadrený ako kód ISO 639-1
      • Trieda: vydanie alebo regionálne

      Vymazané záznamy obsahu Upraviť

      ID EIDR musí byť vždy rozlíšiteľné, takže za normálnych okolností bude zodpovedajúci Záznam obsahu trvalý. K dispozícii sú dva mechanizmy na riešenie chýb alebo iných neobvyklých okolností. Preferovaným je aliasing, kedy je ID EIDR transparentne presmerované na iný záznam obsahu. Aliasing sa bežne používa na nakladanie s majetkom, ktorý je zaregistrovaný dvakrát.

      Ďalším mechanizmom je použitie záznamov o náhrobkoch. Toto sa využije, keď je záznam obsahu poškodený alebo náhodou bolo zaregistrované inak neplatné dielo. V takom prípade bude ID priradené k špeciálnemu záznamu náhrobku. Náhrobok je podľa aplikácií rozpoznateľný, pretože jeho pole ID EIDR bude nastavené na rozlišujúcu hodnotu. “10.5240 / 0000-0000-0000-0000-0000-X". Upozorňujeme, že" X "znamená 24. písmeno latinskej abecedy (ASCII 0x58 alebo Unicode U + 0058).

      Alternatívne ID Upraviť

      Mať bohatú sadu alternatívnych ID pre obsah je jedným z hlavných cieľov EIDR. Toto umožňuje použitie identifikátorov EIDR všade v pracovných tokoch obsahu, ak je potrebné alternatívne ID, ktoré možno nájsť v metadátach pre identifikátor EIDR. EIDR podporuje zahrnutie proprietárnych aj iných štandardných (napr. ISAN) ID referencií. V prípade potreby je možné pridať ďalšie alternatívne ID (napr. Strany, ktoré chcú podporovať nové pracovné postupy). Nižšie je uvedený príklad alternatívnych ID pre majetok EIDR 10.5240 / EA73-79D7-1B2B-B378-3A73-M (film Blade Runner). Ak je alternatívne ID možné vyriešiť algoritmicky, napríklad jeho vhodným umiestnením do adresy URL šablóny, služba EIDR tento odkaz sprístupní.

      Alternatívne ID pre 10.5240 / EA73-79D7-1B2B-B378-3A73-M
      Alternatívne ID 0000-0000-14A9-0000-K-0000-0000-E
      Typ: JE
      Alternatívne ID # 2 89
      Typ: IVA
      Alternatívne ID # 3 B000SW4DLM
      Typ: Vlastnícke Doména: amazon.com
      Alternatívne ID č. 4 12886
      Typ: Vlastnícke Doména: flixster.com
      Alternatívne ID # 5 15042
      Typ: Vlastnícke Doména: thecinemasource.com
      Alternatívne ID # 6 tt0083658
      Typ: IMDB Vzťah: IsSameAs
      Alternatívne ID # 7 E0087486000
      Typ: Vlastnícke Doména: spe.sony.com/MPM
      Alternatívne ID # 8 3929
      Typ: Vlastnícke Doména: spe.sony.com/ProductID
      Alternatívne ID # 9 2002029
      Typ: Vlastnícke Doména: warnerbros.com/MPM
      Alternatívne ID # 10 389785
      Typ: Vlastnícke Doména veronicamagazine.nl
      Alternatívne ID # 11 B001EC2J1G
      Typ: Vlastnícke Doména: amazon.com
      Alternatívne ID # 12 150002645
      Typ: Vlastnícke Doména: bfi.org.uk

      Alternatívne ID sú rozdelené na nechránené a chránené. 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 napr. 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:

          • index: 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.
          • data: 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.