# Zk 14.06.2007

<{ForumPost(poster="yayo", timestamp=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..  
  
2. <element/>: dva sposoby ako zapisat v XML Schema, aby toto tam preslo..  
  
3. 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  
  
4. to co uz niekde bolo template ci sa pise s match, if alebo when.. (spravne match)  
  
5. uz tiez bola, xpath dotaz s knihou -> spravny dotaz /kniha/kapitola\[1]/nadpis/preceding::*  a vyznacit na obrazku  
  
6. 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>
     }
    

  
7. 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
<{/ForumPost}>

<{ForumPost(poster="johnny", timestamp=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.
<{/ForumPost}>

<{ForumPost(poster="honzik123", timestamp=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.
<{/ForumPost}>

<{ForumPost(poster="@tiMan", timestamp=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.
<{/ForumPost}>

<{ForumPost(poster="yayo", timestamp=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
<{/ForumPost}>

<{ForumPost(poster="honzik123", timestamp=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 :)
<{/ForumPost}>

<{ForumPost(poster="@tiMan", timestamp=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...
<{/ForumPost}>

<{ForumPost(poster="johnny", timestamp=2007-06-14 17:28:09)}>
Na [téhle stránce](http://www.zvon.org:9001/saxon/cgi-bin/XLab/XML/extras.html?stylesheetFile=XSLT/xpath.xslt&lang=eng) 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
<{/ForumPost}>

<{ForumPost(poster="@tiMan", timestamp=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.
<{/ForumPost}>

<{ForumPost(poster="stinny", timestamp=2007-06-15 10:05:09)}>
A jake bylo bodovani jednotlivych prikladu? A znamkovani?
<{/ForumPost}>

<{ForumPost(poster="yayo", timestamp=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..
<{/ForumPost}>

<{ForumPost(poster="Trupik", timestamp=2007-06-17 08:30:35)}>
kolik je na písemku času?
<{/ForumPost}>

<{ForumPost(poster="johnny", timestamp=2007-06-17 10:13:19)}>
Hodina a půl.
<{/ForumPost}>

