Stránka 1 z 1

Zk 14.06.2007

Napsal: 14. 6. 2007 13:23
od yayo
tak skusim dat dokopy nejaku kostru pisomky.. bola takmer cisto prakticka..
1.

Kód: Vybrat vše

   <?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

Kód: Vybrat vše

<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:

Kód: Vybrat vše

 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

Napsal: 14. 6. 2007 14:31
od johnny
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:

Kód: Vybrat vše

<!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.

Napsal: 14. 6. 2007 14:40
od honzik123
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.

Napsal: 14. 6. 2007 15:54
od @tiMan
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.

Napsal: 14. 6. 2007 16:12
od yayo
tiez neviem, preco bolo tvoje zle, ale napr. descendant::autor som prepisal na .//autor a bolo to spravne..

edit: dve lomitka som tam mal

Napsal: 14. 6. 2007 16:20
od honzik123
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 :)

Napsal: 14. 6. 2007 16:46
od @tiMan
honzik123 píše: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...

Napsal: 14. 6. 2007 17:28
od johnny
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

Napsal: 15. 6. 2007 02:02
od @tiMan
johnny píše: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.

Napsal: 15. 6. 2007 10:05
od stinny
A jake bylo bodovani jednotlivych prikladu? A znamkovani?

Napsal: 15. 6. 2007 10:18
od yayo
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..

Napsal: 17. 6. 2007 08:30
od Trupik
kolik je na písemku času?

Napsal: 17. 6. 2007 10:13
od johnny
Hodina a půl.