??? Profit

From ICO wiki
Revision as of 18:59, 20 March 2017 by Aromandi (talk | contribs) (→‎XML)
Jump to navigationJump to search

Meeskond "??? Profit"

  • Aivar Romandi
  • Frank Karl Koppel

XML/XSD/XSLT(unfinished)

XML

<?xml version="1.0" encoding="utf-8"?>
<Series>
  <Show id="0" releaseYear="2010" onGoing="true" country="USA" language="English">
    <ShowName><![CDATA[Hea saate nimi]]></ShowName>
    <ShowDescription><![CDATA[saade on selline]]> </ShowDescription>
    <BannerUrl><![CDATA[http://img2.tvtome.com/i/u/0aa3afb3cbe3468fc6e43e50070b0810.png]]></BannerUrl>
    <Genres>
      <Genre><![CDATA[drama]]></Genre>
    </Genres>
    <Seasons>
      <Season nr="1">
        <SeasonDescription><![CDATA[description]]></SeasonDescription>
        <Episodes>
          <Episode nr="1" releaseDate="2010-10-10" length="88" lengthType="min">
            <EpisodeName><![CDATA[What?!]]></EpisodeName>
            <EpisodeDescription><![CDATA[description]]></EpisodeDescription>
          </Episode>
        </Episodes>
      </Season>
      <Season nr="2">
        <SeasonDescription><![CDATA[description]]></SeasonDescription>
        <Episodes>
          <Episode nr="1" releaseDate="2010-10-10" length="88" lengthType="min">
            <EpisodeName><![CDATA[What?!]]></EpisodeName>
            <EpisodeDescription><![CDATA[description]]></EpisodeDescription>
          </Episode>
        </Episodes>
      </Season>
    </Seasons>
    <Credits>
      <Actors>
        <Actor sex="m" birthDate="1980-10-10">
          <FirstName><![CDATA[Pakiraam]]></FirstName>
          <LastName><![CDATA[Peeter]]></LastName>
          <Role><![CDATA[Anderson]]></Role>
        </Actor>
      </Actors>
      <Directors>
        <Director sex="m" birthDate="1980-10-10">
          <FirstName><![CDATA[Peeter]]></FirstName>
          <LastName><![CDATA[Pakiraam]]></LastName>
        </Director>
      </Directors>
    </Credits>
  </Show>
    <Show id="1" releaseYear="2012" onGoing="true" country="USA" language="English">
    <ShowName><![CDATA[The Eric Andre Show]]></ShowName>
    <ShowDescription><![CDATA[The show is a parody of low-budget public access talk shows, hosted by Eric Andre and Hannibal Buress. André is a hyperactive and dysfunctional host who often stutters or otherwise fails to properly maintain his screen presence. He often overreacts during interviews, acts aggressively towards his crew members, diverts from the script and refuses to read the cue cards. The surreal attitude of the show is emphasized by "celebrity" guests that have nothing in common with the actual stars they purport to be except their announced names, although occasionally genuine celebrities do appear.]]> </ShowDescription>
    <BannerUrl><![CDATA[https://images-na.ssl-images-amazon.com/images/M/MV5BMTAyMzA1Mjg3NjBeQTJeQWpwZ15BbWU3MDM2NTc2Mjg@._V1_SY1000_CR0,0,757,1000_AL_.jpg]]></BannerUrl>
    <Genres>
      <Genre><![CDATA[comedy, talk-show]]></Genre>
    </Genres>
    <Seasons>
      <Season nr="1">
        <SeasonDescription><![CDATA[description]]></SeasonDescription>
        <Episodes>
          <Episode nr="1" releaseDate="2012-05-20" length="12" lengthType="min">
            <EpisodeName><![CDATA[George Clooney]]></EpisodeName>
            <EpisodeDescription><![CDATA[Eric interviews George Clooney and Dolph Lundgren.]]></EpisodeDescription>
          </Episode>
        </Episodes>
      </Season>
    </Seasons>
    <Credits>
      <Actors>
        <Actor sex="m" birthDate="1983-04-04">
          <FirstName><![CDATA[Eric]]></FirstName>
          <LastName><![CDATA[André]]></LastName>
          <Role><![CDATA[host]]></Role>
        </Actor>
      </Actors>
      <Directors>
        <Director sex="m" birthDate="1983-04-04">
          <FirstName><![CDATA[Eric]]></FirstName>
          <LastName><![CDATA[André]]></LastName>
        </Director>
      </Directors>
    </Credits>
  </Show>
</Series>

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="Series">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="Show" maxOccurs="unbounded">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="ShowName" type="xs:string"/>
              <xs:element name="ShowDescription" type="xs:string" minOccurs="0" maxOccurs="1"/>
              <xs:element name="BannerUrl" type="xs:string" minOccurs="0" maxOccurs="1" />
              <xs:element name="Genres">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element name="Genre" type="xs:string" maxOccurs="unbounded"/>
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
              <xs:element name="Seasons">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element name="Season" maxOccurs="unbounded">
                      <xs:complexType>
                        <xs:sequence>
                          <xs:element name="SeasonDescription" type="xs:string"/>
                          <xs:element name="Episodes">
                            <xs:complexType>
                              <xs:sequence>
                                <xs:element name="Episode" maxOccurs="unbounded">
                                  <xs:complexType>
                                    <xs:sequence>
                                      <xs:element name="EpisodeName" type="xs:string"/>
                                      <xs:element name="EpisodeDescription" type="xs:string"/>
                                    </xs:sequence>
                                    <xs:attribute name="nr" type="xs:unsignedByte" use="required" />
                                    <xs:attribute name="releaseDate" type="xs:date" use="required" />
                                    <xs:attribute name="length" type="xs:unsignedByte" use="required" />
                                    <xs:attribute name="lengthType" type="xs:string" use="required" />
                                  </xs:complexType>
                                </xs:element>
                              </xs:sequence>
                            </xs:complexType>
                          </xs:element>
                        </xs:sequence>
                        <xs:attribute name="nr" type="xs:unsignedByte" use="required" />
                      </xs:complexType>
                    </xs:element>
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
              <xs:element name="Credits">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element name="Actors">
                      <xs:complexType>
                        <xs:sequence>
                          <xs:element name="Actor" maxOccurs="unbounded">
                            <xs:complexType>
                              <xs:sequence>
                                <xs:element name="FirstName" type="xs:string"/>
                                <xs:element name="LastName" type="xs:string" />
                                <xs:element name="Role" type="xs:string" maxOccurs="unbounded" />
                              </xs:sequence>
                              <xs:attribute name="sex" type="xs:string" use="required" />
                              <xs:attribute name="birthDate" type="xs:date" use="required" />
                            </xs:complexType>
                          </xs:element>
                        </xs:sequence>
                      </xs:complexType>
                    </xs:element>
                    <xs:element name="Directors">
                      <xs:complexType>
                        <xs:sequence>
                          <xs:element name="Director" maxOccurs="unbounded">
                            <xs:complexType>
                              <xs:sequence>
                                <xs:element name="FirstName" type="xs:string"/>
                                <xs:element name="LastName" type="xs:string"/>
                              </xs:sequence>
                              <xs:attribute name="sex" type="xs:string" use="required" />
                              <xs:attribute name="birthDate" type="xs:date" use="required" />
                            </xs:complexType>
                          </xs:element>
                        </xs:sequence>
                      </xs:complexType>
                    </xs:element>
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
            </xs:sequence>
            <xs:attribute name="id" type="xs:unsignedByte" use="required" />
            <xs:attribute name="releaseYear" type="xs:gYear" use="required" />
            <xs:attribute name="endYear" type="xs:gYear" use="optional" />
            <xs:attribute name="onGoing" type="xs:boolean" use="required" />
            <xs:attribute name="country" type="xs:string" use="required" />
            <xs:attribute name="language" type="xs:string" use="required" />
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

XSLT HTML

<?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"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
>
    <xsl:output method="html" indent="yes"/>
    <xsl:template match="/">
      <html>
        <body>
            <xsl:for-each select="/Series/Show">
              <xsl:sort select="@releaseYear" data-type="number"/>
                <details>
                  <summary style="font-size:20px;">
                    <xsl:value-of select="ShowName"/>
                    <xsl:text>  ( </xsl:text>
                    <xsl:value-of select="@releaseYear"/>
                    <xsl:text> - </xsl:text>
                    <xsl:if test="@onGoing='false'">
                      <xsl:value-of select="@endYear"/>
                    </xsl:if>
                    <xsl:text> )</xsl:text>
                  </summary>
                  <p>
                    <xsl:value-of select="ShowDescription"/>
                  </p>
                  <p>
                    <xsl:if test="count(Genres/Genre)>0">
                      <xsl:text>Genre: </xsl:text>
                      <xsl:for-each select="Genres/Genre">
                        <xsl:if test="position() != 1">
                          <xsl:text>, </xsl:text>
                        </xsl:if>
                        <xsl:value-of select="."/>
                      </xsl:for-each>
                    </xsl:if>
                  </p>
                  <xsl:for-each select="Seasons/Season">
                    <xsl:sort select="@id" data-type="number"/>
                    <details>
                      <summary>
                        <xsl:text>Season </xsl:text>
                        <xsl:value-of select="@id"/>
                      </summary>
                      <p>
                        <xsl:value-of select="SeasonDescription"/>
                      </p>
                      <p>Episodes:</p>
                      <ol>
                        <xsl:for-each select="Episodes/Episode">
                          <xsl:sort select="@id" data-type="number"/>
                          <li>
                            <details>
                              <summary>
                                <xsl:value-of select="EpisodeName"/>
                              </summary>
                              <p>
                                <xsl:value-of select="EpisodeDescription"/>
                              </p>
                              <p>
                                <xsl:text>Runtime:  </xsl:text>
                                <xsl:value-of select="@length"/>
                                <xsl:value-of select="@lengthType"/>
                              </p>
                              <p>
                                <xsl:text>Releasedate: </xsl:text>
                                <xsl:value-of select="@releaseDate"/>
                              </p>
                            </details>
                          </li>
                        </xsl:for-each>
                      </ol>
                    </details>
                  </xsl:for-each>
                  <br/>
                  <details>
                    <summary>
                      <xsl:text>Directors</xsl:text>
                    </summary>
                    <ol>
                      <xsl:for-each select="Credits/Directors/Director">
                        <li>
                          <xsl:value-of select="FirstName"/>
                          <xsl:text> </xsl:text>
                          <xsl:value-of select="LastName"/>
                        </li>
                      </xsl:for-each>
                    </ol>
                  </details>
                  <details>
                    <summary>
                      <xsl:text>Actors</xsl:text>
                    </summary>
                    <ol>
                      <xsl:for-each select="Credits/Actors/Actor">
                        <li>
                          <xsl:value-of select="FirstName"/>
                          <xsl:text> </xsl:text>
                          <xsl:value-of select="LastName"/>
                          <xsl:text> as </xsl:text>
                          <xsl:value-of select="Role"/>
                        </li>
                      </xsl:for-each>
                    </ol>
                  </details>
                </details>
              <br/>
              <br/>
            </xsl:for-each>
        </body>
      </html>
    </xsl:template>
</xsl:stylesheet>

XSLT XML

<?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:param name="dateNow">2017-03-19</xsl:param>
    <xsl:template match="/">
      <Unaired>
        <xsl:for-each select="Series/Show">
          <xsl:variable name="showName" select="ShowName"/>
          <xsl:variable name ="lastEpDate" select="Seasons/Season[last()]/Episodes/Episode[last()]/@releaseDate"/>
          <xsl:if test="translate($dateNow, '- :', '') &lt; translate($lastEpDate, '- :', '')">
            <Show id="@id">
              <xsl:copy-of select="ShowName" />
              <Episodes>
                <xsl:for-each select="Seasons/Season">
                  <xsl:for-each select="Episodes/Episode">
                    <xsl:if test="translate($dateNow, '- :', '') &lt; translate(@releaseDate, '- :', '')">
                      <xsl:copy-of select="." />
                    </xsl:if>
                  </xsl:for-each>
                </xsl:for-each>
              </Episodes>
            </Show>
          </xsl:if>
        </xsl:for-each>
      </Unaired>
    </xsl:template>
</xsl:stylesheet>

Väljund

SIIA PILT VMS