Loon SQL Serveris andmetabeli reisi kohta. Tabeli andmete (30) genereerimiseks /täitmiseks kasutan https://www.mockaroo.com/
Genereeritud SQL taotlus:
CREATE TABLE Reisid (
id INT PRIMARY KEY,
reisi_number VARCHAR(50),
lennufirma VARCHAR(100),
sihtkoht VARCHAR(100),
valjumis_lennujaam VARCHAR(100),
saabumis_lennujaam VARCHAR(100),
algus_aeg VARCHAR(10),
loppu_aeg VARCHAR(10),
hind DECIMAL(10,2)
);
INSERT INTO Reisid (id, reisi_number, lennufirma, sihtkoht, valjumis_lennujaam, saabumis_lennujaam, algus_aeg, loppu_aeg, hind) VALUES
(1, '0093-5289', 'Marcq Airlines', 'Amsterdam', 'Salem Leckrone Airport', 'New Chitose Airport', '10:15', '12:45', 7.99),
(2, '52584-950', 'Escoffrey Air', 'New York', 'Inongo Airport', 'Havadarya Airport', '07:45', '10:00', 4.99),
(3, '12745-177', 'Treacher Flights', 'Seoul', 'Erbil International Airport', 'Tulcea Airport', '20:30', '21:00', 109.99),
(4, '36987-2693', 'Giscken Airways', 'Chicago', 'Ginbata Airport', 'Ocean City Municipal Airport', '16:30', '09:45', 12.99),
(5, '21695-791', 'Duckhouse Travel', 'Paris', 'Mazar I Sharif Airport', 'Stafsberg Airport', '20:45', '17:15', 19.99),
(6, '46084-111', 'Gertray Express', 'Seoul', 'Namsang Airport', 'Cape Romanzof LRRS Airport', '18:45', '19:15', 2.89),
(7, '0009-5014', 'Brocklesby Air', 'Chicago', 'Butterworth Airport', 'Bislig Airport', '19:30', '09:45', 39.99),
(8, '54868-4665', 'Medina Airlines', 'Lima', 'Koltsovo Airport', 'Floyd Bennett Memorial Airport', '13:00', '17:15', 89.99),
(9, '59762-0489', 'Nehls Jet', 'Buenos Aires', 'Viru Harbour Airstrip', 'Tableland Homestead Airport', '10:15', '09:00', 12.99),
(10, '68428-041', 'Degli Abbati Air', 'Mumbai', 'Osaka International Airport', 'Springvale Airport', '07:15', '19:45', 12.99),
(11, '53807-409', 'Schindler Lines', 'Mumbai', 'Mandalgobi Airport', 'Bachigualato Federal International Airport', '19:45', '18:30', 39.99),
(12, '59915-4001', 'Rochford Air', 'Melbourne', 'Orlando International Airport', 'Bhuj Airport', '18:45', '15:15', 27.99),
(13, '13985-529', 'Currell Airways', 'Paris', 'Saint John Airport', 'Watertown Regional Airport', '15:30', '08:00', 39.99),
(14, '13537-299', 'Ingledew Express', 'Hong Kong', 'Incheon International Airport', 'Emmen Air Base', '13:15', '15:00', 3.99),
(15, '0703-5775', 'Rospars Travel', 'Paris', 'Rendani Airport', 'N''Délé Airport', '12:30', '14:15', 24.99),
(16, '68788-9945', 'Freezor Air', 'Atlanta', 'Malatya Erhaç Airport', 'Lolland Falster Maribo Airport', '07:15', '19:15', 29.99),
(17, '68084-086', 'Petheridge Flights', 'Delhi', 'Cenej Airport', 'Pocatello Regional Airport', '20:15', '20:15', 149.99),
(18, '54569-0235', 'Belleny Airways', 'Paris', 'Southeast Iowa Regional Airport', 'Pula Airport', '06:45', '19:00', 39.99),
(19, '43063-517', 'Bramer Air', 'Hong Kong', 'Uttaradit Airport', 'Hiroshima Airport', '06:30', '10:30', 5.49),
(20, '75939-9876', 'Royden Flights', 'Frankfurt', 'Leeward Point Field', 'Franklin Municipal-John Beverly Rose Airport', '09:30', '10:45', 2.29),
(21, '54569-6240', 'Kolczynski Air', 'Chicago', 'Jinzhou Airport', 'Fresno Chandler Executive Airport', '13:15', '21:00', 69.99),
(22, '52389-154', 'Havill Express', 'New York', 'Sundsvall-Härnösand Airport', 'Fuvahmulah Airport', '14:15', '21:15', 19.99),
(23, '21695-605', 'Glavin Airlines', 'Paris', 'Sultan Mahmud Badaruddin II Airport', 'Points North Landing Airport', '09:00', '19:15', 12.99),
(24, '48951-8248', 'Jurisch Travel', 'Paris', 'Warukin Airport', 'Mooraberree Airport', '20:45', '13:00', 22.99),
(25, '23155-214', 'Cattanach Jet', 'Munich', 'Quonset State Airport', 'Ketchikan Harbor Seaplane Base', '12:15', '20:00', 39.99),
(26, '45737-250', 'Golsby Airways', 'Frankfurt', 'Betoota Airport', 'Lekoni Airport', '14:00', '10:30', 4.49),
(27, '55111-556', 'Pellitt Flights', 'Paris', 'Mareeba Airport', 'Decatur HI-Way Airfield', '08:30', '08:30', 59.99),
(28, '50268-816', 'Jouannot Express', 'Paris', 'Kunua Airport', 'Bushehr Airport', '20:45', '11:30', 7.99),
(29, '62670-4321', 'Shipman Air', 'Paris', 'Curitibanos Airport', 'Lewoleba Airport', '10:45', '11:00', 49.99),
(30, '55301-500', 'Baselio Airlines', 'Paris', 'Turaif Domestic Airport', 'Argyle International Airport', '19:00', '19:15', 59.99);
Tulemus:

Loon kolmetasemeline XML:
XML-faili loomise taotlus
SELECT
id AS "@id",
reisi_number AS "@reisi_number",
lennufirma AS "Lennufirma",
sihtkoht AS "Sihtkoht",
(
SELECT
algus_aeg AS "@algus_aeg",
loppu_aeg AS "@loppu_aev",
valjumis_lennujaam AS "Valjumine",
saabumis_lennujaam AS "Saabumine"
FOR XML PATH('Lennujaamad'), TYPE
),
(
SELECT
hind AS "@value"
FOR XML PATH('Hind'), TYPE
)
FROM Reisid
FOR XML PATH('Reis'), ROOT('Reisid');
XML fail:

Harjutused
1.Kuvada iga reisi sihtkoht pealkirjana, kasutades <h1>
.
<xsl:for-each select="/Reisid/Reis">
<h1>
<xsl:value-of select="Sihtkoht"></xsl:value-of>
</h1>
</xsl:for-each>

2. Komponendid peavad olema kuvatud täpploeteluna (<ul>
).
<xsl:for-each select="Reis">
<ul>
<li>ID: <xsl:value-of select="@id"/></li>
<li>Reisi number: <xsl:value-of select="@reisi_number"/></li>
<li>Lennufirma: <xsl:value-of select="Lennufirma"/></li>
<li>Sihtkoht: <xsl:value-of select="Sihtkoht"/></li>
<li>Algus aeg: <xsl:value-of select="Lennujaamad/@algus_aeg"/></li>
<li>Lõppu aeg: <xsl:value-of select="Lennujaamad/@loppu_aev"/></li>
<li>Valjumine: <xsl:value-of select="Lennujaamad/Valjumine"/></li>
<li>Saabumine: <xsl:value-of select="Lennujaamad/Saabumine"/></li>
<li>Hind: <xsl:value-of select="Hind/@value"/></li>
</ul>
</xsl:for-each>

3. Kolmanda taseme struktuuri andmed tuleb kuvada kollasel taustal.
<xsl:for-each select="Reis">
<ul>
<li>ID: <xsl:value-of select="@id"/></li>
<li>Reisi number: <xsl:value-of select="@reisi_number"/></li>
<li>Lennufirma: <xsl:value-of select="Lennufirma"/></li>
<li>Sihtkoht: <xsl:value-of select="Sihtkoht"/></li>
<li>Algus aeg: <xsl:value-of select="Lennujaamad/@algus_aeg"/></li>
<li>Lõppu aeg: <xsl:value-of select="Lennujaamad/@loppu_aev"/></li>
<li>
Valjumine:
<span style="background-color:yellow">
<xsl:value-of select="Lennujaamad/Valjumine"/>
</span>
</li>
<li>
Saabumine:
<span style="background-color:yellow">
<xsl:value-of select="Lennujaamad/Saabumine"/>
</span>
</li>
<li>Hind: <xsl:value-of select="Hind/@value"/></li>
</ul>
</xsl:for-each>

4. Lisa oma tingimus (nt reisi hind või eriline soovitus peab olema esile tõstetud teatud tingimustel).
<li>
Hind:
<xsl:choose>
<xsl:when test="Hind/@value < 5">
<span style="background-color:green; font-weight:bold">
<xsl:value-of select="Hind/@value"/> €
</span>
</xsl:when>
<xsl:otherwise>
<span style="background-color:red; font-weight:bold">
<xsl:value-of select="Hind/@value"/> €
</span>
</xsl:otherwise>
</xsl:choose>
</li>

5. Kuva iga reisi kogumaksumuse, liites transport, majutuse, ekskursioonide ja muude kulude hinnad kokku.
Muudatud andmed
<Reis id="1" reisi_number="0093-5289">
<Lennufirma>Marcq Airlines</Lennufirma>
<Sihtkoht>Amsterdam</Sihtkoht>
<Lennujaamad algus_aeg="10:15" loppu_aev="12:45">
<Valjumine>Salem Leckrone Airport</Valjumine>
<Saabumine>New Chitose Airport</Saabumine>
</Lennujaamad>
<Transport value="100"/>
<Majutus value="250"/>
<Ekskursioonid value="50"/>
<MuudKulud value="30"/>
<Hind value="7.99"/>
</Reis>
Tsükli sees arvutame summa avaldise abil:
<li>
Muu maksud:
<ul>
<li>
Transpordi hind: <xsl:value-of select="Transport/@value"/> €
</li>
<li>
Majutus: <xsl:value-of select="Majutus/@value"/> €
</li>
<li>
Ekskursioon: <xsl:value-of select="Ekskursioonid/@value"/> €
</li>
<li>
Muu: <xsl:value-of select="MuudKulud/@value"/> €
</li>
</ul>
</li>
<xsl:variable name="kogumaksumus"
select="number(Transport/@value)
+ number(Majutus/@value)
+ number(Ekskursioonid/@value)
+ number(MuudKulud/@value)"/>
<li>
Kogumaksumus: <xsl:value-of select="$kogumaksumus"/> €
</li>

6. Filtreeri ja kuva ainult need reisid, mille transport sisaldab lennureisi.
Minu andmetes on ainult lennu reisid, selle ülesande jaoks lisan ka teisi tüüpe
Uus anmed:
<Reis id="1" reisi_number="0093-5289">
<Lennufirma>Marcq Airlines</Lennufirma>
<Sihtkoht>Amsterdam</Sihtkoht>
<Lennujaamad algus_aeg="10:15" loppu_aev="12:45">
<Valjumine>Salem Leckrone Airport</Valjumine>
<Saabumine>New Chitose Airport</Saabumine>
</Lennujaamad>
<Transport type="lennureis" value="100"/>
<Majutus value="250"/>
<Ekskursioonid value="50"/>
<MuudKulud value="30"/>
<Hind value="7.99"/>
</Reis>
<Reis id="2" reisi_number="52584-950">
<Lennufirma>Escoffrey Air</Lennufirma>
<Sihtkoht>New York</Sihtkoht>
<Lennujaamad algus_aeg="07:45" loppu_aev="10:00">
<Valjumine>Inongo Airport</Valjumine>
<Saabumine>Havadarya Airport</Saabumine>
</Lennujaamad>
<Transport type="rong" value="40"/>
<Majutus value="120"/>
<Hind value="4.99"/>
</Reis>
<Reis id="3" reisi_number="12745-177">
<Lennufirma>Treacher Flights</Lennufirma>
<Sihtkoht>Seoul</Sihtkoht>
<Lennujaamad algus_aeg="20:30" loppu_aev="21:00">
<Valjumine>Erbil International Airport</Valjumine>
<Saabumine>Tulcea Airport</Saabumine>
</Lennujaamad>
<Transport type="buss" value="25"/>
<Majutus value="90"/>
<Hind value="109.99"/>
</Reis>
Uus select:
<xsl:for-each select="Reis[Transport/@type='lennureis']">
Uus andmeloendi rida:
<li>Tüüp: <xsl:value-of select="Transport/@type"/> </li>

7. Sorteeri kõik reisid vastavalt hinnangule (nt kliendihinnang, kui selline väli on olemas XML-is, kui ei ole kasuta teine numbriline väli).
<xsl:sort select="number(Hind/@value)" data-type="number" order="descending"/>

Lõplik XSLT kood (harjutus 1-7):
<xsl:for-each select="Reis">
<xsl:sort select="number(Hind/@value)" data-type="number" order="descending"/>
<h5>
<xsl:value-of select="Sihtkoht"/>
</h5>
<ul>
<li>ID: <xsl:value-of select="@id"/></li>
<li>Reisi number: <xsl:value-of select="@reisi_number"/></li>
<li>Tüüp: <xsl:value-of select="Transport/@tuup"/> </li>
<li>Firma: <xsl:value-of select="Firma"/></li>
<li>Sihtkoht: <xsl:value-of select="Sihtkoht"/></li>
<li>Kestus: <xsl:value-of select="Lennujaamad/@kestus"/></li>
<li>
Väljumine:
<span style="background-color:yellow">
<xsl:value-of select="Lennujaamad/Valjumine"/>
</span>
</li>
<li>
Saabumine:
<span style="background-color:yellow">
<xsl:value-of select="Lennujaamad/Saabumine"/>
</span>
</li>
<li>
Hind:
<xsl:choose>
<xsl:when test="Hind/@value < 5">
<span style="background-color:green; font-weight:bold">
<xsl:value-of select="Hind/@value"/> €
</span>
</xsl:when>
<xsl:otherwise>
<span style="background-color:red; font-weight:bold">
<xsl:value-of select="Hind/@value"/> €
</span>
</xsl:otherwise>
</xsl:choose>
</li>
<li>
Muu maksud:
<ul>
<li>
Transpordi hind: <xsl:value-of select="Transport/@value"/> €
</li>
<li>
Majutus: <xsl:value-of select="Majutus/@value"/> €
</li>
<li>
Ekskursioon: <xsl:value-of select="Ekskursioonid/@value"/> €
</li>
<li>
Muu: <xsl:value-of select="MuudKulud/@value"/> €
</li>
</ul>
</li>
<xsl:variable name="kogumaksumus"
select="number(Transport/@value)
+ number(Majutus/@value)
+ number(Ekskursioonid/@value)
+ number(MuudKulud/@value)"/>
<li>
Kogumaksumus: <xsl:value-of select="$kogumaksumus"/> €
</li>
</ul>
</xsl:for-each>
Lõplik XML struktuur:
<Reis id="1" reisi_number="0093-5289">
<Firma>Marcq Airlines</Firma>
<Sihtkoht>Amsterdam</Sihtkoht>
<Lennujaamad kestus="3:15">
<Valjumine>Salem Leckrone Airport</Valjumine>
<Saabumine>Schiphol Airport</Saabumine>
</Lennujaamad>
<Transport tuup="Lennureis" value="100"/>
<Majutus value="250"/>
<Ekskursioonid value="50"/>
<MuudKulud value="30"/>
<Hind value="7.99"/>
</Reis>
8. Kuva kõik xml andmed tabelina, kus read on üle rea erineva värviga.
Tabeli kood:
<html>
<head>
<style>
table, th, td {
border: 1px solid black;
border-collapse: collapse;
padding: 3px;
}
</style>
</head>
<body>
<table>
<tr>
<th>ID</th>
<th>Reisi number</th>
<th>Tüüp</th>
<th>Firma</th>
<th>Sihtkoht</th>
<th>Kestus</th>
<th>Väljumine</th>
<th>Saabumine</th>
<th>Hind</th>
<th>Kogumaksumus</th>
</tr>
<xsl:for-each select="Reis">
<xsl:variable name="pos" select="position()"/>
<xsl:variable name="r" select="$pos * 40 mod 256"/>
<xsl:variable name="g" select="$pos * 80 mod 256"/>
<xsl:variable name="b" select="$pos * 120 mod 256"/>
<tr>
<xsl:attribute name="style">
<xsl:text>background-color:rgb(</xsl:text>
<xsl:value-of select="$r"/>
<xsl:text>,</xsl:text>
<xsl:value-of select="$g"/>
<xsl:text>,</xsl:text>
<xsl:value-of select="$b"/>
<xsl:text>);</xsl:text>
</xsl:attribute>
<td><xsl:value-of select="@id"/></td>
<td><xsl:value-of select="@reisi_number"/></td>
<td><xsl:value-of select="Transport/@tuup"/></td>
<td><xsl:value-of select="Firma"/></td>
<td><xsl:value-of select="Sihtkoht"/></td>
<td><xsl:value-of select="Lennujaamad/@kestus"/></td>
<td><xsl:value-of select="Lennujaamad/Valjumine"/></td>
<td><xsl:value-of select="Lennujaamad/Saabumine"/></td>
<td><xsl:value-of select="Hind/@value"/></td>
<td>
<xsl:variable name="kogumaksumus"
select="number(Transport/@value)
+ number(Majutus/@value)
+ number(Ekskursioonid/@value)
+ number(MuudKulud/@value)"/>
<xsl:value-of select="$kogumaksumus"/> €
</td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
Tulemus:

XML skeem

Reisid.xsd
<?xml version="1.0" encoding="utf-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="Reisid">
<xs:complexType>
<xs:sequence>
<xs:element maxOccurs="unbounded" name="Reis">
<xs:complexType>
<xs:sequence>
<xs:element name="Firma" type="xs:string" />
<xs:element name="Sihtkoht" type="xs:string" />
<xs:element name="Lennujaamad">
<xs:complexType>
<xs:sequence>
<xs:element name="Valjumine" type="xs:string" />
<xs:element name="Saabumine" type="xs:string" />
</xs:sequence>
<xs:attribute name="kestus" type="xs:string" use="required" />
</xs:complexType>
</xs:element>
<xs:element name="Transport">
<xs:complexType>
<xs:attribute name="tuup" type="xs:string" use="required" />
<xs:attribute name="value" type="xs:unsignedShort" use="required" />
</xs:complexType>
</xs:element>
<xs:element name="Majutus">
<xs:complexType>
<xs:attribute name="value" type="xs:unsignedShort" use="required" />
</xs:complexType>
</xs:element>
<xs:element name="Ekskursioonid">
<xs:complexType>
<xs:attribute name="value" type="xs:unsignedShort" use="required" />
</xs:complexType>
</xs:element>
<xs:element name="MuudKulud">
<xs:complexType>
<xs:attribute name="value" type="xs:unsignedByte" use="required" />
</xs:complexType>
</xs:element>
<xs:element name="Hind">
<xs:complexType>
<xs:attribute name="value" type="xs:decimal" use="required" />
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="id" type="xs:unsignedByte" use="required" />
<xs:attribute name="reisi_number" type="xs:string" use="required" />
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
XML-failile viide XSD-failile
<Reisid xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="Reisid.xsd">

Kolm oma ülesanned
1.Sorteerin tabeli hinna järgi kasvavas järjekorras.
<xsl:sort select="number(Hind/@value)" data-type="number" order="ascending"/>
2.Arvuta kõigi sõitude keskmine Transport/@value ja kuva see tabelis eraldi reas.
<xsl:variable name="sum" select="sum(Reis/Transport/@value)"/>
<xsl:variable name="count" select="count(Reis)"/>
<h2>
Keskmine transpordi hind: <xsl:value-of select="$sum div $count"/> €
</h2>
3. Tõsta tabelis punasega esile kõik reisid, kus Hind/@value > 50, jäta ülejäänud read valgeks.
<xsl:if test="Hind/@value > 50">
<xsl:attribute name="style">background-color:lightcoral;</xsl:attribute>
</xsl:if>
Lõppu tulemus
