??? Profit: Difference between revisions

From ICO wiki
Jump to navigationJump to search
Aromandi (talk | contribs)
Aromandi (talk | contribs)
Line 531: Line 531:
===Kirjeldus===
===Kirjeldus===


Loome teenuse, millega kasutajatel on võimalik jälgida oma lemmiksarjarde väljatulemisaegu. Kasutaja saab ülevaate oma vaadatud saadetest(episoodidest) ning ka nendest mis on vaatamata. Kasutaja leiab alguses enda lemmiksaate üles, mida ta soovib jälgida ja seejärel märgib ära kui kaugele on saate vaatamisega jõudnud. Sellest lähtuvalt luuakse kasutajale ülevaade tema vaatamata episoddidest, mida ta saab pärast vaatamist vaadatuks märkida. Valisime selle teema, kuna meil endal on ka olnud raskusi saadete järje pidamisega ja selle lahendamine veebirakenduse näol tundub mõttekas. Peale selle saavad veel kasutajad hinnata ja kommenteerida saateid ja episoode. Saadete kohta info saamiseks kasutamae The TVDB api-t mis väljastab json-is infot saadete kohta ([https://api.thetvdb.com/swagger The TVDB API V2])
Loome teenuse, millega kasutajatel on võimalik jälgida oma lemmiksarjade väljatulemisaegu. Kasutaja saab ülevaate oma vaadatud saadetest(episoodidest) ning ka nendest mis on vaatamata. Kasutaja leiab alguses enda lemmiksaate üles, mida ta soovib jälgida ja seejärel märgib ära kui kaugele on saate vaatamisega jõudnud. Sellest lähtuvalt luuakse kasutajale ülevaade tema vaatamata episoodidest, mida ta saab pärast vaatamist vaadatuks märkida. Valisime selle teema, kuna meil endal on ka olnud raskusi saadete järje pidamisega ja selle lahendamine veebirakenduse näol tundub mõttekas. Peale selle saavad veel kasutajad hinnata ja kommenteerida saateid ja episoode. Saadete kohta info saamiseks kasutame The TVDB API-d mis väljastab JSON-is infot saadete kohta ([https://api.thetvdb.com/swagger The TVDB API V2])
 


===Must Have===
===Must Have===

Revision as of 18:04, 6 June 2017

Meeskond "??? Profit"

  • Aivar Romandi
  • Frank Karl Koppel
  • Aldin Talve

XML/XSD/XSLT

XML

<?xml version="1.0" encoding="utf-8"?>
<Series>
  <Show id="1" releaseYear="2015" onGoing="true" country="USA" language="English">
    <ShowName>
      <![CDATA[The Expanse]]></ShowName>
    <ShowDescription><![CDATA[Two hundred years in the future, in a fully colonized solar system, 
    police detective Josephus Miller is given the assignment to find a missing young woman, Julie Mao. Joining his task is James Holden, 
    former first officer of an ice freighter who is involved in an incident caused by the tense relationship between Earth, Mars and the Belt.
    Far from their struggles in space, United Nations executive Chrisjen Avasarala works to prevent war between Earth and Mars. 
    Soon the three find out that the missing woman is connected to a vast conspiracy that threatens all humanity.]]> </ShowDescription>
    <BannerUrl><![CDATA[http://thetvdb.com/banners/posters/280619-4.jpg]]></BannerUrl>
    <Genres>
      <Genre><![CDATA[Drama]]></Genre>
      <Genre><![CDATA[Mystery]]></Genre>
      <Genre><![CDATA[Science-Fiction]]></Genre>
    </Genres>
    <Seasons>
      <Season id="1">
        <SeasonDescription><![CDATA[]]></SeasonDescription>
        <Episodes>
          <Episode id="1" releaseDate="2015-12-14" length="45" lengthType="min">
            <EpisodeName><![CDATA[Dulcinea]]></EpisodeName>
            <EpisodeDescription><![CDATA[In the outer solar system near Saturn, 
            James Holden and the crew of the ice-freighter Canterbury, investigate a distress call from a mysterious derelict ship, 
            the Scopuli. On Ceres Station, Detective Miller begins an off the book investigation of a missing heiress, Julie Mao.]]></EpisodeDescription>
          </Episode>
          <Episode id="2" releaseDate="2015-12-15" length="45" lengthType="min">
            <EpisodeName><![CDATA[The Big Empty]]></EpisodeName>
            <EpisodeDescription><![CDATA[Holden and crew are trapped in badly damaged shuttle. On Ceres,
            Miller uncovers clues about Julie Mao. On Earth, Chrisjen Avasarala questions a terrorist.]]></EpisodeDescription>
          </Episode>
          <Episode id="3" releaseDate="	2015-12-22" length="45" lengthType="min">
            <EpisodeName><![CDATA[Remember the Cant]]></EpisodeName>
            <EpisodeDescription><![CDATA[]]></EpisodeDescription>
          </Episode>
          <Episode id="4" releaseDate="2015-12-29" length="45" lengthType="min">
            <EpisodeName><![CDATA[CQB]]></EpisodeName>
            <EpisodeDescription><![CDATA[Holden and crew are caught in the middle of a desperate battle as mysterious war ships attack and board the Donnager.
            As Miller continues to investigate Julie Mao, his partner Havelock continues to go missing.]]></EpisodeDescription>
          </Episode>
          <Episode id="5" releaseDate="2016-01-05" length="45" lengthType="min">
            <EpisodeName><![CDATA[Back to the Butcher]]></EpisodeName>
            <EpisodeDescription><![CDATA[The crew has survived the loss of the Canturbury and the Donnager and are contacted by an unlikely ally. 
            Miller, on Ceres, continues his investigation and his thoughts of a conspiracy grow.]]></EpisodeDescription>
          </Episode>
          <Episode id="6" releaseDate="2016-01-12" length="45" lengthType="min">
            <EpisodeName><![CDATA[Rock Bottom]]></EpisodeName>
            <EpisodeDescription><![CDATA[Holden's team makes an uneasy alliance with Fred Johnson 
            while Miller fights for his life against Anderson Dawe's thugs.]]></EpisodeDescription>
          </Episode>
          <Episode id="7" releaseDate="2016-01-19" length="45" lengthType="min">
            <EpisodeName><![CDATA[Windmills]]></EpisodeName>
            <EpisodeDescription><![CDATA[Holden and his crew face a Martian military blockade. 
            Miller finds a new reason to forge ahead. Avasarala visits Holden’s family.]]></EpisodeDescription>
          </Episode>
          <Episode id="8" releaseDate="2016-01-26" length="45" lengthType="min">
            <EpisodeName><![CDATA[Salvage]]></EpisodeName>
            <EpisodeDescription><![CDATA[A derelict vessel holds a potentially devastating secret. 
            Holden and his crew cross paths with Miller on Eros. Avasarala receives bad news.]]></EpisodeDescription>
          </Episode>
          <Episode id="9" releaseDate="2016-02-02" length="45" lengthType="min">
            <EpisodeName><![CDATA[Critical Mass]]></EpisodeName>
            <EpisodeDescription><![CDATA[Miller, Holden and his crew are trapped on Eros. 
            Avasarala discovers the origin of the mystery ships.]]></EpisodeDescription>
          </Episode>
          <Episode id="10" releaseDate="2016-02-02" length="45" lengthType="min">
            <EpisodeName><![CDATA[Leviathan Wakes]]></EpisodeName>
            <EpisodeDescription><![CDATA[Miller, Holden and his crew fight their way to the Rocinante to escape Eros. 
            On Earth, Avasarala fears for the stability of Earth's government and her family's safety.]]></EpisodeDescription>
          </Episode>
        </Episodes>
      </Season>
      <Season id="2">
        <SeasonDescription><![CDATA[]]></SeasonDescription>
        <Episodes>
          <Episode id="1" releaseDate="2017-02-01" length="45" lengthType="min">
            <EpisodeName><![CDATA[Safe]]></EpisodeName>
            <EpisodeDescription><![CDATA[Unlikely allies Joe Miller and the crew of the Rocinante led by Jim Holden 
            uncover more about the conspiracy to release the protomolecule on Eros station.]]></EpisodeDescription>
          </Episode>
          <Episode id="2" releaseDate="2017-02-01" length="45" lengthType="min">
            <EpisodeName><![CDATA[Doors & Corners]]></EpisodeName>
            <EpisodeDescription><![CDATA[With the help of Fred Johnson and the OPA, Miller, Holden and the crew stage a raid for information on the protomolecule; 
            on Earth, Avasarala learns a truth about Fred Johnson.]]></EpisodeDescription>
          </Episode>
          <Episode id="3" releaseDate="2017-02-08" length="45" lengthType="min">
            <EpisodeName><![CDATA[Static]]></EpisodeName>
            <EpisodeDescription><![CDATA[Holden and Miller butt heads about how the raid was handled.]]></EpisodeDescription>
          </Episode>
          <Episode id="4" releaseDate="2017-02-15" length="45" lengthType="min">
            <EpisodeName><![CDATA[Godspeed]]></EpisodeName>
            <EpisodeDescription><![CDATA[Miller devises a dangerous plan to eradicate what's left of the protomolecule on Eros.]]></EpisodeDescription>
          </Episode>
          <Episode id="5" releaseDate="2017-02-22" length="45" lengthType="min">
            <EpisodeName><![CDATA[Home]]></EpisodeName>
            <EpisodeDescription><![CDATA[The Rocinante chases an asteroid as it hurtles towards Earth.]]></EpisodeDescription>
          </Episode>
          <Episode id="6" releaseDate="2017-03-01" length="45" lengthType="min">
            <EpisodeName><![CDATA[Paradigm Shift]]></EpisodeName>
            <EpisodeDescription><![CDATA[Earth and Mars search for answers in the aftermath of the asteroid collision.]]></EpisodeDescription>
          </Episode>
          <Episode id="7" releaseDate="2017-03-08" length="45" lengthType="min">
            <EpisodeName><![CDATA[The Seventh Man]]></EpisodeName>
            <EpisodeDescription><![CDATA[Preparations for the Earth/Mars peace conference tighten the tension on Erringwright.]]></EpisodeDescription>
          </Episode>
          <Episode id="8" releaseDate="2017-03-15" length="45" lengthType="min">
            <EpisodeName><![CDATA[Pyre]]></EpisodeName>
            <EpisodeDescription><![CDATA[Naomi tracks down signs of the protomolecule; Fred Johnson's control over the OPA collapses.]]></EpisodeDescription>
          </Episode>
          <Episode id="9" releaseDate="2017-03-22" length="45" lengthType="min">
            <EpisodeName><![CDATA[The Weeping Somnambulist]]></EpisodeName>
            <EpisodeDescription><![CDATA[Bobbie becomes a political pawn in the struggle between Earth and Mars.]]></EpisodeDescription>
          </Episode>
          <Episode id="10" releaseDate="2017-03-29" length="45" lengthType="min">
            <EpisodeName><![CDATA[Cascade]]></EpisodeName>
            <EpisodeDescription><![CDATA[Holden leads his crew through the war-torn station on Ganymede. 
            Meanwhile Bobbie makes a decision that changes her life forever.]]></EpisodeDescription>
          </Episode>
          <Episode id="11" releaseDate="2017-04-05" length="45" lengthType="min">
            <EpisodeName><![CDATA[Here There Be Dragons]]></EpisodeName>
            <EpisodeDescription><![CDATA[]]></EpisodeDescription>
          </Episode>
          <Episode id="12" releaseDate="2017-04-12" length="45" lengthType="min">
            <EpisodeName><![CDATA[The Monster and the Rocket]]></EpisodeName>
            <EpisodeDescription><![CDATA[]]></EpisodeDescription>
          </Episode>
          <Episode id="13" releaseDate="2017-04-19" length="45" lengthType="min">
            <EpisodeName><![CDATA[Caliban's War]]></EpisodeName>
            <EpisodeDescription><![CDATA[]]></EpisodeDescription>
          </Episode>
        </Episodes>
      </Season>
    </Seasons>
    <Credits>
      <Actors>
        <Actor id="1" sex="m">
          <FirstName><![CDATA[Steven]]></FirstName>
          <LastName><![CDATA[Strait]]></LastName>
          <Role><![CDATA[Jim Holden]]></Role>
        </Actor>
        <Actor id="2" sex="m">
          <FirstName><![CDATA[Thomas]]></FirstName>
          <LastName><![CDATA[Jane]]></LastName>
          <Role><![CDATA[Detective Josephus Miller]]></Role>
        </Actor>
        <Actor id="3" sex="f">
          <FirstName><![CDATA[Shohreh]]></FirstName>
          <LastName><![CDATA[Aghdashloo]]></LastName>
          <Role><![CDATA[Chrisjen Avasaral]]></Role>
        </Actor>
        <Actor id="4" sex="f">
          <FirstName><![CDATA[Frankie]]></FirstName>
          <LastName><![CDATA[Adams]]></LastName>
          <Role><![CDATA[Roberta "Bobbie" W. Draper]]></Role>
        </Actor>
        <Actor id="5" sex="f">
          <FirstName><![CDATA[Alli]]></FirstName>
          <LastName><![CDATA[Chung]]></LastName>
          <Role><![CDATA[Sam Rosenberg]]></Role>
        </Actor>
        <Actor id="6" sex="m">
          <FirstName><![CDATA[Jonathan]]></FirstName>
          <LastName><![CDATA[Banks]]></LastName>
          <Role><![CDATA[XO]]></Role>
        </Actor>
        <Actor id="7" sex="m">
          <FirstName><![CDATA[Shawn]]></FirstName>
          <LastName><![CDATA[Doyle]]></LastName>
          <Role><![CDATA[Sadavir Errinwright]]></Role>
        </Actor>
        <Actor id="8" sex="m">
          <FirstName><![CDATA[Jared]]></FirstName>
          <LastName><![CDATA[Harris]]></LastName>
          <Role><![CDATA[Anderson Dawes]]></Role>
        </Actor>
        <Actor id="9" sex="m">
          <FirstName><![CDATA[Jay]]></FirstName>
          <LastName><![CDATA[Hernandez]]></LastName>
          <Role><![CDATA[Dimitri Havelock]]></Role>
        </Actor>
        <Actor id="10" sex="m">
          <FirstName><![CDATA[Paulo]]></FirstName>
          <LastName><![CDATA[Costanzo]]></LastName>
          <Role><![CDATA[Shed Garvy]]></Role>
        </Actor>
      </Actors>
      <Directors>
        <Director id="1" sex="m">
          <FirstName><![CDATA[Mark]]></FirstName>
          <LastName><![CDATA[Fergus]]></LastName>
        </Director>
        <Director id="2" sex="m">
          <FirstName><![CDATA[Hawk]]></FirstName>
          <LastName><![CDATA[Otsby]]></LastName>
        </Director>
      </Directors>
    </Credits>
  </Show>
  <Show id="2" 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 id="1">
        <SeasonDescription><![CDATA[description]]></SeasonDescription>
        <Episodes>
          <Episode id="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 id="1" sex="m" birthDate="1983-04-04">
          <FirstName><![CDATA[Eric]]></FirstName>
          <LastName><![CDATA[André]]></LastName>
          <Role><![CDATA[host]]></Role>
        </Actor>
      </Actors>
      <Directors>
        <Director id="1" 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"/>
              <xs:element name="BannerUrl" type="xs:string"/>
              <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="id" 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="id" 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="id" type="xs:unsignedByte" use="required" />
                              <xs:attribute name="sex" type="xs:string" use="required" />
                              <xs:attribute name="birthDate" type="xs:date" />
                            </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="id" type="xs:unsignedByte" use="required" />
                              <xs:attribute name="sex" type="xs:string" use="required" />
                              <xs:attribute name="birthDate" type="xs:date" />
                            </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"/>
            <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>
                  <xsl:variable name="url" select="BannerUrl"/>
                  <img src="{$url}" style="max-width:400px;"/>
                  <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 ="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" />
              <Seasons>
                <xsl:for-each select="Seasons/Season">
                  <xsl:variable name ="SeasonEpDate" select="Episodes/Episode[last()]/@releaseDate"/>
                  <xsl:if test="translate($dateNow, '-', '') &lt; translate($SeasonEpDate, '-', '')">
                    <Season id="{@id}">
                      <Episodes>
                        <xsl:for-each select="Episodes/Episode">
                          <xsl:if test="translate($dateNow, '-', '') &lt; translate(@releaseDate, '-', '')">
                            <xsl:copy-of select="." />
                          </xsl:if>
                        </xsl:for-each>
                      </Episodes>
                    </Season>
                  </xsl:if>
                </xsl:for-each>
              </Seasons>
            </Show>
          </xsl:if>
        </xsl:for-each>
      </Unaired>
    </xsl:template>
</xsl:stylesheet>

HTML Väljund

Veebiteenuse analüüs

Kirjeldus

Loome teenuse, millega kasutajatel on võimalik jälgida oma lemmiksarjade väljatulemisaegu. Kasutaja saab ülevaate oma vaadatud saadetest(episoodidest) ning ka nendest mis on vaatamata. Kasutaja leiab alguses enda lemmiksaate üles, mida ta soovib jälgida ja seejärel märgib ära kui kaugele on saate vaatamisega jõudnud. Sellest lähtuvalt luuakse kasutajale ülevaade tema vaatamata episoodidest, mida ta saab pärast vaatamist vaadatuks märkida. Valisime selle teema, kuna meil endal on ka olnud raskusi saadete järje pidamisega ja selle lahendamine veebirakenduse näol tundub mõttekas. Peale selle saavad veel kasutajad hinnata ja kommenteerida saateid ja episoode. Saadete kohta info saamiseks kasutame The TVDB API-d mis väljastab JSON-is infot saadete kohta (The TVDB API V2)

Must Have

  • Registreerimine, Sisse logimine
  • Saadete otsimine
  • Saadete info jälgimine
  • Vaadatud episoodide märkimine
  • Saadete, episoodide hindamine
  • Saadete, episoodide kommenteerimine
  • Kasutajate haldusrakendus

Nice to have

  • Kommentaaride moderaator
  • Imdb reitingud