XML

Kategorie >>Programování>> XML


Televizní program

Mějme toto zadání. Ukáži jak jsem se s tím vypořádal po svém. Je možné, že ne vše bude nejoptimalnější či správně řešeno.

Zadání

Uvažujte televizní program pro různé televizní stanice. Program se skládá z vysílaných pořadů. Pro každý vysílaný pořad máme den a čas vysílání, jeho název a popis a délku v minutách. Pokud se jedná o film nebo seriál, tak máme i režiséra a herce v hlavních rolích.

Jak bych vytvořil XML

<?xml version="1.0" encoding="UTF-8"?>
<program>
<stanice Obrázekid="Nova">
<porad typ="film">
<nazev>Smrtonostná zbraň</nazev>
<datum>12.11.2007</datum>
<cas>12:20</cas>
<popis>Seržant Roger Murtaugh (Danny Glover), který má pár týdnů do důchodu,
				 dostane za parťáka seržanta Martina Rigse, 
				jenž chtěl po smrti manželky spáchat sebevraždu. 
				Z počátku si nepadnou do oka, společně však budou 
				muset vyřešit případ nebezpečného gangu pašeráků drog.</popis>
			<delka>119</delka>
<reziser>
<jmeno>Richard</jmeno>
<prijmeni>Donner</prijmeni>
</reziser>
<hlavni_role>
<herec>
					<jmeno>Mel</jmeno>
<prijmeni>Gibson</prijmeni>
</herec>
<herec>
<jmeno>Danny</jmeno>
<prijmeni>Glover</prijmeni>
</herec>
				<herec>
<jmeno>Gary</jmeno>
<prijmeni>Busey</prijmeni>
</herec>
</hlavni_role>
</porad>
<porad typ="film">
<nazev> Tři oříšky pro Popelku</nazev>
			<datum>12.11.2007</datum>
<cas>15:50</cas>
<popis>Popelka je milé hodné děvče bez matky a posléze i bez otce,
				 který ji nechá napospas své druhé ženě a její dceři.
				 Obě nemají Popelku rády a mimo jiné se jí snaží všemožně 
				zabránit v tom, aby se zúčastnila plesu, na kterém si má tamní 
				princ konečně najít nevěstu. Osud však Popelce přeje více, 
				než-li obě zlé ženy.</popis>
<delka>75</delka>
<reziser>
<jmeno>Václav</jmeno>
<prijmeni>Vorlíček</prijmeni>
			</reziser>
<hlavni_role>
<herec>
<jmeno>Libuše</jmeno>
<prijmeni>Šafránková</prijmeni>
</herec>
<herec>
<jmeno>Pavel</jmeno>
					<prijmeni>Trávníček</prijmeni>
</herec>
</hlavni_role>
</porad>
<porad typ="reportaz">
<nazev>Slavnostní koncert v ZUŠ</nazev>
<datum>12.11.2007</datum>
			<cas>21:30</cas>		
<popis>jak probíhali oslavy aneb tak mladí a už zlití</popis>
<delka>4</delka>
</porad>
</stanice>
</program>

Schema XML

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="program">
<xs:complexType>
<xs:sequence>
<xs:element name="stanice" >
<xs:complexType >
<xs:sequence>
<xs:element name="porad" >
<xs:complexType>
<xs:all>
<xs:element name="nazev" type="minStringType" />
<xs:element name="datum" type="xs:date" />
<xs:element name="cas" type="xs:time"/>
<xs:element name="popis" type="minStringType"/>
<xs:element name="delka" type="xs:unsignedInt"/>
<xs:element name="hlavni_role" type="hlavni_roleTyp" minOccurs="0" />
</xs:all>
<xs:attribute name="typ" type="minStringType" use="required" />
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="id" type="minStringType" use="required" />
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>

<xs:complexType name="hlavni_roleTyp">
<xs:sequence>
<xs:element name="herec">
<xs:complexType>
<xs:sequence>
<xs:element name="jmeno" type="minStringType" />
<xs:element name="prijmeni" type="minStringType" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:simpleType>

<xs:simpleType name="minStringType">
<xs:restriction base="xs:string">
<xs:minLength value="1">
</xs:restriction>
</xs:simpleType>
</xs:schema>

DTD

<!ELEMENT program (stanice+) >
<!ELEMENT stanice (porad+) >
<!ELEMENT porad (nazev,datum,cas,popis,delka,reziser?,hlavni_role?) >
<!ELEMENT reziser (jmeno,prijmeni) >
<!ELEMENT hlavni_role (herec+) >
<!ELEMENT herec (jmeno,prijmeni) >

<!ELEMENT jmeno (#PCDATA) >
<!ELEMENT prijmeni (#PCDATA) >
<!ELEMENT delka (#PCDATA) >
<!ELEMENT popis (#PCDATA) >
<!ELEMENT cas (#PCDATA) >
<!ELEMENT datum (#PCDATA) >
<!ELEMENT nazev (#PCDATA) >

<!ATTLIST stanice  jmeno CDATA #REQUIRED >
<!ATTLIST porad  typ CDATA #REQUIRED >

XPath ukázka

vypsat nazev filmu ktery obsahuje v komentari gang
//porad[@typ='film']/popis[contains(text(),'gang')]/preceding-sibling::nazev/text()

vypsat nazev druheho poradu typu film televizni stanice Nova
//stanice[@id='Nova']/porad[2][@typ='film']/nazev/text()

vybrat krestni jmeno herce s prijmenim Gibson
//porad[@typ='film']/hlavni_role/herec/prijmeni[text()="Gibson"]/preceding-sibling::jmeno/text()


vybrat nazev posledni vlozene reportaze dlouhe 4min
(//porad[@typ='reportaz'])[last()]/delka[text()='4']/preceding-sibling::nazev/text()





Vloženo: 03.12.2007 23:55
Přečteno:2415
Autor: Martin Mizera

Hlasů: 3 Hodnocení(jako ve škole): 1.33
 

Komentáře (0)

   -     Nový Komentář