Rétegmentesítés megvalósítása XML segítségével Kovács Máté
Tartalom Motiváció: a HypereiDoc projekt A dokumentum kezelése: – Réteges szerkezetben – Rétegmentes szerkezetben A rétegmentesítés folyamata Megvalósítás XML segítségével Összegzés
A HypereiDoc projekt 2007 szeptemberétől, ELTE IK és Eötvös Collegium tagjainak részvételével Ókori szövegtöredékek megfejtése – Archimedes palimpsestus „Az én feladatom”: – rétegmentes szövegszerkesztő réteges adatbázis
Archimedes palimpsestus
A HypereiDoc projekt – folyt. Töredékesség => a szövegben „vitatható részek” Annotációk – vélemények a dokumentumhoz – fajtái : beszúró (pozícióra), jelölő (intervallumra) – átlapolások – Leiden konvenciók A szöveg megfejtése „több menetben” => rétegek A megfejtés folyamatát tároljuk
A réteges szerkezet Rétegek fajtái: – alapszöveg – annotációs réteg Célok: – tárolás az adatbázisban – (akár konkurens) bővíthetőség => konfliktuskezelés
A réteges szerkezet – példa
A rétegmentes szerkezet Egyetlen rétegben: – Alapszöveg – Annotációk a megfelelő pozíciónkon Célok: – az annotált szöveget „egyben” lássuk – szerkesztés – nyomtatás
A rétegmentes szerkezet - példa
A rétegmentesítés folyamata Az annotációs rétegek kiválasztása Konfliktusfeloldás (ha szükséges) A rétegek beszúrási sorrendjének meghatározása Az annotációinak beillesztése a felépülő rétegmentes dokumentumba
Rétegmentesítés - példa
Új réteg létrehozása Szerkesztés a rétegmentes szövegen Az újonnan beszúrt annotációk megjelölése A réteges szerkezetben új annotációs réteg Az adatbázisba csak az új réteg kerül
Új réteg létrehozása - példa
A felhasznált XML technológiák XPointer: – hivatkozás egy XML csomópontra (vagy részére) – léteznek kiterjesztései => követelményszintek (minimális / teljes) – pl.: #xpointer(doc("base")//pb[n=oldal] /following::lb[n=sor] /following::text()[1] /point()[pozíció])
A felhasznált XML technológiák - folyt. XPath: – egy „útvonal” az XML DOM-fában – XML csomópontok közötti tengelyek segítségével – pl.: preceding-sibling::node()[1]/self::element() XQuery – lekérdezés XML dokumentumon – hasonlít az SQL-re
XML adatbázisok Látszólag, mintha egy XML dokumentumba szervezve tárolnánk az adatokat. Dokumentumok gyűjteményekbe szervezhetők <= fájlrendszer könyvtárai Lekérdezés XQuery-vel Általunk használt adatbázis-kezelő: Sedna DB
Az XML adatbázis szerkezete a HypereiDoc projektben
TEI-P5 Digitális könyvtári szabvány XML alapú Referenciák a szövegen – pl.: annotációk hivatkozási pontjai – megvalósítás: XPointer segítségéve l – point() XPointer kiterjesztés
A réteges szerkezet XML szinten A TEI-P5 ajánlásai szerint Alapszöveg tagolása „mérföldkövekkel”: – oldal: – hasáb: – sor: Annotációk: – XML csomópontok – referenciák XPointer attribútumok segítségével
A réteges szerkezet XML szinten – folyt. Annotációk referenciái: – beszúró: target – jelölő: from és to Alapszövegbe mutató referencia: #xpointer(doc("base")//pb[n=oldal]/ following::lb[n=sor]/ following::text()[1]/point()[pozíció]) Annotációba mutató referencia: #xpointer(collection("annotations")// [xml:id="annotáció azonosítója"]/ text()[1]/point()[pozíció])
A rétegmentes szerkezet XML szinten XML dokumentumok és sémák részletes leírásai Ehelyett pár érdekesebb feladat: – Átlapolás problémája – Az XPointer-ek => szövegbeli pozíciók
Átlapolás a TEI-P5-ben A jól formáltság vagy a szemantikus tartalom sérül! városát hadi csellel elfoglalták
Az átlapolás megvalósítása a rétegmentes szerkezetben városát hadi csellel elfoglalták
Rétegmentesítés az XML szintjén Az annotációk beszúrása a felépülő XML dokumentumba A beszúró függvény – XQuery és XPath segítségével – tetszőleges szövegpozícióra – point() kiváltása – XPointer-ek => paramétert megadó pozíció
A beszúró függvény XQuery-ben részlet declare function local:insert_item($node, $offset as xs:decimal?, $item) { let $a:=0 return for $x in $node/child::node() let $prec := string-length(string-join( for $y in $x/preceding-sibling::text() return normalize-space($y),'')) let $seg_count := index-of($x/following-sibling::node(), $x/following-sibling::text()[1])[1] return...
A beszúró függvény XQuery-ben részlet – folyt.... return { if ($x/following-sibling::element()) then {$x, for $note in $x/following- sibling::element() [position() < $seg_count] return $note} else {$x}, {$item} }
Összegzés Réteges és rétegmentes szerkezet közötti átmenet: – absztrakt és implementációs szinten (XML) – oda-vissza – kollaboratív munka és szerkesztés – a TEI-P5 szabványnak megfelelően XPointer kiterjesztés megvalósítása – XPath és XQuery segítségével – nagyobb hordozhatóság