XML Reis

  1. Loome tabeli
SQL
Create table Reis(
  id int primary key identity (1,1),
  v_lennujaam varchar(30),
  s_lennujaam varchar(30),
  lennuk varchar(6),
  regiooni_kood varchar(10),
  v_kuupaev datetime,
  s_kuupaev datetime,
);

2. Siis paneme siise andmeid näiteks neid

SQL

insert into Reis (v_lennujaam, s_lennujaam, lennuk, regiooni_kood, v_kuupaev, s_kuupaev) values ('Lufthansa', 'SAS Scandinavian', 'LH5483', 'BD-5', '06/27/2025', '05/12/2025');
insert into Reis (v_lennujaam, s_lennujaam, lennuk, regiooni_kood, v_kuupaev, s_kuupaev) values ('SAS Scandinavian', 'Iberia', 'SK9204', 'CA-SK', '11/06/2024', '12/31/2024');
insert into Reis (v_lennujaam, s_lennujaam, lennuk, regiooni_kood, v_kuupaev, s_kuupaev) values ('Delta Air Lines', 'All Nippon Airways', 'DL1375', 'PG-NSB', '12/16/2024', '04/13/2025');
insert into Reis (v_lennujaam, s_lennujaam, lennuk, regiooni_kood, v_kuupaev, s_kuupaev) values ('Qatar Airways', 'Air New Zealand', 'QR6265', 'CU-10', '06/14/2025', '01/17/2025');
insert into Reis (v_lennujaam, s_lennujaam, lennuk, regiooni_kood, v_kuupaev, s_kuupaev) values ('Air Canada', 'Qatar Airways', 'AC9854', 'US-IN', '07/29/2025', '10/18/2024');
insert into Reis (v_lennujaam, s_lennujaam, lennuk, regiooni_kood, v_kuupaev, s_kuupaev) values ('Delta Air Lines', 'Qantas', 'DL2731', 'GB-SCT', '09/21/2024', '09/01/2025');
insert into Reis (v_lennujaam, s_lennujaam, lennuk, regiooni_kood, v_kuupaev, s_kuupaev) values ('Emirates', 'Lufthansa', 'EK6800', 'FJ-N', '11/27/2024', '07/21/2025');
insert into Reis (v_lennujaam, s_lennujaam, lennuk, regiooni_kood, v_kuupaev, s_kuupaev) values ('Air India', 'Korean Air', 'AI2223', 'VN-34', '05/23/2025', '02/09/2025');
insert into Reis (v_lennujaam, s_lennujaam, lennuk, regiooni_kood, v_kuupaev, s_kuupaev) values ('Air India', 'Lufthansa', 'AI6387', 'KE-900', '04/14/2025', '12/17/2024');
insert into Reis (v_lennujaam, s_lennujaam, lennuk, regiooni_kood, v_kuupaev, s_kuupaev) values ('LATAM Airlines', 'Alitalia', 'LA7890', 'CF-HK', '01/14/2025', '11/03/2024');
insert into Reis (v_lennujaam, s_lennujaam, lennuk, regiooni_kood, v_kuupaev, s_kuupaev) values ('Southwest Airlines', 'All Nippon Airways', 'WN8983', 'US-AK', '11/03/2024', '04/15/2025');
insert into Reis (v_lennujaam, s_lennujaam, lennuk, regiooni_kood, v_kuupaev, s_kuupaev) values ('Aeroméxico', 'Korean Air', 'AM9145', 'RU-KYA', '06/28/2025', '04/04/2025');
insert into Reis (v_lennujaam, s_lennujaam, lennuk, regiooni_kood, v_kuupaev, s_kuupaev) values ('Southwest Airlines', 'Cathay Pacific', 'WN3613', 'US-NE', '03/26/2025', '04/01/2025');
insert into Reis (v_lennujaam, s_lennujaam, lennuk, regiooni_kood, v_kuupaev, s_kuupaev) values ('Qantas', 'Qantas', 'QF6795', 'CN-51', '01/28/2025', '02/16/2025');
insert into Reis (v_lennujaam, s_lennujaam, lennuk, regiooni_kood, v_kuupaev, s_kuupaev) values ('Air New Zealand', 'Avianca', 'NZ4755', 'CN-51', '05/24/2025', '10/09/2024');
insert into Reis (v_lennujaam, s_lennujaam, lennuk, regiooni_kood, v_kuupaev, s_kuupaev) values ('Aeroméxico', 'Air India', 'AM8271', 'JP-01', '03/18/2025', '11/14/2024');
insert into Reis (v_lennujaam, s_lennujaam, lennuk, regiooni_kood, v_kuupaev, s_kuupaev) values ('Alitalia', 'Air New Zealand', 'AZ2524', 'BS-MG', '11/25/2024', '09/14/2025');
insert into Reis (v_lennujaam, s_lennujaam, lennuk, regiooni_kood, v_kuupaev, s_kuupaev) values ('Korean Air', 'Lufthansa', 'KE7078', 'PG-WPD', '05/27/2025', '07/04/2025');
insert into Reis (v_lennujaam, s_lennujaam, lennuk, regiooni_kood, v_kuupaev, s_kuupaev) values ('Air Canada', 'Air India', 'AC4071', 'IT-78', '07/22/2025', '08/30/2025');
insert into Reis (v_lennujaam, s_lennujaam, lennuk, regiooni_kood, v_kuupaev, s_kuupaev) values ('South African Airways', 'SAS Scandinavian', 'SA3265', 'CD-BN', '02/03/2025', '04/28/2025');
insert into Reis (v_lennujaam, s_lennujaam, lennuk, regiooni_kood, v_kuupaev, s_kuupaev) values ('Alitalia', 'Ethiopian Airlines', 'AZ1933', 'US-TX', '08/09/2025', '11/11/2024');
insert into Reis (v_lennujaam, s_lennujaam, lennuk, regiooni_kood, v_kuupaev, s_kuupaev) values ('Qatar Airways', 'Lufthansa', 'QR6450', 'CO-CAL', '10/21/2024', '02/12/2025');
insert into Reis (v_lennujaam, s_lennujaam, lennuk, regiooni_kood, v_kuupaev, s_kuupaev) values ('Aeroméxico', 'SAS Scandinavian', 'AM9071', 'PH-AGN', '03/29/2025', '10/09/2024');
insert into Reis (v_lennujaam, s_lennujaam, lennuk, regiooni_kood, v_kuupaev, s_kuupaev) values ('South African Airways', 'United Airlines', 'SA7834', 'AO-HUI', '12/07/2024', '03/30/2025');
insert into Reis (v_lennujaam, s_lennujaam, lennuk, regiooni_kood, v_kuupaev, s_kuupaev) values ('Korean Air', 'Alitalia', 'KE6811', 'TR-72', '11/08/2024', '04/02/2025');
insert into Reis (v_lennujaam, s_lennujaam, lennuk, regiooni_kood, v_kuupaev, s_kuupaev) values ('Singapore Airlines', 'Avianca', 'SQ9539', 'YE-SD', '03/13/2025', '07/29/2025');
insert into Reis (v_lennujaam, s_lennujaam, lennuk, regiooni_kood, v_kuupaev, s_kuupaev) values ('Avianca', 'Lufthansa', 'AV9245', 'ZA-NP', '12/23/2024', '11/19/2024');
insert into Reis (v_lennujaam, s_lennujaam, lennuk, regiooni_kood, v_kuupaev, s_kuupaev) values ('Qatar Airways', 'Avianca', 'QR2107', 'CD-KW', '09/29/2024', '09/09/2025');
insert into Reis (v_lennujaam, s_lennujaam, lennuk, regiooni_kood, v_kuupaev, s_kuupaev) values ('Aeroméxico', 'SAS Scandinavian', 'AM7831', 'US-WI', '01/29/2025', '08/24/2025');
insert into Reis (v_lennujaam, s_lennujaam, lennuk, regiooni_kood, v_kuupaev, s_kuupaev) values ('American Airlines', 'Air New Zealand', 'AA8666', 'DE-BY', '01/23/2025', '08/13/2025');

3. Vaatame mida me saime

SQL
select * from Reis

Tulemuseks saame:

4. Alustame SQL -> XML 3 tasemeline ja kasutakse vähemalt 1 atribuut:

SQL
select 
	lennuk as '@lennuk', 
	regiooni_kood as '@regiooni_kood',
	v_lennujaam, 
	s_lennujaam, 
	v_kuupaev,
	s_kuupaev 
from Reis For XML path('Reis'), root('Reisid');
  • lennuk ja regiooni_kood on atribuutid
  • 3 taset:
    • Esimene tase Reisid
    • Teine tase Reis
    • Kolmas tase kõik järgmised

Tulemuseks saame:

Mille peale peame klikkime ja saame XML koodi:

5. Komponendid võivad sisaldada allkomponente

SQL
select
  (
    select
      (
        select
          lennuk as '@lennuk',
          regiooni_kood as '@regiooni_kood',
          (
            select
              v_lennujaam as 'Väljumine',
              s_lennujaam as 'Sõit'
            for xml path('Lennuk'), type
          ),
          (
            select
             convert(varchar(10),v_kuupaev, 120) as 'VäljumiseKuupaev',
             convert(varchar(10),s_kuupaev, 120) as 'SõiduKuupaev'
            for xml path('Kuupaevad'), type
          )
        for xml path('Lend'), type
      )
    for xml path('Reis'), type
  )
from Reis
for xml path('Reisid'), root('XMLReis');

Tulemuseks saame:

6. Kuva andmed XSLT abil järgmisel kujul:

  • Kuvada iga reisi sihtkoht pealkirjana, kasutades <h1>.
  • Komponendid peavad olema kuvatud täpploeteluna (<ul>).
  • Kolmanda taseme struktuuri andmed tuleb kuvada kollasel taustal.
  • Lisa oma tingimus (nt reisi hind või eriline soovitus peab olema esile tõstetud teatud tingimustel).
  • Kuva iga reisi kogumaksumuse, liites transport, majutuse, ekskursioonide ja muude kulude hinnad kokku.
  • Filtreeri ja kuva ainult need reisid, mille transport sisaldab lennureisi.
  • Sorteeri kõik reisid vastavalt hinnangule (nt kliendihinnang, kui selline väli on olemas XML-is, kui ei ole kasuta teine numbriline väli).
  • Kuva kõik xml andmed tabelina, kus read on üle rea erineva värviga.
    XSL
    <xsl:template match="/">
    	<html>
    		<head>
    			<style>
    				body {
    				font-family: Arial, sans-serif;
    				}
    				h1 {
    				color: #2e6da4;
    				}
    				ul {
    				list-style-type: none;
    				padding-left: 20px;
    				}
    				li {
    				margin-bottom: 8px;
    				}
    				.highlight {
    				background-color: yellow;
    				}
    				.table {
    				width: 100%;
    				border-collapse: collapse;
    				margin-top: 20px;
    				}
    				.table th, .table td {
    				border: 1px solid #ddd;
    				padding: 8px;
    				text-align: center;
    				}
    				.table tr:nth-child(even) {
    				background-color: #f2f2f2;
    				}
    				.table tr:nth-child(odd) {
    				background-color: #ffffff;
    				}
    			</style>
    		</head>
    		<body>
    
    			<xsl:for-each select="XMLReis/Reisid/Reis">
    				<xsl:sort select="Lend/@regiooni_kood" data-type="text" order="ascending"/>
    				<xsl:variable name="reis" select="Lend"/>
    
    				<h1>
    					Sihtkoht: <xsl:value-of select="Lend/@regiooni_kood"/>
    				</h1>
    
    				<ul>
    					<li>
    						Lend: <xsl:value-of select="Lend/Lennuk/Väljumine"/> - <xsl:value-of select="Lend/Lennuk/Sõit"/>
    					</li>
    					<li>
    						Väljumise kuupäev: <xsl:value-of select="Lend/Kuupaevad/VäljumiseKuupaev"/>
    					</li>
    					<li>
    						Sõidu kuupäev: <xsl:value-of select="Lend/Kuupaevad/SõiduKuupaev"/>
    					</li>
    				</ul>
    
    				<div class="highlight">
    					<p>
    						Erilised tingimused: Sihtkoht - <xsl:value-of select="Lend/@regiooni_kood"/>
    					</p>
    				</div>
    
    				<table class="table">
    					<tr>
    						<th>Sihtkoht</th>
    						<th>Lend</th>
    						<th>Väljumise Kuupäev</th>
    						<th>Sõidu Kuupäev</th>
    					</tr>
    					<tr>
    						<td>
    							<xsl:value-of select="Lend/@regiooni_kood"/>
    						</td>
    						<td>
    							<xsl:value-of select="Lend/Lennuk/Väljumine"/> - <xsl:value-of select="Lend/Lennuk/Sõit"/>
    						</td>
    						<td>
    							<xsl:value-of select="Lend/Kuupaevad/VäljumiseKuupaev"/>
    						</td>
    						<td>
    							<xsl:value-of select="Lend/Kuupaevad/SõiduKuupaev"/>
    						</td>
    					</tr>
    				</table>
    
    			</xsl:for-each>
    		</body>
    	</html>
    </xsl:template>

    Tulemus:

    XSD:

    XML
    	<xs:element name="XMLReis">
    		<xs:complexType>
    			<xs:sequence>
    				<xs:element name="Reisid" maxOccurs="unbounded">
    					<xs:complexType>
    						<xs:sequence>
    							<xs:element name="Reis">
    								<xs:complexType>
    									<xs:sequence>
    										<xs:element name="Lend">
    											<xs:complexType>
    												<xs:sequence>
    													<xs:element name="Lennuk">
    														<xs:complexType>
    															<xs:sequence>
    																<xs:element name="Väljumine" type="xs:string"/>
    																<xs:element name="Sõit" type="xs:string"/>
    															</xs:sequence>
    														</xs:complexType>
    													</xs:element>
    													<xs:element name="Kuupaevad">
    														<xs:complexType>
    															<xs:sequence>
    																<xs:element name="VäljumiseKuupaev" type="xs:date"/>
    																<xs:element name="SõiduKuupaev" type="xs:date"/>
    															</xs:sequence>
    														</xs:complexType>
    													</xs:element>
    												</xs:sequence>
    												<xs:attribute name="lennuk" type="xs:string" use="required"/>
    												<xs:attribute name="regiooni_kood" type="xs:string" use="required"/>
    											</xs:complexType>
    										</xs:element>
    									</xs:sequence>
    								</xs:complexType>
    							</xs:element>
    						</xs:sequence>
    					</xs:complexType>
    				</xs:element>
    			</xs:sequence>
    		</xs:complexType>
    	</xs:element>
    </xs:schema>

    XML Sisse lisame:

    XML
    	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    	xsi:noNamespaceSchemaLocation="reisid.xsd"