Zk 14.06.2007

yayo at 2007-06-14 13:23:22

tak skusim dat dokopy nejaku kostru pisomky.. bola takmer cisto prakticka..
1.

   <?xml version="1.0" encoding="windows-1250"?>
   <xsl:stylesheet version="1.0">
     <xsl:output method="xml" />
     <xsl:template match="zamestnanec">
       <<xsl:copy-of select="jmeno">
     </xsl:template>
   </xsl:stylesheet>     

tak nejak..
a) je to well-formed xml
b) nejaka blbost
c) transformuje do HTML..
d) transformuje do XML jako zoznam mien - nejak tak, ale bolo to spravne..

  1. <element/>: dva sposoby ako zapisat v XML Schema, aby toto tam preslo..

  2. skrateny zapis XPath - 6 prikladov typu
    a) descendant::autor[position()=1] (.//autor[1])
    b) /descendant::autor[position()=1] (//autor[1])
    c) descendant::kniha[attribute(jazyk)="angl"] (.//kniha[@jazyk="angl"])
    d) descendant::kniha[attribute(jazyk)!="angl"] (.//kniha[@jazyk@!="angl"])
    e) (child::bib/descendant::kniha)[position()=1] ((bib//kniha)[1])
    f) nejaky strasne dlhy nezrozumitelny dotaz

  3. to co uz niekde bolo template ci sa pise s match, if alebo when.. (spravne match)

  4. uz tiez bola, xpath dotaz s knihou -> spravny dotaz /kniha/kapitola[1]/nadpis/preceding::* a vyznacit na obrazku

  5. XQuery dotazy - jednoduchy -> vybrat knihy z dokumentu a k nim pocet kapitol..
    zlozitejsi -> mame druhy subor s recenziami.. na jednu knizku moze byt v 0 az n recenzii a mame vybrat titul, autora knizky a k tomu vsetky texty recenzii cize pre jednu knizku to malo vyzerat

    <recenze_knihy> <titul>Janko Hrasko</titul> <autor>ludova</autor> <text>prvej rezencia</text> <text>druha rezencia</text> <text>tretia rezencia</text> </recenze_knihy>

ak recenzia na knizku neexistovala, tak tam element recenze knihy nebol..

DTD suboru recenze.xml
<!ELEMENT recenze (zaznam)*>
<!ELEMENT zaznam (titul, cena, text)>
titul,cena,text - PCDATA

dotaz, ktory mi uznali. neviem, ci je syntakticky spravne:

 for $kniha in doc('kniha.xml')
 let $nazev := doc('recenze.xml')/recenze/zaznam/titul[.=$kniha/nazev]
 if (exists($nazev))
 return
 {
  <rezenze_knihy>
   <titul>{$kniha/nazev}</titul>
   <autor>{$kniha/autor}</autor>
   {
    for $zaznam in doc('rezenze.xml')/rezenze/zaznam
    where $zaznam/titul = $kniha/nazev
    return
    {
     <text>{$zaznam/text}</text>
    }
   }
  </rezenze_knihy>
 }
  1. otazka ktora uz bola.. Xpath 2 podmnozinou xquery 1, xquery sa daju vytvarat vlastne funkcie...

tak snad pomoze, kto by mal presnejsie zadania, nech to sem da..

edit: doplneny dotaz v XQuery

johnny at 2007-06-14 14:31:40

Ještě tam byla otázka na přepis DTD co nejpřesněji do XML Schema, ale bez použití typu atributů ID/IDREFS. To DTD bylo přibližně toto:

<!ELEMENT firma (zamestnanec+)>
<!ELEMENT zamestnanec EMPTY>
<!ATTLIST zamestnanec 
  id ID #REQUIRED
  nadrizeny IDREF #IMPLIED>

U XQuery bylo potřeba znát, jak se v XQuery používá "if".

Máte už někdo nějakou známku? Je 14:30, výsledky tam měly být po 11:30, v SISu pořád nic nemám, na vyhlášení u Pokorného jsem nebyl.

honzik123 at 2007-06-14 14:40:27

Ja jsem dostal za 2. Ze zacatku se mi to zdalo dosti tezke, ale kdyz se nad tim clovek zamyslel, tak to je hracka...
Jinak Pokorny rikal, ze znamky budou v SISu az zitra.

@tiMan at 2007-06-14 15:54:54

Mne sa zdal XPath v tej trojke nejak divny...Vsade tam bola osa descendant. Pokial dobre viem, // je zkratka za /descendant-OR-SELF::node()/ a nie len pre descendant. Cize ja som tam dal vsade este */, aby som preskocil jednu uroven a zacal o jednu nizsie - aby som vynechal uzol samotny, kedze tam nebol ten self.
Tymto som stratil 3 body :? No stale neviem, preco bolo moje riesenie zle.

yayo at 2007-06-14 16:12:07

tiez neviem, preco bolo tvoje zle, ale napr. descendant::autor som prepisal na .//autor a bolo to spravne..

edit: dve lomitka som tam mal

honzik123 at 2007-06-14 16:20:35

Zkusim napsat, jak jsem to udelal ja a jak to chapu/nechapu, kdyztak me prosim nekdo opravte.
Asi nejdulezitejsi je rozmyslet si co znamena x::y, je to ve slidech...

descendant::autor[position()=1]
znamena, vem vsechny descendent (nasledniky) od aktualniho kontextu (nebylo tam lomitko na zacatku, tak je to ten aktualni kontext), z nich vyber elementy autor a nakonec vyber toho prvniho
tedy: . znamena self, tedy od aktualniho kontextu, potom .//autor je od aktualniho kontextu libovolneho autora a nakonec pridat index (.//autor[1])

/descendant::autor[position()=1]
Tady je to podobne, akorat / rika, ze zaciname hned od vrchu stromu, tedy od vrcholu stromu najdem vsechny nasledniky, ktere jsou autor, to se snadno udela //autor, k tomu uz staci jen pridat index a je to...
(//autor[1])

Vsechny dalsi jsou uz jen lehke upraveniny :)

@tiMan at 2007-06-14 16:46:18

honzik123 wrote:descendant::autor[position()=1]
znamena, vem vsechny descendent (nasledniky) od aktualniho kontextu (nebylo tam lomitko na zacatku, tak je to ten aktualni kontext), z nich vyber elementy autor a nakonec vyber toho prvniho
tedy: . znamena self, tedy od aktualniho kontextu, potom .//autor je od aktualniho kontextu libovolneho autora a nakonec pridat index (.//autor[1])

To vsetko ja chapem, mam problem len s tym, ze descendent (potomci) su bez toho kontextoveho uzlu - striktne pod. Tvoje riesenie pocita i s kontextovym uzlom, ze? Cize od aktualneho kontextu vcetne. Ale je dost dobre mozne, ze sa mylim...

johnny at 2007-06-14 17:28:09

Na téhle stránce se to chová takhle:

  1. /AAA/descendant-or-self::* - vybere vše, včetně kořene AAA

  2. /AAA/descendant::* - vybere vše, kromě kořene AAA

  3. /AAA//* - stejně jako 2)

// je sice /descendant-or-self/, ale
//X je /descendant-or-self/child::X

Trvalo mi dost dlouho, než mi tohle došlo a když jsem jel ze zkoušky, tak mně taky napadlo, že tam měla být ta část s "/*/". Nevím, jestli to je teď po tomhle příspěvku jasnější :D

@tiMan at 2007-06-15 02:02:21

johnny wrote:Trvalo mi dost dlouho, než mi tohle došlo a když jsem jel ze zkoušky, tak mně taky napadlo, že tam měla být ta část s "/*/". Nevím, jestli to je teď po tomhle příspěvku jasnější :D

Ale je, diky moc, aspon mam lepsi pocit, ze som to asi fakt nemal uplne dobre. No bolo zaujimave, ze za tento priklad bolo 6 bodov, co predstavuje rozdiel i troch znamok vo vysledku.

stinny at 2007-06-15 10:05:09

A jake bylo bodovani jednotlivych prikladu? A znamkovani?

yayo at 2007-06-15 10:18:54

myslim, ze znamkovanie bolo
22-19 = 1
18-17 = 2 ??
16-15 = 3 ?????

bodovanie (podla mojho cislovania prikladov)

  1. [2]

  2. [2]

  3. [6]

  4. [1]

  5. [1]

  6. [2], [3]

  7. [2]
    otazka doplnena johnnym [3]

priblizne takto.. nech ma niekto opravi..

Trupik at 2007-06-17 08:30:35

kolik je na písemku času?

johnny at 2007-06-17 10:13:19

Hodina a půl.