Skriptujeme InDesign (28): Metadata poprvé - Grafika.cz - vše o počítačové grafice

Odběr fotomagazínu

Fotografický magazín "iZIN IDIF" každý týden ve Vašem e-mailu.
Co nového ve světě fotografie!

 

Zadejte Vaši e-mailovou adresu:

Kamarád fotí rád?

Přihlas ho k odběru fotomagazínu!

 

Zadejte e-mailovou adresu kamaráda:



Software

Skriptujeme InDesign (28): Metadata poprvé

Adobe InDesign sazba

23. října 2006, 00.00 | Metadata jsou v oblasti publikování mírně přehlíženým, ale přitom nesmírně silným prostředkem pro přenos
informací o dokumentech či automatizované zpracování. Skriptování v InDesignu dovoluje
jejich nasazení všestrannými způsoby, jak si podrobněji ukážeme v našem seriálu.

Metadata, čili data o datech, jsou stále významnějším prostředkem pro automatizované zpracování dokumentů a také přenos informací napříč jednotlivými aplikacemi a systémy. I v prostředí InDesignu mohou být takto velmi užitečná. K dispozici zde přitom jsou v podstatě dvěma způsoby: první nabízí podpora standardu XMP, druhý pak technologie tzv. labels neboli návěští, která je poskytována přímo v rámci skriptovacího enginu InDesignu. V našem seriálu se podíváme na oba způsoby podrobněji, dnes se budeme věnovat především základům práce s XMP metadaty, příští díl bude patřit praktickým aplikacím daného přístupu a práci s návěštími.

XMP a InDesign

XMP je standard pro reprezentaci metadat, vyvinutý před časem společností Adobe. Je založen na jazyce XML a dovoluje s pomocí tzv. uživatelských schemat reprezentovat mimo vlastních i zavedené metadatové struktury, mimo jiné informace v EXIF (informace spojené s digitální fotografií ) či IPTC (informace popisující poslání souboru, typicky zase především fotografie, používá se zejména v novinovém průmyslu a stále více i v digitální fotografii všeobecně). Velkou výhodou XMP metadat je skutečnost, že mohou být vložena přímo do daného souboru a lze je tedy využívat v různých aplikacích, které v průběhu workflow soubor zpracovávají. Na danou skutečnost dnes myslí Adobe zejména v Creative Suite, kde poskytuje jak odpovídající mechanizmy pro vkládání a zpracování metadat, tak i scénáře pro jejich praktické využití. XMP metadata pak lze využívat i v jiných publikačních aplikacích, a také třeba systémech správy obsahu apod.

V InDesignu se XMP metadata vyskytují na dvou úrovních: jednak na úrovni dokumentu, a jednak na úrovni vložených obrázků. V prvním případě lze k zobrazení, vyplňování či extrahování dokumentových metadat použít odpovídající dialog vyvolaný příkazem File-File Info/Soubor-Informace o souboru. Jeho základní podoba (tj. dodávaná přímo s instalací InDesignu) zde nabízí několik panelů pro využití obecných dokumentových metadat a dále metadat IPTC (jež jsou zde tedy takto použita k popisu poslání dokumentu, nikoli fotografií). Základní možnosti jsou pak rozšiřitelné s pomocí vlastních uživatelských panelů, jež umožní doplnit podporu prakticky libovolné metadatové struktury vlastní, což je z hlediska zbudování odpovídajícího workflow vlastnost vysoce žádoucí a přínosná.

Zobrazení a vkládání dokumentových metadat

Objektový model InDesignu poskytuje přístup ke metadatům dokumentu prostřednictvím objektu metadataPreferences. Základní vlastnosti daného objektu zde dovoluje přímo přistupovat k obsahu některých nejobvyklejších metadatových polí, podporovaných jinak i na bázi výše zmíněného dialogu (File Info) uživatelského rozhraní InDesignu, jak lze vidět z následujících příkladů. První ukazuje zobrazení některých needitovatelných údajů:

//Zobrazení data vytvoření a modifikace daného dokumentu,
//spolu s údaji o aplikaci jež vytvořila dokument a formátu dokumentu
//daná metadata nelze (poměrně pochopitelně) modifikovat
//způsob výpisu data lze různě ošetřit s pomocí metod objektu Date, jak lze vidět i v našem příkladu
var myDoc=app.activeDocument;
var myMP=myDoc.metadataPreferences;

alert("Dokument byl vytvořen "+myMP.creationDate.toLocaleString()
+" v aplikaci "+myMP.creator
+"\na naposledy změněn "+myMP.modificationDate.toLocaleString()
+"\njeho formát je "+myMP.format);

skriptmetadata1-1f.jpg

Další ukázka je věnována úpravám metadatových polí naznačeného typu:

//Ukázka vyplnění základních podporovaných metadatových polí
//Jak je vidět, slouží tato pole především k určení autora a copyrightu dokumentu
var myDoc=app.activeDocument;
var myMP=myDoc.metadataPreferences;

myMP.properties={author: "Richard Krejčí",
copyrightInfoURL: "www.grafika.cz", copyrightNotice: "Chráněno copyrightem", copyrightStatus: CopyrightStatus.yes,
description: "Ukázkový dokument", documentTitle: "Pokus", jobName: "JavaScripting InDesign",
keywords: ["ukázka", "InDesign", "JavaScript"]};

skriptmetadata1-2f.jpg

Výše přiblížené vlastnosti metadataPreferences jsou v podstatě všechny, jež dovolí přímo (tj. přes odpovídající vlastnost) přistupovat k metadatovým polím. Těch je ale již v základní dodávce InDesignu rozhodně více (viz třeba na výše uvedeném screenshotu pole Author Title), o uživatelských panelech pak nemluvě. Skriptovací engine nicméně naštěstí poskytuje přístup i k těmto datům, sice ne tak transparentně jak v případě výše zmíněných polí, na druhou stranu se zde jedná o metodu univerzální, která dovolí pracovat s každým XMP metadatovým kontejnerem vloženým do dokumentu.

Prostředkem ke čtení obsahu metadatových polí je takto metoda getProperty objektu metadataPreferences. Ta má obecný tvar

getProperty(namespace,path)

kde namespace je udání tzv. jmenného prostoru pro daný XMP dialekt - pro naše účely stačí vědět, že jde vlastně o webový odkaz, který zadáváme jako textový řetězec. Path je pak odkaz na určitý typ pole v dané namespace - pro naše účely zde opět stačí vědět, že se jedná opět o textový řetězec. Ukázka použití:

//Zjištění obsahu pole Author s pomocí getProperty
var myDoc=app.activeDocument;
var myMP=myDoc.metadataPreferences;

alert(myMP.getProperty("http://ns.adobe.com/photoshop/1.0/","Author"));

Samozřejmě je otázkou, jak vlastně zjistit hodnoty namespace a path. V případě že sami vytváříme příslušný uživatelský panel pro XMP metadata ji známe. Jinak ji každopádně můžeme vypátrat možná trošku pracnějšími, ale fungujícími postupy. Při prvním vyplníme v dialogu File Info pole, u kterých chceme zjistit jejich "adresu", nějakými snadno identifikovatelnými hodnotami, následně pak v témže dialogu propátráme panel Advanced, v některých hiererachiích odpovídajících namespaces použitým v dokumentu se budou ukrývat požadované informace. Ty si opíšeme a nadále je můžeme používat k adresování ve vlastních skriptech.

skriptmetadata1-3f.jpg

skriptmetadata1-4f.jpg

Trochu problémem při daném postupu je každopádně skutečnost, že údaje z jednoho panelu se mohou ukrývat ve více namespaces či naopak. V tomto i jiných případech je zde pak i druhý postup: provedeme opět vyplnění testovacími daty a uložíme vyplněný obsah panelu do šablony pro metadata (viz příkaz "Save Metadata Template" na daném panelu). Složku této šablony si pak otevřeme v souborovém systému (příkaz "Show Templates", pak otevřít složku "Metadata Templates"). Tím se dostaneme k souboru šablony, který pak otevřeme v libovolném textovém editoru, zde vyhledáme požadovanou hodnotu, jež je "obalena" tagy odkazujícími na příslušnou namespace a path.

skriptmetadata1-5f.jpg

Metadatová pole pak lze nejen číst, ale rovněž vyplňovat, a to s pomocí metody setProperty. Ta má obecný tvar

setProperty(namespace,path,value)

kde namespace a path má stejný význam jako u getProperty, value je pak hodnota, která se pak do daného metadatového pole vkládá. Ukázka vyplňování:

//Ukázka vyplnění hodnot na panelu Origin
var myDoc=app.activeDocument;
var myMP=myDoc.metadataPreferences;

myMP.setProperty("http://ns.adobe.com/photoshop/1.0/","DateCreated","2005-10-23");
myMP.setProperty("http://ns.adobe.com/photoshop/1.0/","City","Prague");
myMP.setProperty("http://ns.adobe.com/photoshop/1.0/","State","Czech");
myMP.setProperty("http://ns.adobe.com/photoshop/1.0/","Country","Czech republic");
myMP.setProperty("http://ns.adobe.com/photoshop/1.0/","Credit","Richard Krejčí");
myMP.setProperty("http://ns.adobe.com/photoshop/1.0/","Source","Internet");
myMP.setProperty("http://ns.adobe.com/photoshop/1.0/","Headline","Poznejte InDesign");
myMP.setProperty("http://ns.adobe.com/photoshop/1.0/","Instructions","Publikovat co nejdříve!");
myMP.setProperty("http://ns.adobe.com/photoshop/1.0/","Urgency","4");
myMP.setProperty("http://ns.adobe.com/photoshop/1.0/","TransmissionReference","");

skriptmetadata1-6f.jpg

Vyplňování metadat s pomocí šablon, jež je podporováno na bázi dialogu File Info, lze realizovat i s pomocí skriptů. Metoda save takto provede odpovídající uložení všech XMP polí daného dokumentu spolu s aktuálními hodnotami. Povinným parametrem této metody je soubor, do něhož se má uložení provést:

//Vytvoří metadatovou šablonu
var myDoc=app.activeDocument;
var myMP=myDoc.metadataPreferences;

myMP.save(File("/c/clanky/skriptid/pokus"));

Metoda replace pak slouží k načtení údajů z takovéhoto externího souboru a jejich vložení do určeného dokumentu. Její první, povinný parametr přitom určuje soubor z kterého se má načtení provést, druhý, volitelný parametr je pak logická hodnota, jež stanovuje, zda se mají všechny hodnoty brát jako externí (tj. pokud není obsah některého metadatového pole v externím souboru určen, nastaví se přesto v dokumentu odpovídající hodnota jako prázdná, i kdyby byla předtím vyplněna, není-li daný parametr uveden, bere se jako by měl hodnotu false).

//Aplikuje metadatovou šablonu
var myDoc=app.activeDocument;
var myMP=myDoc.metadataPreferences;

myMP.replace(File("/c/clanky/skriptid/pokus"));

Použít lze obdobně i metodu append. Ta má obdobné parametry, metadata nicméně nepřepisuje, ale připojuje.

Skriptování pak dovoluje dokonce přidávat vlastní metadatová pole s pomocí (ne právě do hloubky zdokumentované) metody createContainerItem. Obecný tvar dané metody je

createContainerItem(namespace,path,[index],[container])

kde povinné údaje namespace a path mají stejný význam jako v předchozích případech, volitelný index určuje případnou pozici vkládaného pole (výchozí umístnění je na konec dané kolekce) a volitelný container stanovuje případně typ daného pole (více viz referenční příručka, s. 884). Blíže viz následující příklad:

//Vytvoří nové metadatové pole "email" pro uložení jednoho či více e-mailů
var myDoc=app.activeDocument;
var myMP=myDoc.metadataPreferences;

myMP.createContainerItem("http://ns.adobe.com/xap/1.0/","email");
myMP.setProperty("http://ns.adobe.com/xap/1.0/","email[1]","");
myMP.setProperty("http://ns.adobe.com/xap/1.0/","email[2]","");

skriptmetadata1-7f.jpg

Sluší se pak zde poznamenat, že daným způsobem přidaná metadatová pole zůstanou skryta v dialogu File Info, výjimku tvoří panel Advanced. To se může občas hodit, častěji ale asi bude lepší skriptovat pouze s metadaty, jež jsou přístupná i přes odpovídající uživatelský panel.

XMP a linkované obrázky

Jak již bylo naznačeno výše, s XMP metadaty se lze setkat i v případě linkovaných obrázků: zde bývají metadata typicky vložena ve Photoshopu. K přístupu je použito vlastnosti linkXmp objektu link. Ta dovoluje pouze číst standardní metadatová pole, o kterých jsme hovořili v prvním a druhém příkladu tohoto článku. Více již v následujícím příkladu:

//Vypíše některá základní XMP metadata vybraného obrázku
var myImg=app.selection[0];

if(myImg.constructor.name=="Image"){
    try{
    alert("Obrázek byl vytvořen dne "+myImg.itemLink.linkXmp.creationDate.toLocaleDateString()
    +"\nv aplikaci "+myImg.itemLink.linkXmp.creator
    +"\njeho autorem je"+myImg.itemLink.linkXmp.author);
    }
    catch(e){alert("Obrázek pravděpodobně neobsahuje žádná metadata")}
    }
else{alert("Nevybrali jste obrázek nástrojem pro přímý výběr")}

Tématické zařazení:

 » Rubriky  » VSE  

 » Rubriky  » Go verze  

 » Rubriky  » Sazba  

 » Rubriky  » Polygrafie  

 » Rubriky  » Software  

Diskuse k článku

 

Vložit nový příspěvek   Sbalit příspěvky

 

Zatím nebyl uložen žádný příspěvek, buďte první.

 

 

Vložit nový příspěvek

Jméno:

Pohlaví:

,

E-mail:

Předmět:

Příspěvek:

 

Kontrola:

Do spodního pole opište z obrázku 5 znaků:

Kód pro ověření

 

 

 

 

 

Přihlášení k mému účtu

Uživatelské jméno:

Heslo: