Za´padoˇceska´ univerzita v Plzni Fakulta aplikovany´ch vˇed Katedra informatiky a vy´poˇcetn´ı techniky
Diplomov´ a pr´ ace Z´ısk´ an´ı a uchov´ an´ı metadat z heterogenn´ıch dat
Plzeˇ n 2015
Martin Kryl
Prohl´ aˇ sen´ı Prohlaˇsuji, ˇze jsem diplomovou pr´aci vypracoval samostatnˇe a v´ yhradnˇe s pouˇzit´ım citovan´ ych pramen˚ u. V Plzni dne 11. kvˇetna 2015 Martin Kryl
Abstrakt Pr´ace ˇreˇs´ı probl´em ˇcten´ı metadat z obrazov´ ych soubor˚ u a jejich z´apis do RDF modelu. Zamˇeˇril jsem se na soubory typu JPEG, PNG a TIFF. Ke ˇcten´ı metadat je vyuˇzita knihovna Metadata Extractor. Mapov´an´ı je definov´ano v ontologii. Je snaha o vyuˇzit´ı pojm˚ u z existuj´ıc´ıch RDF slovn´ık˚ u. Pro pˇr´ıpady, kdy nen´ı ˇza´dn´ y vhodn´ y pojem k dispozici, vytv´aˇr´ım vlastn´ı slovn´ık RDF vlastnost´ı. V´ ysledn´a ontologie mapuje 107 Exif makernote tag˚ u a 207 tag˚ u ostatn´ıch metadatov´ ych form´at˚ u na vlastnosti existuj´ıc´ıch ontologi´ı. Implementace m´a formu pluginu pro program MetaMed. Kl´ıˇcov´a slova: RDF, metadata, obrazov´e soubory, ontologie, RDF slovn´ık, JPEG, PNG, TIFF, Exif, XMP.
Abstract This work tackles an issue of reading metadata from image files and adding them to RDF model. Image file types in the scope of the work are JPEG, PNG and TIFF. Metadata Extractor library is used for reading metadata from image files. Mapping definition is written in ontology file. Using existing vocabulary terms is preferred. In case no viable vocabulary term exists, a new property is defined in newly created ontology. Created mapping ontology has 107 defined mappings of Exif Makernote tags on existing terms and 207 mappings of other metadata tags. Extraction procedure is implemented as a plugin for MetaMed application. Keywords: RDF, metadata, image files, ontology, RDF vocabulary, JPEG, PNG, TIFF, Exif, XMP.
Obsah ´ Uvod
1
1 RDF a ontologie 1.1 Resource Description Framework 1.1.1 RDF trojice . . . . . . . . 1.1.2 Linked data . . . . . . . . 1.2 Ontologie a slovn´ıky . . . . . . . 1.2.1 RDF sch´ema . . . . . . . 1.2.2 Web Ontology Language .
. . . . . .
2 2 2 4 5 6 8
. . . . . . . . . . . . . .
11 12 12 13 13 14 15 15 16 17 17 18 19 19 20
. . . . . . . . . . .
21 21 21 22 22 23 23 24 25 25 26 27
. . . . . .
. . . . . .
. . . . . .
. . . . . .
2 Obrazov´ e soubory a metadata 2.1 JPEG . . . . . . . . . . . . . . . . . . . 2.1.1 JPEG Interchange Format . . . . 2.1.2 JPEG File Interchange Format . 2.1.3 Exchangeable Image File Format 2.1.4 Extensible Metadata Platform . . 2.1.5 Information Interchange Model . 2.1.6 Photoshop Image Resources . . . 2.1.7 ICC profil . . . . . . . . . . . . . 2.2 PNG . . . . . . . . . . . . . . . . . . . . 2.2.1 Struktura souboru . . . . . . . . 2.2.2 Dalˇs´ı metadata . . . . . . . . . . 2.3 TIFF . . . . . . . . . . . . . . . . . . . . 2.3.1 Struktura souboru . . . . . . . . 2.3.2 Dalˇs´ı metadata . . . . . . . . . . 3 Existuj´ıc´ı n´ astroje 3.1 N´astroje pro extrakci metadat . . . . . . 3.1.1 Exiv2 . . . . . . . . . . . . . . . 3.1.2 ExifTool . . . . . . . . . . . . . . 3.1.3 Metadata Extractor . . . . . . . . 3.1.4 Aperture . . . . . . . . . . . . . . 3.1.5 Porovn´an´ı n´astroj˚ u . . . . . . . . 3.2 Bˇeˇzn´e slovn´ıky a ontologie . . . . . . . . 3.2.1 Dublin Core . . . . . . . . . . . . 3.2.2 Friend of a Friend . . . . . . . . . 3.2.3 Kanzaki Exif . . . . . . . . . . . 3.2.4 NEPOMUK Information Element
. . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . .
. . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . .
. . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . .
. . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . .
. . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . .
. . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . .
. . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . .
. . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . .
. . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . .
. . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . .
. . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . .
3.2.5 3.2.6
Geo . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 Adobe slovn´ıky . . . . . . . . . . . . . . . . . . . . . . 28
4 N´ avrh ˇ reˇ sen´ı 4.1 Poˇzadavky na ˇreˇsen´ı . . . . . . . . . 4.2 Test existuj´ıc´ıch extrakˇcn´ıch n´astroj˚ u 4.3 Volba n´astroje . . . . . . . . . . . . . 4.4 V´ ybˇer ontologi´ı a slovn´ık˚ u . . . . . . 4.5 Implementovan´e rozhran´ı . . . . . . . 4.6 Struktura Metadata Extractoru . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
5 Implementace 5.1 Bal´ık extractor . . . . . . . . . . . . . . . . 5.1.1 Algoritmus extrakce . . . . . . . . . 5.2 Bal´ık commons . . . . . . . . . . . . . . . . 5.2.1 Tˇr´ıda pro pr´aci s konfigurac´ı . . . . . 5.2.2 Tˇr´ıda ke zpracov´an´ı a z´apisu metadat 5.3 Datov´a tˇr´ıda IndividualData . . . . . . . . . 5.4 Bal´ık util . . . . . . . . . . . . . . . . . . . 5.4.1 Form´atov´an´ı logu . . . . . . . . . . . 5.4.2 Pr´ace s daty a ˇcasem . . . . . . . . . 5.4.3 Transformace extrahovan´ ych hodnot 5.4.4 Tˇr´ıda ExtractorUtil . . . . . . . . . . 5.5 Vytvoˇren´e ontologie . . . . . . . . . . . . . . 5.5.1 Mapovac´ı ontologie . . . . . . . . . . 5.5.2 Pojmov´a ontologie . . . . . . . . . .
. . . . . .
. . . . . . . . . . . . . .
. . . . . .
. . . . . . . . . . . . . .
. . . . . .
. . . . . . . . . . . . . .
. . . . . .
. . . . . . . . . . . . . .
. . . . . .
. . . . . . . . . . . . . .
. . . . . .
. . . . . . . . . . . . . .
. . . . . .
. . . . . . . . . . . . . .
. . . . . .
. . . . . . . . . . . . . .
. . . . . .
. . . . . . . . . . . . . .
. . . . . .
29 29 29 32 33 34 35
. . . . . . . . . . . . . .
36 36 38 40 41 42 46 47 47 47 48 51 53 53 54
6 Diskuze v´ ysledku 56 6.1 V´ ykonnostn´ı metriky . . . . . . . . . . . . . . . . . . . . . . . 56 6.2 Srovn´an´ı s ˇreˇsen´ım jin´ ych autor˚ u . . . . . . . . . . . . . . . . 58 6.3 Probl´emy ˇreˇsen´ı . . . . . . . . . . . . . . . . . . . . . . . . . . 58 Z´ avˇ er
60
Pouˇ zit´ e zkratky
61
Literatura
62
´ Uvod V souˇcasn´e dobˇe existuje velk´e mnoˇzstv´ı form´at˚ u soubor˚ u, do kter´ ych lze zapisovat data. Datov´ y soubor m˚ uˇze kromˇe samotn´ ych dat obsahovat i popis dat, tzn. metadata. Pˇreˇcten´ım a pochopen´ım metadat lze z´ıskat informace uˇziteˇcn´e pro dalˇs´ı zpracov´an´ı soubor˚ u, jejich anal´ yzu nebo vyhled´av´an´ı. Struktura metadat je vˇetˇsinou definovan´a pouze pro konkr´etn´ı form´at souboru nebo malou mnoˇzinu form´at˚ u. Jeden form´at souboru m˚ uˇze nav´ıc obsahovat nˇekolik typ˚ u metadatov´ ych struktur. Metadata nach´azej´ıc´ı se v r˚ uzn´ ych struktur´ach se mohou v´ yznamovˇe pˇrekr´ yvat. C´ılem t´eto pr´ace je vytvoˇrit plugin pro program MetaMed, kter´ y je vyv´ıjen na Katedˇre informatiky a v´ ypoˇcetn´ı techniky v r´amci v´ yzkumn´e skupiny Medic´ınsk´e informaˇcn´ı syst´emy. Plugin umoˇzn´ı ˇc´ıst metadata z obrazov´ ych soubor˚ u JPEG, TIFF a PNG. Extrahovan´a metadata budou zaps´ana do RDF modelu. V souvislosti s t´ım navrhnu mapov´an´ı obrazov´ ych metadat na RDF vlastnosti existuj´ıc´ıch ontologi´ı. Pro metadata, kter´a nebude moˇzn´e vhodnˇe pˇriˇradit k existuj´ıc´ım vlastnostem, vytvoˇr´ım vlastn´ı RDF slovn´ık.
1
1 RDF a ontologie 1.1
Resource Description Framework
Resource Description Framework, d´ale jen RDF, je v u ´vodu [1] pˇredstaven jako framework pro popis vlastnost´ı urˇcit´eho zdroje (resource). Zdrojem m˚ uˇze b´ yt cokoliv – dokumenty, osoby, fyzick´e objekty pˇr´ıpadnˇe i abstraktn´ı koncepty. RDF je uˇziteˇcn´e v situac´ıch, kdy je potˇreba, aby informace uloˇzen´e na webu nam´ısto ˇclovˇeka zpracoval stroj a porozumˇel jim. Framework d´ale umoˇzn ˇuje v´ ymˇenu dat mezi aplikacemi. RDF specifikace spravuje World Wide Web Consortium (W3C). W3C je mezin´arodn´ı organizace pro v´ yvoj a spr´avu webov´ ych standard˚ u, kter´a byla zaloˇzena v ˇr´ıjnu 1994. Organizace na sv´ ych webov´ ych str´ank´ach [2] uv´ad´ı jako svoji misi vytv´aˇren´ı protokol˚ u a doporuˇcen´ı, kter´e zajist´ı dlouho trvaj´ıc´ı r˚ ust webu a umoˇzn´ı vyuˇz´ıt cel´ y jeho potenci´al.
1.1.1
RDF trojice
Z´akladn´ı strukturou RDF je RDF statement (v ˇceˇstinˇe se lze setkat s pˇreklady RDF tvrzen´ı nebo prohl´aˇsen´ı). Ten m´a formu trojice subjekt, predik´at, objekt. Subjektem je popisovan´ y zdroj. Predik´atem se rozum´ı vlastnost, kterou subjekt m´a. Objekt vyjadˇruje hodnotu vlastnosti. K trojici se m˚ uˇze pˇridat n´azev grafu, v nˇemˇz je obsaˇzena, pak je tedy RDF statement tvoˇren ˇctveˇric´ı hodnot (v angliˇctinˇe RDF quad). "Hamlet" "Hamlet" "Hamlet" "Hamlet"
-
"je" "byl "byl "je"
- "trag´ edie". naps´ an" - "William Shakespearem". publikov´ an" - "1603". - "princ".
V´ ypis 1.1: Trojice popisuj´ıc´ı d´ılo a postavu Hamlet v pˇrirozen´em jazyce. V´ ypis 1.1 ukazuje, jak by bylo moˇzn´e z´akladn´ı informace o d´ıle Hamlet zapsat v pˇrirozen´em jazyce. Takov´ y z´apis je pro ˇclovˇeka ˇciteln´ y, nicm´enˇe pro stroj je tˇeˇzko uchopiteln´ y. Hlavn´ım probl´emem je rozliˇsen´ı, kdy se Hamletem
2
RDF a ontologie
Resource Description Framework
rozum´ı n´azev d´ıla a kdy jde o postavu ve hˇre. RDF toto ˇreˇs´ı pouˇzit´ım Internationalized Resource Identifier (IRI) definovan´ ych v [3], coˇz je urˇcit´a nadmnoˇzina Uniform Resource Identifier (URI) pouˇz´ıvan´ ych k jednoznaˇcn´emu oznaˇcen´ı zdroj˚ u na webu. Na subjekt je odkazov´ano jednoznaˇcnˇe a je strojovˇe rozliˇsiteln´e, ˇze se jedn´a o r˚ uzn´e entity, i kdyˇz jejich popisn´ y n´azev m˚ uˇze b´ yt stejn´ y. Na hru Hamlet m˚ uˇze odkazovat napˇr´ıklad http://lit.org/play/hamlet a na postavu http://lit.org/characters/hamlet. Pojem je v predik´atu m˚ uˇze nab´ yvat v´ıce v´ yznam˚ u, vlastnost popisuj´ıc´ı ˇz´anr d´ıla resp. roli osoby ve spoleˇcnosti. Pro poˇzadovanou vlastnost v predik´atu se proto pouˇzije tak´e IRI. V pˇr´ıpadˇe objektu je moˇzn´e odk´azat na zdroj pomoc´ı IRI, nebo pouˇz´ıt liter´al. Kaˇzd´ y ze zp˚ usob˚ u je vhodn´ y pro jinou situaci. V tomto pˇr´ıpadˇe rok 1603 jiˇz pravdˇepodobnˇe nebude vystupovat v jin´e trojici jako subjekt a je tedy vhodn´e zapsat ho jako liter´al. Naopak na objekt William Shakespeare je lepˇs´ı odk´azat pomoc´ı IRI jak z d˚ uvodu rozliˇsen´ı mezi osobami stejn´eho jm´ena, tak umoˇznˇen´ı dalˇs´ıho popisu osoby. Sada RDF trojic tvoˇr´ı strukturu orientovan´eho grafu, kdy subjekt a objekt jsou vrcholy grafu a predik´at je orientovan´a hrana ze subjektu do objektu. Uzly mohou m´ıt formu liter´alu nebo IRI, jak jiˇz bylo zm´ınˇeno. Kromˇe toho je moˇzn´e jako uzel pouˇz´ıt tak zvan´ y pr´azdn´ y uzel (blank node) tak´e obˇcas naz´ yvan´ y anonymn´ı zdroj (anonymous resource), jak uv´ad´ı [4] v kapitole 3.1. Jedn´a se o uzel, kter´ y nem´a pˇriˇrazen´ y ˇz´adn´ y glob´aln´ı identifik´ator a v z´avislosti na zvolen´em zp˚ usobu serializace je mu pˇriˇrazen m´ıstn´ı identifik´ator na u ´rovni grafu. Lei Chen [5] vymezuje jejich uˇzit´ı do n´asleduj´ıc´ıch pˇr´ıpad˚ u: • Vyjmenov´an´ı mnoˇziny prvk˚ u, jako napˇr´ıklad skupinu spoluautor˚ u knihy. • Zaps´an´ı komplexn´ı datov´e struktury jako napˇr´ıklad adresu bydliˇstˇe, kter´a se skl´ad´a z n´azvu ulice, mˇesta a ˇc´ısla domu. Pr´azdn´ y uzel zde bude vystupovat jako objekt pro predik´at adresa a z´aroveˇ n bude subjektem pro predik´aty ulice, mˇesto a popisn´e ˇc´ıslo. • K zaps´an´ı kontextov´e informace pro RDF tvrzen´ı jako den vytvoˇren´ı nebo jm´eno autora. • M˚ uˇze pomoci k popisu zdroje, jehoˇz identifik´ator je shodn´ y, jako nˇekter´a z jeho vlastnost´ı. Napˇr´ıklad u osoby jej´ıˇz IRI odpov´ıd´a IRI jej´ı emailov´e adresy. Z´apis stejn´ ych dat jako v pˇredeˇsl´em pˇr´ıkladu do RDF je uveden ve v´ ypisu 1.2. Pˇri pˇreveden´ı t´ımto zp˚ usobem se ale ztratila ˇca´st informace o n´azvu 3
RDF a ontologie
Resource Description Framework
d´ıla a postavy. Nen´ı totiˇz obecnˇe zaruˇceno, ˇze IRI subjektu bude obsahovat to, co bychom ch´apali jako n´azev popisovan´eho zdroje. N´azev je tak nutn´e zadefinovat dalˇs´ı trojic´ı.
. . "1603" . "princ" . V´ ypis 1.2: RDF trojice popisuj´ıc´ı d´ılo a postavu Hamlet. V uk´azce 1.2 byl pouˇzit form´at N-Triples. Tento form´at m´a sice jednoduchou syntaxi, ale na zaps´an´ı informace je potˇreba relativnˇe velk´e mnoˇzstv´ı znak˚ u. Nav´ıc informace takto zapsan´a nen´ı pˇr´ıliˇs dobˇre ˇciteln´a pro ˇclovˇeka. Existuj´ı i dalˇs´ı form´aty, kter´e se liˇs´ı ˇcitelnost´ı nebo potˇrebn´ ym m´ıstem k zaps´an´ı dat. Dle m´eho n´azoru je jedn´ım z nejˇcitelnˇejˇs´ıch a z´aroveˇ nu ´sporn´ ych form´at˚ u Turtle, kter´ y budu pouˇz´ıvat d´ale v dokumentu. Form´at umoˇzn ˇuje definovat na zaˇca´tku souboru pˇredpony (prefixy), kter´ ymi se budou substituovat ˇca´sti IRI se jmenn´ ym prostorem. Z´apis ekvivalentn´ı k 1.2 je uveden ve v´ ypisu 1.3. @prefix @prefix @prefix @prefix @prefix
play: . terms: . char: . people: . dc: .
play:hamlet dc:type terms:tragedy . play:hamlet dc:creator people:wiliam-shakespeare. play:hamlet dc:issued "1603". char:hamlet terms:role "princ". V´ ypis 1.3: Trojice popisuj´ıc´ı d´ılo a postavu Hamlet v Turtle syntaxi.
1.1.2
Linked data
V souvislosti s RDF modelem se ˇcasto hovoˇr´ı o konceptu linked data. Koncept prvnˇe uvedl Tim Berners-Lee [6]. Koncept popisuje pˇr´ıstup, jak´ y je tˇreba 4
RDF a ontologie
Ontologie a slovn´ıky
zvolit k publikov´an´ı strukturovan´ ych dat tak, aby byly l´epe prozkoumateln´e a vyuˇziteln´e. D˚ usledkem by mˇelo b´ yt, ˇze data budou prov´az´ana a na z´akladˇe zn´am´ ych dat bude moˇzn´e naj´ıt jin´a relevantn´ı data. V dokumentu [6] BernersLee vymezuje ˇctyˇri podm´ınky k fungov´an´ı a r˚ ustu s´emantick´eho webu: 1. Pouˇz´ıv´an´ı URI k pojmenov´an´ı zdroj˚ u. 2. Pouˇz´ıv´an´ı HTTP URI, aby ˇslo dohledat dan´e zdroje. 3. Kdyˇz nˇekdo vyhled´a dan´e URI, poskytnout uˇziteˇcn´e informace o zdroji za pouˇzit´ı standardn´ıch technologi´ı (RDF, SPARQL). 4. V odpovˇedi uv´est i odkazy na jin´e relevantn´ı URI, aby bylo moˇzn´e objevit dalˇs´ı informace. Vztah k RDF je patrn´ y z prvn´ıho a tˇret´ıho bodu. Prvn´ı bod odpov´ıd´a zp˚ usobu, jak´ ym jsou identifikov´any zdroje v RDF. Vyj´ımkou jsou pr´azdn´e uzly, kter´e je moˇzn´e pˇrev´est na IRI jak uv´ad´ı specifikace [4] v kapitole 3.5. Tˇret´ım bodem je pˇr´ımo jmenov´ano RDF jako preferovan´ y zp˚ usob pod´an´ı informace a SPARQL jako jazyk pro dotazov´an´ı se nad RDF modelem. ˇ Ctvrt´ y bod a jeho aplikace je v dalˇs´ı ˇca´sti dokumentu [6] bl´ıˇze rozebr´an. V d˚ usledku jde opˇet o koncept, kter´ y jsem popsal v pˇredeˇsl´e sekci, kdy v objektu RDF trojice je moˇzn´e, ˇcasto i chtˇen´e, odk´azat pomoc´ı IRI na jin´ y zdroj, sp´ıˇse neˇz pouˇz´ıt liter´al.
1.2
Ontologie a slovn´ıky
S´emantick´ y v´ yznam RDF trojice vych´az´ı z predik´atu, kter´ y vyjadˇruje vlastnost, jenˇz propojuje subjekt a objekt. V kapitole 1.1.1 popisuji, ˇze na pozici predik´atu mus´ı b´ yt IRI. To samo o sobˇe k zajiˇstˇen´ı s´emantick´e informace nestaˇc´ı. Uvaˇzujme vyjmenov´an´ı hlavn´ıch postav d´ıla Romeo a Julie trojicemi ve v´ ypisu 1.4. V uk´azce pouˇz´ıv´am anglick´e term´ıny hero a heroine pro hlavn´ı muˇzskou, resp. ˇzenskou postavu. Bez dalˇs´ı definice z tˇechto trojic nedok´aˇze stroj pochopit ˇza´dn´ y hlubˇs´ı v´ yznam. Z jeho pohledu jde o neurˇcit´e vlastnosti hero a heroine, kter´e propojuj´ı neurˇcit´ y zdroj romeo-and-juliet se zdroji romeo a juliet. Aby stroj pochopil, ˇze obˇe vlastnosti jsou si bl´ızk´e a liˇs´ı se pouze v pohlav´ı osoby, kter´e je vlastnost´ı implikov´ana, je nutn´e vlastnost bl´ıˇze definovat pomoc´ı ontologie ˇci slovn´ıku. Ontologie je definov´ana jako sada form´aln´ıch jednoznaˇcn´ ych tvrzen´ı popisuj´ıc´ı urˇcitou ˇca´st svˇeta [7]. 5
RDF a ontologie
Ontologie a slovn´ıky
@prefix play: . @prefix terms: . @prefix char: . play:romeo-and-juliet terms:hero char:romeo . play:romeo-and-juliet terms:heroine char:juliet . V´ ypis 1.4: Trojice popisuj´ıc´ı hlavn´ı postavy hry Romeo a Julie. Dalˇs´ı s´emantick´ y probl´em m˚ uˇze vyvstat, pokud by jin´a organizace chtˇela popisovat pomoc´ı RDF divadeln´ı hry a pro sv´e potˇreby si nadefinovala svoji vlastnost http://lit.cz/rdf/hlavniPostava, kter´a by byla pro postavy obou pohlav´ı. V r´amci konceptu linked data by bylo ˇza´dan´e modely obou organizac´ı propojit. Nicm´enˇe pˇri snaze o propojov´an´ı vlastnost´ı hero, heroine a hlavniˇ sen´ım by mohla Postava by doˇslo ke konfliktu ontologick´e definice pojm˚ u. Reˇ b´ yt ontologie definuj´ıc´ı vztah tˇechto pojm˚ u. Pokud by stejn´ y postup mˇel b´ yt prov´adˇen pro kaˇzdou dalˇs´ı podobnou organizaci, stane se takov´e ˇreˇsen´ı ˇcasovˇe i finanˇcnˇe ne´ unosn´e. Z tohoto d˚ uvodu je vhodn´e pouˇz´ıt v ˇreˇsen´ı jiˇz existuj´ıc´ı definovan´e pojmy a vlastnosti, pokud se svoj´ı definic´ı shoduj´ı s poˇzadavky ˇreˇsen´ı. Pojem RDF slovn´ıky (vocabularies) oznaˇcuje sady pojm˚ u, kter´e jsou urˇceny k dalˇs´ımu pouˇzit´ı v ciz´ıch ontologi´ıch nebo aplikac´ıch.
1.2.1
RDF sch´ ema
RDF Schema (RDFS) [8], spravovan´e W3C, je z´akladn´ı slovn´ık k vytv´aˇren´ı datov´ ych model˚ u a ontologi´ı. Definovan´e pojmy slovn´ıku jsou um´ıstˇen´e na jmenn´ ych prostorech http://www.w3.org/2000/01/rdf-schema# standardnˇe substituovan´ ym jako rdfs: a http://www.w3.org/1999/02/22-rdf-syntax-ns# nahrazovan´ ym prefixem rdf:. Pojmy se dˇel´ı na tˇr´ıdy a vlastnosti. V´ yznamn´e tˇr´ıdy definovan´e v RDFS jsou: • rdfs:Resource kaˇzd´ y zdroj vystupuj´ıc´ı v RDF tvrzen´ı je instanc´ı t´eto tˇr´ıdy. • rdfs:Class kaˇzd´ y zdroj, kter´ y je tˇr´ıdou, je instanc´ı t´eto tˇr´ıdy. Tˇr´ıdy rdfs:Class a rdfs:Resource jsou instancemi rdfs:Class. • rdfs:Literal tˇr´ıda pro liter´aly. Je podtˇr´ıdou rdfs:Resource. • rdfs:Datatype tˇr´ıda pro datov´e typy liter´al˚ u. Kaˇzd´a instance tˇr´ıdy je podtˇr´ıdou rdfs:Literal. 6
RDF a ontologie
Ontologie a slovn´ıky
• rdf:Property tˇr´ıda pro RDF vlastnosti. RDF vlastnosti jsou dle specifikace [4] relace mezi zdrojem v subjektu a zdrojem v objektu. Vˇsechny vlastnosti jsou instanc´ı rdf:Property. V´ yznamn´e definovan´e vlastnosti v RDFS jsou: • rdfs:range slouˇz´ı k definici tˇr´ıdy nebo mnoˇziny tˇr´ıd, jej´ıˇz instanc´ı je zdroj o v trojici (s, p, o), kdyˇz p je vlastnost, kterou pomoc´ı rdfs:range upravujeme. • rdfs:domain je pouˇz´ıv´ana obdobnˇe jako rdfs:range a definuje tˇr´ıdu nebo mnoˇzinu tˇr´ıd, jej´ıˇz instanc´ı je zdroj s na pozici subjektu. • rdf:type k vyj´adˇren´ı, ˇze popisovan´ y zdroj je instanc´ı urˇcit´e tˇr´ıdy. • rdfs:subClassOf k vyj´adˇren´ı, ˇze dan´a tˇr´ıda je podtˇr´ıdou jin´e. Vˇsechny instance podtˇr´ıdy jsou z´aroveˇ n instancemi nadtˇr´ıdy. • rdfs:subPropertyOf k vyj´adˇren´ı, ˇze dan´a vlastnost p je podˇrazen´a jin´e vlastnosti P. Zdroje, kter´e jsou v relaci p, jsou z´aroveˇ n v relaci P. • rdfs:label, rdfs:comment k vloˇzen´ı ˇclovˇekem ˇciteln´eho n´azvu zdroje, resp. jeho popisu. RDF umoˇzn ˇuje k textov´ ym hodnot´am pˇriˇradit jazyk, kter´ ym jsou zapsan´e. D´ıky tomu je moˇzn´e udˇelat v´ıcejazyˇcn´e popisky a dokumentaci. Kromˇe tˇechto z´akladn´ıch pojm˚ u jsou definovan´e i dalˇs´ı, kter´e maj´ı specifick´e pouˇzit´ı. Definovan´e jsou tˇr´ıdy popisuj´ıc´ı mnoˇzinu prvk˚ u rdf:Bag, rdf:Seq a rdf:Alt. Jejich zam´ yˇslen´e uˇzit´ı je pro neseˇrazen´e mnoˇziny, mnoˇziny seˇrazen´e dle urˇcit´e vlastnosti, resp. mnoˇziny z nichˇz m´a b´ yt vybr´ana a pouˇzita jedna alternativa. D´ale jsou definov´any vlastnosti rdf:Statement, rdf:subject, rdf:predicate a rdf:object. Ty slouˇz´ı k popisu vlastnost´ı RDF trojice. To lze vyuˇz´ıt, jak bylo jiˇz uvedeno v souvislosti s blank node v kapitole 1.1.1, napˇr´ıklad k zaps´an´ı ˇcasu, kdy byla trojice vytvoˇrena nebo kdo je jej´ım autorem. RDF schema definuje tak´e nˇekolik vlastnost´ı k podpoˇre konceptu linked data. Vlastnost rdfs:seeAlso slouˇz´ı k odkazu na zdroj, kter´ y m˚ uˇze poskytnou dalˇs´ı souvisej´ıc´ı informace. Vlastnost´ı rdfs:isDefinedBy lze odk´azat na definici zdroje, napˇr´ıklad RDF slovn´ık. 7
RDF a ontologie
1.2.2
Ontologie a slovn´ıky
Web Ontology Language
Web Ontology Language (OWL), tedy jazyk pro tvorbu webov´ ych ontologi´ı, rozˇsiˇruje moˇznosti jak zapisovat znalosti o vztaz´ıch mezi zdroji. OWL um´ı popisovat tˇr´ıdy, vlastnosti a jedince (individual), coˇz jsou instance tˇr´ıdy definovan´e na u ´rovni ontologie. Z´akladn´ı syntax´ı pro OWL ontologii je RDF/XML. Ontologii vych´az´ı z RDF konceptu a lze zobrazit jako graf. Jazyk je v souˇcasnosti ve verzi 2 (z 11. prosince 2012). Jednotliv´e moˇznosti, kter´e OWL nab´ız´ı, jsou popsan´e ve W3C specifikaci [7]. Pro uk´azku uvedu pouˇzit´ı ontologie pro ˇreˇsen´ı probl´emu s harmonizac´ı RDF model˚ u z kapitoly 1.2. ˇ ast ontologie definuj´ıc´ı obor hodnot vlastnost´ı popisuj´ıc´ı Ontologie 1.5: C´ hlavn´ı postavy. Uvaˇzujme definici tˇr´ıd jako v ontologii 1.5. Ta ˇr´ık´a pomoc´ı vlastnosti rdfs:range, ˇze objektem v trojici s predik´aty hero, heroine a hlavniPostava jsou instance tˇr´ıdy Hero, Heroine, resp. HlavniPostava. Syntaxe umoˇzn ˇuje zkr´atit IRI zdroj˚ u pouˇzit´ım prefixu, kter´ y je v RDF/XML uvozeny znakem & a ukonˇceny stˇredn´ıkem. Nyn´ı deklarujme, ˇze tˇr´ıda HlavniPostava je ekvivalentn´ı se sjednocen´ım mnoˇzin tˇr´ıd Hero a Heroine. Z´apis t´eto deklarace je v ontologii 1.6. 8
RDF a ontologie
Ontologie a slovn´ıky
ˇ ast ontologie definuj´ıc´ı ekvivalentn´ı vztah mezi tˇr´ıdou HlavOntologie 1.6: C´ niPostava a slouˇcen´ım tˇr´ıd Hero a Heroine. D˚ usledkem zaps´an´ı takov´e znalosti do ontologie je, ˇze stroj s patˇriˇcnou softwarovou v´ ybavou dok´aˇze pochopit spojitost mezi dan´ ymi pojmy a na jej´ım z´akladˇe je schopen vyvodit znalosti, kter´e nejsou explicitnˇe v RDF modelu uveden´e. Uk´azkou takov´e znalosti je fakt, ˇze zdroj romeo, kter´ y vystupuje jako objekt vlastnosti hero, je instanc´ı tˇr´ıd Hero a HlavniPostava. Tato informace vˇsak v trojic´ıch ve v´ ypisu 1.4 nen´ı zm´ınˇena, nebot’ nen´ı potˇreba z d˚ uvodu uˇzit´ı ontologie. Software, kter´ y umoˇzn ˇuje s´emantiku informac´ı ˇc´ıst a vyvozovat znalosti, se oznaˇcuje pojmem s´emantick´ y reasoner, nebo pouze reasoner. Jeho uˇziteˇcnost stoup´a s komplexitou popisovan´ ych skuteˇcnost´ı. Kromˇe hled´an´ı implicitn´ıch znalost´ı je moˇzn´e pouˇz´ıt reasoner k ovˇeˇren´ı konzistence dat. Reasoner je nicm´enˇe limitov´an t´ım, ˇze OWL funguje na pˇredpokladu otevˇren´eho svˇeta (open world assumption). Ten ˇr´ık´a, ˇze tvrzen´ı je nepravdiv´e, jen pokud je ˇreˇceno, ˇze je nepravdiv´e. Naopak v pˇr´ıpadˇe uzavˇren´eho svˇeta je nepravdiv´e kaˇzd´e tvrzen´ı, kter´e nen´ı ˇreˇcen´e jako pravdiv´e [9]. Definujme, ˇze vlastnost hero m´a kardinalitu jedna, tzn. ˇze kaˇzd´ y zdroj m˚ uˇze b´ yt spojen danou vlastnost´ı pouze s jedn´ım objektem. Pak na v´ ypisu 1.7 neshled´a reasoner nic ˇspatn´eho, protoˇze ji interpretuje n´asleduj´ıc´ı logikou. Romeo je hlavn´ı postavou hry. Julie je hlavn´ı postava stejn´e hry. Hra m˚ uˇze m´ıt nejv´ yˇse jednu hlavn´ı postavu. Julie je tedy stejn´ y objekt jako Romeo, pouze s jin´ ym IRI. Aby reasoner shledal v tomto pˇr´ıpadˇe data nekonzistentn´ı musela by v modelu b´ yt explicitnˇe formulov´ana nˇejak´a negativn´ı tvrzen´ı, nejjednoduˇseji napˇr´ıklad takov´a, kter´ ymi budou objekty juliet a romeo prohl´aˇseny za odliˇsn´e. V realitˇe je vˇsak takov´ y pˇr´ıstup nepouˇziteln´ y, protoˇze by bylo potˇreba k u ´pln´e definici formulovat tvrzen´ı pro kaˇzdou dvojici r˚ uzn´ ych ´ objekt˚ u. Uspornˇ ejˇs´ı by bylo definovat negativn´ı vztahy na u ´rovni ontologick´e definice tˇr´ıd a v datech pouze explicitnˇe pˇriˇradit objekt urˇcit´emu typu. V tomto pˇr´ıpadˇe tedy formulovat, ˇze romeo je instance tˇr´ıdy Hero, juliet je instance Heroine a v ontologii definovat, ˇze tˇr´ıda Hero nem´a pr˚ unik s tˇr´ıdou Heroine.
9
RDF a ontologie
Ontologie a slovn´ıky
@prefix play: . @prefix terms: . @prefix char: . play:romeo-and-juliet terms:hero char:romeo . play:romeo-and-juliet terms:hero char:juliet . V´ ypis 1.7: Trojice popisuj´ıc´ı hlavn´ı postavy hry Romeo a Julie. Julie je deklarovan´a vlastnost´ı hero nam´ısto heroine. V praxi je uˇziteˇcn´e v ontologi´ıch konstatovat vedle pozitivn´ı vlastnosti i negativn´ı, je-li to moˇzn´e. Pokud je u vlastnost´ı ve slovn´ıku definov´an jejich obor hodnot, m˚ uˇze reasoner odhalit nesoulad typ˚ u liter´al˚ u v datech a definice.
10
2 Obrazov´e soubory a metadata Obrazov´e (grafick´e) soubory mohou b´ yt velmi bohat´e na metadata. Soubory, kter´e byly vytvoˇren´e v grafick´em programu, maj´ı omezenou mnoˇzinu metadat popisuj´ıc´ı z´akladn´ı vlastnosti jako ˇs´ıˇrku a v´ yˇsku obrazu nebo barevnou hloubku, pˇr´ıpadnˇe popisuj´ıc´ı program, kter´ ym byly vytvoˇreny. Na druhou stranu fotografie poˇr´ızen´e digit´aln´ım fotoapar´atem obsahuj´ı nav´ıc ˇradu u ´daj˚ u o okoln´ıch podm´ınk´ach pˇri focen´ı a nastaven´ı fotoapar´atu. Existuje ˇrada r˚ uzn´ ych grafick´ ych form´at˚ u. Z´akladn´ı dˇelen´ı je na form´aty rastrov´e a vektorov´e. Vektorov´e form´aty ukl´adaj´ı matematick´ ym z´apisem pozici a tvar jednotliv´ ych ˇcar, kter´e jsou pouˇzity k vykreslen´ı komplexn´ıch tvar˚ u. Rastrov´e maj´ı strukturu mˇr´ıˇzky pixel˚ u. Pro kaˇzd´ y pixel je uloˇzena hodnota barevn´ ych sloˇzek, z kter´ ych je tvoˇrena barva konkr´etn´ıho pixelu. Vektorov´e je moˇzn´e d´ıky zp˚ usobu jejich serializace snadno ˇsk´alovat do potˇrebn´e velikosti bez ztr´aty kvality. U rastrov´ ych obraz˚ u doch´az´ı k redukci informace pˇri zmenˇsen´ı velikosti nebo k pˇrid´av´an´ı nov´ ych dat pˇri zvˇetˇsov´an´ı. V z´avislosti na pouˇzit´e interpolaˇcn´ı metodˇe, obsahu sn´ımku ˇci pomˇeru zmˇeny velikosti dojde k r˚ uzn´ ym kvalitativn´ım zmˇen´am. Zmˇenˇen´ y obraz se m˚ uˇze jevit rozmazanˇe, objekty mohou b´ yt nevyhlazen´e nebo se objev´ı ˇsum u hran pˇrechod˚ u mezi barvami. [10, 11] Metoda ukl´ad´an´ı barevn´e konfigurace kaˇzd´eho pixelu je velmi n´aroˇcn´a na u ´loˇzn´ y prostor. Uvaˇzujeme-li barevn´ y prostor RGB, tedy tˇri sloˇzky s hodnotami 0 aˇz 255, pak z´apis jednoho pixelu vyˇzaduje 3 byty. Jeden sn´ımek z fotoapar´atu s rozliˇsen´ım 10 Mpx by tak mˇel velikost pˇribliˇznˇe 30 MB. Z tohoto d˚ uvodu se pˇristupuje u vˇetˇsiny form´at˚ u k nˇejak´emu druhu komprese. Kompresn´ı metoda m˚ uˇze b´ yt ztr´atov´a (lossy) nebo bezztr´atov´a (lossless). Bezztr´atovou kompres´ı se nepˇrich´az´ı o ˇz´adnou obrazovou informaci. Hled´a se nejefektivnˇejˇs´ı zp˚ usob, jak uchovat kvalitu a zmenˇsit velikost. Toho m˚ uˇze b´ yt doc´ıleno napˇr´ıklad identifikov´an´ım opakuj´ıc´ıho se vzoru v datech a jeho substituov´an´ı zkratkou o menˇs´ı velikosti. Naopak ztr´atov´a komprese pˇripouˇst´ı degradaci kvality dat. Takov´a komprese m˚ uˇze ukl´adat obrazovou informaci s menˇs´ım rozliˇsen´ım a pro vykreslen´ı p˚ uvodn´ıho obrazu pouˇz´ıvat statistick´e odhady hodnot.[12] V pr´aci se d´ale zab´ yv´am pouze rastrov´ ymi form´aty, kter´e obsahuj´ı oproti vektorov´ ym vˇetˇs´ı mnoˇzstv´ı metadat ke zpracov´an´ı. Konkr´etnˇe uvaˇzuji form´aty JPEG, PNG a TIFF. 11
Obrazov´e soubory a metadata
2.1
JPEG
JPEG
JPEG je p˚ uvodem mezin´arodn´ı standard ISO/IEC 10918 [13] komprese dat v statick´ ych obrazech. N´azev vych´az´ı ze zkratky skupiny Joint Photographic Experts Group, jenˇz ho vytvoˇrila. V standardu byly definov´any dvˇe metody komprese – ztr´atov´a, zaloˇzen´a na diskr´etn´ı kosinov´e transformaci, a bezztr´atov´a vyuˇz´ıvaj´ıc´ı predikˇcn´ı pˇr´ıstup. [14] Skupina vytvoˇrila ˇradu dalˇs´ıch standard˚ u pro specifick´e zp˚ usoby uˇzit´ı, jejichˇz dokumentaci je moˇzn´e naj´ıt na webov´ ych str´ank´ach skupiny1 . D´ale budu uvaˇzovat pouze v´ yˇse zm´ınˇen´ y standard. Zkratka JPEG se v souˇcasnosti ˇcasto pouˇz´ıv´a i jako oznaˇcen´ı datov´eho form´atu, kter´ y vyuˇz´ıv´a tyto kompresn´ı metody. Z´akladn´ım form´atem je JPEG Interchange Format (JIF) definovan´ y ve standardu [15] v pˇr´ıloze B. Dalˇs´ı ˇ form´aty vˇzdy JIF rozˇsiˇruj´ı a jsou s n´ım zpˇetnˇe kompatibiln´ı. Casto pouˇz´ıvan´e form´aty jsou JPEG/JFIF pro obrazov´a data na webu a JPEG/Exif pro fotografie z digit´aln´ıch fotoapar´at˚ u [16].
2.1.1
JPEG Interchange Format
JIF se skl´ad´a z nˇekolika segment˚ u zaˇc´ınaj´ıc´ıch dvou bytovou k´odovou znaˇckou definovanou ve standardu [15], pˇr´ıloze B.1. Segmenty maj´ı definovan´e pevn´e poˇrad´ı. N´azvy znaˇcek dle specifikace uv´ad´ım v z´avorce. Struktura souboru je dle pˇr´ılohy B.2.1 [15] n´asleduj´ıc´ı: zaˇca´tek obrazu (SOI), definice Huffmanov´ ych tabulek (DHT), definice kvantizaˇcn´ıch tabulek (DQT), definice restart intervalu (DRI), hlaviˇcka r´amce, segmenty s komprimovan´ ymi daty, konec obrazu (EOI). V hlaviˇcce r´amce je pouˇzita jedna z ˇsestn´acti znaˇcek pro zaˇca´tek r´amce (SOFx). Dle zvolen´e znaˇcky je definov´ana pouˇzit´a metoda komprese. Jednotliv´e segmenty s daty se skl´adaj´ı ze zaˇc´atku scanu (SOS) a dat n´asledovan´ ymi restart k´odem (RST). Specifikace d´ale vyhrazuje ˇsestn´act znaˇcek pro oznaˇcen´ı segment˚ u pro data jin´ ych aplikac´ı (APPx). Segmenty se zpravidla vyskytuj´ı hned za SOI segmentem a je moˇzn´e vloˇzit v´ıce r˚ uzn´ ych APP segment˚ u. V tˇechto segmentech se ukl´adaj´ı metadata jednotliv´ ych form´at˚ u rozˇsiˇruj´ıc´ıch JIF. 1
http://www.jpeg.org/index.html
12
Obrazov´e soubory a metadata
2.1.2
JPEG
JPEG File Interchange Format
Tento form´at, pouˇz´ıvaj´ıc´ı zkratku JPEG/JFIF nebo pouze JFIF, zvolil v roce 1996 Internet Engineering Task Force ve sv´e publikaci jako k´odov´an´ı JPEG soubor˚ u pro internetovou datovou komunikaci. V dokumentu byl d´ale zaveden pojem Multipurpose Internet Mail Extension (MIME), coˇz je rozˇs´ıˇren´ı p˚ uvodn´ıho emailov´eho protokolu k umoˇznˇen´ı zas´ıl´an´ı jin´ ych typ˚ u dat neˇz ASCII text. MIME typ je textov´ y hierarchick´ y identifik´ator typu obsahu s dvˇema stupni hierarchie. Koncept MIME typ˚ u se pozdˇeji rozˇs´ıˇril a pracuj´ı s n´ım i dalˇs´ı aplikace. Form´atu JFIF byl pˇriˇrazen MIME typ image/jpeg. [17] JFIF pouˇz´ıv´a APP0 segment, kter´ y mus´ı b´ yt hned za segmentem zaˇc´atku obrazu. Specifikace silnˇe doporuˇcuje pouˇz´ıvat JPEG baseline jako zp˚ usob komprese obrazov´ ych dat, kv˚ uli zachov´an´ı maxim´aln´ı kompatibility se vˇsemi aplikacemi pouˇz´ıvaj´ıc´ı JPEG. Na rozd´ıl od JIF je definov´an barevn´ y prostor obrazu. M˚ uˇze b´ yt ve stupn´ıch ˇsedi (Y) nebo s tˇremi barevn´ ymi sloˇzkami (Y, Cb, Cr). Form´at d´ale uchov´av´a informaci o rozliˇsen´ı a umoˇzn ˇuje uloˇzit v segmentu APP0 zmenˇseninu p˚ uvodn´ıho obrazu jako n´ahled. [18]
2.1.3
Exchangeable Image File Format
Exif je metadatov´ y form´at, prvnˇe publikovan´ y v roce 1998, moment´alnˇe ve verzi 2.3. Je definov´an pro obrazov´a data v JPEG a TIFF Baseline form´atu. Exif m˚ uˇze b´ yt pouˇzit i k popisu zvukov´ ych soubor˚ u form´atu RIFF WAVE Form. V pˇr´ıpadˇe JPEG form´atu vyuˇz´ıv´a k z´apisu sv´ ych dat segmenty APP1 a APP2. Segment APP1 mus´ı b´ yt hned za SOI. [19] T´ımto poˇzadavkem se Exif st´av´a nekompatibiln´ı s JFIF, protoˇze oba vyˇzaduj´ı um´ıstit sv˚ uj blok na zaˇc´atek. V nˇekter´ ych souborech se i pˇresto nach´az´ı oba segmenty a je na aplikaci, zda-li a jak si s danou situac´ı porad´ı. Metadata jsou roztˇr´ıdˇena do nˇekolika adres´aˇr˚ u (image file directories, IFD). Jednotliv´e vlastnosti v adres´aˇr´ıch se oznaˇcuj´ı jako tagy. Exif IFD obsahuje u ´daje o dobˇe poˇr´ızen´ı sn´ımku, pouˇzit´em objektivu, vlastnostech dat jako pouˇzit´ y barevn´ y prostor a gamma. D´ale jsou zde informace o nastaven´ı fotoapar´atu bˇehem poˇrizov´an´ı sn´ımku. Je zde tak´e prostor k zaps´an´ı Makernote. Makernote, v ˇceˇstinˇe tedy nˇeco jako pozn´amka od v´ yrobce, je tag urˇcen´ y pro v´ yrobce zaˇr´ızen´ı k zaps´an´ı libovoln´e informace. Obsah je plnˇe na uv´a13
Obrazov´e soubory a metadata
JPEG
ˇzen´ı v´ yrobce. [19] V´ yrobci vˇetˇsinou pouˇz´ıvaj´ı vlastn´ı propriet´arn´ı form´at ke kter´emu nezveˇrejˇ nuj´ı technickou dokumentaci. Nˇekter´e form´aty se podaˇrilo ˇc´asteˇcnˇe popsat pomoc´ı reverzn´ıho inˇzen´ yrstv´ı. [20] Dalˇs´ım adres´aˇrem je GPS IFD, kter´ y obsahuje data o m´ıstˇe, kde byl sn´ımek poˇr´ızen. P˚ uvodnˇe bylo zam´ yˇsleno data z´ısk´avat v´ yhradnˇe z GPS pˇrij´ımaˇce zabudovan´em v zaˇr´ızen´ı, nicm´enˇe verze 2.3 specifikace jiˇz pˇripouˇst´ı i z´ısk´an´ı lokaˇcn´ı informace z mobiln´ıch telefon˚ u nebo pomoc´ı u ´daj˚ u z bl´ızk´e bezdr´atov´e lok´aln´ı s´ıtˇe (WLAN).[19] Jelikoˇz je na trhu ˇrada v´ yrobc˚ u digit´aln´ıch fotoapar´at˚ u, je snaha zajistit interoperabilitu mezi zaˇr´ızen´ımi r˚ uzn´ ych v´ yrobc˚ u. Soubor poˇr´ızen´ y na libovoln´em zaˇr´ızen´ı by mˇel b´ yt zobraziteln´ y i na zaˇr´ızen´ıch jin´ ych v´ yrobc˚ u. Vzniklo nˇekolik doporuˇcen´ı, jejichˇz dodrˇzen´ım by mˇela b´ yt interoperabilita zaruˇcena. Adres´aˇr Interoperability IFD slouˇz´ı k urˇcen´ı, jak´e sadˇe doporuˇcen´ı obrazov´ y soubor vyhovuje.
2.1.4
Extensible Metadata Platform
Extensible metadata platform (XMP) je standardem ISO 16684-1:2012 pro vytv´aˇren´ı, zpracov´an´ı a pˇred´av´an´ı metadat u digit´aln´ıch dokument˚ u. XMP byla vytvoˇreno spoleˇcnost´ı Adobe Systems Inc. U JPEG form´atu jsou data uloˇzena v APP1 segmentu, stejnˇe jako data Exifu, ale segment m˚ uˇze b´ yt um´ıstˇen na libovoln´em m´ıstˇe pˇred SOF. [21] Segmenty jsou od sebe rozliˇsiteln´e podle sv´e signatury, kter´a n´asleduje za k´odem APP1. XMP je tedy kompatibiln´ı s Exif i JFIF. Ve specifikaci [22] je pops´an datov´ y model, kter´ y se shoduje s RDF modelem. Dokumenty [22, 23] definuj´ı RDF slovn´ıky t´ ykaj´ıc´ı se multimedi´aln´ıch ˇ adn´a zdroj˚ u. Ve slovn´ıku jsou definov´any pouze poˇzadovan´e datov´e typy. Z´ ontologie nad slovn´ıkem nen´ı zveˇrejnˇena. Ze sv´e podstaty m˚ uˇze b´ yt mnoˇzina metadat zapisovateln´ ych do XMP neomezenˇe rozˇsiˇrov´ana definov´an´ım a pouˇzit´ım dalˇs´ıch RDF slovn´ık˚ u. V praxi je ale uˇzivatel limitov´an aplikac´ı, jenˇz je pouˇzita ke ˇcten´ı a z´apisu informace, kter´a nemus´ı extern´ı slovn´ıky podporovat. Pro zachov´an´ı maxim´aln´ı interoperability je proto vhodn´e vyuˇz´ıvat slovn´ık definovan´ y v XMP specifikaci.
14
Obrazov´e soubory a metadata
2.1.5
JPEG
Information Interchange Model
International Press Telecommunications Council (IPTC)2 je organizace zaloˇzen´a v Lond´ ynˇe roku 1965, kter´a sdruˇzuje svˇetov´e zpravodajsk´e organizace. Byla vytvoˇrena za u ´ˇcelem zjednoduˇsen´ı pˇred´av´an´ı informac´ı a ustanoven´ı technick´ ych standard˚ u zefektivˇ nuj´ıc´ım v´ ymˇenu informace. V jednom ze standard˚ u se zab´ yv´a i metadaty v obrazov´ ych souborech. Jde o standard Information Interchange Model (IIM), moment´alnˇe ve verzi 4.2 [24]. Ve standardu jsou definov´ana metadata popisuj´ıc´ı obrazov´ y soubor ve smyslu jeho zapouzdˇren´ı pˇri pos´ıl´an´ı, do kter´ ych se zapisuje napˇr´ıklad datum zasl´an´ı souboru, pouˇzit´e k´odov´an´ı, adres´at nebo form´at souboru. V druh´e ˇc´asti jsou definov´ana metadata popisuj´ıc´ı obsah dan´eho souboru. Zde jsou informace o datu a ˇcasu poˇr´ızen´ı, autorsk´ ych pr´avech, n´azev, popisek obrazu a dalˇs´ı. Je zde i prostor pro zaps´an´ı textov´e informace o st´atu, mˇestu a objektu, kter´ y je na fotografii zobrazen. Poloˇzky kategorizuj´ıc´ı kontext obrazov´e informace jsou vymezeny kontrolovan´ ym slovn´ıkem. To znamen´a, ˇze do dan´eho pole se nevypisuje hodnota textovˇe (napˇr. Politika“), ale k´odem ” ˇ ıseln´ z pevnˇe definovan´eho ˇc´ıseln´ıku hodnot (11000000). C´ ıky jsou definovan´e v pˇr´ıloze specifikace. Metadata jsou v JPEG souboru um´ıstˇena do segmentu APP13. Segment m˚ uˇze b´ yt um´ıstˇen na libovoln´em m´ıstˇe pˇred SOF dle kapitoly 1.1.3 dokumentu [21]. Nen´ı zn´amo, ˇze by IIM byl nekompatibiln´ı s jin´ ymi metadatov´ ymi form´aty vkl´adan´ ymi do JPEG souboru. V d˚ usledku rozˇs´ıˇren´ı XMP byl vyd´an organizac´ı IPTC nov´ y standard, kter´ y popisuje zp˚ usob z´apisu IIM metadat do XMP bloku. [25] V souˇcasn´e dobˇe je standard aktu´aln´ı pro verzi 4.1 IIM, nikoliv tedy pro nejnovˇejˇs´ı 4.2. Standard popisuje mapov´an´ı nˇekter´ ych metadatov´ ych vlastnost´ı na jiˇz existuj´ıc´ı vlastnosti v XMP slovn´ıku. Pro zbyl´e pojmy je vytvoˇren nov´ y slovn´ık. Ve slovn´ıc´ıch je definov´an datov´ y typ hodnot vlastnost´ı a kardinalita vlastnost´ı.
2.1.6
Photoshop Image Resources
Adobe Photoshop, program k u ´pravˇe a vytv´aˇren´ı grafiky od spoleˇcnosti Adobe Systems Inc., vyuˇz´ıv´a ˇradu funkc´ı, jejichˇz parametry nelze zapsat do 2
Domovsk´ a str´ anka IPTC: https://iptc.org
15
Obrazov´e soubory a metadata
JPEG
bˇeˇzn´ ych rastrov´ ych obrazov´ ych soubor˚ u jako JPEG, PNG nebo TIFF. Jde napˇr´ıklad o moˇznost rozloˇzit obraz do nˇekolika vrstev, kter´e se navz´ajem pˇrekr´ yvaj´ı, a v´ ysledn´ y obraz je funkc´ı jejich sjednocen´ı. Pˇri uloˇzen´ı do bˇeˇzn´eho souboru by se uloˇzil pouze v´ ysledn´ y obraz a s jednotliv´ ymi vrstvami by nebylo moˇzn´e jiˇz pracovat. Proto spoleˇcnost vytvoˇrila vlastn´ı form´at Photoshop Document, do kter´eho je program schopen zapsat vˇse potˇrebn´e. Metadata v tomto form´atu jsou uchov´av´ana jako Photoshop Image Resources (PSIR). PSIR je moˇzn´e pouˇz´ıt i v jin´ ych souborech. V JPEG souboru se nal´ez´a v segmentu APP13 a slouˇz´ı jako kontejner obsahuj´ıc´ı i jin´a metadata jako napˇr´ıklad v´ yˇse zm´ınˇen´ y IIM [26]. Specifikace PSIR [27] uv´ad´ı seznam definovan´ ych tag˚ u.
2.1.7
ICC profil
V roce 1993 bylo zaloˇzeno International Color Consortium (ICC)3 , kter´e mˇelo vytvoˇrit otevˇren´ y a multiplatformn´ı syst´em pro spr´avu barevn´e konfigurace nez´avisl´ y na v´ yrobci zaˇr´ızen´ı. V´ ysledkem byla specifikace ICC profilu [28]. Specifikace se stala mezin´arodn´ım standardem ISO 15076-1:2010. ICC profil se pouˇz´ıv´a k transformaci obrazu poˇr´ızen´eho na zaˇr´ızen´ı s urˇcitou barevnou konfigurac´ı pro zaˇr´ızen´ı pouˇz´ıvaj´ıc´ı jinou konfiguraci tak, aby pozorovan´e barvy na sn´ımku z˚ ustaly zachov´any. Profil b´ yv´a vkl´adan´ y do obrazov´ ych soubor˚ u. V pˇr´ıpadˇe JPEG se vkl´ad´a do segmentu APP2. Specifikace JPEG ˇr´ık´a, ˇze kaˇzd´ y segment mus´ı m´ıt vyj´adˇrenou bytovou d´elku pomoc´ı 16 bitov´eho integeru. Do d´elky se zapoˇc´ıt´av´a i samotn´e vyj´adˇren´ı d´elky. Z toho plyne, ˇze velikost dat segmentu m˚ uˇze b´ yt nejv´ yˇse 65 533 byt˚ u. Jelikoˇz data profilu mohou b´ yt vˇetˇs´ı, byl zaveden zp˚ usob jak data rozdˇelit na nˇekolik ˇc´ast´ı. Kaˇzd´a ˇc´ast bude m´ıt indikaci poˇrad´ı a celkov´eho poˇctu ˇca´st´ı a kaˇzd´a bude zaps´ana do jin´eho APP2 segmentu. Z definice plyne maxim´aln´ı velikost zapisovan´eho ICC profilu jako 16 707 345 byt˚ u. [28] 3
Domovsk´ a str´ anka ICC: http://www.color.org
16
Obrazov´e soubory a metadata
2.2
PNG
PNG
Portable Network Graphics (PNG)4 je grafick´ y form´at pouˇz´ıvaj´ıc´ı bezztr´atovou kompresi. Form´at umoˇzn ˇuje zapsat data obraz˚ u v odst´ınech ˇsedi, indexov´ ych barv´ach nebo True Color (24 bitov´a barevn´a hloubka s ˇcerven´ ym, zelen´ ym a modr´ ym kan´alem). U kaˇzd´e varianty je moˇznost nastaven´ı pr˚ uhlednosti. PNG byl vytvoˇren jako n´ahrada za form´at GIF, u kter´eho doˇslo k patentov´emu sporu u kompresn´ı metody. Jedn´a se o mezin´arodn´ı standard ISO/IEC 15948:2003. MIME typ souboru je image/png. [29] Dokument specifikace [29] v u ´vodu vyjmenov´av´a nˇekolik bod˚ u jako hlavn´ı c´ıle pˇri vytv´aˇren´ı standardu. Poˇzadavek byl kladen na nez´avislost procesu k´odov´an´ı, dek´odov´an´ı a pˇrenosu na platformˇe nebo stroji. Cel´ y form´at mˇel b´ yt jednoduch´ y, aby v´ yvoj´aˇri nemˇeli probl´em standard implementovat, a dostateˇcnˇe flexibiln´ı, aby pˇr´ıpadn´e zmˇeny a rozˇs´ıˇren´ı byly kompatibiln´ı s dekod´ery p˚ uvodn´ı verze. Byla preferov´ana rychlost vykon´an´ı proces˚ u pˇri dek´odov´an´ı a prezentaci na u ´kor rychlosti zak´odov´an´ı dat. D˚ uleˇzitou podm´ınkou bylo pouˇz´ıv´an´ı pouze volnˇe dostupn´ ych algoritm˚ u, aby nedoˇslo k dalˇs´ımu patentov´emu sporu. V´ yvojov´e c´ıle byly naplnˇeny a libovoln´ y PNG dekod´er vyhovuj´ıc´ı standardu je schopen dek´odovat libovoln´ y PNG soubor. Soubor je moˇzn´e k´odovat a dek´odovat s´eriovˇe, tedy bez znalosti kompletn´ıch dat, aby obrazov´a data z datov´eho toku bylo moˇzno pr˚ ubˇeˇznˇe zobrazovat. Prezentace obrazu je progresivn´ı. To znamen´a, ˇze se pˇri zpracov´an´ı nejprve zobraz´ı hrub´a aproximace obrazu a s dalˇs´ımi pˇrich´azej´ıc´ımi daty se obraz zkvalitˇ nuje. Pˇri pˇrenosu jsou chyby detekovateln´e pomoc´ı kontroln´ıho souˇctu na konci kaˇzd´e ˇca´sti.
2.2.1
Struktura souboru
Soubor se dle specifikace [29] skl´ad´a ze signatury a posloupnosti nˇekolika chunk˚ u. Chunk je ˇca´st informace o obrazu, kter´ y m´a definovanou svoji d´elku, typ, m˚ uˇze obsahovat datovou ˇca´st a jej´ı kontroln´ı souˇcet. Datov´a ˇc´ast je nepovinn´a, protoˇze nˇekter´e chunky mohou svoji funkci plnit bez ni. Napˇr´ıklad jde o IEND uˇz´ıvan´ y k oznaˇcen´ı konce souboru. Velikost datov´e ˇca´sti m˚ uˇze b´ yt nejv´ yˇse 231 − 1 byt˚ u. 4
Domovsk´ a str´ anka PNG: http://www.libpng.org/pub/png/
17
Obrazov´e soubory a metadata
PNG
N´azev chunku se skl´ad´a ze ˇctyˇr p´ısmen, jejichˇz velikost urˇcuje vlastnosti dan´eho chunku. Velikost prvn´ıho p´ısmena ud´av´a, jestli se jedn´a o chunk kritick´ y, nebo pomocn´ y (ancillary). Kritick´e chunky maj´ı velk´e p´ısmeno a mus´ı je rozeznat a spr´avnˇe interpretovat kaˇzd´ y dekod´er. Pomocn´e dekod´er nemus´ı dek´odovat. Velikost druh´eho p´ısmena ud´av´a, ˇze se jedn´a o standardizovan´ y chunk, pokud je velk´e, nebo soukrom´ y chunk, pokud je mal´e. Tˇret´ı p´ısmeno ˇ je vˇzdy velk´e. Ctvrt´ e mal´e p´ısmeno znaˇc´ı, ˇze editor m˚ uˇze bezpeˇcnˇe chunk zkop´ırovat, i kdyˇz ho nedok´azal rozpoznat. [29] ˇ ri z nich jsou oznaˇcen´e Standard [29] definuje ˇsestn´act typ˚ u chunk˚ u. Ctyˇ jako kritick´e. Jedn´a se o IHDR obsahuj´ıc´ı hlaviˇcku souboru, PLTE s definic´ı palety pro indexov´e barvy, IDAT obsahuj´ıc´ı data obrazu a IEND. Zbyl´ ych ˇctrn´act chunk˚ u je pomocn´ ych. Obsahuj´ı informaci o pr˚ uhlednosti, nastaven´ı barevn´eho prostoru, ˇcasu poˇr´ızen´ı, barvˇe pozad´ı a rozliˇsen´ı obrazu. V pomocn´ ych chunc´ıch je tak´e nˇekolik textov´ ych, do kter´ ych lze zapisovat dvojice kl´ıˇc-hodnota.
2.2.2
Dalˇ s´ı metadata
Do chunk˚ u lze vloˇzit i metadata nˇekter´ ych dˇr´ıve zm´ınˇen´ ych form´at˚ u. Specifikace XMP [21] pˇripouˇst´ı z´apis do PNG chunku iTXt. Tento chunk se ˇrad´ı mezi textov´e a je pro nˇej definov´ano k´odov´an´ı UTF-8. Specifikace umoˇzn ˇuje existenci pouze jednoho chunku s XMP informac´ı v souboru a doporuˇcuje ho umist’ovat na zaˇca´tek. Podobnˇe lze zapsat i IIM metadata, pokud jsou pˇrevedeny do XMP modelu [25]. IIM jako takov´e vˇsak nen´ı ve form´atu PNG podporov´ano a nelze jej jinak neˇz pˇrevodem zapsat. ICC profil lze v PNG zapsat do iCCP chunku. V pˇr´ıpadˇe, ˇze enkod´er zapisuje profil do souboru, doporuˇcuje se zapsat do chunk˚ u gAMA a cHRM data z´ıskan´a aproximac´ı patˇriˇcn´ ych dat ICC profilu. T´ım se zajist´ı kompatibilita s aplikacemi, kter´e iCCP pomocn´ y chunk nedok´aˇz´ı interpretovat. Z tohoto plyne doporuˇcen´ı pro v´ yvoj´aˇre dekod´er˚ u, aby v pˇr´ıpadˇe nalezen´ı a zpracov´an´ı chunku iCCP ignorovali chunky gAMA a cHRM. [29] V r´amci projektu [30] byla snaha konvertovat Exif metadata do PNG. Bylo navrˇzeno mapov´an´ı nˇekter´ ych Exif tag˚ u na existuj´ıc´ı tagy v PNG a pro zbyl´e byl navrˇzen nov´ y chunk. Projekt ale z˚ ustal ve st´adiu n´avrhu. Pro Photoshop Image Resource metadata jsem nenalezl ˇza´dn´ y zp˚ usob vloˇzen´ı do PNG souboru. 18
Obrazov´e soubory a metadata
2.3
TIFF
TIFF
Tagged Image File Format je souborov´ y form´at k uchov´an´ı rastrov´e grafiky. Ukl´adat lze nekomprimovan´a i komprimovan´a data, ztr´atovˇe i bezztr´atovˇe. P˚ uvodn´ı verze byla vytvoˇrena v roce 1986 spoleˇcnost´ı Aldus. Souˇcasn´a verze 6.0 vyˇsla v roce 1992. Spoleˇcnost se pozdˇeji slouˇcila s Adobe Systems Inc., kter´a ted’ form´at vlastn´ı. Specifikace stanovuje z´akladn´ı verzi, TIFF Baseline, kterou mus´ı vˇsechny dekod´ery umˇet zpracovat. [31] Tato verze m´a MIME typ image/tiff. Baseline TIFF umoˇzn ˇuje m´ıt v souboru v´ıce obraz˚ u, kaˇzd´ y ve vlastn´ım adres´aˇri (IFD). Dekod´ery nicm´enˇe nejsou povinny zpracov´avat jin´e obrazy neˇz obraz z prvn´ıho adres´aˇre. Obraz je dˇelen´ y na pruhy (strips). V hlaviˇcce je kromˇe v´ yˇsky souboru definov´an i poˇcet ˇra´dek v jednom pruhu. Pruhy jsou komprimov´any jednotlivˇe, pokud je potˇreba data komprimovat. Baseline nab´ız´ı dvˇe varianty bezztr´atov´e komprese, pˇr´ıpadnˇe moˇznost ukl´adat nekomprimovan´ y obraz. Barevn´ y prostor Baseline TIFF m˚ uˇze b´ yt dvojbarevn´ y, v odst´ınech ˇsedi, indexov´ ych barv´ach a True Color. [31] Specifikace [31] definuje d´ale rozˇs´ıˇrenou verzi form´atu, kterou schv´alilo TIFF Advisory Committee. V´ yrobce dekod´er˚ u nem´a povinnost br´at na rozˇs´ıˇren´ı ohled a nen´ı tedy zaruˇceno, ˇze budou podporov´ana na vˇsech zaˇr´ızen´ıch. Autor˚ um rozˇs´ıˇren´ı je doporuˇcov´ano, aby u ´zce spolupracovali s v´ yrobci dekod´er˚ u a zajistili tak interoperabilitu. Rozˇs´ıˇren´ı mimo jin´e zav´ad´ı moˇznost komprimace pomoc´ı JPEG nebo LZW, kter´ y byl pouˇzit ve form´atu GIF a stal se pˇredmˇetem patentov´eho sporu. Je definov´ana moˇznost rozdˇelit obraz na nˇekolik stejnˇe velk´ ych ˇc´ast´ı a kaˇzdou z nich komprimovat samostatnˇe. Je uvedeno, ˇze komprese b´ yv´a u ´ˇcinnˇejˇs´ı nad ˇca´stmi s podobnou v´ yˇskou a d´elkou sp´ıˇse neˇz nad dlouh´ ymi obd´eln´ıky, kter´e vznikaj´ı u obraz˚ u s vysok´ ym rozliˇsen´ım pˇri rozdˇelov´an´ı na pruhy. [31] D´ıky rozˇs´ıˇren´ı je moˇzn´e ukl´adat obrazy s CMYK a YCbCr barevn´ ymi prostory.
2.3.1
Struktura souboru
Struktura TIFF souboru je pops´ana v kapitole 2 dokumentace [31]. V hlaviˇcce souboru je ofsetov´ y odkaz na nult´ y adres´aˇr. Na zaˇca´tku kaˇzd´eho adres´aˇre je poˇcet poloˇzek adres´aˇre. Za n´ım n´asleduje dan´ y poˇcet poloˇzek, kaˇzd´a 19
Obrazov´e soubory a metadata
TIFF
o velikosti 12 byt˚ u. Kaˇzd´a poloˇzka se skl´ad´a z tagu identifikuj´ıc´ıho v´ yznam poloˇzky, tagu datov´eho typu hodnoty, poˇctu hodnot a ofsetov´eho odkazu na hodnotu. Pokud se hodnota vejde do 4 byt˚ u, je moˇzn´e m´ısto offsetu vloˇzit do poloˇzky pˇr´ımo hodnotu. Kaˇzd´ y soubor mus´ı m´ıt alespoˇ n jeden adres´aˇr. Na konci kaˇzd´eho adres´aˇre mus´ı b´ yt odkaz na dalˇs´ı adres´aˇr. Posledn´ı adres´aˇr v ˇretˇezci mus´ı m´ıt v odkazu na dalˇs´ı adres´aˇr nulu.
2.3.2
Dalˇ s´ı metadata
Jak bylo zm´ınˇeno v kapitole 2.1.3, Exif je pro nekomprimovan´e grafick´e soubory definovan´ y nad TIFF Baseline. Struktura souboru s Exif metadaty je pops´ana v kapitole 4.5.2 dokumentu [19]. Metadata jsou um´ıstˇena jako prvn´ı adres´aˇr. TIFF m´a definov´ano nˇekolik tag˚ u pro odkazov´an´ı na bloky metadat jin´ ych form´at˚ u. Pro XMP je vyuˇz´ıv´an tag 700, pro IIM 33723 a pro PSIR 34377, dle [21], kapitola 2.1.6. Tato metadata mohou b´ yt snadno vloˇzena do TIFF. ICC profil je moˇzn´e vloˇzit pomoc´ı tagu 34675. Tag by mˇel b´ yt v adres´aˇri, ve kter´em je i odkaz na obrazov´a data, na kter´e m´a b´ yt profil aplikov´an. Jelikoˇz m˚ uˇze b´ yt v TIFF v´ıce obraz˚ u, je moˇzn´e definovat i v´ıce profil˚ u v souboru. V adres´aˇri ale nesm´ı b´ yt v´ıce neˇz jeden odkaz na ICC profil. [28]
20
3 Existuj´ıc´ı n´astroje V t´eto kapitole popisuji n´astroje, kter´e se sv´ ym charakterem t´ ykaj´ı moj´ı pr´ace a kter´e bych mohl vyuˇz´ıt k dosaˇzen´ı c´ıle. Jde v prv´e ˇradˇe o aplikace a knihovny pracuj´ıc´ı s obrazov´ ymi soubory, kter´e um´ı ˇc´ıst jejich metadata. D´ale jde o RDF slovn´ıky, kter´e by mohly poskytovat nˇekter´e pojmy uˇziteˇcn´e k uchov´an´ı informace z obrazov´ ych soubor˚ u.
3.1
N´ astroje pro extrakci metadat
´ celem t´eto pr´ace je naj´ıt metadata v obrazov´ Uˇ ych souborech a extrahovat je. Moˇznost zmˇeny a z´apisu metadatov´e informace v souboru, pˇr´ıpadnˇe vykreslen´ı obrazu, je mimo r´amec pr´ace. Z toho d˚ uvodu se v t´eto sekci zamˇeˇr´ım pˇredevˇs´ım na moˇznosti n´astroje pˇri extrahov´an´ı metadat.
3.1.1
Exiv2
Exiv2 [32] je knihovna v jazyce C++ a konzolov´a aplikace pro ˇcten´ı a editaci metadat obrazov´ ych soubor˚ u. Knihovna je licencov´ana jako GNU General 1 Public License 2.0 . Autor nab´ız´ı moˇznost po domluvˇe poskytnout knihovnu s jinou licenc´ı tak, aby ji ˇsla pouˇz´ıt v closed-source projektech. Posledn´ı stabiln´ı vydan´a verze je Exiv2 v0.24 z 2. prosince 2013. Knihovna je aktivnˇe udrˇzov´ana a v projektu2 je kaˇzd´ y den provedeno nˇekolik reviz´ı. Knihovna podporuje metadata form´at˚ u Exif, IIM a XMP. V pˇr´ıpadˇe Exif a XMP metadat um´ı z´ıskan´e hodnoty pˇrev´est na hodnoty pro ˇclovˇeka srozumiteln´e. Jde pˇredevˇs´ım o pˇrevod ˇc´ıseln´ıkov´ ych hodnot na jejich textov´e popisy, nebo pˇrid´an´ı informace o mˇern´ ych jednotk´ach, jak plynou z definice tagu. Na webov´ ych str´ank´ach knihovny lze vidˇet seznam detekovan´ ych meta3 datov´ ych tag˚ u . Rozpoznan´e jsou i Exif Makernote 10 v´ yrobc˚ u fotoapar´at˚ u. Knihovna pracuje s 26 XMP slovn´ıky. 1
http://www.gnu.org/licenses/old-licenses/gpl-2.0.html http://dev.exiv2.org/projects/exiv2/activity 3 http://www.exiv2.org/metadata.html 2
21
Existuj´ıc´ı n´astroje
N´astroje pro extrakci metadat
Knihovna se nezab´ yv´a metadaty JIF, JFIF, PNG a Photoshop Image Resource. Hodnoty ICC profilu lze z´ıskat pouze jako posloupnost byt˚ u d´ale nezpracovanou a nepopsanou.
3.1.2
ExifTool
ExifTool [33] je platformˇe nez´avisl´a knihovna a konzolov´a aplikace pro ˇcten´ı a manipulaci s obrazov´ ymi metadaty. Podporuje ˇradu typ˚ u soubor˚ u vˇcetnˇe JPEG, PNG a TIFF. Knihovna je licencov´ana jako GNU General Public License4 nebo Artistic License5 . Posledn´ı stabiln´ı verze knihovny je 9.90 z 14. bˇrezna 2015. Knihovna je aktivnˇe udrˇzov´ana a kaˇzd´ y mˇes´ıc vych´az´ı pr˚ umˇernˇe dvˇe nov´e v´ yvojov´e verze. Stabiln´ı verze vych´azej´ı pr˚ umˇernˇe ˇctyˇri roˇcnˇe. Knihovna um´ı ˇc´ıst kromˇe JIF vˇsechny v t´eto pr´aci diskutovan´e metadatov´e form´aty. Pro form´at XMP rozpozn´a 55 r˚ uzn´ ych slovn´ık˚ u. Exif Makernote jsou ˇctena pro 22 v´ yrobc˚ u zaˇr´ızen´ı.
3.1.3
Metadata Extractor
Metadata Extractor [34] je knihovna napsan´a v jazyce Java slouˇz´ıc´ı ke ˇcten´ı metadat z obrazov´ ych soubor˚ u. Mezi podporovan´ ymi form´aty jsou JPEG, PNG i TIFF. Produkt je licencovan´ y jako Apache License 2.06 . Verze 2.8.1 vydan´a 20. dubna 2015 je posledn´ı stabiln´ı verz´ı. Projekt je aktivn´ı. Knihovna ˇcte vˇsechny metadatov´e form´aty diskutovan´e v kapitole 2. V pˇr´ıpadˇe XMP dok´aˇze pˇreˇc´ıst hodnoty jen ze 4 slovn´ık˚ u. Dok´aˇze dek´odovat Exif Makernote od 15 v´ yrobc˚ u zaˇr´ızen´ı. Hodnoty tag˚ u lze pˇrev´est do tvaru pochopiteln´eho pro ˇclovˇeka s vyj´ımkou Makernote, kde pro pˇribliˇznˇe 20 % tag˚ u pˇrevod chyb´ı. 4
http://dev.perl.org/licenses/gpl1.html http://dev.perl.org/licenses/artistic.html 6 http://www.apache.org/licenses/LICENSE-2.0 5
22
Existuj´ıc´ı n´astroje
3.1.4
N´astroje pro extrakci metadat
Aperture
Aperture [35] je Java framework pro extrahov´an´ı metadat z r˚ uzn´ ych zdroj˚ ua jejich zapisov´an´ı do RDF modelu. Jako uk´azka moˇzn´ ych zdroj˚ u jsou uv´adˇeny emailov´e schr´anky, webov´e str´anky a souborov´e syst´emy. Kromˇe metadat je moˇzn´e extrahovat i text obsaˇzen´ y v datech, napˇr´ıklad obsah emailu nebo textov´eho souboru. Framework je vyd´av´an pod BSD licenc´ı, kter´a umoˇzn ˇuje pouˇz´ıt pro aplikace uˇz´ıvaj´ıc´ı Aperture API libovolnou licenci. Posledn´ı verze projektu je 1.6.0 z 30. prosince 2011. Na domovsk´ ych str´an7 k´ach frameworku se nicm´enˇe jako posledn´ı uv´ad´ı 1.5.0 z 1. ˇcervence 2010. Jeden z v´ yvoj´aˇr˚ u, Antoni Mylka, komentoval stav projektu v tiketu v reposit´aˇri [36]. Dle jeho slov je projekt mrtv´ y, a zlom nastal v roce 2011, kdy se hlavn´ı v´ yvoj´aˇr rozhodl, ˇze nechce pouˇz´ıvat RDF k uchov´av´ani dat a pˇreˇsel na jin´ y projekt. Nen´ı pr´ y ˇza´dn´ y aktivn´ı projekt, kter´ y by na Aperture navazoval ve smyslu extraktoru metadat a jejich uchov´an´ı v RDF. Zpˇetnˇe jako nejvˇetˇs´ı probl´em projektu uv´ad´ı fakt, ˇze velk´a ˇca´st lid´ı odm´ıtala RDF, a ti, kteˇr´ı ho podporovali, se nedok´azali shodnout na centr´aln´ı ontologii a m´ısto toho se snaˇzili prosadit svoji vlastn´ı. Aperture dok´aˇze z´ıskat metadata z JPEG souboru. Form´aty PNG a TIFF nejsou podporov´any. V JPEG souboru ˇcte pouze Exif metadata. Exif Makernote nedok´aˇze zpracovat. Metadata jsou mapov´ana na vlastnosti NEPOMUK ontologie.
3.1.5
Porovn´ an´ı n´ astroj˚ u
V tabulce 3.1 uv´ad´ım srovn´an´ı jmenovan´ ych n´astroj˚ u na z´akladˇe mnoˇzstv´ı jimi rozpoznateln´ ych metadatov´ ych tag˚ u. Pro Exif Makernote uv´ad´ım pouze poˇcet r˚ uzn´ ych v´ yrobc˚ u, jejichˇz metadata jsou alespoˇ n ˇc´asteˇcnˇe ˇctena. Dle m´eho n´azoru m´a tento ukazatel vˇetˇs´ı vypov´ıdaj´ıc´ı hodnotu, protoˇze jednotliv´e ˇreˇsen´ı pˇristupuj´ı odliˇsnˇe k metadat˚ um r˚ uzn´ ych model˚ u stejn´eho v´ yrobce. ExifTool pro kaˇzd´ y z 26 model˚ u v´ yrobce Canon pouˇz´ıv´a zvl´aˇstn´ı sadu tag˚ u, kter´e se v´ yznamem pˇrekr´ yvaj´ı. Metadata Extractor pouˇz´ıv´a pro tyto tagy pouze jednu sadu tag˚ u. ExifTool by tak mˇel mnohon´asobnˇe v´ıce definovan´ ych tag˚ u v pˇr´ıpadˇe, ˇze by oba n´astroje rozpozn´avaly stejnou mnoˇzinu metadat. 7
http://aperture.sourceforge.net/
23
Existuj´ıc´ı n´astroje
Bˇeˇzn´e slovn´ıky a ontologie
Vˇsechny n´astroje pracuj´ıc´ı s XMP metadaty pracuj´ı na principu hled´an´ı nadefinovan´ ych zn´am´ ych ˇretˇezc˚ u v serializaci RDF modelu vloˇzen´e do obrazov´eho souboru. Nejsou tedy schopny zobrazit libovoln´e RDF vlastnosti a jejich hodnoty. Domn´ıv´am se, ˇze toto ˇreˇsen´ı vych´az´ı ze snahy v´ yvoj´aˇr˚ u z´ıskan´a metadata pˇrev´est do ˇclovˇekem srozumiteln´eho tvaru. V souhrnn´e tabulce 3.1 uv´ad´ım poˇcty slovn´ık˚ u, s kter´ ymi n´astroj pracuje a ˇcte nˇejak´e vlastnosti v nich definovan´e.
Exif JIF JFIF ICC profil IPTC PSIR PNG Exif Makernote XMP
Metadata Extractor
Exiv2
169 9 4 65 77 43 24
290 0 0 0 71 0 0
ExifTool Aperture 282 0 4 104 84 97 43
23 0 0 0 0 0 0
15 v´ yrobc˚ u 10 v´ yrobc˚ u 22 v´ yrobc˚ u 4 slovn´ıky 26 slovn´ık˚ u 55 slovn´ık˚ u
0 0
Tabulka 3.1: Poˇcet tag˚ u v metadatov´ ych form´atech, kter´e jednotliv´e n´astroje dok´aˇz´ı rozpoznat. U makernote je uveden poˇcet v´ yrobc˚ u zaˇr´ızen´ı, jejichˇz metadata jsou alespoˇ n ˇca´steˇcnˇe ˇctena. U XMP je uveden poˇcet pouˇz´ıvan´ ych slovn´ık˚ u. Poˇcty tag˚ u u Metadata Extraktoru ˇcerp´am ze zdrojov´ ych k´od˚ u knihovny verze 2.7.2. U Exiv2 vych´az´ım z webov´e dokumentace8 ke dni 20. 4. 2015. U ExifTool ˇcerp´am ze seznam˚ u tag˚ u ke dni 20. 4. 2015, na kter´e je odkazov´ano z domovsk´e str´anky projektu9 . V pˇr´ıpadˇe Aperture jsou poˇcty z´ısk´any ze zdrojov´eho k´odu frameworku verze 1.6.0.
3.2
Bˇ eˇ zn´ e slovn´ıky a ontologie
V kapitole 1.2 jsem zm´ınil d˚ uleˇzitost vyuˇz´ıv´an´ı pojm˚ u z jiˇz existuj´ıc´ıch a pouˇz´ıvan´ ych slovn´ık˚ u pˇri n´avrhu RDF ˇreˇsen´ı. Prozkoumal jsem zn´am´e slovn´ıky a snaˇzil se naj´ıt takov´e, jejichˇz vlastnosti by byly pouˇziteln´e pro uchov´an´ı obrazov´ ych metadat. V praxi neexistuje ˇz´adn´ y centr´aln´ı registr slovn´ık˚ u a 8 9
http://www.exiv2.org/metadata.html a pˇr´ısluˇsn´e podstr´anky. http://www.sno.phy.queensu.ca/˜phil/exiftool/
24
Existuj´ıc´ı n´astroje
Bˇeˇzn´e slovn´ıky a ontologie
je tedy moˇzn´e, ˇze existuj´ı dalˇs´ı relevantn´ı slovn´ıky, kter´e jsou m´alo zn´am´e a propagovan´e.
3.2.1
Dublin Core
Dublin Core slovn´ık obsahuje sadu obecn´ ych RDF vlastnost´ı, kter´e najdou uplatnˇen´ı v ˇradˇe situac´ı. P˚ uvodn´ı verze obsahuj´ıc´ı 15 pojm˚ u, popisuj´ıc´ı napˇr. n´azev, autora, popis, typ, form´at nebo zdroj objektu, byla vyd´ana jako IETF RFC 5013, ANSI/NISO Standard Z39.85-2007 a mezin´arodn´ı standard ISO 15836-2009. Tato verze pouze vyjmenov´av´a dan´e pojmy a neklade ˇza´dn´e s´emantick´e poˇzadavky na jejich dom´enu nebo obor hodnot. Souˇcasn´a verze z roku 2012 [37] byla oproti standardu rozˇs´ıˇrena na 55 vlastnost´ı. Kromˇe toho definuje nˇekolik tˇr´ıd, kter´e vyuˇz´ıv´a k definici dom´eny a oboru hodnot u vˇsech vlastnost´ı. Pro pojmy je definovan´ y jmenn´ y prostor http://purl.org/dc/terms/. K zachov´an´ı kompatibility se standardem z˚ ust´avaj´ı na jmenn´em prostoru http://purl.org/dc/elements/1.1/ definovan´e p˚ uvodn´ı pojmy bez s´emantiky. Je tedy v tomto pˇr´ıpadˇe moˇzn´e si podle potˇreby vybrat, zda-li je vhodnˇejˇs´ı pouˇz´ıt vlastnost s definovanou s´emantikou ˇci nikoliv. V kontextu m´e pr´ace jsou uˇziteˇcn´e pˇredevˇs´ım vlastnosti p˚ uvodn´ıho slovn´ıku popisuj´ıc´ı jm´eno autora (creator ), datum poˇr´ızen´ı sn´ımku (date), popis obrazu (description) ˇci autorsk´a pr´ava (rights). K definov´an´ı m´e ontologie budou uˇziteˇcn´e vlastnosti pro n´azev a popis.
3.2.2
Friend of a Friend
Slovn´ık Friend of a Friend (FOAF) vznikl v roce 2000. Jeho c´ılem bylo umoˇznit pops´an´ı jednotliv´ ych osob a jejich vztah˚ u s jin´ ymi osobami a informacemi na webu. Sv´ ym zp˚ usobem se jednalo o jednu z prvn´ıch aplikaci konceptu linked data. Specifikace [38] dˇel´ı pojmy do tˇr´ı kategori´ı. Do hlavn´ıch (core) pojm˚ u patˇr´ı takov´e tˇr´ıdy a vlastnosti, kter´e popisuj´ı charakteristiky lid´ı nez´avisle na technologii soci´aln´ıch s´ıt´ı. Kromˇe tˇr´ıdy pro ˇclovˇeka je zde i definice tˇr´ıd pro organizaci, projekt a skupinu. V druh´e skupinˇe jsou term´ıny popisuj´ıc´ı internetov´e u ´ˇcty osob nebo str´anky projekt˚ u. Posledn´ı skupinou jsou pomocn´e term´ıny pro linked data, kter´e autoˇri povaˇzovali za uˇziteˇcn´e.
25
Existuj´ıc´ı n´astroje
Bˇeˇzn´e slovn´ıky a ontologie
Slovn´ıkov´e pojmy maj´ı k sobˇe definovanou i s´emantiku. Tˇr´ıdy maj´ı hierarchickou strukturu. U nˇekter´ ych tˇr´ıd je vymezeno pomoc´ı owl:disjointWith, ˇze nemaj´ı pr˚ unik s jin´ ymi tˇr´ıdami. Napˇr´ıklad tˇr´ıda Project nem´a pr˚ unik s tˇr´ıdami Document a Person, tzn. nic identifikovan´eho jako projekt nem˚ uˇze b´ yt z´aroveˇ n identifikov´ano jako osoba. Vlastnosti maj´ı definovanou dom´enu a obor hodnot. U vlastnost´ı navz´ajem inverzn´ıch je inverze definov´ana. Zaj´ımav´ ym pojmem ve vztahu k m´e pr´aci je thumbnail, jakoˇzto vlastnost propojuj´ıc´ı obraz se sv´ ym n´ahledem. D´ale jsou zde vlastnosti pouˇziteln´e pro podrobnˇejˇs´ı popis autora sn´ımku. Vlastnost depicts m˚ uˇze propojit obraz a objekt, ˇci osobu na nˇem zachycenou. Teoreticky by se dalo uvaˇzovat i o vlastnosti based near, kter´a propojuje dva objekty, kter´e jsou si bl´ızk´e ve smyslu geografick´e pozice.
3.2.3
Kanzaki Exif
Masahide Kanzaki vydal v roce 2003 ontologii [39], kter´a umoˇzn ˇuje zapsat Exif metadata definovan´a ve specifikaci verze 2.2. Konkr´etnˇe jde o metadata v Exif, GPS a Interoperability IFD. Makernote nejsou podporov´ana. Definovan´e tˇr´ıdy maj´ı hierarchickou strukturu. Pro tagy obsahuj´ıc´ı ˇc´ıseln´ıkov´ y k´od jsou definov´any zvl´aˇstn´ı tˇr´ıdy, jejichˇz instance odpov´ıdaj´ı jednotliv´ ym hodnot´am ˇc´ıseln´ıkov´ ych k´od˚ u. Napˇr´ıklad pro tag flash obsahuj´ıc´ı k´od se stavem blesku pˇri poˇr´ızen´ı sn´ımku je v ontologii vytvoˇrena tˇr´ıda Dataflash, jej´ımiˇz instancemi jsou Fired, NotFired, Fired-auto a dalˇs´ı. Tyto objekty maj´ı definovan´e pouze popisn´e vlastnosti rdfs:label obsahuj´ıc´ı n´azev instance a rdfs:comment obsahuj´ıc´ı textov´e vysvˇetlen´ı v´ yznamu vˇcetnˇe ˇc´ıselˇ n´ıkov´e k´odu. C´ıseln´ıkov´ y k´od jako takov´ y nen´ı ˇz´adnou vlastnost´ı samostatnˇe pops´an a musel by v pˇr´ıpadˇe potˇreby b´ yt ˇcten´ y z koment´aˇre. RDF vlastnosti jsou v ontologii hierarchicky ˇclenˇen´e a maj´ı definovanou dom´enu a obor hodnot. U liter´al˚ u je oborem hodnot datov´ y typ z XML sch´ematu. Nˇekter´e vlastnosti maj´ı anotac´ı nastavenou v´ ychoz´ı hodnotu. Kaˇzd´a vlastnost odpov´ıdaj´ıc´ı nˇekter´emu z Exif tag˚ u m´a anotac´ı pˇriˇrazen´e ˇc´ıslo dan´eho tagu.
26
Existuj´ıc´ı n´astroje
3.2.4
Bˇeˇzn´e slovn´ıky a ontologie
NEPOMUK Information Element
NEPOMUK, zkratka pro Networked Environment for Personal, Ontologybased Management of Unified Knowledge, je projekt snaˇz´ıc´ı se o vytvoˇren´ı open-source softwarov´ ych n´astroj˚ u, kter´e by umoˇznily pracovat s informacemi v poˇc´ıtaˇci s´emanticky. Jde prim´arnˇe o ot´azku pˇreveden´ı strukturovan´ ych dat z libovoln´eho datov´eho souboru do s´emantick´eho modelu, v pˇr´ıpadˇe tohoto projektu do RDF. Za t´ımto u ´ˇcelem vznikla ˇrada ontologi´ı a slovn´ık˚ u. Jejich podmnoˇzinu tvoˇr´ı sada ontologi´ı oznaˇcovan´a jako NEPOMUK Information Element (NIE) [40]. Specifikace NIE klade na ontologie nˇekolik poˇzadavk˚ u. Mimo jin´e by nemˇely uˇz´ıvat jazykov´e konstrukce, kter´e nejsou v RDF sch´ematu, nebo v NEPOMUK Representation Language, coˇz je nadstavba nad RDFS pro projekt NEPOMUK. Je nutn´e specifikovat dom´enu a obor hodnot u vlastnost´ı v ontologii. U tˇr´ıd by mˇela b´ yt vytvoˇrena hierarchie, pokud je to moˇzn´e. Prvn´ı ontologi´ı v sadˇe je NIE [40], dle kter´e se jmenuje cel´a sada. V n´ı je definov´ana tˇr´ıda Informaˇcn´ıho elementu, coˇz je abstraktn´ı tˇr´ıda pro informace uloˇzen´e v souboru. V ontologii se nach´az´ı vlastnosti, kter´e se hod´ı k zaps´an´ı IPTC metadat. Jsou to copyright, contentCreated popisuj´ıc´ı dobu vytvoˇren´ı obsahu, keyword s kl´ıˇcov´ ymi slovy a title pro n´azev sn´ımku. NEPOMUK File Ontology [41] nab´ız´ı moˇznosti jak zapsat informace o datov´em souboru na disku. Jsou zde vlastnosti k zaps´an´ı jm´ena souboru, hash otisku, dobu vytvoˇren´ı a modifikace. Pro obrazov´e soubory jsou zaj´ımav´e vlastnosti urˇcuj´ıc´ı, z kolika prvk˚ u je sloˇzena barevn´a paleta, zda-li doch´az´ı k prokl´ad´an´ı obrazu (interlace) nebo jak´ ym zp˚ usobem je komprimov´an. Posledn´ı zaj´ımavou ontologi´ı je NEPOMUK EXIF ontologie (NEXIF) [42]. Tato ontologie mˇela vzniknout jako rozˇs´ıˇren´ı Kanzakiho ontologie, kter´a v t´e dobˇe postr´adala definici dom´eny a oboru hodnot vlastnost´ı a nevyhovovala tak nastaven´ ym poˇzadavk˚ um projektu na ontologie. K d˚ uleˇzit´e zmˇenˇe doˇslo u vlastnost´ı, pro kter´e Kanzaki definoval ˇc´ıseln´ıkov´e tˇr´ıdy. V specifikaci NEXIF maj´ı tyto vlastnosti obor hodnot integer nebo string. Ontologie tak ztr´ac´ı funkci kontrolovan´eho slovn´ıku. Na druhou stranu je moˇzn´e do tˇechto vlastnost´ı pˇriˇradit hodnotu, kter´a ve specifikaci Exif nen´ı definovan´a, ale je zaveden´a v´ yrobcem v Makernote.
27
Existuj´ıc´ı n´astroje
3.2.5
Bˇeˇzn´e slovn´ıky a ontologie
Geo
Exif metadata obsahuj´ı i u ´daj o geografick´e poloze, kde byl sn´ımek poˇr´ızen. K z´apisu t´eto informace lze vyuˇz´ıt slovn´ık vytvoˇren´ y W3C [43]. Slovn´ık definuje tˇr´ıdu geografick´eho bodu a jej´ı vlastnosti zemˇepisn´a d´elka, ˇs´ıˇrka a v´ yˇska. Obor hodnot vlastnost´ı nen´ı definovan´ y, je doporuˇcov´ano pouˇz´ıvat textov´ y ˇretˇezec.
3.2.6
Adobe slovn´ıky
Spoleˇcnost Adobe Systems vyuˇz´ıv´a metadatov´ y form´at XMP, kter´ y je zaloˇzen na RDF. Aby bylo moˇzn´e uchov´avat data, vytvoˇrila nˇekolik slovn´ık˚ u obsahuj´ıc´ıch pojmy k popisu obrazov´ ych dat. Slovn´ıky jsou do urˇcit´e m´ıry pops´any ve specifikac´ıch XMP [21, 22, 23] a dokumentu mapov´an´ı IIM na XMP[25]. Dle dokument˚ u se zd´a, ˇze slovn´ıky pokr´ yvaj´ı velkou mnoˇzinu obrazov´ ych metadat. V dokumentech jsou vˇsak pouze informace o jmenn´em prostoru, n´azvu vlastnosti a datov´em typu. Nen´ı zn´amo, zda-li mezi pojmy existuj´ı dalˇs´ı ontologick´e vztahy. Spoleˇcnost nikde nezveˇrejnila serializaci definice slovn´ık˚ u do nˇekter´eho z RDF form´at˚ u. Slovn´ıky tak bohuˇzel nelze vyuˇz´ıt v s´emantick´ ych aplikac´ıch pracuj´ıc´ıch s ontologiemi.
28
4 N´avrh ˇreˇsen´ı 4.1
Poˇ zadavky na ˇ reˇ sen´ı
V zad´an´ı je vymezeno, ˇze ˇreˇsen´ı by mˇelo vych´azet z potˇreb projektu Medical Research & Education (MRE) na Katedˇre informatiky a v´ ypoˇcetn´ı techniky Z´apadoˇcesk´e univerzity v Plzni1 . V tomto projektu je vyv´ıjen n´astroj MetaMed, kter´ y je pouˇz´ıv´an k extrakci metadat z pˇr´ıchoz´ıch l´ekaˇrsk´ ych dat v r˚ uzn´ ych form´atech. Metadata obrazov´ ych soubor˚ u ale nejsou zat´ım programem ˇr´adnˇe extrahov´ana. Program pouze zap´ıˇse jejich obecn´a metadata jako n´azev souboru, datum vytvoˇren´ı souboru nebo hash otisk. Informace obsaˇzen´e v obrazov´ ych metadatech by byly uˇziteˇcn´e pro dalˇs´ı pr´aci se soubory a poˇzadavek na jejich extrakci mˇel vysokou prioritu. Proto v pr´aci ˇreˇs´ım pr´avˇe obrazov´e soubory. Po konzultaci s vedouc´ım diplomov´e pr´ace byly na z´akladˇe ˇcetnosti uˇzit´ı vybr´any grafick´e soubory MIME typ˚ u image/jpeg, image/png a image/tiff jako vhodn´e k ˇreˇsen´ı. ˇ sen´ı bude m´ıt formu pluginu pro aplikaci MetaMed v jazyce Java. MeReˇ taMed je licencovan´ y pod GNU General Public Licence verze 32 . Je nutn´e br´at ohled na kompatibilitu licenc´ı extern´ıch knihoven s touto licenc´ı. MetaMed nen´ı v´az´an na konkr´etn´ı operaˇcn´ı syst´em ˇci platformu, plugin by tedy mˇel b´ yt tak´e multiplatformn´ı. Aplikace poskytuje rozhran´ı pro pˇripojen´ı pluginu. Posledn´ım poˇzadavkem je uloˇzen´ı z´ıskan´ ych metadat do RDF modelu, s kter´ ym MetaMed pracuje.
4.2
Test existuj´ıc´ıch extrakˇ cn´ıch n´ astroj˚ u
Proces ˇcten´ı metadat z obrazov´ ych soubor˚ u nen´ı trivi´aln´ı, d˚ ukazem tomu budiˇz fakt, ˇze existuj´ıc´ı n´astroje se liˇs´ı v mnoˇzstv´ı z´ıskateln´ ych metadat, viz tabulka 3.1. Nav´ıc v pˇr´ıpadˇe Exif Makernote nen´ı k dispozici dokumentace popisuj´ıc´ı jejich v´ yznam a zp˚ usob z´apisu. Pro tuto ˇcinnost by zˇrejmˇe bylo vhodn´e prozkoumat moˇznost vyuˇzit´ı jiˇz existuj´ıc´ıho a ovˇeˇren´eho ˇreˇsen´ı jin´ ych 1 2
Domovsk´ a str´ anka Medical Research & Education: http://medical.kiv.zcu.cz/ http://www.gnu.org/licenses/gpl-3.0.en.html
29
N´avrh ˇreˇsen´ı
Test existuj´ıc´ıch extrakˇcn´ıch n´astroj˚ u
autor˚ u. V kapitole 3.1 jsem popsal nˇekolik n´astroj˚ u pracuj´ıc´ıch s metadaty, kter´e se sv´ ym r´amcem bl´ıˇz´ı n´aplni t´eto pr´ace. Pro porovn´an´ı n´astroj˚ u a pˇrehlednou prezentaci jejich schopnosti extrahovat metadata jsem vybral ˇctyˇri testovac´ı obrazov´e soubory, kter´e sv´ ymi obsaˇzen´ ymi metadaty dostateˇcnˇe ilustruj´ı pr˚ umˇern´ y stav z dostupn´ ych soubor˚ u. Jedn´a se o jeden soubor PNG form´atu, jeden TIFF soubor a dva JPEG soubory. Soubory JPEG a TIFF jsou poˇr´ızeny fotoapar´aty r˚ uzn´ ych v´ yrobc˚ u, konkr´etnˇe spoleˇcnostmi Canon, Olympus a Nikon. Pouˇzit´e verze n´astroj˚ u pˇri testov´an´ı jsou Metadata Extractor 2.7.2, Exiv2 0.24, Exiftool 9.94, Aperture 1.6.0. Nalezen´ı vhodn´ ych soubor˚ u, ve kter´ ych by bylo zastoupeno co nejv´ıce r˚ uzn´ ych metadatov´ ych form´at˚ u a tag˚ u, bylo obt´ıˇzn´e. U soubor˚ u ˇcasto chybˇela informace o tom, zda-li je moˇzn´e je volnˇe uˇz´ıt v m´e pr´aci. Nakonec jsem zvolil soubory, kter´e jsou sb´ır´any autorem Metadata Extraktoru a n´aslednˇe poskytov´any volnˇe k libovoln´emu uˇzit´ı. Archiv3 v souˇcasn´e dobˇe obsahuje 385 grafick´ ych soubor˚ u 22 r˚ uzn´ ych form´at˚ u. Poˇcty nalezen´ ych tag˚ u uv´ad´ım v souhrnn´e tabulce 4.1, detailn´ı tabulka vˇcetnˇe seznamu nalezen´ ych metadat je na pˇriloˇzen´em DVD. Z podstaty vˇeci nelze urˇcit celkov´ y poˇcet metadat v souborech a vyj´adˇrit pod´ılem nalezen´e mnoˇzstv´ı z celku. V tabulce pro pˇrehlednost uv´ad´ım hodnotu pouze v pˇr´ıpadˇe, ˇze v dan´em souboru nˇekter´ y z extraktor˚ u nalezl alespoˇ n jeden tag pˇr´ısluˇsn´eho metadatov´eho form´atu. Pokud byla metadata ve v´ıce souborech, jsou poˇcty v´ yskyt˚ u pro jednotliv´e soubory oddˇeleny ˇc´arkou. V takov´em pˇr´ıpadˇe je poˇrad´ı hodnot v´ yznamn´e a je stejn´e pro vˇsechny pole dan´e ˇra´dky. N´astroje se neshoduj´ı na n´azvech metadatov´ ych form´at˚ u. Uv´ad´ım oznaˇcen´ı zaveden´e v t´eto pr´aci. V jednom ze soubor˚ u byla nalezena metadata form´atu Adobe JPEG, kter´ y v t´eto pr´aci nen´ı popsan´ y. N´astroje ExifTool a Aperture metadata Exif d´ale neˇclen´ı. Oproti tomu Metadata Extractor a Exiv2 je tˇr´ıd´ı dle IFD, ve kter´em jsou obsaˇzeny. Abych mohl smysluplnˇe porovn´avat v´ ysledky, uv´ad´ım v ˇra´dku Exif souˇcet nalezen´ ych metadat ze vˇsech Exif IFD kromˇe Exif Makernote. Ta jsou uvedena samostatnˇe. V tabulce 4.1 jsou tuˇcnˇe zv´ yraznˇeny maxima pro dan´ y metadatov´ y form´at a soubor. Z tohoto testu nevzeˇsel dominantn´ı n´astroj, tedy takov´ y, kter´ y by v kaˇzd´em souboru nalezl nejv´ıce metadat ve vˇsech metadatov´ ych form´atech. 3
https://github.com/drewnoakes/metadata-extractor-images
30
N´avrh ˇreˇsen´ı
Test existuj´ıc´ıch extrakˇcn´ıch n´astroj˚ u
Metadata Extractor Exif Exif Makernote JIF Adobe JPEG ICC profil IPTC PSIR XMP PNG
Exiv2
ExifTool Aperture
42, 44, 72 45, 46, 73 36, 38, 57 132, 49 105, 116 144, 160 8, 8 0, 0 0, 0 4 0 4 30, 0 0, 0 39, 25 3 3 3 2 0 2 13 127 84 14 0 14
13, 13, 0 0, 0 0, 0 0 0, 0 0 0 0 0
Tabulka 4.1: Poˇcet nalezen´ ych metadat u testovan´ ych soubor˚ u. V pˇr´ıpadˇe v´ yskytu metadatov´eho form´atu ve v´ıce souborech jsou hodnoty pro jednotliv´e soubory oddˇeleny ˇca´rkou. Tuˇcnˇe jsou zv´ yraznˇeny maxima pro konkr´etn´ı soubor a metadatov´ y form´at. Jako nevyhovuj´ıc´ı se jev´ı Aperture, kter´ y, jak jiˇz bylo pops´ano v kapitole 3.1.4 a uk´az´ano v tabulce 3.1, um´ı pracovat pouze s Exif daty JPEG souboru. Ani zde ale nedosahuje u ´rovnˇe ostatn´ıch n´astroj˚ u. Vhodn´ y nen´ı ani Exiv2, kter´ y nedok´aˇze pracovat s PNG soubory a metadatov´ ymi form´aty jin´ ymi neˇz Exif, IPTC a XMP. Pro ˇr´adn´e otestov´an´ı schopnosti pr´ace s IPTC bylo v testovan´e sadˇe m´alo metadat tohoto typu. N´astroj nalezl 3 metadata stejnˇe jako Metadata Extractor a ExifTool. V pˇr´ıpadˇe Exif metadat identifikoval Exiv2 nejv´ıce metadat ze vˇsech n´astroj˚ u. Po hlubˇs´ım srovn´an´ı nalezen´ ych tag˚ u se uk´azalo, ˇze na rozd´ıl od ostatn´ıch vypisuje i odkazy na IFD formou bytov´eho offsetu v souboru. Bez tˇechto odkaz˚ u odpov´ıdaj´ı mnoˇziny nalezen´ ych tag˚ u tˇem, kter´e z´ıskal Metadata Extractor. Exif Makernote zpracoval Exiv2 v obou pˇr´ıpadech. V XMP z´aznamu dok´azal Exiv2 pˇreˇc´ıst nejv´ıce vlastnost´ı i pˇresto, ˇze m´a definov´ano m´enˇe slovn´ık˚ u neˇz ExifTool, viz tabulka 3.1. Metadata Extractor dok´azal z´ıskat ve vˇsech pˇr´ıpadech v´ıce Exif metadat neˇz ExifTool. Jako jedin´ y rozpoznal JIF metadata obsaˇzen´a v JPEG souborech. U metadatov´ ych form´at˚ u Adobe JPEG, IPTC, PSIR a PNG rozpoznal ˇ stejn´a metadata jako ExifTool. Spatn´ y v´ ysledek mˇel Metadata Extractor u XMP, kde dok´azal pˇreˇc´ıst pouze 13 tag˚ u oproti 84 tag˚ u ˇcten´ ych ExifToolem. Tento v´ ysledek pramen´ı z toho, ˇze Metadata Extractor pouˇz´ıv´a pouze 4 slovn´ıky. Metadata Extractor nedok´azal extrahovat ICC profil z testovan´eho souboru TIFF. Z JPEG souboru profil pˇreˇcetl, ale z´ıskal m´enˇe metadat neˇz 31
N´avrh ˇreˇsen´ı
Volba n´astroje
ExifTool. U v´ ysledku ˇcten´ı Makernote tag˚ u je d˚ uleˇzit´e poznamenat, ˇze zde Metadata Extractor vypisuje i tagy, u kter´ ych nezn´a v´ yznam. Jde o 50, resp. 3 tagy. Po jejich odeˇcten´ı je na tom kvantitativnˇe h˚ uˇre neˇz Exiv2 a ExifTool. U ExifTool je probl´em s nemoˇznost´ı zpracov´avat JIF metadata. Exif metadata nepˇreˇcetl v takov´e m´ıˇre jako Metadata Extractor a Exiv2. XMP metadat zpracoval m´enˇe neˇz Exiv2. U ostatn´ıch metadatov´ ych form´at˚ u mˇel nejlepˇs´ı v´ ysledek.
4.3
Volba n´ astroje
Z hlediska mnoˇzstv´ı rozpoznan´ ych tag˚ u v pˇredchoz´ım testu nebyl ˇza´dn´ y n´astroj perfektn´ı. Kaˇzd´ y z trojice Metadata Extractor, Exiv2 a ExifTool mˇel oblast, ve kter´e vynikal. Variantou by tedy bylo vyuˇz´ıt v m´em pluginu vˇsechny n´astroje podle jejich siln´ ych str´anek. Jelikoˇz je kaˇzd´ y ps´an v jin´em jazyce, bylo by v r´amci jejich integrace nutn´e hledat zp˚ usob jak efektivnˇe volat procedury jin´eho jazyka. Probl´em by bylo moˇzn´e obej´ıt pouˇz´ıv´an´ım konzolov´ ych aplikac´ı m´ısto knihoven a ˇcten´ım extrahovan´ ych metadat z v´ ystupu aplikac´ı. Tento pˇr´ıstup vˇsak otev´ır´a nov´e probl´emy s identifikac´ı tag˚ u a jejich hodnoty. ExifTool uv´ad´ı pouze n´azvy vlastnost´ı a metadatov´ y form´at. XMP metadata se stejn´ ym n´azvem, ale jin´ ym adres´aˇrem, nelze proto rozliˇsit. Takto pˇred´avan´a metadata by nav´ıc jiˇz byla interpretov´ana, coˇz by vadilo pˇri procesu mapov´an´ı do RDF na existuj´ıc´ı slovn´ıky, ve kter´ ych m˚ uˇze b´ yt poˇzadov´ana ˇc´ıseln´ıkov´a hodnota. Dalˇs´ım probl´emem by byla ot´azka rozdˇelen´ı ˇreˇsen´eho probl´emu mezi n´astroje. ExifTool m´a v´ıce jak dvojn´asobn´ y poˇcet slovn´ık˚ u pro XMP neˇz Exiv2, ale extrahoval v testu m´enˇe metadat. Kter´ y z nich m´a b´ yt v takov´em pˇr´ıpadˇe urˇcen ke zpracov´an´ı dan´eho form´atu? I kdyby se probl´em rozdˇeloval aˇz na u ´rovni slovn´ık˚ u a v´ yrobc˚ u Makernote, byla by potˇreba vypracovat podrobn´a anal´ yza rozpoznateln´ ych metadat a m´ıry jejich uˇziteˇcnosti, aby ˇslo exaktnˇe rozhodnout o n´astroji, kter´ y bude slovn´ık ˇci dan´eho v´ yrobce ˇreˇsit. Toto ˇreˇsen´ı se mi zd´alo nepraktick´e a proto jsem se rozhodl zvolit pouze jednu knihovnu, s kterou budu pracovat. V t´eto f´azi jsem jiˇz uvaˇzoval pouze n´astroje Metadata Extractor a ExifTool, kter´e podporuj´ı vˇsechny poˇzadovan´e souborov´e form´aty. Metadata Extractor je ps´an v jazyku Java, ExifTool je v jazyku Perl. Jelikoˇz plugin m´a b´ yt v jazyku Java a j´a nem´am ˇza´dn´e zkuˇse-
32
N´avrh ˇreˇsen´ı
V´ybˇer ontologi´ı a slovn´ık˚ u
nosti s vol´an´ım procedur jazyka Perl Java aplikac´ı a ani s jazykem Perl jako takov´ ym, rozhodl jsem se pro Metadata Extractor.
4.4
V´ ybˇ er ontologi´ı a slovn´ık˚ u
Extrahovan´a metadata z obrazov´ ych soubor˚ u maj´ı b´ yt uloˇzena do RDF. V kapitole 3.2 jsem pˇredstavil slovn´ıky, kter´e jsou pouˇz´ıvan´e a definuj´ı pojmy t´ ykaj´ıc´ı se t´eto pr´ace. Neexistuje ˇz´adn´ y slovn´ık, kter´ y by sv´ ym rozsahem pokryl cel´ y ˇreˇsen´ y probl´em. V pr´aci tedy kombinuji pojmy z r˚ uzn´ ych slovn´ık˚ u, pokud to jejich s´emantika definovan´a v ontologii umoˇzn ˇuje. Kanzakiho Exif slovn´ık a NEXIF, kter´ y je souˇc´ast´ı NEPOMUK projektu, definuj´ı pojmy pro Exif metadata obrazov´ ych soubor˚ u. Kaˇzd´ y ale nab´ız´ı jin´e ontologick´e ˇreˇsen´ı. Kanzaki vyuˇz´ıv´a konceptu kontrolovan´ ych slovn´ık˚ u pro Exif tagy, kter´e maj´ı charakter ˇc´ıseln´ıku. Oproti tomu NEXIF u vˇetˇsiny tˇechto tag˚ u poˇzaduje textovou hodnotu, kter´e odpov´ıd´a ˇc´ıseln´ıkov´ y k´od. V´ yjimkou jsou v souˇcasn´e specifikaci pojmy pro orientaci sn´ımku a z´apis tag˚ u GPS IFD Exifu. NEXIF nab´ız´ı v´ıce pojm˚ u neˇz Kanzakiho slovn´ık (156 oproti 142). Z tˇechto dvou slovn´ık˚ u jsem se rozhodl pro vyuˇzit´ı NEXIF na z´akladˇe toho, ˇze byl vytvoˇren jako rozˇs´ıˇren´ı Kanzakiho slovn´ıku, je propojen´ y s dalˇs´ımi slovn´ıky NEPOMUK projektu a obsahuje v´ıce pojm˚ u. Tato volba je d´ale v´ yhodn´a pˇri vytv´aˇren´ı mapov´an´ı Makernote metadat, kter´e ˇz´adn´ y slovn´ık explicitnˇe neˇreˇs´ı. Makernote metadata obsahuj´ı nˇekter´e tagy v´ yznamem odpov´ıdaj´ıc´ı tag˚ um specifikovan´ ym v Exif form´atu, ale pro ˇc´ıseln´ıkov´e tagy mohou zapisovat i dalˇs´ı k´ody. Jelikoˇz NEXIF nem´a kontrolovan´ y slovn´ık pro takov´a metadata a vyuˇz´ıv´a textov´e hodnoty, nen´ı probl´em namapovat Makernote tag i pˇresto, ˇze se neshoduje strukturou ˇc´ıseln´ıku. Aby bylo moˇzn´e se zapsan´ ymi informacemi do RDF d´ale pracovat je potˇreba m´ıt dostupnou ontologii pro pouˇz´ıvan´e slovn´ıky. V tomto ohledu nevyhovuj´ı Adobe slovn´ıky, pro kter´e nen´ı soubor s ontologi´ı uvolnˇen. S´emantiku lze ˇc´asteˇcnˇe dohledat v dokumentech specifikuj´ıc´ıch XMP, ale takov´ y form´at je v tomto pˇr´ıpadˇe nepouˇziteln´ y. Adobe slovn´ıky, na kter´ ych je vybudov´an XMP form´at, proto nemohu pouˇz´ıt.
33
N´avrh ˇreˇsen´ı
4.5
Implementovan´e rozhran´ı
Implementovan´ e rozhran´ı
Plugin obsahuje tˇri tˇr´ıdy extraktor˚ u, jednu pro kaˇzd´ y typ obrazov´ ych soubor˚ u. Tyto tˇr´ıdy implementuj´ı rozhran´ı Extractor poskytovan´e knihovnou LibMed aplikace MetaMed. Tˇr´ıdy dˇed´ı z abstraktn´ı tˇr´ıdy AbstractExtractor, kter´a je tak´e deklarov´ana v knihovnˇe. Tento vztah je zachycen v diagramu tˇr´ıd na obr´azku 4.1. Diagram obsahuje i signatury procedur.
Obr´azek 4.1: Diagram tˇr´ıd zachycuj´ıc´ı implementovan´e rozhran´ı a dˇediˇcnost extraktor˚ u. Rozhran´ı pˇredepisuje sedm metod, kter´e je potˇreba implementovat. Metodou extract(File) je v parametru pˇred´av´an odkaz na soubor, z kter´eho maj´ı b´ yt z´ısk´ana metadata. Metadata se uloˇz´ı do RDF modelu, na kter´ y je pro4 cedurou vr´acen odkaz. MetaMed pouˇz´ıv´a framework Jena k pr´aci s RDF modely a vracen´ y model je instanc´ı tˇr´ıdy implementuj´ıc´ı rozhran´ı Model 5 z tohoto frameworku. Metoda hasSupport(File) slouˇz´ı k urˇcen´ı, zda-li extraktor dok´aˇze pracovat s form´atem souboru, kter´ y je pˇred´avan´ y v parametru. Metodou setModel(Model) se extraktoru pˇred´a odkaz na RDF model, do kter´eho m´a b´ yt zapisov´ano. Metodami getModel(), getExtractorName() a getFileType() se z´ısk´a z extraktoru odkaz na pouˇz´ıvan´ y RDF model, ˇretˇezec s n´azvem extraktoru, respektive ˇretˇezec s datov´ ym typem, kter´ y je extraktorem zpracov´av´an. Vol´an´ım metody initialize() by se mˇela instance extraktoru pˇripravit k pouˇzit´ı. Abstraktn´ı tˇr´ıda AbstractExtractor implementuje kromˇe metod extract(File) a initialize() vˇsechny pˇredepsan´e metody. 4 5
Domovsk´ a str´ anka frameworku: https://jena.apache.org/ com.hp.hpl.jena.rdf.model.Model
34
N´avrh ˇreˇsen´ı
4.6
Struktura Metadata Extractoru
Struktura Metadata Extractoru
Metadata Extraktor ˇclen´ı zn´am´e metadatov´e tagy do adres´aˇr˚ u. Pro kaˇzd´ y adres´aˇr existuj´ı tˇr´ıdy s n´azvem kodDirectory.java a kodDescriptor.java, kde kod je zkratka n´azvu adres´aˇre. V prvn´ım ze soubor˚ u jsou definovan´e ˇc´ıseln´e k´ody zn´am´ ych metadatov´ ych tag˚ u, n´azvy tag˚ u a procedury pro jejich z´ısk´an´ı ze souboru. Do procedur b´ yv´a zakomponov´ana i kontrola spr´avnosti dat. V druh´em souboru jsou definovan´e procedury k pˇrevodu extrahovan´e hodnoty do form´atu pro ˇclovˇeka srozumiteln´eho. Extrakce obrazov´ ych metadat ze souboru prob´ıh´a pomoc´ı funkce readMetadata(File), kterou poskytuj´ı tˇr´ıdy JpegMetadataReader, PngMetadataReader a TiffMetadataReader. Funkce vrac´ı objekt tˇr´ıdy Metadata se z´ıskan´ ymi metadaty. Tento objekt v sobˇe obsahuje nˇekolik objekt˚ u tˇr´ıdy Directory, a kaˇzd´ y z nich obsahuje nˇekolik objekt˚ u tˇr´ıdy Tag. Pokud soubor neobsahuje metadata, nebo je nebylo moˇzn´e pˇreˇc´ıst, nebude v Metadata instanci ˇz´adn´ y Directory objekt. Z objektu Directory lze zjistit poˇcet zn´am´ ych tag˚ u pro dan´ y adres´aˇr nebo poˇcet nalezen´ ych tag˚ u, tedy objekt˚ u tˇr´ıdy Tag v instanci Directory. Objekt uchov´av´a v hashovac´ıch map´ach z´ıskan´e hodnoty, z´ıskan´e hodnoty pˇreveden´e do pˇrijatelnˇejˇs´ıho tvaru pro ˇclovˇeka a n´azvy metadat. Hashovac´ı mapy maj´ı jako kl´ıˇc ˇc´ıseln´ y k´od tagu. Objekt um´ı vr´atit iter´ator pˇres nalezen´e tagy. U objekt˚ u tˇr´ıdy Tag lze z´ıskat pˇreloˇzenou extrahovanou hodnotu, ˇc´ıseln´ y k´od tagu decim´alnˇe nebo hexadecim´alnˇe, ˇci n´azev tagu. Extrahovanou hodnotu nepˇreloˇzenou nelze z objektu z´ıskat. Je potˇreba pouˇz´ıt adres´aˇrov´ y objekt. Extrahovan´e hodnoty jsou textov´e ˇretˇezce bez ohledu na jejich v´ yznam.
35
5 Implementace Architektura ˇreˇsen´ı je zobrazena diagramem tˇr´ıd na obr´azku 5.1. Tˇr´ıdy jsou rozdˇeleny do ˇctyˇr bal´ık˚ u. V bal´ıku extractor jsou tˇr´ıdy implementuj´ıc´ı rozhran´ı Extractor MetaMedu. V bal´ıku mapping je pouze jedna tˇr´ıda, IndividualData, kterou pouˇz´ıv´am pro uchov´an´ı definice mapov´an´ı pro urˇcit´ y tag. Bal´ık util obsahuje tˇri tˇr´ıdy se statick´ ymi procedurami uˇziteˇcn´ ymi pˇri zpracov´an´ı metadat a tˇr´ıdu OneLinerLogFormat potˇrebnou pˇri inicializaci Java loggeru, aby byla zjednoduˇsena syntaxe zapisovan´ ych z´aznam˚ u do logu. Posledn´ı bal´ık, common, obsahuje tˇr´ıdu zpracov´avaj´ıc´ı extrahovan´a metadata nez´avisle na typu souboru a tˇr´ıdu spravuj´ıc´ı konfiguraci pluginu. V diagramu pro pˇrehlednost vynech´av´am procedury, kter´e slouˇz´ı k rozˇclenˇen´ı komplexn´ıch ˇcinnost´ı a uv´ad´ım pouze hlavn´ı proceduru. Napˇr´ıklad tˇr´ıda ValueTransformator m´a 15 neuveden´ ych priv´atn´ıch procedur na transformaci hodnot, kter´e se volaj´ı v z´avislosti na vstupn´ım parametru funkce dataTransformation. Pln´e kˇrivky v diagramu znaˇc´ı asociaci, tzn. ˇze tˇr´ıda, z kter´e kˇrivka vych´az´ı, m´a ve sv´em atributu odkaz na instanci tˇr´ıdy, do kter´e kˇrivka vede. Pˇreruˇsovan´a kˇrivka znaˇc´ı z´avislost, tedy ˇze tˇr´ıda, z kter´e kˇrivka vych´az´ı, v nˇekter´e ze sv´ ych procedur vyuˇz´ıv´a proceduru ˇci atribut tˇr´ıdy, do kter´e je kˇrivka vedena. Pro zmenˇsen´ı poˇctu lini´ı v diagramu vykresluji pouze jednu spojnici na okraj bal´ıku v pˇr´ıpadˇe, ˇze dan´a z´avislost ˇci asociace plat´ı pro kaˇzdou tˇr´ıdu bal´ıku.
5.1
Bal´ık extractor
Extraktory vyuˇz´ıvaj´ı anotaci @MetaDataExtractor definovanou knihovnou LibMed v projektu MetaMed. D´ıky t´eto anotaci dok´aˇze aplikace MetaMed naj´ıt vˇsechny tˇr´ıdy extraktor˚ u aniˇz by na nˇe bylo ve zdrojov´em k´odu pˇr´ımo odkazov´ano. Knihovna Metadata Extractor pracuje s obrazov´ ymi soubory JPEG, PNG a TIFF podobnˇe. Pˇri implementaci proto nebylo potˇreba navrhovat odliˇsn´e algoritmy a k´ody v extraktorech jsou si podobn´e. Kaˇzd´ y extraktor si uchov´av´a v priv´atn´ıch atributech odkaz na ontologick´ y model obsahuj´ıc´ı definici mapov´an´ı metadat na RDF vlastnosti, konfiguraci, n´astroj k zaps´an´ı RDF trojice do modelu a instanci ExtractorLogic, kter´a obsahuje hlavn´ı logiku ex36
Implementace
Bal´ık extractor
Obr´azek 5.1: Diagram tˇr´ıd v pluginu a jejich vz´ajemn´ ych z´avislost´ı. trakce a zpracov´an´ı metadat spoleˇcnou pro vˇsechny extraktory. Kromˇe toho m´a kaˇzd´ y definov´an v hashovac´ı mapˇe tˇr´ıdy metadatov´ ych adres´aˇr˚ u z Metadata Extractoru, kter´e jsou pro dan´ y typ souboru pˇr´ıpustn´e, a jejich k´odovou zkratku. Vol´an´ım konstruktoru se pˇriˇrad´ı ˇretˇezec s MIME typem, kter´ y extractor ˇreˇs´ı, do zdˇedˇen´eho atributu fileType a nastav´ı se n´azev extraktoru dle jm´ena extraktorov´e tˇr´ıdy. Vol´an´ı konstruktoru s parametrem pouˇz´ıvan´eho RDF modelu pˇriˇrad´ı jeho odkaz do zdˇedˇen´e promˇenn´e model.
37
Implementace
Bal´ık extractor
Pro u ´plnou implementaci rozhran´ı mus´ı tˇr´ıdy poskytnout vlastn´ı implementaci dvou procedur. Proceduru initialize() vol´a MetaMed jednor´azovˇe na zaˇc´atku procesu extrakce metadat ze soubor˚ u. Procedura z´ısk´a odkazy na instance singleton˚ u ExtractorSettings a ExtractorLogic a z nich d´ale odkazy na instanci utility k z´apisu do RDF modelu, RDFUtil projektu MetaMed, a ontologick´eho modelu, ve kter´em je naˇctena mapovac´ı ontologie. Druh´a procedura, extract(File), je vol´ana pro kaˇzd´ y zpracov´avan´ y soubor a obsahuje algoritmus k pˇreˇcten´ı, zpracov´an´ı a z´apisu metadatov´e informace.
5.1.1
Algoritmus extrakce
Algoritmus se skl´ad´a z n´asleduj´ıc´ıch s´eriovˇe prov´adˇen´ ych ˇcinnost´ı: 1. Vytvoˇren´ı poˇcitadel uchov´avaj´ıc´ıch statistiky. ˇ ı obecn´ 2. Cten´ ych souborov´ ych metadat, vytvoˇren´ı Resource objektu v modelu pro dan´ y soubor na z´akladˇe jeho n´azvu a zaps´an´ı ˇcten´ ych metadat. 3. Vytvoˇren´ı hashovac´ı mapy uchov´avaj´ıc´ı n´azvy a odkazy na vˇsechny vytvoˇren´e objekty typu Resource a vloˇzen´ı objektu zpracov´avan´eho souboru. ˇ ı metadat pomoc´ı knihovny Metadata Extractor. 4. Cten´ 5. Z´ısk´an´ı definice z mapovac´ı ontologie pro kaˇzd´ y tag z kaˇzd´eho adres´aˇre a zaps´an´ı ˇcten´ ych metadat do RDF modelu. 6. Zmˇenˇen´ı IRI vˇsech objekt˚ u Resource kromˇe objektu reprezentuj´ıc´ı zpracov´avan´ y soubor. 7. Vyps´an´ı statistik a pˇr´ıpadn´eho varov´an´ı pˇri podezˇren´ı na ˇspatnou konfiguraci extraktoru. Poˇcitadla sleduj´ı ˇctyˇri celoˇc´ıseln´e u ´daje. Prvn´ım je poˇcet zapsan´ ych RDF trojic do modelu. Toto ˇc´ıslo nemus´ı odpov´ıdat poˇctu nalezen´ ych a zapsan´ ych tag˚ u z r˚ uzn´ ych d˚ uvod˚ u. Napˇr´ıklad u IPTC tagu obsahuj´ıc´ı kl´ıˇcov´a slova k popisu souboru je pro kaˇzd´e slovo zaps´ana jedna trojice. Do zapsan´ ych trojic se nezapoˇc´ıt´avaj´ı trojice vytvoˇren´e ve druh´em kroku, protoˇze jsou zapisov´any na jin´e u ´rovni neˇz obrazov´a metadata. Druh´ y sledovan´ yu ´daj je poˇcet tag˚ u, jejichˇz definice nebyla nalezena v mapovac´ı ontologii. Jde pˇrev´aˇznˇe o tagy, 38
Implementace
Bal´ık extractor
kter´e extrahovac´ı knihovna nezn´a a extrahovan´a hodnota nemus´ı b´ yt korektn´ı. Tyto tagy v mapovac´ı ontologii nejsou obsaˇzeny z d˚ uvodu nemoˇznosti vytvoˇren´ı jejich koneˇcn´eho v´ yˇctu. Dalˇs´ı podrobnosti ke zp˚ usobu vytv´aˇren´ı mapovac´ı ontologie jsou v kapitole 5.5.1. Tˇret´ım u ´dajem je poˇcet tag˚ u definovan´ ych v ontologii, ale nemapovan´ ych na ˇz´adnou RDF vlastnost. Takov´e tagy dok´aˇze knihovna pojmenovat, ale hodnoty v nich obsaˇzen´e nejsou uˇziteˇcn´e pro dalˇs´ı pr´aci na u ´rovni MetaMedu. Jde napˇr´ıklad o hodnoty Makernote obsahuj´ıc´ı data, jejichˇz interpretace je nezn´am´a. Posledn´ım sledovan´ ym u ´dajem je poˇcet tag˚ u, jejichˇz z´ıskan´a hodnota byla extrahovac´ı knihovnou oznaˇcena jako nezn´am´a, byla pr´azdn´a, ˇci byla bˇehem transformace oznaˇcena jako neplatn´a. Knihovna jako nezn´amou oznaˇc´ı tˇreba hodnotu ˇc´ıseln´ıkov´eho tagu, kter´a nen´ı definovan´a v ˇc´ıseln´ıku. Obecn´a metadata souboru jsou ˇctena zdˇedˇenou procedurou abstraktn´ı tˇr´ıdy. Bˇehem ˇcten´ı je mimo jin´e z´ısk´an n´azev souboru, kter´ y je pouˇzit v parametru funkce mreResource(String) utility RDFUtil k vytvoˇren´ı zdroje dan´eho souboru. IRI vytvoˇren´eho zdroje m´a tvaru http://mre.kiv.zcu.cz/id/HASH, kde HASH je 40 znak˚ u dlouh´ y ˇretˇezec, na kter´ y byl pˇreveden n´azev souboru hashovac´ı funkc´ı SHA-1. Hashovac´ı mapa vytvoˇren´a v bodˇe 3 slouˇz´ı k tomu, aby extraktor mohl vytv´aˇret komplexn´ı stromovou strukturu a mohl metadata ukl´adat do trojic s jin´ ym zdrojem na pozici subjektu neˇz je zdroj generovan´ y v pˇredchoz´ım kroku. Takto lze napˇr´ıklad informace o n´ahledu obrazu obsaˇzen´e v jednom z Exif IFD zapsat bez toho, aby kolidovala s informacemi o p˚ uvodn´ım obrazu. Ke ˇcten´ı obrazov´ ych metadat pouˇz´ıv´am v´ yhradnˇe knihovnu Metadata Extractor a jej´ı funkce vracej´ıc´ı instanci tˇr´ıdy Metadata, viz kapitola 4.6. Pˇri proch´azen´ı vˇsech tag˚ u adres´aˇre si program uchov´av´a mnoˇzinu ˇc´ısel jiˇz zpracovan´ ych tag˚ u. Nˇekter´e tagy mohou b´ yt zpracov´any jeˇstˇe pˇred t´ım, neˇz se k nim iter´ator dostane. To nast´av´a v pˇr´ıpadˇe, kdy se zapisovan´a hodnota skl´ad´a z hodnot nˇekolika tag˚ u. Napˇr´ıklad v IPTC jsou datum a ˇcas vytvoˇren´ı zaps´any do dvou tag˚ u, ale pro z´apis do RDF potˇrebuji jejich sloˇzenou hodnotu. Pokud se iter´ator dostane k jiˇz zpracovan´emu tagu, pokraˇcuje hned n´asleduj´ıc´ım tagem. Toto ˇreˇsen´ı nen´ı nezbytnˇe nutn´e, protoˇze zpracov´an´ı skl´adan´e hodnoty je definov´ano tak, aby nez´aleˇzelo na poˇrad´ı nalezen´ı tag˚ u. Zapisovan´a trojice by odpov´ıdala trojici jiˇz existuj´ıc´ı v grafu a nebyla by duplicitnˇe zaps´ana. Nicm´enˇe toto ˇreˇsen´ı ˇsetˇr´ı v´ ypoˇcetn´ı ˇcas v pˇr´ıpadˇe, kdy se v datech kombinovan´e hodnoty vyskytuj´ı.
39
Implementace
Bal´ık commons
Pro kaˇzd´ y tag nalezen´ y Metadata Extractorem se vyhled´a definice mapov´an´ı z mapovac´ı ontologie. Definic´ı se rozum´ı prvek na jmenn´em prostoru de´ kde ADRE´R ˇ KOD, finovan´em v konfiguraˇcn´ım souboru s n´azvem ADRESA ´ ˇ SAR je zkr´acen´ y n´azev metadatov´eho adres´aˇre, ve kter´em se tag vyskytuje, a ´ KOD je hexadecim´aln´ı ˇc´ıslo tagu, jak ho poskytuje knihovna. Dalˇs´ı informace o mapovac´ı ontologii viz kapitola 5.5.1. Definice se zpracuje funkc´ı ExtractorUtil.getMappingDefinition(Individual) a je vr´acen odkaz na instanci IndividualData umoˇzn ˇuj´ıc´ı pˇr´ıstup k jednotliv´ ym poloˇzk´am definice. Samotn´e zpracov´an´ı hodnoty na z´akladˇe definice a n´asledn´ y z´apis prov´ad´ı funkce z tˇr´ıdy ExtractorLogic. Po dokonˇcen´ı iteraˇcn´ıho cyklu nad tagy z adres´aˇre mohou b´ yt vyps´any chyby, na kter´e narazila knihovna pˇri jejich extrakci. Tyto hl´aˇsen´ı maj´ı pouze informaˇcn´ı charakter a nejsou zn´amkou ˇspatnˇe vykonan´e extrakce. Vypisuji je proto na standardn´ı v´ ystup. V cel´e sekci vyuˇz´ıvaj´ıc´ı extern´ı knihovnu a pracuj´ıc´ı se souborem zachyt´av´am v´ yjimky IOException a JpegProcessingException, resp. ekvivalentn´ı pro jin´e typy obrazov´ ych soubor˚ u. Hl´aˇsen´ı o tˇechto chyb´ach jsou pos´ıl´ana na chybov´ y v´ ystup. Pˇred dokonˇcen´ım pr´ace s metadaty dan´eho souboru jsou pˇrejmenov´any RDF zdroje vytvoˇren´e bˇehem zpracov´an´ı. Pojmenov´an´ı je jednoznaˇcn´e na z´akladˇe trojic modelu, ve kter´ ych se zdroj vyskytuje na pozici subjektu. V dobˇe vytvoˇren´ı tˇechto zdroj˚ u nen´ı kompletn´ı model zn´am a pˇrejmenov´an´ı mus´ı probˇehnout aˇz po z´apisu vˇsech trojic. T´ımto zp˚ usobem je zajiˇstˇeno, ˇze zdroje budou m´ıt pˇri opˇetovn´em spuˇstˇen´ı stejn´ y n´azev. Z´aroveˇ n je zajiˇstˇeno, ˇze zdroje popisuj´ıc´ı shodnou skuteˇcnost vytvoˇren´e pˇri zpracov´an´ı r˚ uzn´ ych soubor˚ u maj´ı tak´e stejn´ y n´azev. V d˚ usledku je zdroj popisuj´ıc´ı fotoapar´at, z kter´eho byla s´erie fotografi´ı poˇr´ızena, zaps´an v RDF modelu pouze jednou a vˇsechny fotografie na nˇej odkazuj´ı.
5.2
Bal´ık commons
Bal´ık commons obsahuje dvˇe tˇr´ıdy. Tˇr´ıda ExtractorSetting slouˇz´ı k naˇcten´ı a uchov´an´ı konfigurace pluginu. ExtractorLogic definuje procedury k zaps´an´ı extrahovan´ ych metadat do RDF nez´avisle na typu obrazov´eho souboru. Obˇe tˇr´ıdy jsou navrˇzen´e dle designov´eho vzoru singleton, coˇz znamen´a, ˇze v kaˇzd´em okamˇziku je inicializov´ana nejv´ yˇse jedna instance dan´e tˇr´ıdy.
40
Implementace
5.2.1
Bal´ık commons
Tˇ r´ıda pro pr´ aci s konfigurac´ı
Instance tˇr´ıdy ExtractorSetting obsahuje osm atribut˚ u popisuj´ıc´ı konfiguraci pluginu. Jsou jimi atributy mappingOwlFileName, mappingOwlFileURL a immNS t´ ykaj´ıc´ı se mapovac´ı ontologie. Prvn´ı z nich nese n´azev souboru s ontologi´ı. Druh´ y je jmenn´ y prostor, kter´ y ontologie vyuˇz´ıv´a, a tˇret´ı je URL adresa, z kter´e m´a b´ yt soubor pˇr´ıpadnˇe staˇzen. Obdobnˇe popisuj´ı atributy imageOwlFileName, imageNS a imageOwlFileURL ontologii pouˇz´ıvanou k zaps´an´ı metadat, pro kter´e nejsou definovan´e vhodn´e vlastnosti v jin´ ych ontologi´ıch. Zbyl´e atributy connectionTimeout a readTimeout slouˇz´ı k nastaven´ı doby, po kter´e se m´a pˇreruˇsit pokus o pˇr´ıpojen´ı k serveru pˇri stahov´an´ı ontologie, resp. doby, po kter´e se pˇreruˇs´ı stahov´an´ı, pokud nepˇrich´az´ı ˇza´dn´a data. Ke ˇcten´ı souboru konfigurace doch´az´ı pˇri inicializaci. Je pouˇzita funkce knihovny LibMed PropertiesUtil.readConfigs(String). Parametrem je relativn´ı cesta k souboru. Konstantou v tˇr´ıdˇe je stanovena cesta ke konfiguraˇcn´ımu souboru image/image.properties. Funkce jako v´ ychoz´ı sloˇzku povaˇzuje .mre/ v domovsk´em adres´aˇri uˇzivatele. Z t´eto sloˇzky naˇc´ıt´a MetaMed i dalˇs´ı konfiguraci a ukl´ad´a sem v´ ypis chybov´eho v´ ystupu. V bloku k´odu pracuj´ıc´ıho s naˇcten´ ymi daty jsou zachyt´av´any chyby NullPointerException a NumberFormatException. Prvn´ı z nich je zapˇr´ıˇcinˇena nenalezen´ım souboru na oˇcek´avan´em m´ıstˇe. Druh´a chyba nast´av´a pˇri pokusu pˇrev´est textovou hodnotu na celoˇc´ıselnou. Pˇri v´ yskytu libovoln´e chyby je cel´ y program ukonˇcen, jelikoˇz proces zpracov´an´ı metadat a jejich z´apisu do RDF z´avis´ı na ontologi´ıch, jejichˇz naˇcten´ı je podm´ınˇeno korektn´ı konfigurac´ı. Chyba je vysvˇetlena v chybov´em hl´aˇsen´ı zaslan´em na chybov´ y v´ ystup pˇred ukonˇcen´ım bˇehu programu. Po zpracov´an´ı konfiguraˇcn´ıho souboru je vol´ana funkce validateConfig() k ovˇeˇren´ı, ˇze vˇsechny atributy byly naplnˇeny a ˇze ˇc´ıseln´e hodnoty ˇcasov´ ych limit˚ u k ukonˇcen´ı spojen´ı jsou kladn´e. Pokud to pro nˇekter´ y atribut neplat´ı, vrac´ı funkce n´azev probl´emov´eho atributu. V takov´em pˇr´ıpadˇe je na chybov´ y v´ ystup zasl´ano hl´aˇsen´ı o chybn´em prvku konfigurace a program je ukonˇcen.
41
Implementace
5.2.2
Bal´ık commons
Tˇ r´ıda ke zpracov´ an´ı a z´ apisu metadat
Inicializace Tˇr´ıda ExtractorLogic v konstruktoru ukl´ad´a odkaz na RDF model pˇred´avan´ y parametrem konstruktoru do priv´atn´ıho atributu. N´aslednˇe vytv´aˇr´ı instanci utility RDFUtil nad dan´ ym modelem a instanci singletonu ExtractorSettings. Na z´akladˇe hodnot v konfiguraci se naˇctou obˇe ontologie do in-memory modelu. Pˇri naˇc´ıt´an´ı se nejprve zkouˇs´ı otevˇr´ıt soubor s ontologi´ı v pracovn´ım adres´aˇri. Pokud soubor nen´ı nalezen, je zasl´ana zpr´ava s n´azvem hledan´eho souboru na standardn´ı v´ ystup a program se pokus´ı z´ıskat soubor s ontologi´ı z Internetu. Pokud je u ´spˇeˇsn´ y, zap´ıˇse soubor na disk na adresu, kde byl p˚ uvodnˇe hled´an. V pˇr´ıpadˇe, ˇze se ani t´ımto zp˚ usobem nepodaˇrilo ontologii z´ıskat, je na chybov´ y v´ ystup zasl´ana o t´eto situaci zpr´ava a program se ukonˇc´ı. Toto poˇrad´ı naˇc´ıt´an´ı je nutn´e, aby uˇzivatel mohl prov´adˇet zmˇeny v definici mapov´an´ı v lok´aln´ım souboru bez nutnosti aplikovat tyto zmˇeny i na vzd´alen´em centr´aln´ım u ´loˇziˇsti. V opaˇcn´em pˇr´ıpadˇe by samozˇrejmˇe ˇreˇsen´ım mohlo b´ yt pˇreps´an´ı URL adresy v konfiguraci, ˇci odpojen´ı stroje od Internetu, ale takov´e postupy rozhodnˇe nejsou uˇzivatelsky pˇr´ıvˇetiv´e. Pokud uˇzivatel chce vynutit staˇzen´ı aktu´aln´ı verze ontologie z Internetu, je nutn´e lok´aln´ı soubor s ontologi´ı smazat ˇci pˇrejmenovat. Pokud naˇcten´ı probˇehne v poˇra´dku, vytvoˇr´ı se logger pro zapisov´an´ı lad´ıc´ıch informac´ı. Logger bude zpr´avy ukl´adat na disk do souboru imageextractor-unknown-tags.log v podsloˇzce .mre/image/ domovsk´eho adres´aˇre uˇzivatele. Adresa a n´azev souboru jsou pevnˇe definov´any konstantami tˇr´ıdy. Jelikoˇz jde o soubor prim´arnˇe urˇcen´ y k zapisov´an´ı k´od˚ u nezn´am´ ych tag˚ u, pouˇz´ıv´am v loggeru redukovanou informaci bez ˇcasov´e znaˇcky a p˚ uvodce zpr´avy. Odpov´ıdaj´ıc´ı form´at je definovan´ y pomocnou tˇr´ıdou OneLinerLogFormat. V pˇr´ıpadˇe chyby pˇri vytv´aˇren´ı souboru program pokraˇcuje v norm´aln´ım bˇehu, protoˇze logger nen´ı nezbytnˇe nutn´ y ke spr´avn´e funkci extraktoru. Zpr´ava o probl´emu je zasl´ana na standardn´ı v´ ystup. Nakonec je v konstruktoru ˇcten soubor .mre/image/prefix.properties v domovsk´em adres´aˇri, kter´ y obsahuje definici prefix˚ u. Prefixy se pouˇz´ıvaj´ı pˇri serializaci RDF modelu k nahrazen´ı ˇca´sti IRI se jmenn´ ym prostorem. Jako takov´e nemaj´ı na funkci ˇz´adn´ y vliv, slouˇz´ı pˇredevˇs´ım ke zlepˇsen´ı ˇcitelnosti a redukov´an´ı velikosti v´ ystupn´ıho RDF souboru. Pokud by prefixy nebyly definov´any, vygeneruje Jena vlastn´ı. Z tohoto d˚ uvodu je chyba pˇri zpraco-
42
Implementace
Bal´ık commons
v´an´ı souboru pouze zaznamen´ana na standardn´ı v´ ystup a program pokraˇcuje v bˇehu. Instanci tˇr´ıdy ExtractorLogic lze z´ıskat vol´an´ım funkce getInstance(Model). Z instance je vol´an´ım funkc´ı getRDFUtil(), getOntModel() a getLogger() z´ıskateln´ y odkazy na inicializovan´ y RDFUtil pro pouˇz´ıvan´ y model, model obsahuj´ıc´ı ontologie k mapov´an´ı, resp. logger k v´ ypisu lad´ıc´ıch informac´ı.
Zpracov´ an´ı metadat Tˇr´ıda definuje proceduru processTag(. . . ) s ˇsesti vstupn´ımi parametry, kter´a obsahuje ˇc´ast logiky extraktoru shodnou pro vˇsechny souborov´e typy. Prvn´ım vstupn´ımi parametrem je objekt metadatov´eho tagu nalezen´ y Metadata Extractorem. Druh´ ym je definice mapov´an´ı tagu z´ıskan´a z mapovac´ı ontologie. Tˇret´ı je adres´aˇr nalezen´ ych tag˚ u v souboru. N´asleduje odkaz na seznam ˇc´ısel tag˚ u, jenˇz jiˇz byly zpracov´any, a hashovac´ı mapa n´azv˚ u vytvoˇren´ ych uzl˚ u na jejich odkazy. Posledn´ım parametrem je poˇcitadlo statistick´ ych u ´daj˚ u. Posloupnost ˇcinnost´ı vykon´avan´ ych v proceduˇre je n´asleduj´ıc´ı: 1. Nalezen´ı dalˇs´ıch definic mapov´an´ı a jejich rekurzivn´ı proveden´ı. 2. Z´ısk´an´ı zapisovan´e hodnoty ˇcten´ım z tagu nebo sloˇzen´ım z v´ıce tag˚ u. 3. Z´ısk´an´ı odkazu na zdroj, kter´ y bude v subjektu zapisovan´e trojice. 4. Zaps´an´ı trojice. Pro kaˇzd´ y tag lze v mapovac´ı ontologii definovat v´ıce mapov´an´ı. Na dalˇs´ı mapov´an´ı je odkazov´ano objektovou vlastnost´ı duplicateTo. V prvn´ım kroku je zjiˇst’ov´ano zda-li v definici mapov´an´ı zpracov´avan´eho tagu je tato vlastnost pouˇzita. V kladn´em pˇr´ıpadˇe je z´ısk´ana definice n´asleduj´ıc´ıho mapov´an´ı a je rekurzivnˇe vol´ana procedura se stejn´ ymi parametry kromˇe druh´eho. Jelikoˇz hroz´ı nebezpeˇc´ı nekoneˇcn´eho rekurzivn´ıho vol´an´ı pˇri pouˇzit´ı nevhodn´e ontologie, je pˇred vol´an´ım ovˇeˇreno, ˇze v ˇretˇezci vlastnost´ı duplicateTo nen´ı cyklus. Pokud by cyklus byl nalezen, je o tom zasl´ana zpr´ava na standardn´ı v´ ystup a provede se mapov´an´ı pouze podle p˚ uvodn´ı definice. D´ale se testuje, zda-li definice obsahuje n´azev a jmenn´ y prostor RDF vlastnosti, na kterou m´a b´ yt mapov´ano. Pokud neobsahuje, zap´ıˇse se infor43
Implementace
Bal´ık commons
mace o pr´azdn´e definici do logu pro lad´ıc´ı v´ ypisy a bˇeh programu opust´ı proceduru. Tento test nem˚ uˇze b´ yt vykon´an hned na zaˇca´tku, protoˇze i v tomto ohledu pr´azdn´a definice m˚ uˇze m´ıt definovan´e dalˇs´ı mapov´an´ı, kter´e nemus´ı b´ yt pr´azdn´e. Existence pouˇzit´e RDF vlastnosti nen´ı programem ovˇeˇrov´ana. Druh´ ym krokem je z´ısk´an´ı hodnoty, kter´a bude do trojice zaps´ana na pozici objektu. Metadata Extractor poskytuje hodnotu pˇreloˇzenou, ˇci p˚ uvodn´ı. Rozd´ıl je patrn´ y pˇredevˇs´ım u ˇc´ıseln´ıkov´ ych tag˚ u, kdy p˚ uvodn´ı hodnota je napˇr´ıklad k´od 3 u tagu mˇern´ ych jednotek a pˇreloˇzen´a hodnota je ˇretˇezec cm. Dalˇs´ı variantou z´ısk´an´ı hodnoty je jej´ı sloˇzen´ı z nˇekolika tag˚ u stejn´eho adres´aˇre. K sloˇzen´ı hodnot slouˇz´ı priv´atn´ı funkce concatValue(IndividualData, Directory, Set). V´ ysledn´a hodnota je z´ısk´ana zˇretˇezen´ım hodnot tag˚ u v poˇrad´ı definovan´em v ontologii. K urˇcen´ı poˇrad´ı jsou pouˇzity objektov´e vlastnosti concatAfter a concatBefore, kter´e jsou vz´ajemnˇe inverzn´ı. Funkce concatValue nejprve zkontroluje, ˇze v ontologii nen´ı tˇemito vlastnostmi tvoˇren cyklus. Testuje se naˇc´ıt´an´ım dalˇs´ıch prvk˚ u v obou smˇerech, dokud takov´e prvky existuj´ı, a uchov´av´an´ım seznamu ˇcten´ ych objekt˚ u. Pokud byl objekt naˇcten v´ıckr´at, je v definici cyklus, informuje se o tom zpr´avou na standardn´ı v´ ystup a vrac´ı se pr´azdn´ y ˇretˇezec. V opaˇcn´em pˇr´ıpadˇe zaˇcne b´ yt tvoˇren v´ ysledn´ y ˇretˇezec. Pro kaˇzd´ y tag m˚ uˇze b´ yt definov´ano, zda-li m´a b´ yt pouˇzita pˇreloˇzen´a hodnota a zda-li je potˇreba prov´est transformaci. Pˇred pˇrid´an´ım do ˇretˇezce je hodnota oˇciˇstˇena na okraj´ıch od b´ıl´ ych znak˚ u. Hodnoty jsou v budovan´em ˇretˇezci oddˇeleny mezerou. Ve funkci je ˇreˇsena speci´alnˇe situace, kdy doch´az´ı k pˇrid´an´ı ˇcasov´eho u ´daje k datu. V takov´em pˇr´ıpadˇe jsou hodnoty oddˇeleny stˇredn´ıkem a po spojen´ı do ˇretˇezce je zavol´ana transformaˇcn´ı metoda k pˇrevodu do spr´avn´eho tvaru. Ve tˇret´ım kroku je zjiˇst’ov´ano, zda-li subjektem v zapisovan´e trojici bude instance Resource obrazov´eho souboru, nebo nˇejak´ y jin´ y uzel. Pokud se jedn´a o jin´ y uzel, je zjiˇst’ov´ano, zda-li nen´ı v definici cyklus, podobnˇe jako v prvn´ım kroku. V pˇr´ıpadˇe nalezen´ı cyklu nebude trojice zaps´ana a na standardn´ı v´ ystup bude zasl´ano sdˇelen´ı o probl´emu. Pokud je definice v poˇra´dku, vol´a se metoda getTypedNode(IndividualData, HashMap<String, Resource>, int[]) s parametry definice mapov´an´ı zpracov´avan´eho tagu, hashovac´ı mapa s vytvoˇren´ ymi uzly a poˇcitadlo statistik. Volan´a funkce najde nebo vytvoˇr´ı odpov´ıdaj´ıc´ı uzel a odkaz na nˇej vrac´ı. Pˇri vytv´aˇren´ı nov´eho uzlu je ˇctena jeho definice z ontologie a je moˇzn´e volat funkci rekurzivnˇe k vytvoˇren´ı dalˇs´ıch uzl˚ u, s kter´ ymi je vytv´aˇren´ y uzel spojen. Pokud nen´ı vazba na jin´ y uzel de-
44
Implementace
Bal´ık commons
finov´ana, je zaps´ana trojice, kde subjektem je obrazov´ y soubor, predik´at je ˇcten z definice a objektem je vytv´aˇren´ y uzel. Ve ˇctvrt´em kroku probˇehne z´apis extrahovan´e hodnoty. K z´apisu slouˇz´ı procedura addValueWithType(Resource, IndividualData, String, int[]). Parametry jsou zdroj pouˇzit´ y v subjektu nalezen´ y ve 3. kroku, definice mapov´an´ı tagu, zpracovan´a hodnota ze 2. kroku a poˇcitadlo. Procedura na zaˇc´atku nahrad´ı nepovolen´e znaky mezerou. Mezi nepovolen´e patˇr´ı ˇr´ıd´ıc´ı znaky 0x00 aˇz 0x1f, znak 0x7f a speci´aln´ı znaky unicode 0xfff0 aˇz 0xffff. V´ yskyt tˇechto znak˚ u v extrahovan´e hodnotˇe m˚ uˇze indikovat chybu pˇri extrakci, chybu v datech souboru, ˇci ˇspatnˇe vloˇzen´a metadata uˇzivatelem. Z testov´an´ı vyplynulo, ˇze se tyto znaky nach´az´ı vˇetˇsinou v nˇekter´em z koment´aˇrov´ ych tag˚ u. Jelikoˇz m˚ uˇze j´ıt o chybu uˇzivatelskou, rozhodl jsem se hodnoty s nepovolen´ ymi znaky nezahazovat, ale pouze odstranit dan´e znaky. Zapisovac´ı procedura d´ale kontroluje, zda-li ˇretˇezec ukazuje na hodnotu null, je pr´azdn´ y nebo obsahuje pouze b´ıl´e znaky. V takov´em pˇr´ıpadˇe nen´ı hodnota zaps´ana, protoˇze nem´a smysl. D´ale nejsou zaps´any hodnoty zaˇc´ınaj´ıc´ı ˇretˇezcem unknown a undefined. Takov´e hodnoty poskytuje Metadata Extraktor v pˇr´ıpadˇe, ˇze nezn´a v´ yznam ˇc´ıseln´ıkov´eho k´odu. Pokud by bylo uˇzivatelem pˇresto chtˇeno zapsat hodnotu, m˚ uˇze v definici poˇzadovat z´apis k´odu m´ısto pˇrekladu, ˇci m˚ uˇze definovat vlastn´ı pˇreklad ˇc´ıseln´ıku. Po zkontrolov´an´ı zapisovan´ ych dat procedura zjiˇst’uje, zda-li je definov´an v ontologii oddˇelovaˇc, kter´ ym m´a b´ yt z´ıskan´a hodnota rozdˇelena do nˇekolika ˇretˇezc˚ u. Kaˇzd´ y z ˇretˇezc˚ u je pak zaps´an dle stejn´e definice. Oddˇelovaˇcem m˚ uˇze b´ yt regul´arn´ı v´ yraz. Hodnoty jsou zapsan´e jako liter´al s definovan´ ym datov´ ym typem, nebo jako objekt kontrolovan´eho slovn´ıku. Pˇri zapisov´an´ı liter´alu datov´eho typu XSDDateTime je vol´ana pomocn´a funkce z tˇr´ıdy DateUtil, kter´a se pokus´ı vstupn´ı textovou hodnotu pˇrev´est do hodnoty form´atu Date. Pokud se pˇrevod nepodaˇr´ı, nen´ı hodnota zaps´ana. Pojmy kontrolovan´ ych slovn´ık˚ u lze pouˇz´ıt pouze takov´e, kter´e jsou definovan´e v obrazov´e ontologii naˇcten´e pˇri inicializaci objektu tˇr´ıdy ExtractorLogic. IRI pojmu mus´ı m´ıt tvar VLASTy NOST HODNOTA, kde VLASTNOST je IRI vlastnosti definovan´e pro dan´ tag a HODNOTA je extrahovan´ y ˇretˇezec upraven´ y pˇredeˇsl´ ymi kroky. Pokud prvek s dan´ ym IRI neexistuje, trojice nebude zaps´ana.
45
Implementace
5.3
Datov´a tˇr´ıda IndividualData
Datov´ a tˇ r´ıda IndividualData
Instance tˇr´ıdy IndividualData jsou pouˇz´ıv´any k pˇr´ıstupu k definici mapov´an´ı tagu. Tˇr´ıda m´a 16 atribut˚ u plynouc´ıch ze struktury mapovac´ı ontologie. Pˇr´ıstup k atribut˚ um je pomoc´ı get a set metod. Atribut id uchov´av´a n´azev instance imageMetadata v mapovac´ı ontologii. Pokud m´a b´ yt stejn´ y tag ˇreˇsen i jin´ ym mapov´an´ım, je odkaz na takovou instanci v atributu duplicateTo. Integer tag je ˇc´ıslo, kter´e m´a dan´ y tag v adres´aˇri Metadata Extractoru. Toto ˇc´ıslo je potˇreba pokud je pˇristupov´ano k extrahovan´ ym hodnot´am jin´ ych metadatov´ ych tag˚ u, napˇr´ıklad pˇri skl´ad´an´ı hodnoty z nˇekolika tag˚ u. Poˇrad´ı skl´ad´an´ı hodnot je dan´e ve vlastnostech follows a precedes, kter´e obsahuj´ı odkaz na pˇredch´azej´ıc´ı, resp. n´asleduj´ıc´ı ˇca´st. Atributy namespace a attribute obsahuj´ı jmenn´ y prostor a n´azev RDF vlastnosti, kter´a bude pouˇzita jako predik´at pˇri zapisov´an´ı z´ıskan´e hodnoty. Se zapisovanou hodnotou souvis´ı atributy description a writeAsNode obsahuj´ıc´ı pravdivostn´ı hodnotu, zda-li m´a b´ yt pouˇzita extrahovan´a hodnota v ˇclovˇekem ˇciteln´em tvaru, resp. zda-li m´a b´ yt v objektu pouˇzit pojem z kontrolovan´eho slovn´ıku. Atributy transformation a transformationParameter, popisuj´ı zp˚ usob, jak´ ym bude extrahovan´a hodnota transformov´ana a parametry transformace. V atributu datatype je datov´ y typ zapisovan´eho liter´alu. Pokud m´a b´ yt hodnota rozdˇelena na nˇekolik podˇretˇezc˚ u, je v atributu splitDelimiter uveden regul´arn´ı v´ yraz pro nalezen´ı oddˇelovaˇc˚ u. M´a-li b´ yt subjektem trojice jin´ y zdroj neˇz obrazov´ y soubor, je na definici takov´eho zdroje odk´az´ano v atributu aggregatedIn. Typ zdroje m˚ uˇze b´ yt urˇcen atributy typeNamespace a typeClass, kter´e obsahuj´ı jmenn´ y prostor a n´azev tˇr´ıdy, jej´ıˇz instanc´ı je zdroj. Tˇr´ıda d´ale definuje tˇri funkce, kter´e pracuj´ı s ˇcasto pouˇz´ıvan´ ymi kombinacemi atribut˚ u. Funkce isTyped() vrac´ı hodnotu true, pokud je v definici uzlu obsaˇzena informace o jeho typu. To znamen´a, ˇze atributy typeNamespace a typeClass nejsou null. Funkce isDefined() vrac´ı true, je-li zn´am´ y jmenn´ y prostor a n´azev vlastnosti v predik´atu, tedy atributy namespace a attribute nejsou null. Funkce needsConcat() vrac´ı true, pokud alespoˇ n jeden z atribut˚ u follows a precedes odkazuje na objekt a je nutn´e spojovat extrahovan´e hodnoty. 46
Implementace
5.4 5.4.1
Bal´ık util
Bal´ık util Form´ atov´ an´ı logu
Tˇr´ıda OneLinerLogFormat je jednoduch´a pomocn´a tˇr´ıda, kter´a dˇed´ı z tˇr´ıdy Formatter, a slouˇz´ı k poskytnut´ı vhodnˇejˇs´ıho form´atov´an´ı pro lad´ıc´ı log. Tˇr´ıda pˇrekr´ yv´a metodu format(LogRecord) tak, aby byla do logu zapisov´ana ˇ vzniku ud´alosti, p˚ pouze informace o u ´rovni hl´aˇsen´ı a jeho text. Cas uvodce ud´alosti ani ˇza´dn´e dalˇs´ı informace nejsou zapisov´any. Z´aznam je zaps´an do jednoho ˇra´dku logu. Tento form´at je zam´ yˇslen k pouˇzit´ı pro logy, kter´e nemaj´ı slouˇzit k zapisov´an´ı chyb pˇri bˇehu programu, ale sp´ıˇse k zaznamen´av´an´ı u ´daj˚ u pro dalˇs´ı zpracov´an´ı. Takov´ y log by mˇel b´ yt co nejstruˇcnˇejˇs´ı, aby jeho zpracov´an´ı bylo rychl´e, a syntax´ı jednoduch´ y, aby bylo moˇzn´e z´ıskat potˇrebn´a data bez nutnosti tvorby sloˇzit´ ych regul´arn´ıch v´ yraz˚ u.
5.4.2
Pr´ ace s daty a ˇ casem
Tˇr´ıda DateUtil poskytuje statickou funkci pro pˇreˇcten´ı data a ˇcasu z textov´eho vstupu, u kter´eho nen´ı zn´am datov´ y form´at. V priv´atn´ı konstantˇe je definov´ana sada form´at˚ u, kter´e jsou postupnˇe aplikov´any na vstupn´ı data. Poˇrad´ı, v jak´em jsou aplikov´any, je v´ yznamn´e. Hled´a se prvn´ı form´at, pˇri jehoˇz pouˇzit´ı v parsovac´ı funkci nen´ı vyhozena chyba ParseException. Datum a ˇcas z´ıskan´ y pouˇzit´ım takov´eho form´atu je povaˇzov´an za spr´avn´ y, pokud je po 31. 12. 1969. Nen´ı-li podm´ınka splnˇena pokraˇcuje se v cyklu dalˇs´ım form´atem. Podm´ınka ˇca´steˇcnˇe eliminuje probl´em, kdy ˇcas ve form´atu HHmmssZ, napˇr´ıklad 181920-0000, byl bez vyk´az´an´ı chyby interpretov´an jako form´at yyyyMMdd. Hodnota vˇsak byla nesmysln´a, v tomto pˇr´ıpadˇe Mon Jul 31 01:00:00 GMT+01:00 1820. Form´at obsahuj´ıc´ı pouze ˇcasovou sloˇzku je siln´ y v tom ohledu, ˇze zpracuje bez chyby i vstupy obsahuj´ıc´ı pouze datum, leˇc samozˇrejmˇe nespr´avnˇe. Zmˇena poˇrad´ı testov´an´ı by v tomto pˇr´ıpadˇe probl´em neˇreˇsila, naopak by zp˚ usobila dalˇs´ı probl´emy. P˚ uvodnˇe jsem chtˇel podm´ınku rozˇs´ıˇrit na testov´an´ı, ˇze z´ıskan´ y datum je pˇred souˇcasn´ ym syst´emov´ ym datem. Nicm´enˇe tato podm´ınka by ˇcinila funkci
47
Implementace
Bal´ık util
nekonzistentn´ı v tom ohledu, ˇze v z´avislosti na souˇcasn´em datu by vracela r˚ uzn´e v´ ystupy. Z´aroveˇ n by mohl nastat probl´em u jednoho z IPTC tag˚ u ud´avaj´ıc´ı datum platnosti obsahu. Tento datum z podstaty nemus´ı b´ yt pˇred souˇcasn´ ym datem. Pˇri pr´aci s daty pouˇz´ıv´am anglick´ y locale, jelikoˇz ˇretˇezce, kter´e poskytuje Metadata Extractor, jsou zapsan´e v anglick´e notaci. Funkce by samozˇrejmˇe v pˇr´ıpadˇe potˇreby ˇsla upravit, nebo pˇret´ıˇzit, aby byl locale variabiln´ı podle prostˇred´ı uˇzivatele. ˇ sen´ı v t´eto funkci nepracuje korektnˇe s ˇcasov´ Reˇ ymi z´onami. Exif metadata s datov´ ymi a ˇcasov´ ymi hodnotami neobsahuj´ı u ´daj o ˇcasov´e z´onˇe. Metadata Extractor sice zn´a tag 0x882A, kter´ y by informaci o z´onˇe mˇel obsahovat, ale tag nen´ı ˇcten´ y u ˇza´dn´eho z testovac´ıch soubor˚ u. U pˇr´ıpad˚ u, kdy nen´ı z´ona uvedena, pˇredpokl´ad´a funkce p´asmo UTC+0. Pro tˇr´ıdu je naps´an unit test zkouˇsej´ıc´ı, ˇze jsou korektnˇe ˇcteny ˇretˇezce vˇsech definovan´ ych form´at˚ u.
5.4.3
Transformace extrahovan´ ych hodnot
V tˇr´ıdˇe ValueTransformator je definov´ana statick´a funkce pro transformaci extrahovan´ ych dat dataTransformation(String, IndividualData). Vstupem jsou ˇretˇezec k transformaci a mapovac´ı definice tagu. Funkce vrac´ı zmˇenˇen´ y ˇretˇezec pˇri standardn´ım bˇehu. Pokud je poˇzadov´ana transformace, kter´a nen´ı definov´ana, nebo nen´ı pouˇziteln´a pro dan´a data, je vr´acen vstupn´ı ˇretˇezec. Pokud dojde k chybˇe pˇri zpracov´an´ı, nebo je vstupn´ı ˇretˇezec vadn´ y, vrac´ı se pr´azdn´ y ˇretˇezec. Ke transformaˇcn´ım funkc´ım je vytvoˇren unit test. Zp˚ usob transformace je pro tag definov´an odkazem na instanci transformace v mapovac´ı ontologii. Funkce nejprve iter´atorem projde vlastnosti transformace a hled´a jej´ı decim´aln´ı k´od. Pokud byl k´od nalezen vol´a pomocnou funkci, kter´e pˇred´av´a k´od transformace, parametry transformace a vstupn´ı ˇretˇezec. Je definov´ano 16 r˚ uzn´ ych transformac´ı. V mapovac´ı ontologii ´ maj´ı pˇr´ısluˇsn´e instance jm´ena transformation KOD. Pˇred proveden´ım transformace jsou z ˇretˇezce odstranˇeny b´ıl´e znaky na zaˇc´atku a konci. Transformace s k´odem 1 slouˇz´ı pouze k nahrazen´ı znak˚ u mezera znakem teˇcka. Transformace je pouˇzit´a u tagu GPS verze, jehoˇz v´ ystup je form´atov´an jinak, neˇz poˇzaduje pouˇzit´a ontologie. 48
Implementace
Bal´ık util
Transformace s k´odem 2 slouˇz´ı k pˇrevodu velikosti u ´hlu z form´atu u ´hly, minuty, vteˇriny na desetinn´e ˇc´ıslo. Ve vstupn´ım ˇretˇezci jsou oˇcek´av´any 3 zlomky. Funkce rozdˇel´ı vstup na nˇekolik podˇretˇezc˚ u za pouˇzit´ı oddˇelovac´ıho znaku mezera a lom´ıtko. Z nich jsou pak ˇcteny celoˇc´ıseln´e hodnoty a vypoˇctena v´ ysledn´a hodnota. Pokud nen´ı z´ısk´ano 6 podˇretˇezc˚ u nebo pˇri ˇcten´ı cel´ ych ˇc´ısel dojde k chybˇe NumberFormatException, je vr´acen pr´azdn´ y ˇretˇezec. Jelikoˇz Metadata Extractor vrac´ı ˇretˇezce, ve kter´ ych jsou desetinn´a ˇc´ısla zaps´ana s desetinnou teˇckou, pˇrev´ad´ım pˇr´ıpadn´e ˇcesk´e desetinn´e ˇc´arky na teˇcky pˇred vr´acen´ım hodnoty. Tato transformace se pouˇz´ıv´a u nˇekolika Exif GPS tag˚ u. K´od 3 pˇrevede s´erii cel´ ych ˇc´ısel oddˇelen´ ych mezerou na textov´ y ˇretˇezec tak, ˇze kaˇzd´e ˇc´ıslo bude nahrazeno znakem odpov´ıdaj´ıc´ı dan´emu k´odu ve v´ ychoz´ım k´odov´an´ı. Mezery nejsou zachov´any. Ve vˇetˇsinˇe pˇr´ıpad˚ u um´ı tuto transformaci vykonat jiˇz Metadata Extractor a poskytuje ji jako pˇreloˇzenou hodnotu tagu. Knihovna uvaˇzuje v´ıce k´odov´an´ı a pˇr´ıpadnˇe speci´aln´ı charakteristiky ˇretˇezce v z´avislosti na metadatov´em adres´aˇri. U GPS tag˚ u ale tuto moˇznost neposkytuje a pouˇz´ıv´am zde proto tuto funkci. Transformace ˇc´ıslo 4 pˇrevede racion´aln´ı ˇc´ıslo na desetinn´e. Ze vstupu jsou odstranˇeny vˇsechny p´ısmenn´e znaky. N´avrh programov´e logiky neumoˇzn ˇuje prov´est v´ıce neˇz jednu transformaci extrahovan´e hodnoty a v nˇekter´ ych pˇr´ıpadech bylo potˇreba kromˇe pˇrevodu i odstranit text. Naopak odstranˇen´ı znak˚ u v ˇza´dn´em z pˇr´ıpad˚ u nevad´ı. Proto bylo pˇristoupeno k t´eto variantˇe. Funkce dok´aˇze pˇrev´est i v´ıce ˇc´ısel v jednom ˇretˇezci. Je ale potˇreba, aby pˇri rozdˇelen´ı na podˇretˇezce jako v tr. 2, byl sud´ y poˇcet prvk˚ u. Pˇri lich´em poˇctu je vracen vstupn´ı ˇretˇezec bez p´ısmenn´ ych znak˚ u. Pˇri chybˇe NumberFormatException je vracen pr´azdn´ y ˇretˇezec. Parametrem transformace je poˇcet desetinn´ ych m´ıst, nejm´enˇe je vˇsak jedno. V´ ysledn´ y ˇretˇezec pouˇz´ıv´a desetinnou teˇcku. Transformace s k´odem 5 pˇrevede s´erii ˇc´ısel oddˇelen´ ych mezerou na ˇc´ıslo verze takov´ ym zp˚ usobem, ˇze mezery budou odstranˇeny a na pozici oddˇeluj´ıc´ı verzi a podverzi bude vloˇzena teˇcka. Pozice, ve smyslu poˇctu prvk˚ u, po kter´ ych je teˇcka um´ıstˇena, je parametrem transformace. Pˇri chybˇe ˇcten´ı cel´ ych ˇc´ısel, stejnˇe jako pˇri neplatn´em parametru, je vr´acen pr´azdn´ y ˇretˇezec. Transformace se uplatˇ nuje u Exif tagu s verz´ı interoperability. Transformace 6 je pouˇzita k pˇrevodu hodnoty poˇctu bit˚ u na kaˇzdou sloˇzku do tvaru poˇzadovan´eho v NEXIF ontologii. Knihovna napˇr´ıklad vrac´ı ˇretˇezec 8 8 8 pokud pro kaˇzdou z barevn´ ych sloˇzek je vymezeno 8 bit˚ u. NEXIF poˇzaduje pouze jedno ˇc´ıslo platn´e pro vˇsechny sloˇzky. Funkce vrac´ı podˇretˇezec
49
Implementace
Bal´ık util
od zaˇc´atku vstupu k prvn´ımu znaku mezera. Tento postup by nebyl korektn´ı pro pˇr´ıpad, kdy kaˇzd´a sloˇzka bude m´ıt jin´ y poˇcet bit˚ u. S t´ım jsem se nicm´enˇe nesetkal a tedy to nepˇredpokl´ad´am. Tag v JFIF adres´aˇri pouˇz´ıv´a jin´ y ˇc´ıseln´ık pro jednotky rozliˇsen´ı neˇz ostatn´ı adres´aˇre. Pro pˇrevod na ˇc´ıslo odpov´ıdaj´ıc´ı ostatn´ım slouˇz´ı transformace 8. Jde pouze o inkrementaci ˇc´ısla na vstupu, nebot’ je cel´ y ˇc´ıseln´ık posunut´ y pr´avˇe o jeden prvek. Transformace nekontroluje, zda-li je vstup z platn´eho rozsahu. Kontrola tohoto typu je prov´adˇena pˇri z´apisu hodnoty pomoc´ı kontrolovan´eho slovn´ıku. Transformaci je tedy moˇzn´e pouˇz´ıt i k jin´ ym u ´ˇcel˚ um. Transformace 9 pˇrid´a za kaˇzd´e ˇc´ıslo na vstupu ˇretˇezec /100000. Touto formou je ˇreˇsen probl´em s PNG tagy barevnosti, kter´e jsou uv´adˇen´e jako cel´a ˇc´ısla po vyn´asoben´ı ˇc´ıslem 100 000. Je vracen pr´azdn´ y ˇretˇezec pˇri chybˇe ˇ ˇcten´ı cel´ ych ˇc´ısel. Reˇsen´ı je velmi specifick´e a tˇeˇzko pouˇziteln´e u jin´eho tagu. Transformace 10 pˇrev´ad´ı ˇc´ıseln´ıkovou hodnotu PNG tagu s typem barev na hodnotu poˇctu barevn´ ych vzork˚ u v pixelu. PNG pˇripouˇst´ı varianty odst´ıny ˇsedi (0), RGB (2), paletov´e barvy (3), odst´ıny ˇsedi s pr˚ uhlednost´ı (4), a RGB s pr˚ uhlednost´ı (6). Jsou definov´any n´asleduj´ıc´ı pˇrevody: 0 na 1, 2 na 3, 3 na 1, 4 na 2, 6 na 4. Ostatn´ı vstupy jsou pˇrevedeny na pr´azdn´ y ˇretˇezec. V transformaci 11 je ˇctena celoˇc´ıseln´a hodnota. Pokud je vˇetˇs´ı neˇz 0, je vr´acen ˇretˇezec true. V opaˇcn´em pˇr´ıpadˇe je vr´acen ˇretˇezec false. Pˇri chybˇe ˇcten´ı ˇc´ısla je vr´acen pr´azdn´ y ˇretˇezec. Transformace se pouˇz´ıv´a u PNG tag˚ u pˇri urˇcen´ı, zda-li je obraz transparentn´ı a zda-li je pouˇzito prol´ın´an´ı (interlace). D´ale je pouˇzita u nˇekter´ ych makernote tag˚ u. Transformace ˇc´ıslo 12 slouˇz´ı ke spojen´ı dvou tag˚ u obsahuj´ıc´ıch datum a ˇcas do jedn´e hodnoty. Datum a ˇcas je rozdˇelen do r˚ uzn´ ych tag˚ u ve form´atu IPTC a v Olympus makernote. Pˇri spojov´an´ı dojde k vloˇzen´ı znaku stˇredn´ık mezi hodnoty, jak bylo pops´ano v kapitole 5.2.2. Tento znak je vyuˇzit jako oddˇelovaˇc a kaˇzd´ y podˇretˇezec je pˇreveden funkc´ı z DateUtil tˇr´ıdy na datum. Pokud se pˇrevod podaˇr´ı, jsou data seˇcteny. Souˇcet je pˇreveden na ˇretˇezec a vr´acen. V pˇr´ıpadˇe chyby pˇri zpracov´an´ı je vr´acena p˚ uvodn´ı hodnota. To je z d˚ uvodu, ˇze pˇri skl´ad´an´ı ˇretˇezce ze dvou tag˚ u, je transformace vol´ana po naˇcten´ı kaˇzd´eho z tag˚ u a po dokonˇcen´ı spojen´ı. Pˇri vracen´ı pr´azdn´eho ˇretˇezce jako v pˇredchoz´ıch transformac´ıch by se nikdy nevytvoˇril cel´ y ˇretˇezec. K´odem 13 je vol´ana transformace odstraˇ nuj´ıc´ı p´ısmenn´e znaky ze vstupn´ıho ˇretˇezce. Pouˇz´ıv´a se hlavnˇe u tag˚ u, kter´e je potˇreba z´ıskat z Metadata 50
Implementace
Bal´ık util
Extractoru pˇreloˇzen´e, ale nen´ı chtˇen´e, aby ˇretˇezec obsahoval mˇern´e jednotky, nebo jin´e textov´e informace. Typick´e je uˇzit´ı u tag˚ u clonov´eho ˇc´ısla, kde knihovna spr´avnˇe interpretuje data, ale pˇrid´a pˇred ˇc´ıslo p´ısmeno F. Transformace 14 pˇrevede s´erii cel´ ych ˇc´ısel oddˇelen´ ych mezerou na jejich hexadecim´aln´ı reprezentaci. Mezery nejsou zachov´any. Pˇrij´ım´a pouze ˇc´ısla ˇ ısla jsou vˇzdy zaps´ana dvˇema znaky. Pokud dojde v rozmez´ı 0 aˇz 255. C´ k probl´emu pˇri ˇcten´ı ˇc´ısel je vr´acen pr´azdn´ y ˇretˇezec. Transformace je pouˇzita u Canon tagu obsahuj´ıc´ıho unik´atn´ı identifik´ator fotografie. Transformac´ı 15 lze pˇrev´est textovou hodnotu z tag˚ u popisuj´ıc´ıch pouˇzit´e digit´aln´ı pˇribl´ıˇzen´ı na ˇc´ıslo poˇzadovan´e NEXIF specifikac´ı. Pokud vstup zaˇc´ın´a podˇretˇezcem no, obsahuje not used nebo se rovn´a ˇretˇezci off, je vr´acena hodnota 0. Pokud vstupn´ı ˇretˇezec obsahuje unknown, je vr´acen pr´azdn´ y ˇretˇezec. V ostatn´ıch pˇr´ıpadech jsou odstranˇeny p´ısmenn´e znaky a vr´acen zbyl´ y ˇretˇezec, protoˇze knihovna poskytuje hodnoty zvˇetˇsen´ı jako ˇc´ıslo n´asledovan´e p´ısmenem x. Transformace ˇc´ıslo 16 slouˇz´ı k vydˇelen´ı ˇc´ısla na vstupu ˇc´ıslem zadan´ ym v parametru transformace. Chyba pˇri dˇelen´ı, vˇcetnˇe dˇelen´ı nulou, vrac´ı pr´azdn´ y ˇretˇezec. Poˇcet desetinn´ ych m´ıst je urˇcen v z´avislosti na hodnotˇe v´ ysledku. Vr´acen´a hodnota obsahuje desetinnou teˇcku. Transformace je pouˇzita u dvou tag˚ u Casio makernote, kter´e pouˇz´ıvaj´ı ˇspatn´e mˇern´e jednotky. Posledn´ı transformace, s k´odem 17, poskytuje mechanismus k nadefinov´an´ı vlastn´ıch popisn´ ych hodnot pro ˇc´ıseln´ıkov´e k´ody. Parametrem funkce je ˇretˇezec obsahuj´ıc´ı textov´e hodnoty oddˇelen´e stˇredn´ıkem. Funkce rozdˇel´ı tento ˇretˇezec na podˇretˇezce s t´ım, ˇze prvn´ı odpov´ıd´a indexu 0. Je vr´acen popisek na indexu, kter´ y je d´an vstupn´ı hodnotou. Vrac´ı pr´azdn´ y ˇretˇezec, pokud vstup nen´ı cel´e ˇc´ıslo, nebo index neodpov´ıd´a ˇza´dn´emu prvku.
5.4.4
Tˇ r´ıda ExtractorUtil
Tato tˇr´ıda obsahuje ˇctyˇri statick´e funkce volan´e tˇr´ıdami extraktor˚ u nebo tˇr´ıdou ExtractorLogic. Pro vˇsechny funkce kromˇe pˇrejmenov´an´ı uzl˚ u je sestaven unit test. Funkce getMappingDefinition(Individual) slouˇz´ı k naˇcten´ı mapovac´ı definice do instance IndividualData, kterou pak vrac´ı. Funkce iteruje nad vˇsemi vlastnostmi uzlu pˇredan´eho jako vstupn´ı parametr. Jm´ena vlastnost´ı porov51
Implementace
Bal´ık util
n´av´a s n´azvy zn´am´ ych vlastnost´ı mapovac´ı definice. Pˇri shodˇe je objekt vlastnosti pˇreˇcten a zaps´an do pˇr´ısluˇsn´eho atributu mapovac´ı instance. Vlastnost popisuj´ıc´ı typ liter´alu je jedin´ y pˇr´ıpad, kdy je ˇcten´ y objekt nutn´e zpracovat pˇred zaps´an´ım. K zpracov´an´ı je pouˇzita funkce getExpectedXSDDatatype(String), kter´a pˇrevede textovou definici datov´eho typu na pˇr´ısluˇsnou instanci XSDDatatype a tu pak vrac´ı. Pro lepˇs´ı uˇzivatelskou pˇr´ıvˇetivost a syntaktickou benevolenci netestuji ˇretˇezec na vstupu na rovnost, ale pouze na v´ yskyt specifick´eho podˇretˇezce. V d˚ usledku nez´aleˇz´ı na tom, jestli v mapovac´ı ontologii je definov´an poˇzadovan´ y datov´ y typ jako http://www.w3.org/2001/XMLSchema#string (IRI), xsd:string (prefixov´a cesta), XSDstring (instance Java tˇr´ıdy) nebo string (n´azev primitivn´ıho datov´eho typu). Funkce je definov´ana pouze pro datov´e typy xsd:string, xsd:integer, xsd:float, xsd:dateTime a xsd:boolean. Pokud vstup neodpov´ıd´a ˇza´dn´emu z nich, je vr´acena hodnota null. Dalˇs´ı funkc´ı je isDefinitionGraphCycle(. . . ) hledaj´ıc´ı cyklus v definici objektov´ ych vlastnost´ı. Parametrem je naˇcten´a definice mapov´an´ı tagu a enumeraˇcn´ı hodnota popisuj´ıc´ı vlastnost k prozkoum´an´ı. Funkce je definov´ana pouze pro vlastnosti duplicateTo a isAggregatedIn. Testov´an´ı na v´ yskyt cyklu u definice n´avaznosti pˇri spojov´an´ı je prov´adˇena pˇr´ımo ve funkci concatValue. Jelikoˇz jsou obˇe podporovan´e vlastnosti definovan´e jako funkˇcn´ı, hled´an´ı prob´ıh´a line´arn´ım pr˚ uchodem grafu od uzlu ze vstupn´ıho parametru pˇres danou vlastnost. Pokud je navˇst´ıven uzel, kter´ y byl navˇst´ıven jiˇz dˇr´ıve, je definice vlastnosti zacyklen´a a je vr´acena pravdivostn´ı hodnota true. Pokud pro proch´azen´ y uzel nen´ı vlastnost definov´ana, je vr´acena hodnota false. Posledn´ı funkce, renameNodes(HashMap<String, Resource>, RDFUtil), slouˇz´ı k pˇrejmenov´an´ı uzl˚ u na z´akladˇe vlastnost´ı, kter´e jsou pro nˇe definov´any. Vstupn´ım parametrem je mapa n´azv˚ u vytvoˇren´ ych uzl˚ u na jejich instanci a instance RDFUtil pro zapisov´an´ı do RDF modelu. Funkce pro vˇsechny vytvoˇ ezec ˇren´e uzly, kromˇe uzlu obrazov´eho souboru, projde jejich vlastnosti. Retˇ vznikl´ y slouˇcen´ım IRI vlastnosti a textov´e serializace objektu vloˇz´ı do seznamu. Po pˇreˇcten´ı vˇsech vlastnost´ı je seznam abecednˇe seˇrazen. Uzel je pak pˇrejmenov´an na n´azev odpov´ıdaj´ıc´ı v´ ystupu SHA-1 hashovac´ı funkce nad seznamem.
52
Implementace
5.5
Vytvoˇren´e ontologie
Vytvoˇ ren´ e ontologie
V projektu vyuˇz´ıv´am dvˇe vlastn´ı ontologie. Prvn´ı z nich obsahuje definici mapov´an´ı extrahovan´ ych tag˚ u. Druhou ontologi´ı vytv´aˇr´ım vlastnosti, kter´e vypl´ yvaj´ı ze zpracov´avan´ ych metadat a neexistuj´ı v jin´em slovn´ıku ˇci ontologii. RDF/XML serializace obou ontologi´ı jsou na pˇriloˇzen´em DVD.
5.5.1
Mapovac´ı ontologie
Definice mapov´an´ı by jistˇe mohla b´ yt zanesena do zdrojov´ ych k´od˚ u programu. Takov´e ˇreˇsen´ı je ale nepraktick´e pˇri potˇrebˇe prov´est zmˇenu, protoˇze je nutn´e cel´ y projekt znovu zkompilovat. Rozhodl jsem se tedy pro vynesen´ı definice do extern´ıho souboru i za cenu jej´ıho sloˇzitˇejˇs´ıho ˇcten´ı. Ontologie obsahuje instanci tˇr´ıdy ImageMetadata pro vˇsechny metadatov´e tagy, kter´e jsou definov´any v Metadata Extractoru 2.7.2 u souborov´ ych typ˚ u JPEG, PNG a TIFF. N´azvy prvk˚ u jsou sloˇzeny ze zkratky n´azvu adres´aˇre, do kter´eho knihovna tag ˇrad´ı, a hexadecim´aln´ıho ˇc´ısla identifikuj´ıc´ı tag. Napˇr´ıklad prvek vztahuj´ıc´ı se k Exif tagu s oznaˇcen´ım modelu zaˇr´ızen´ı m´a n´azev exifIFD0 0x0110. Aby ˇslo l´epe poznat, co prvek popisuje, uv´ad´ım u kaˇzd´e vlastnosti anotac´ı rdfs:label textov´ ym popisek. Pˇredchoz´ı prvek m´a ych k´od˚ u knihovny, popisek TAG MODEL. Popisky jsou z´ısk´any ze zdrojov´ konkr´etnˇe jde o n´azev konstanty uchov´avaj´ıc´ı ˇc´ıslo tagu. Takov´ y popisek mi pˇripad´a jako dostateˇcn´ y pro potˇreby ontologie. Prvky mohou definovat mapov´an´ı pomoc´ı deseti datov´ ych a pˇeti objektov´ ych vlastnost´ı. Jejich uˇzit´ı bylo pops´ano v kapitole 5.3. Vlastnosti maj´ı definovanou dom´enu i obor hodnot. Vˇsechny vlastnosti jsou funkˇcn´ı, tzn. prvek m˚ uˇze m´ıt kaˇzdou vlastnost definovanou maxim´alnˇe jednou. Pokud by napˇr´ıklad mˇel b´ yt tag zaps´an pomoc´ı dvou dalˇs´ıch definic, bude ve vlastnosti prvku uveden odkaz pouze na jednu definici a v t´e bude odkaz na druhou definici. Kromˇe prvk˚ u odpov´ıdaj´ıc´ıch zn´am´ ym metadatov´ ym tag˚ um se v ontologii nach´az´ı prvky, jejichˇz n´azev zaˇc´ın´a slovem duplicate. Jedn´a se o prvky obsahuj´ıc´ı dalˇs´ı definici mapov´an´ı k dan´emu tagu. Ty vyuˇz´ıv´am v pˇr´ıpadˇe, kdy vlastnost, na kterou je tag mapov´an, vyˇzaduje v objektu ˇc´ıseln´ıkov´ y k´od. Pro takov´ y tag pouˇziji druh´e mapov´an´ı na vlastnost v moj´ı ontologii, kter´a vyuˇz´ıv´a kontrolovan´ y slovn´ık. Dalˇs´ımi zvl´aˇstn´ımi prvky jsou ty, jenˇz obsahuj´ı 53
Implementace
Vytvoˇren´e ontologie
v n´azvu agg. Jde o definici uzl˚ u, kter´e jsou v nˇekter´em z mapov´an´ı pouˇzity na pozici subjektu v RDF trojici. Napˇr´ıklad gps agg1 je definov´an jako uzel typu geo:Point, na kter´ y budou dle definic gps 0x0002, gps 0x0004 a gps 0x0006 pˇripojena extrahovan´a metadata o zemˇepisn´e ˇs´ıˇrce, d´elce a nadmoˇrsk´e v´ yˇsce. V ontologii je zavedena tˇr´ıda DataTransformation, kter´a m´a definov´ano 16 instanc´ı. V definici transformace je vˇzdy odkazov´ano na jednu z instanc´ı. Instance maj´ı definovan´ y pouze ˇc´ıseln´ y k´od transformace a nˇekolik anotaˇcn´ıch vlastnost´ı pro popis jejich funkce. Transformace jsou bl´ıˇze pops´any v kapitole 5.4.3 zab´ yvaj´ıc´ı se jejich programovou implementac´ı. Pˇri tvorbˇe mapov´an´ı obrazov´ ych metadat na RDF vlastnosti byly nejprve nalezeny existuj´ıc´ı slovn´ıky ˇreˇs´ıc´ı podobn´ y probl´em, viz kapitola 3.2. Jako z´aklad byla zvolena NEXIF ontologie, kter´a poskytovala nejv´ıce relevantn´ıch pojm˚ u. U vˇetˇsiny pojm˚ u byl v popisu odkaz na Exif tag, kter´emu odpov´ıdaj´ı. N´aslednˇe byly na NEXIF ontologii namapov´any i tagy se stejn´ ym v´ yznamem z metadatov´ ych adres´aˇr˚ u jin´ ych neˇz Exif. Pot´e byly v ostatn´ıch ontologi´ıch hled´any pojmy vyuˇziteln´e pro dosud nenamapovan´e tagy. Po prohled´an´ı zn´am´ ych slovn´ık˚ u jsem pro kaˇzdou definici mapov´an´ı doplnil poˇzadovan´ y datov´ y typ. V dalˇs´ım kroku se porovnaly pˇreloˇzen´e a nepˇreloˇzen´e v´ ystupy Metadata Extraktoru u kaˇzd´eho tagu a rozhodl jsem o volbˇe v´ ystupu a transformaci. Nakonec se pˇridaly do definice odkazy na uzel, na kter´ y maj´ı b´ yt metadata nav´az´ana, pokud to nen´ı uzel obrazu. Ve druh´e f´azi byla vytvoˇrena ontologie pro tagy, kter´e se nepodaˇrilo namapovat a probˇehlo mapov´an´ı na tyto tagy. Pot´e byly opˇet nadefinov´any datov´e typy, typ ˇcten´eho v´ ystupu z knihovny a metoda transformace. Ve tˇret´ı f´azi byly pro nˇekter´e tagy mapovan´e na existuj´ıc´ı ontologie vytvoˇreny vlastnosti i v m´e ontologii vyuˇz´ıvaj´ıc´ı kontrolovan´e slovn´ıky. Byla doplnˇena definice dan´ ych prvk˚ u, aby odkazovala na dalˇs´ı definici.
5.5.2
Pojmov´ a ontologie
Tato ontologie definuje tˇr´ıdy Image, ICC, Camera a Resolution slouˇz´ıc´ı k vymezen´ı dom´eny definovan´ ych vlastnost´ı. Kromˇe tˇechto tˇr´ıd je definovan´a tˇr´ıda CodeList a jej´ı podtˇr´ıdy, jejichˇz instance tvoˇr´ı kontrolovan´e slovn´ıky vybran´ ych vlastnost´ı. Jde o vlastnosti, kter´e v p˚ uvodn´ım navrˇzen´em mapov´an´ı vyˇzaduj´ı ukl´adat ˇc´ıseln´ıkov´e k´ody. Aby bylo moˇzn´e zapsat u ´daje i ve tvaru ˇciteln´em pro ˇclovˇeka je vytvoˇreno dalˇs´ı mapov´an´ı na vlastnosti t´eto ontologie. 54
Implementace
Vytvoˇren´e ontologie
Ontologie obsahuje objektov´e vlastnosti createdWithCamera, hasIccProfile a hasResolution, kter´ ymi lze propojit instanci Image s instancemi ostatn´ıch tˇr´ıd zde definovan´ ych. Vlastnost hasResolution a vlastnosti s n´ı souvisej´ıc´ı jsou zde definov´any i pˇresto, ˇze v NEXIF ontologii jsou dostupn´e. D˚ uvodem je potˇreba vytvoˇrit strukturu, do kter´e p˚ ujde zapsat kombinace hodnot tag˚ u pro rozliˇsen´ı na ose x, y a mˇernou jednotku. V NEXIF jsou vˇsechny vlastnosti v´az´any pˇr´ımo na uzel obrazov´eho souboru a m˚ uˇze doj´ıt ke konfliktu, pokud je napˇr´ıklad v Exif tagu definov´ana sada hodnot 72, 72, DPI a v makernote bude sada hodnot 1, 1, proporcion´alnˇe. Obˇe sady jsou sami o sobˇe spr´avn´e, ale pˇri jejich mapov´an´ı na stejnou NEXIF vlastnost se stanou strojovˇe, a v nˇekter´ ych pˇr´ıpadech i pro ˇclovˇeka, nepouˇziteln´e. Zaveden´ım tˇr´ıdy Resolution je moˇzn´e sady hodnot od sebe oddˇelit. Datov´e vlastnosti jsou rozdˇelen´e do dvou skupin na spoleˇcn´e pro v´ıce tag˚ u a odpov´ıdaj´ıc´ı pouze jednomu tagu. Ty, kter´e odpov´ıdaj´ı pouze jednomu tagu, byly skriptem sesb´ır´any ze zdrojov´ ych k´od˚ u knihovny. Skript naˇcetl popisek odpov´ıdaj´ıc´ı n´azvu tagu v knihovnˇe a koment´aˇr, pokud byl nˇejak´ y nad definic´ı tagu. U vlastnost´ı byla definov´ana dom´ena Image. Spoleˇcn´e tagy byly vybr´any na z´akladˇe anal´ yzy nenamapovan´ ych tag˚ u. Tyto vlastnosti byly vytv´aˇreny manu´alnˇe a maj´ı definovan´ y i obor hodnot a detailnˇejˇs´ı popis v anotaci.
55
6 Diskuze v´ysledku 6.1
V´ ykonnostn´ı metriky
Plugin jsem otestoval s verz´ı MetaMed 2.0.0-r201504231326. Pouˇzil jsem obrazov´e soubory, kter´e volnˇe poskytuje autor Metadata Extractoru. Testoval jsem na stroji Intel Core i3-2100 3,1 GHz s 8 GB pamˇet´ı RAM a operaˇcn´ım syst´emu Windows 7, 64 bitov´a verze. Na stejn´em stroji jsem pot´e spustil virtu´aln´ı stroj s operaˇcn´ım syst´emem Debian GNU/Linux 6 s pˇridˇelen´ ymi 4 GB RAM a otestoval plugin i zde. V tabulce 6.1 uv´ad´ım srovn´an´ı namˇeˇren´ ych ˇcas˚ u pˇri zpracov´an´ı 277 obrazov´ ych soubor˚ u pomoc´ı MetaMedu na stroji s OS Windows a na virtu´aln´ım stroji s OS Debian. D´ale v posledn´ım sloupci uv´ad´ım dobu ˇcten´ı stejn´ ych soubor˚ u samotnou knihovnou na stejn´em stroji. V tabulce je ˇcas prvn´ıho bˇehu a pr˚ umˇern´ y ˇcas tˇr´ı n´asleduj´ıc´ıch bˇeh˚ u. Na obou operaˇcn´ıch syst´emech dok´azal MetaMed zpracovat soubory za pˇribliˇznˇe 16 vteˇrin, coˇz odpov´ıd´a pr˚ umˇernˇe 58 ms na jeden soubor. Tato rychlost se jev´ı jako pˇrijateln´a, V pˇr´ıpadˇe, kdy soubory jiˇz byly naˇcteny v pamˇeti z pˇredchoz´ıho bˇehu, se doba zpracov´an´ı na OS Windows zkr´atila na polovinu. D˚ uvodem, proˇc tomu tak nebylo i na OS Debian, m˚ uˇze b´ yt omezen´ı dostupn´e pamˇeti na 4 GB nebo samotn´a virtualizace. Windows
Debian Metadata Extractor
ˇ prvn´ıho bˇehu Cas 16 376 ms 16 222 ms ˇ Cas ostatn´ıch bˇeh˚ u 8 423 ms 15 882 ms
10 747 ms 909 ms
Tabulka 6.1: Doba zpracov´an´ı testovac´ı sady programem MetaMed a samotnou extrahovac´ı knihovnou. Statistiky z´ıskan´e ze zpracov´an´ı cel´e obrazov´e sady jsou v tabulce 6.2. Sleduji poˇcet zapsan´ ych trojic, pr´azdn´ ych ˇci nezn´am´ ych hodnot, neexistuj´ıc´ıch definic a pr´azdn´ ych definic. Neexistuj´ıc´ı definice znamen´a, ˇze pro dan´ y tag nebyla v ontologii nalezena ˇz´adn´a definice. Pr´azdn´a definice znamen´a, ˇze z´amˇernˇe nen´ı definov´ano mapov´an´ı pro dan´ y tag a v ontologii je jen pr´azdn´a instance. Vysok´ y poˇcet neexistuj´ıc´ıch definic (11,2 %) by mohl indikovat ˇspatnˇe z´ıskanou sadu ˇcten´ ych tag˚ u pˇri tvorbˇe ontologie. Po prozkoum´an´ı lad´ıc´ıho logu se uk´azalo, ˇze 91 % nenalezen´ ych tag˚ u jsou makernote metadata, kter´a 56
Diskuze v´ysledku
V´ykonnostn´ı metriky
nejsou vyjmenov´ana ve zdrojov´ ych k´odech tˇr´ıd *MakernoteDirectory a nen´ı zaruˇceno jejich spr´avn´e naˇcten´ı. Zbyl´ ych 9 % pˇr´ıpad˚ u jsou Exif tagy, kter´e rovnˇeˇz nejsou k nalezen´ı v pˇr´ısluˇsn´ ych tˇr´ıd´ach. V tomto ohledu tedy funguje plugin spr´avnˇe. Poˇcet Relativnˇe Zapsan´e trojice 21786 Pr´azdn´a ˇci nezn´am´a hodnota 865 Neexistuj´ıc´ı definice 3013 Pr´azdn´a definice 1193
81,1 3,2 11,2 4,4
% % % %
Tabulka 6.2: Statistiky zpracovan´ ych metadat. V ide´aln´ım pˇr´ıpadˇe by mˇela testovac´ı sada obsahovat kaˇzd´ y tag alespoˇ n jednou, aby bylo ovˇeˇreno, ˇze je hodnota z tagu spr´avnˇe ˇctena. Naj´ıt sadu obr´azk˚ u pokr´ yvaj´ıc´ı vˇsechny tagy je velmi tˇeˇzk´e. V tabulce 6.3 porovn´av´am kolik ze vˇsech zn´am´ ych tag˚ u Metadata Extractoru je obsaˇzeno v pouˇzit´e testovac´ı sadˇe obr´azk˚ u. Ne´ upln´e pokryt´ı mi dˇelalo probl´emy pˇri anal´ yze metadat a hled´an´ı moˇznost´ı kam je namapovat. Takov´e tagy jsem vˇetˇsinou nechal namapovan´e na vlastnost moj´ı ontologie, protoˇze jsem nedok´azal odhadnout, v jak´em tvaru je bude knihovna poskytovat. Zn´am´ ych tag˚ u Ovˇeˇren´ ych tag˚ u Pod´ıl ovˇeˇren´ ych Exif Thumbnail XMP JIF Adobe JPEG JFIF Png Exif IFD0 Makernote Exif Interoperability Exif GPS Exif SubIFD ICC Photoshop IPTC
20 15 9 4 4 24 22 722 5 31 111 65 43 77
20 15 9 4 4 23 21 600 4 24 69 36 21 26
100 100 100 100 100 95,8 95,5 83,1 80 77,4 62,2 55,4 48,8 33,8
% % % % % % % % % % % % % %
Tabulka 6.3: Srovn´an´ı poˇctu zn´am´ ych tag˚ u a tag˚ u obsaˇzen´ ych v testovac´ı obrazov´e sadˇe. 57
Diskuze v´ysledku
6.2
Srovn´an´ı s ˇreˇsen´ım jin´ych autor˚ u
Srovn´ an´ı s ˇ reˇ sen´ım jin´ ych autor˚ u
Jak jiˇz bylo zm´ınˇeno v kapitole 3.1.4, nen´ı ˇz´adn´ y aktivn´ı projekt, kter´ y by se zab´ yval ˇcten´ım obrazov´ ych metadat a jejich z´apisem do RDF. Jedin´ y v´ yznamn´ y projekt, Aperture framework, byl v roce 2011 zastaven z d˚ uvodu ztr´aty z´ajmu hlavn´ıho v´ yvoj´aˇre o RDF. Aperture u soubor˚ u JPEG rozpozn´av´a 20 z´akladn´ıch Exif tag˚ u a 3 GPS tagy. M˚ uj plugin definuje mapov´an´ı 314 tag˚ u na existuj´ıc´ı slovn´ıky, z toho je 107 tag˚ u z Exif Makernote adres´aˇre. V tomto ohledu je plugin v´ yrazn´ ym pokrokem, protoˇze zpracov´av´a i dalˇs´ı Exif IFD a metadatov´e form´aty. Nav´ıc pracuje i se soubory TIFF a PNG. Aperture mapuje vˇsechny tagy na vlastnosti ontologie NEXIF. J´a tak´e vych´az´ım z t´eto ontologie. Spoleˇcnˇe s n´ı d´ale pouˇz´ıv´am Dublin Core, Friend of a Friend, Geo a dalˇs´ı slovn´ıky projektu NEPOMUK. Tak´e jsem vytvoˇril vlastn´ı slovn´ık pro tagy, kter´e nelze pˇriˇradit ˇz´adn´e jin´e RDF vlastnosti. Slovn´ık kromˇe pojm˚ u pro jednotliv´e tagy definuje i 51 spoleˇcn´ ych pojm˚ u. Jist´ ym zp˚ usobem by za podobn´ y projekt ˇsel oznaˇcit metadatov´ y form´at XMP, kter´ y funguje na principu RDF. Dle jeho specifikac´ı a v´ ypisu zn´am´ ych XMP tag˚ u na str´ank´ach ExifTool bych odhadoval, ˇze sv´ ym rozsahem pˇredˇc´ı moj´ı pr´aci. Pˇrek´aˇzkou v uˇz´ıv´an´ı je vˇsak nemoˇznost z´ıskat serializaci XMP slovn´ıku a ontologi´ı. Pˇri zamˇeˇren´ı se pouze na extrakci obrazov´ ych metadat, je v´ yznamn´ ym n´astrojem ExifTool, jehoˇz autorem je Phil Harvey. N´astroj rozezn´av´a v´ıce tag˚ u neˇz mnou pouˇz´ıvan´ y Metadata Extractor.
6.3
Probl´ emy ˇ reˇ sen´ı
Hlavn´ım probl´emem ˇreˇsen´ı bych oznaˇcil mal´ y poˇcet rozezn´avan´ ych XMP tag˚ u. Pouˇzit´a knihovna je v tomto ohledu slab´a a v budoucnu by st´alo za prozkoum´an´ı, zda-li by nebylo moˇzn´e s XMP tagy pracovat jin´ ym zp˚ usobem. Ide´aln´ı by bylo vyuˇz´ıt faktu, ˇze se jedn´a o RDF model a pracovat s n´ım pomoc´ı n´astroj˚ u Jena frameworku. Nikde v procesu zpracov´an´ı z´ıskan´ ych metadat a jejich zaps´an´ı do RDF ˇ sen´ı modelu nekontroluji, zda-li vlastnost pouˇzit´a pˇri mapov´an´ı existuje. Reˇ funguje i v pˇr´ıpadˇe, ˇze vlastnost neexistuje v dan´em slovn´ıku. Uˇzivatel nem´a 58
Diskuze v´ysledku
Probl´emy ˇreˇsen´ı
zpˇetnou vazbu o pˇr´ıpadn´e chybˇe vznikl´e pˇri upravov´an´ı ontologick´e definice mapov´an´ı. Ovˇeˇrov´an´ı bˇehem extrakce by cel´ y proces v´ yraznˇe zpomalilo. Vhodnˇejˇs´ı ˇreˇsen´ım by bylo vytvoˇren´ı samostatn´eho n´astroje pro kontrolu definice ontologie. V ˇcasov´ ych u ´daj´ıch z Exif adres´aˇre nen´ı korektnˇe ˇreˇsena ˇcasov´a z´ona. ˇ sen´ı by U nezn´am´ ych ˇcasov´ ych p´asem pˇredpokl´ad´a program GMT+0. Reˇ mohlo spoˇc´ıvat v odhadu ˇcasov´e z´ony dle GPS lokace, nebo pˇreˇcten´ım nˇekter´eho tagu jin´eho adres´aˇre obsahuj´ıc´ı ˇcasovou znaˇcku a z´onu. Hodnoty nˇekter´ ych makernote tag˚ u by mohly b´ yt l´epe mapovan´e na existuj´ıc´ı vlastnosti. Bohuˇzel nem´am dostatek testovac´ıch soubor˚ u k ovˇeˇren´ı platnosti takov´eho mapov´an´ı.
59
Z´ avˇ er T´ema pr´ace vyvstalo z potˇreby v´ yzkumn´e skupiny Medic´ınsk´e informaˇcn´ı syst´emy rozˇs´ıˇrit st´avaj´ıc´ı aplikaci MetaMed o moˇznost extrahovat metadata z obrazov´ ych soubor˚ u a zapsat je do RDF modelu. Rozˇs´ıˇren´ı m´a formu pluginu k aplikaci MetaMed v jazyce Java. Cel´a definice zp˚ usobu zaps´an´ı z´ıskan´ ych hodnot do RDF modelu je uchov´ana v samostatn´e ontologii pro tento u ´ˇcel navrˇzen´e. Je vytvoˇrena i dalˇs´ı ontologie definuj´ıc´ı pojmy pro metadata, kter´a neˇslo namapovat na st´avaj´ıc´ı ontologie. Pr´ace je ˇclenˇena do ˇsesti ˇca´st´ı. V prvn´ı ˇc´asti se zab´ yv´am problematikou RDF, ontologiemi a principy s´emantick´eho webu. Ve druh´e ˇca´sti popisuji obrazov´e soubory typu JPEG, PNG, TIFF a metadata v nich obsaˇzen´a. Ve tˇret´ı kapitole jsou pˇredstaven´e vybran´e existuj´ıc´ı n´astroje pro pr´aci s obrazov´ ymi metadaty a RDF slovn´ıky, kter´e se tˇechto metadat t´ ykaj´ı. V dalˇs´ı ˇc´asti zd˚ uvodˇ nuji v´ ybˇer knihovny vyuˇzit´e k extrahov´an´ı metadat ze soubor˚ u. V p´at´e kapitole popisuji implementaci rozˇs´ıˇren´ı pro MetaMed. Na z´avˇer hodnot´ım v´ ysledn´e softwarov´e d´ılo a srovn´av´am ho s obdobn´ ymi projekty jin´ ych autor˚ u. Vˇsechny body zad´an´ı byly v pr´aci splnˇeny a softwarov´e ˇreˇsen´ı vyhovuje poˇzadavk˚ um kladen´ ym na projekt.
60
Pouˇ zit´ e zkratky EXIF FOAF ICC IFD IIM IPTC IRI JFIF JIF JPEG MIME NEPOMUK NEXIF NIE OWL PNG PSIR RDF RDFS TIFF W3C XMP
Exchangeable Image File Format Friend of a Friend International Color Consortium Image file directory Information Interchange Model International Press Telecommunications Council Internationalized Resource Identifier JPEG File Interchange Format JPEG Interchange Format Joint Photographic Experts Group Multipurpose Internet Mail Extension Networked Environment for Personal, Ontologybased Management of Unified Knowledge NEPOMUK EXIF ontologie NEPOMUK Information Element Web Ontology Language Portable Network Graphics Photoshop Image Resources Resource Description Framework RDF Schema Tagged Image File Format World Wide Web Consortium Extensible metadata platform
61
str. str. str. str. str. str. str. str. str. str. str. str.
13 25 16 13 15 15 3 13 12 12 13 27
str. str. str. str. str. str. str. str. str. str.
27 27 8 17 16 2 6 19 2 14
Literatura [1] SCHREIBER, G. – RAIMOND, Y. RDF 1.1 Primer [online]. 2014. [cit. 22.4.2015]. Dostupn´e z: http://www.w3.org/TR/2014/NOTE-rdf11-primer-20140624/. [2] W3C Mission [online]. 2015. [cit. 22.4.2015]. Dostupn´e z: http://www.w3.org/Consortium/mission. [3] DUERST, M. – SUIGNARD, M. RFC 3987: Internationalized Resource Identifiers (IRIs). IETF (January 2005). Dostupn´e z: http://www.ietf.org/rfc/rfc3987.txt. [4] CYGANIAK, R. – WOOD, D. – LANTHALER, M. RDF 1.1 Concepts and Abstract Syntax [online]. 2014. [cit. 22.4.2015]. Dostupn´e z: http://www.w3.org/TR/2014/REC-rdf11-concepts-20140225/. [5] CHEN, L. et al. Blank Nodes in RDF. Journal of Software. 2012, 7, 9, s. 1993–1999. [6] BERNERS-LEE, T. Linked Data - Design Issue [online]. 2009. [cit. 22.4.2015]. Dostupn´e z: http://www.w3.org/DesignIssues/LinkedData.html. [7] HITZLER, P. et al. OWL 2 Web Ontology Language Primer (Second Edition) [online]. 2012. [cit. 22.4.2015]. Dostupn´e z: http://www.w3.org/TR/2012/REC-owl2-primer-20121211/. [8] BRICKLEY, D. – GUHA, R. RDF Schema 1.1 [online]. 2014. [cit. 22.4.2015]. Dostupn´e z: http://www.w3.org/TR/2014/REC-rdf-schema-20140225/. [9] MAZZOCCHI, S. Closed World vs. Open World: the First Semantic Web Battle [online]. 2005. [cit. 22.4.2015]. Dostupn´e z: http://www.betaversion.org/~stefano/linotype/news/91/. [10] Raster Graphic Definition [online]. 2015. [cit. 28.4.2015]. Dostupn´e z: http://techterms.com/definition/rastergraphic. [11] Vector Graphic Definition [online]. 2015. [cit. 28.4.2015]. Dostupn´e z: http://techterms.com/definition/vectorgraphic.
62
LITERATURA
LITERATURA
[12] MATTHEWS, R. Digital image file types [online]. [cit. 28.4.2015]. Dostupn´e z: http://users.wfu.edu/matthews/misc/graphics/ formats/formats.html. [13] ISO-IEC, I. 10918. Digital compression and coding of continuous–tone still images. 1992. [14] WALLACE, G. K. The JPEG still picture compression standard. Consumer Electronics, IEEE Transactions on. 1992, 38, 1, s. xviii–xxxiv. [15] ISO-IEC, I. 10918-1. Digital compression and coding of continuous–tone still images. 1992. [16] NHU, T. The Metadata in JPEG files - Exiv2 [online]. 2015. [cit. 28.4.2015]. Dostupn´e z: http://dev.exiv2.org/projects/ exiv2/wiki/The_Metadata_in_JPEG_files. [17] FREED, N. – BORENSTEIN, N. Multipurpose internet mail extensions (MIME) part two: Media types. Technical report, rfc 2046, November, 1996. [18] HAMILTON, E. JPEG file interchange format. C-Cube Microsystems. 1992. [19] Exchangeable image file format for digital still cameras: Exif Version 2.3 [online]. 2012. [cit. 28.4.2015]. Dostupn´e z: http://www.cipa.jp/std/documents/e/DC-008-2012_E.pdf. [20] HUGGEL, A. Exiv2 - Image metadata library and tools [online]. 2014. [cit. 28.4.2015]. Dostupn´e z: http://www.exiv2.org/makernote.html. [21] Adobe XMP Specification Part 3: Storage in Files [online]. 2014. [cit. 28.4.2015]. Dostupn´e z: http: //wwwimages.adobe.com/content/dam/Adobe/en/devnet/xmp/pdfs/ XMP%20SDK%20Release%20cc-2014-12/XMPSpecificationPart3.pdf. [22] Extensible Metadata Platform (XMP) Specification: Part 1, Data Model, Serialization, and Core Properties [online]. 2012. [cit. 28.4.2015]. Dostupn´e z: http: //wwwimages.adobe.com/content/dam/Adobe/en/devnet/xmp/pdfs/ XMP%20SDK%20Release%20cc-2014-12/XMPSpecificationPart1.pdf.
63
LITERATURA
LITERATURA
[23] Adobe XMP Specification Part 2: Additional Properties [online]. 2014. [cit. 28.4.2015]. Dostupn´e z: http: //wwwimages.adobe.com/content/dam/Adobe/en/devnet/xmp/pdfs/ XMP%20SDK%20Release%20cc-2014-12/XMPSpecificationPart2.pdf. [24] Information Interchange Model Version 4 [online]. 2014. [cit. 28.4.2015]. Dostupn´e z: http://www.iptc.org/std/IIM/4.2/specification/IIMV4.2.pdf. [25] IIM Schema for XMP [online]. 2008. [cit. 28.4.2015]. Dostupn´e z: http://www.iptc.org/std/IIM/4.1/specification/ IPTC-IIM-Schema4XMP-1.0-spec_1.pdf. [26] Guidelines for Handling Image Metadata [online]. 2010. [cit. 28.4.2015]. Dostupn´e z: http://metadataworkinggroup.com/pdf/mwg_guidance.pdf. [27] Adobe Photoshop File Formats Specification [online]. 2013. [cit. 28.4.2015]. Dostupn´e z: http: //www.adobe.com/devnet-apps/photoshop/fileformatashtml/. [28] Image technology colour management — Architecture, profile format, and data structure [online]. 2010. [cit. 28.4.2015]. Dostupn´e z: http://www.color.org/specification/ICC1v43_2010-12.pdf. [29] Portable Network Graphics (PNG) Specification (Second Edition) [online]. 2003. [cit. 28.4.2015]. Dostupn´e z: http://www.w3.org/TR/2003/REC-PNG-20031110/. [30] RANDERS-PEHRSON, G. Converting TIFF/EP or Exif files to and from the PNG format (Draft 0.20, December 20, 2000) [online]. 2000. [cit. 28.4.2015]. Dostupn´e z: http://pmt.sourceforge.net/exif/drafts/history/d020.html. [31] TIFF Revision 6.0 [online]. 1992. [cit. 28.4.2015]. Dostupn´e z: http: //partners.adobe.com/public/developer/en/tiff/TIFF6.pdf. [32] HUGGEL, A. Exiv2 - Image metadata library and tools [online]. 2014. [cit. 30.4.2015]. Dostupn´e z: http://www.exiv2.org/. [33] HARVEY, P. ExifTool by Phil Harvey [online]. 2015. [cit. 30.4.2015]. Dostupn´e z: http://owl.phy.queensu.ca/~phil/exiftool/.
64
LITERATURA
LITERATURA
[34] NOAKES, D. drewnoakes/metadata-extractor · GitHub [online]. 2015. [cit. 30.4.2015]. Dostupn´e z: https://github.com/drewnoakes/metadata-extractor. [35] Aperture Framework [online]. 2015. [cit. 30.4.2015]. Dostupn´e z: http://aperture.sourceforge.net/. [36] MYLKA, A. Aperture / Feature Requests / #118 Advice please on extracting embedded files from RTF docs [online]. 2014. [cit. 30.4.2015]. Dostupn´e z: http: //sourceforge.net/p/aperture/feature-requests/118/#e875. [37] DCMI Metadata Terms [online]. 2012. [cit. 30.4.2015]. Dostupn´e z: http://dublincore.org/documents/2012/06/14/dcmi-terms/. [38] BRICKLEY, D. – MILLER, L. FOAF Vocabulary Specification 0.99 [online]. 2014. [cit. 30.4.2015]. Dostupn´e z: http://xmlns.com/foaf/spec/20140114.html. [39] KANZAKI, M. Exif data description vocabulary [online]. 2007. [cit. 30.4.2015]. Dostupn´e z: http://www.kanzaki.com/ns/exif. [40] MYLKA, A. et al. Nepomuk Information Element Ontology (NIE) [online]. 2012. [cit. 30.4.2015]. Dostupn´e z: http://www.semanticdesktop.org/ontologies/2007/01/19/nie/. [41] MYLKA, A. et al. Nepomuk File Ontology (NFO) [online]. 2013. [cit. 30.4.2015]. Dostupn´e z: http://www.semanticdesktop.org/ontologies/2007/03/22/nfo/. [42] MYLKA, A. et al. Nepomuk EXIF Ontology (NEXIF) [online]. 2012. [cit. 30.4.2015]. Dostupn´e z: http: //www.semanticdesktop.org/ontologies/2007/05/10/nexif/. [43] BRICKLEY, D. W3C Semantic Web Interest Group: Basic Geo (WGS84 lat/long) Vocabulary [online]. 2006. [cit. 30.4.2015]. Dostupn´e z: http://www.w3.org/2003/01/geo/.
65
Pˇ r´ılohy Struktura pˇ riloˇ zen´ eho DVD Na pˇriloˇzen´ım DVD jsou n´asleduj´ıc´ı sloˇzky a soubory: • latex obsahuj´ıc´ı zdrojov´e k´ody dokumentace. • MetaMed obsahuj´ıc´ı aplikaci MetaMed s pluginem pro zpracov´an´ı metadat z obrazov´ ych soubor˚ u. Ve sloˇzce jsou tˇri .bat soubory slouˇz´ıc´ı k uk´azce pr´ace MetaMedu a extraktor˚ u. • metamed-extractor-image se zdrojov´ ymi k´ody pluginu ke zpracov´an´ı metadat obrazov´ ych soubor˚ u. • srovnani obsahuj´ıc´ı obrazov´e soubory, kter´ ymi byla testov´ana schopnost n´astroj˚ u pracovat s obrazov´ ymi metadaty v kapitole 4.2. Pro kaˇzd´ y n´astroj je vytvoˇrena sloˇzka se seznamy nalezen´ ych metadat v jednotliv´ ych souborech. V adres´aˇri je tabulka se zaznamenan´ ymi poˇcty z´ıskan´ ych metadat. • dip.pdf s textem diplomov´e pr´ace.
V´ ypis nalezen´ ych metadat v souboru Sanyo SR662.jpg knihovnou Metadata Extractor. [ Exif [ Exif [ Exif [ Exif [ Exif [ Exif [ Exif [ Exif [ Exif [ Exif [ Exif [ Exif [ Exif [ Exif [ Exif [ Exif [ Exif [ Exif [ Exif [ Exif [ Exif [ Exif [ Exif [ Exif [ Exif [ Exif [ Exif [ Exif [ Exif
IFD0 IFD0 IFD0 IFD0 IFD0 IFD0 IFD0 IFD0 IFD0 IFD0 SubIFD SubIFD SubIFD SubIFD SubIFD SubIFD SubIFD SubIFD SubIFD SubIFD SubIFD SubIFD SubIFD SubIFD SubIFD SubIFD SubIFD SubIFD SubIFD
0 x010e ] Image Description = SANYO DIGITAL CAMERA 0 x010f ] Make = SANYO Electric Co . , Ltd . 0 x0110 ] Model = SR662 0 x0112 ] Orientation = Top , left side ( Horizontal / normal ) 0 x011a ] X Resolution = 72 dots per inch 0 x011b ] Y Resolution = 72 dots per inch 0 x0128 ] Resolution Unit = Inch 0 x0131 ] Software = V662U -71 0 x0132 ] Date / Time = 2001 :09:15 18 :11:27 0 x0213 ] YCbCr Positioning = Datum point - 0 x829a ] Exposure Time = 0.25 sec - 0 x829d ] F - Number = F2 .8 - 0 x9000 ] Exif Version = 2.00 - 0 x9003 ] Date / Time Original = 2001 :09:15 18 :11:27 - 0 x9004 ] Date / Time Digitized = 2001 :09:15 18 :11:27 - 0 x9101 ] Components Configuration = YCbCr - 0 x9102 ] Compressed Bits Per Pixel = 3.5 bits / pixel - 0 x9204 ] Exposure Bias Value = 0 EV - 0 x9205 ] Max Aperture Value = F2 .8 - 0 x9207 ] Metering Mode = Multi - segment - 0 x9208 ] White Balance = Unknown - 0 x9209 ] Flash = Flash did not fire - 0 x920a ] Focal Length = 6.0 mm - 0 xa000 ] FlashPix Version = 1.00 - 0 xa001 ] Color Space = Undefined - 0 xa002 ] Exif Image Width = 1024 pixels - 0 xa003 ] Exif Image Height = 768 pixels - 0 xa004 ] Related Sound File = - 0 xa300 ] File Source = Digital Still Camera ( DSC )
[ Exif [ Exif [ Exif [ Exif [ Exif [ Exif
Thumbnail Thumbnail Thumbnail Thumbnail Thumbnail Thumbnail
-
0 x0103 ] 0 x011a ] 0 x011b ] 0 x0128 ] 0 x0201 ] 0 x0202 ]
Thumbnail Compression = JPEG ( old - style ) X Resolution = 72 dots per inch Y Resolution = 72 dots per inch Resolution Unit = Inch Thumbnail Offset = 878 bytes Thumbnail Length = 4562 bytes
[ File - 0 x0001 ] File Name = Sanyo SR662 . jpg [ File - 0 x0002 ] File Size = 18526 bytes [ File - 0 x0003 ] File Modified Date = Sun Jan 27 02 :31:16 GMT 2013 [ JFIF [ JFIF [ JFIF [ JFIF
-
0 x0005 ] 0 x0007 ] 0 x0008 ] 0 x000a ]
Version = 1.1 Resolution Units = inch X Resolution = 72 dots Y Resolution = 72 dots
[ JPEG [ JPEG [ JPEG [ JPEG [ JPEG [ JPEG [ JPEG [ JPEG
-
0 xfffffffd ] Compression Type = Baseline 0 x0000 ] Data Precision = 8 bits 0 x0001 ] Image Height = 225 pixels 0 x0003 ] Image Width = 300 pixels 0 x0005 ] Number of Components = 3 0 x0006 ] Component 1 = Y component: Quantization table 0 , Sampling factors 1 horiz /1 vert 0 x0007 ] Component 2 = Cb component: Quantization table 1 , Sampling factors 1 horiz /1 vert 0 x0008 ] Component 3 = Cr component: Quantization table 1 , Sampling factors 1 horiz /1 vert
[ Sanyo Makernote - 0 x0200 ] Special Mode = 33554691 1114897 3502768191 [ Sanyo Makernote - 0 x0201 ] Sanyo Quality = Normal / Medium High [ Sanyo Makernote - 0 x0f00 ] Data Dump = [20 longs ]
V´ ypis nalezen´ ych metadat v souboru Sanyo SR662.jpg knihovnou Exiv2. Exif . Image . Ima g eD e sc r ip t io n Exif . Image . Make Exif . Image . Model Exif . Image . Orientation Exif . Image . XResolution Exif . Image . YResolution Exif . Image . ResolutionUnit Exif . Image . Software Exif . Image . DateTime Exif . Image . YCb C rP o si t io n in g Exif . Image . ExifTag Exif . Photo . ExposureTime Exif . Photo . FNumber Exif . Photo . ExifVersion Exif . Photo . Dat e Ti m eO r ig i na l Exif . Photo . Da t e T i m e D i g i t i z e d Exif . Photo . C o m p o n e n t s C o n f i g u r a t i o n Exif . Photo . C o m p r e s s e d B i t s P e r P i x e l Exif . Photo . Ex p o s u r e B i a s V a l u e Exif . Photo . Max A pe r tu r eV a lu e Exif . Photo . MeteringMode Exif . Photo . LightSource Exif . Photo . Flash Exif . Photo . FocalLength Exif . Photo . MakerNote Exif . Photo . Flas hpix Ver sion Exif . Photo . ColorSpace Exif . Photo . Pixe lXDi men sion Exif . Photo . Pixe lYDi men sion Exif . Photo . Rel a te d So u nd F il e Exif . Photo . FileSource Exif . Thumbnail . Compression Exif . Thumbnail . XResolution Exif . Thumbnail . YResolution Exif . Thumbnail . ResolutionUnit Exif . Thumbnail . J P E G I n t e r c h a n g e F o r m a t Exif . Thumbnail . J P E G I n t e r c h a n g e F o r m a t L e n g t h
Ascii 21 Ascii 24 Ascii 6 Short 1 Rational 1 Rational 1 Short 1 Ascii 9 Ascii 20 Short 1 Long 1 Rational 1 Rational 1 Undefined 4 Ascii 20 Ascii 20 Undefined 4 Rational 1 SRational 1 Rational 1 Short 1 Short 1 Short 1 Rational 1 Undefined 142 Undefined 4 Short 1 Long 1 Long 1 Ascii 13 Undefined 1 Short 1 Rational 1 Rational 1 Short 1 Long 1 Long 1
SANYO DIGITAL CAMERA SANYO Electric Co . , Ltd . SR662 top , left 72 72 inch V662U -71 2001 :09:15 18 :11:27 Co - sited 294 1/4 s F2 .8 2.00 2001 :09:15 18 :11:27 2001 :09:15 18 :11:27 YCbCr 3.5 0 EV F2 .8 Multi - segment Unknown No flash 6.0 mm ( Binary value suppressed ) 1.00 Uncalibrated 1024 768 Digital still camera JPEG ( old - style ) 72 72 inch 878 4562
V´ ypis nalezen´ ych metadat v souboru Sanyo SR662.jpg knihovnou Exiftool. ExifTool Version Number File Name Directory File Size File Modification Date / Time File Access Date / Time File Creation Date / Time File Permissions File Type File Type Extension MIME Type JFIF Version Exif Byte Order Image Description
: : : : : : : : : : : : : :
9.93 Sanyo SR662 . jpg . 18 kB 2015 :02:15 14 :26:23 +01 :00 2015 :05:13 01 :06:26 +01 :00 2015 :05:13 01 :06:26 +01 :00 rw - rw - rw JPEG jpg image / jpeg 1.01 Little - endian ( Intel , II ) SANYO DIGITAL CAMERA
Make Camera Model Name Orientation X Resolution Y Resolution Resolution Unit Software Modify Date Y Cb Cr Positioning Exposure Time F Number Exif Version Date / Time Original Create Date Components Configuration Compressed Bits Per Pixel Exposure Compensation Max Aperture Value Metering Mode Light Source Flash Focal Length Special Mode Sanyo Quality Data Dump Flashpix Version Color Space Exif Image Width Exif Image Height Related Sound File File Source Compression Thumbnail Offset Thumbnail Length Image Width Image Height Encoding Process Bits Per Sample Color Components Y Cb Cr Sub Sampling Aperture Image Size Megapixels Shutter Speed Thumbnail Image Focal Length
: : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : :
SANYO Electric Co . , Ltd . SR662 Horizontal ( normal ) 72 72 inches V662U -71 2001 :09:15 18 :11:27 Co - sited 1/4 2.8 0200 2001 :09:15 18 :11:27 2001 :09:15 18 :11:27 Y , Cb , Cr , 3.5 0 2.8 Multi - segment Unknown No Flash 6.0 mm 0 0 0 Normal / Medium High ( Binary data 152 bytes , use -b option to extract ) 0100 Uncalibrated 1024 768 Digital Camera JPEG ( old - style ) 908 4562 300 225 Baseline DCT , Huffman coding 8 3 YCbCr4:4:4 (1 1) 2.8 300 x225 0.068 1/4 ( Binary data 4562 bytes , use -b option to extract ) 6.0 mm
V´ ypis nalezen´ ych metadat v souboru Sanyo SR662.jpg frameworkem Aperture. < file: / C: / Users / Keiras / Desktop / New %20 folder %20(6) / Sanyo %20 SR662 . jpg > < http: // www . se man ticd eskt op . org / ontologies /2007/05/10/ nexif # height > " 768 " ; < http: // www . sema ntic des ktop . org / ontologies /2007/05/10/ nexif # width > " 1024 " ; < http: // www . sema ntic des ktop . org / ontologies /2007/05/10/ nexif # e x p o s u r e B i a s V a l u e > " 0 " ; < http: // www . sema ntic des ktop . org / ontologies /2007/05/10/ nexif # exposureTime > " 0.25 " ; < http: // www . sema ntic des ktop . org / ontologies /2007/05/10/ nexif # flash > " 0 " ; < http: // www . sema ntic des ktop . org / ontologies /2007/05/10/ nexif # fl ashp ixVe rsio n > " 48 49 48 48 " ; < http: // www . sema ntic des ktop . org / ontologies /2007/05/10/ nexif # make > " SANYO Electric Co . , Ltd ." ; < http: // www . sema ntic des ktop . org / ontologies /2007/05/10/ nexif # dateTime > " 2001 -09 -15 T18:11:27 .000+01 :00 " ^^ < http: // www . w3 . org /2001/ XMLSchema # dateTime > ; < http: // www . sema ntic des ktop . org / ontologies /2007/05/10/ nexif # d a t e T i m e D i g i t i z e d > " 2001 -09 -15 T18:11:27 .000+01 :00 " ^^ < http: // www . w3 . org /2001/ XMLSchema # dateTime > ; < http: // www . sema ntic des ktop . org / ontologies /2007/05/10/ nexif # d a te T im e Or i gi n al > " 2001 -09 -15 T18:11:27 .000+01 :00 " ^^ < http: // www . w3 . org /2001/ XMLSchema # dateTime > ; a < http: // www . s eman tic desk top . org / ontologies /2007/05/10/ nexif # Photo > .
Z´apis nalezen´ ych metadat v souboru Sanyo SR662.jpg do RDF modelu pomoc´ı MetaMed aplikace obsahuj´ıc´ı m˚ uj plugin. @prefix @prefix @prefix @prefix @prefix @prefix @prefix @prefix @prefix @prefix @prefix @prefix @prefix @prefix @prefix @prefix @prefix @prefix @prefix @prefix @prefix @prefix @prefix @prefix
mre: nihss: mreid: rdfs: dscl: fslmre: rdf: mreb: ds: dc: geo: foaf: nfo: acl: nie: dc10: image: dcm: fsl: xsd: owl: skos: icd10: nexif:
< http: // mre . kiv . zcu . cz / ontology / mre . owl # > . < http: // mre . kiv . zcu . cz / ontology / nihss . owl # > . < http: // mre . kiv . zcu . cz / id / > . < http: // www . w3 . org /2000/01/ rdf - schema # > . < http: // mre . kiv . zcu . cz / ontology / dscl . owl # > . < http: // mre . kiv . zcu . cz / id / fresnel # > . < http: // www . w3 . org /1999/02/22 - rdf - syntax - ns # > . < http: // mre . kiv . zcu . cz / > . < http: // mre . kiv . zcu . cz / ontology / dasta . owl # > . < http: // purl . org / dc / elements /1.1/ > . < http: // www . w3 . org /2003/01/ geo / wgs84_pos # > . < http: // xmlns . com / foaf /0.1/ > . < http: // www . sema ntic des ktop . org / ontologies /2007/03/22/ nfo # > . < http: // www . w3 . org / ns / auth / acl > . < http: // www . sema ntic des ktop . org / ontologies /2007/01/19/ nie # > . < http: // purl . org / dc / elements /1.0/ > . < http: // mre . kiv . zcu . cz / ontology / image . owl # > . < http: // mre . kiv . zcu . cz / ontology / dicom . owl # > . < http: // www . w3 . org /2004/09/ fresnel # > . < http: // www . w3 . org /2001/ XMLSchema # > . < http: // www . w3 . org /2002/07/ owl # > . < http: // www . w3 . org /2004/02/ skos / core # > . < http: // purl . bioontology . org / ontology / ICD10 / > . < http: // www . se mant icde skto p . org / ontologies /2007/05/10/ nexif # > .
< http: // mre . kiv . zcu . cz / id / JPEG /39 c 0 2 b d 1 7 3 5 f b 8 a a d f a 1 7 8 e f 6 4 7 8 c 7 6 8 1 4 6 d 9 5 a 4 > i ma g e: f il e So u rc e i m a g e : f i l e S o u r c e _ 3 ; i m a g e : h a s R e s o l u t i o n < http: // mre . kiv . zcu . cz / id /870769 a 0 d d 5 5 0 8 5 9 6 f f c f 1 8 9 7 8 5 e 7 0 3 f 4 5 1 9 7 7 a 1 > ; i m a g e : i m a g e Q u a l i t y " Normal / Medium High " ^^ xsd:string ; i m a g e :j f i f _ 0 x 0 0 0 5 " 1.1 " ^^ xsd:float ; i m a g e :j p e g _ 0 x 0 0 0 6 " Y component: Quantization table 0 , Sampling factors 1 horiz /1 vert " ^^ xsd:string ;
i m a g e :j p e g _ 0 x 0 0 0 7 " Cb component: Quantization table 1 , Sampling factors 1 horiz /1 vert " ^^ xsd:string ; i m a g e :j p e g _ 0 x 0 0 0 8 " Cr component: Quantization table 1 , Sampling factors 1 horiz /1 vert " ^^ xsd:string ; i m a g e : j p e g _ 0 x f f f f f f f d " Baseline " ^^ xsd:string ; i m a g e :o r i e n t a t i o n i m a g e : o r i e n t a t i o n _ 1 ; image:yCbCrPositioning image:yCbCrPositioning_2 ; mre:filePath " single - image \\ Sanyo SR662 . jpg " ; n f o : f i l e L a s t M o d i f i e d " 2015 -02 -15 T14:26:23 " ^^ xsd:dateTime ; nfo:fileName " Sanyo SR662 . jpg " ; nfo:fileSize " 18526 " ; nfo:hasHash < http: // mre . kiv . zcu . cz / id /597 f 8 3 0 a 9 6 9 4 5 d b 9 5 e c 5 3 2 f 8 5 c 2 6 b f f 0 d d 5 e e e a 6 > ; nexif:bitsPerSample 8 ; n e x i f : c o m p o n e n t s C o n f i g u r a t i o n " YCbCr " ^^ xsd:string ; n e x i f : c o m p r e s s e d B i t s P e r P i x e l " 3.5 " ^^ xsd:float ; nexif:dateTime " 2001 -09 -15 T18:11:27 " ^^ xsd:dateTime ; n e x i f : d a t e T i m e D i g i t i z e d " 2001 -09 -15 T18:11:27 " ^^ xsd:dateTime ; n e x i f : d a t e T i m e O r i g i n a l " 2001 -09 -15 T18:11:27 " ^^ xsd:dateTime ; n e x i f :e x i f V e r s i o n " 2.0 " ^^ xsd:float ; nexif:exposureBiasValue 0 ; n e x i f : e x p o s u r e T i m e " 0.25 " ^^ xsd:float ; nexif:fNumber " 2.8 " ^^ xsd:float ; n ex i f: f il e So u rc e 3 ; nexif:flash " Flash did not fire " ^^ xsd:string ; n e x i f : f l a s h p i x V e r s i o n " 1.0 " ^^ xsd:float ; n e x i f :f o c a l L e n g t h 6 ; n e x i f : i m a g e D e s c r i p t i o n " SANYO DIGITAL CAMERA " ^^ xsd:string ; n e x i f :i m a g e L e n g t h 300 ; n ex i f: i ma g eW i dt h 225 ; nexif:make " SANYO Electric Co . , Ltd . " ^^ xsd:string ; nexif:maxApertureValue 3 ; n e x i f : m e t e r i n g M o d e " Multi - segment " ^^ xsd:string ; nexif:model " SR662 " ^^ xsd:string ; n e x i f :o r i e n t a t i o n 1 ; n e x i f : p i x e l X D i m e n s i o n 1024 ; n e x i f : p i x e l Y D i m e n s i o n 768 ; nexif:resolutionUnit 2 ; nexif:samplesPerPixel 3 ; nexif:software " V662U -71 " ^^ xsd:string ; n e x i f :x R e s o l u t i o n 72 ; nexif:yCbCrPositioning 2 ; n e x i f :y R e s o l u t i o n 72 ; foaf:thumbnail < http: // mre . kiv . zcu . cz / id /4311 d 6 a 4 6 d c 1 d f 9 4 6 e e 9 1 5 9 d 9 5 1 8 f 8 a e 5 7 e a 3 a 3 7 > . < http: // mre . kiv . zcu . cz / id /4311 d 6 a 4 6 d c 1 d f 9 4 6 e e 9 1 5 9 d 9 5 1 8 f 8 a e 5 7 e a 3 a 3 7 > a foaf:Image ; i m a g e :c o m p r e s s i o n i m a g e : c o m p r e s s i o n _ 6 ; image:resolutionUnit image:resolutionUnit_2 ; n e x i f :c o m p r e s s i o n 6 ; n e x i f : j p e g I n t e r c h a n g e F o r m a t 878 ; n e x i f : j p e g I n t e r c h a n g e F o r m a t L e n g t h 4562 ; nexif:resolutionUnit 2 ; n e x i f : x R e s o l u t i o n 72 ; n e x i f : y R e s o l u t i o n 72 . < http: // mre . kiv . zcu . cz / id /597 f 8 3 0 a 9 6 9 4 5 d b 9 5 e c 5 3 2 f 8 5 c 2 6 b f f 0 d d 5 e e e a 6 > a nfo:FileHash ; n f o : h a s h A l g o r i t h m " SHA1 " ; nfo:hashValue " c 8 b e 1 a 9 2 d c e 8 3 4 7 e 0 5 4 7 f 0 a 1 3 f 5 4 2 a 8 6 d 6 b 8 3 4 0 9 " . mreid:e6180e894cda9a9f377fbe63ae2858030c449cfa a mre:Dataset ;
mre:hasData < http: // mre . kiv . zcu . cz / id / JPEG /39 c 0 2 b d 1 7 3 5 f b 8 a a d f a 1 7 8 e f 6 4 7 8 c 7 6 8 1 4 6 d 9 5 a 4 > ; m r e : h as D a t a S o u r c e < http: // mre . kiv . zcu . cz / id /50 d 8 b 4 a 9 4 1 c 2 6 b 8 9 4 8 2 c 9 4 a b 3 2 4 b 5 a 2 7 4 f 9 c e d 6 6 > ; dc:title " unknown 2015 -02 -15 " . < http: // mre . kiv . zcu . cz / id /50 d 8 b 4 a 9 4 1 c 2 6 b 8 9 4 8 2 c 9 4 a b 3 2 4 b 5 a 2 7 4 f 9 c e d 6 6 > a mre:DataSource ; dc:title " unknown " . < http: // mre . kiv . zcu . cz / id /870769 a 0 d d 5 5 0 8 5 9 6 f f c f 1 8 9 7 8 5 e 7 0 3 f 4 5 1 9 7 7 a 1 > a i ma g e: R es o lu t io n ; image:resolutionUnit image:resolutionUnit_2 ; i m a g e :x R e s o l u t i o n 72 ; i m a g e :y R e s o l u t i o n 72 .