TahaksLopetada

From ICO wiki

Kodutöö aines "Võrgurakendused II: hajussüsteemide ehitamine"

Meeskond

  • Mart Naris

Iseseisev

XML

<?xml version="1.0" encoding="utf-8"?>

<FootballClubs>
  <FootballClub league="Premier League" country="England" networth="1500000000" currency="£">
    <ClubName><![CDATA[Liverpool FC]]></ClubName>
    <LogoUrl><![CDATA[http://www.lfchistory.net/Images/lfc/LIVE_5396.gif]]></LogoUrl>
    <Owners>
      <Owner ownershipType="share" ownershipPercentage="90">
        <Name><![CDATA[Fenway Sports Group]]></Name>
      </Owner>
      <Owner ownershipType="share" ownershipPercentage="10">
        <Name><![CDATA[Galway Sport]]></Name>
      </Owner>
    </Owners>
    <Roster>
      <Trainers>
        <Trainer yearlySalary="7000000" currency="£" type="general manager">
          <Name><![CDATA[Jürgen Klopp]]></Name>
        </Trainer>
        <Trainer yearlySalary="1000000" currency="£" type="assistant manager">
          <Name><![CDATA[Željko Buvač]]></Name>
        </Trainer>
      </Trainers>
      <Players>
        <Player yearlySalary="3800000" currency="£" position="CM">
          <Name><![CDATA[Jordan Henderson]]></Name>
        </Player>
        <Player yearlySalary="4000000" currency="£" position="FW">
          <Name><![CDATA[Daniel Sturridge]]></Name>
        </Player>
        <Player yearlySalary="2000000" currency="£" position="GK">
          <Name><![CDATA[Loris Karius]]></Name>
        </Player>
      </Players>
    </Roster>
  </FootballClub>
  <FootballClub league="Serie A" country="Italy" networth="1100000000" currency="€">
    <ClubName><![CDATA[Juventus FC]]></ClubName>
    <LogoUrl><![CDATA[https://upload.wikimedia.org/wikipedia/en/thumb/d/d2/Juventus_Turin.svg/800px-Juventus_Turin.svg.png]]></LogoUrl>
    <Owners>
      <Owner ownershipType="share" ownershipPercentage="100">
        <Name><![CDATA[EXOR N.V]]></Name>
      </Owner>
    </Owners>
    <Roster>
      <Trainers>
        <Trainer yearlySalary="3500000" currency="€" type="general manager">
          <Name><![CDATA[Massimiliano Allegri]]></Name>
        </Trainer>
        <Trainer yearlySalary="500000" currency="€" type="assistant manager">
          <Name><![CDATA[Marco Landucci]]></Name>
        </Trainer>
      </Trainers>
      <Players>
        <Player yearlySalary="4500000" currency="€" position="CM">
          <Name><![CDATA[Miralem Pjanić]]></Name>
        </Player>
        <Player yearlySalary="5500000" currency="€" position="FW">
          <Name><![CDATA[Gonzalo Higuaín]]></Name>
        </Player>
        <Player yearlySalary="4000000" currency="€" position="GK">
          <Name><![CDATA[Gianluigi Buffon]]></Name>
        </Player>
      </Players>
    </Roster>
  </FootballClub>
  <FootballClub league="La Liga" country="Spain" networth="200000000" currency="€">
    <ClubName><![CDATA[Club Atlético de Madrid]]></ClubName>
    <LogoUrl><![CDATA[http://en.atleticodemadrid.com/img/atm_facebook.png]]></LogoUrl>
    <Owners>
      <Owner ownershipType="share" ownershipPercentage="50">
        <Name><![CDATA[Miguel Ángel Gil Marín]]></Name>
      </Owner>
      <Owner ownershipType="share" ownershipPercentage="25">
        <Name><![CDATA[Wanda Group]]></Name>
      </Owner>
      <Owner ownershipType="share" ownershipPercentage="25">
        <Name><![CDATA[Enrique Cerezo]]></Name>
      </Owner>
    </Owners>
    <Roster>
      <Trainers>
        <Trainer yearlySalary="5000000" currency="€" type="general manager">
          <Name><![CDATA[Diego Simeone]]></Name>
        </Trainer>
        <Trainer yearlySalary="100000" currency="€" type="assistant manager">
          <Name><![CDATA[Germán Adrián Ramón Burgos]]></Name>
        </Trainer>
      </Trainers>
      <Players>
        <Player yearlySalary="4000000" currency="€" position="CM">
          <Name><![CDATA[Gabriel Fernández Arenas]]></Name>
        </Player>
        <Player yearlySalary="4000000" currency="€" position="FW">
          <Name><![CDATA[Fernando Torres]]></Name>
        </Player>
        <Player yearlySalary="1300000" currency="€" position="GK">
          <Name><![CDATA[Jan Oblak]]></Name>
        </Player>
      </Players>
    </Roster>
  </FootballClub>
</FootballClubs>

XSD

<?xml version="1.0" encoding="utf-8"?>

<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:simpleType name="percent">
    <xs:annotation>
      <xs:documentation>The percent type specifies a percentage from 0 to 100.</xs:documentation>
    </xs:annotation>
    <xs:restriction base="xs:decimal">
      <xs:minInclusive value="0"/>
      <xs:maxInclusive value="100"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:element name="FootballClubs">
    <xs:complexType>
      <xs:sequence>
        <xs:element minOccurs="0" maxOccurs="unbounded" name="FootballClub">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="ClubName" type="xs:string" />
              <xs:element name="LogoUrl" type="xs:string" />
              <xs:element name="Owners">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element maxOccurs="unbounded" name="Owner">
                      <xs:complexType>
                        <xs:sequence>
                          <xs:element name="Name" type="xs:string" />
                        </xs:sequence>
                        <xs:attribute name="ownershipType" type="xs:string" use="required" />
                        <xs:attribute name="ownershipPercentage" type="percent" use="required" />
                      </xs:complexType>
                    </xs:element>
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
              <xs:element name="Roster">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element name="Trainers">
                      <xs:complexType>
                        <xs:sequence>
                          <xs:element maxOccurs="unbounded" name="Trainer">
                            <xs:complexType>
                              <xs:sequence>
                                <xs:element name="Name" type="xs:string" />
                              </xs:sequence>
                              <xs:attribute name="yearlySalary" type="xs:decimal" use="optional" />
                              <xs:attribute name="currency" type="xs:string" use="optional" />
                              <xs:attribute name="type" type="xs:string" use="required" />
                            </xs:complexType>
                          </xs:element>
                        </xs:sequence>
                      </xs:complexType>
                    </xs:element>
                    <xs:element name="Players">
                      <xs:complexType>
                        <xs:sequence>
                          <xs:element maxOccurs="unbounded" name="Player">
                            <xs:complexType>
                              <xs:sequence>
                                <xs:element name="Name" type="xs:string" />
                              </xs:sequence>
                              <xs:attribute name="yearlySalary" type="xs:decimal" use="optional" />
                              <xs:attribute name="currency" type="xs:string" use="optional" />
                              <xs:attribute name="position" type="xs:string" use="required" />
                            </xs:complexType>
                          </xs:element>
                        </xs:sequence>
                      </xs:complexType>
                    </xs:element>
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
            </xs:sequence>
            <xs:attribute name="league" type="xs:string" use="required" />
            <xs:attribute name="country" type="xs:string" use="required" />
            <xs:attribute name="networth" type="xs:decimal" use="optional" />
            <xs:attribute name="currency" type="xs:string" use="optional" />
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

XSLT 1

<?xml version="1.0" encoding="utf-8"?>

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl">
  <xsl:output method="html" indent="yes" />
  <xsl:template match="/">
    <html>
      <head></head>
      <body>
        <h1>Football Clubs</h1>
        <table>
          <xsl:for-each select="/FootballClubs/FootballClub">
            <tr>
              <td>
                <h2>
                  <xsl:value-of select="ClubName" />
                </h2>
                <img style='float: left;'>
                  <xsl:attribute name="height">
                    200px
                  </xsl:attribute>
                  <xsl:attribute name="width">
                    150px
                  </xsl:attribute>
                  <xsl:attribute name="src">
                    <xsl:value-of select="LogoUrl" />
                  </xsl:attribute>
                </img>
              </td>
              <td>
                <h3>Trainers</h3>
                <ul>
                  <xsl:for-each select="Roster/Trainers/Trainer">
                    <xsl:variable name="trainerType" select="./@type" />
                    <li>
                      <xsl:choose>
                        <xsl:when test="$trainerType = 'general manager'">
                          <strong><xsl:value-of select="Name" /></strong>
                        </xsl:when>
                        <xsl:otherwise>
                          <xsl:value-of select="Name" />
                        </xsl:otherwise>
                      </xsl:choose>
                    </li>
                  </xsl:for-each>
                </ul>
              </td>
              <td>
                <h3>Players</h3>
                <ul>
                  <xsl:for-each select="Roster/Players/Player">
                    <li>
                      <xsl:value-of select="Name" />
                    </li>
                  </xsl:for-each>
                </ul>
              </td>
            </tr>
          </xsl:for-each>
        </table>
      </body>
    </html>
  </xsl:template>
</xsl:stylesheet>

XSLT 2

<?xml version="1.0" encoding="utf-8"?>

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl">
  <xsl:output method="xml" indent="yes" />
  <xsl:template match="/">
    <FootballClubs>
      <xsl:for-each select="/FootballClubs/FootballClub">
        <xsl:variable name="rosterSize" select="count(Roster/Players/Player)+count(Roster/Trainers/Trainer)"></xsl:variable>
        <xsl:variable name="playerSalaries"
                      select="sum(Roster/Players/Player/@yearlySalary)+sum(Roster/Trainers/Trainer/@yearlySalary)">
        </xsl:variable>
        <xsl:variable name="ownerCount" select="count(Owners/Owner)"></xsl:variable>
        <FootballClub>
          <Name>
            <xsl:value-of select="ClubName" />
          </Name>
          <Country>
            <xsl:value-of select="@country" />
          </Country>
          <ClubInfo>
            <ShareHolders>
              <xsl:for-each select="Owners/Owner">
                <xsl:if test="@ownershipType='share'">
                  <ShareHolder>
                    <xsl:value-of select="Name" />
                  </ShareHolder>
                </xsl:if>
              </xsl:for-each>
            </ShareHolders>
            <NumberOfOwners>
              <xsl:value-of select="$ownerCount" />
            </NumberOfOwners>
            <Staff>
              <StaffSize>
                <xsl:value-of select="$rosterSize" />
              </StaffSize>
              <StaffSalaries>
                <xsl:value-of select="$playerSalaries" />
              </StaffSalaries>
              <CountryCurrency>
                <xsl:value-of select="@currency" />
              </CountryCurrency>
            </Staff>
          </ClubInfo>
        </FootballClub>
      </xsl:for-each>
    </FootballClubs>
  </xsl:template>
</xsl:stylesheet>