Team Echo

From ICO wiki
Jump to navigationJump to search

Team Echo Võrgurakendused II

  • Mihkel Vajak
  • Janno Oolo
  • Mari-Liis Oldja
  • Arti Zirk
  • Joosep Voolma

Veebiteenuse analüüs

Kirjeldus

XML

Miks ei leia siit xml failist CDATA kirjeid?

Sest, CDATA ei anna midagi juurde xml masin lugemisele. Sama hästi võiks problemaatilised märgid asendada vajalike paomärkidega mis oleks ka palju turvalisem.

  <?xml version="1.0" encoding="utf-8" ?>
  <?xml-stylesheet type="text/xsl" href="Echo-html.xslt"?>
  <echo>
    <videos>
      <video id="1" view-count="69" author-id="1">
        <title>Mihkli rännak</title>
        <streams>
          <stream type="primary">
            <stream-url mime-type="video/webm">https://u.wut.ee/ookutsu.webm</stream-url>
            <stream-url mime-type="audio/mp3">https://media/id/audio.mp3</stream-url>
            <stream-url mime-type="video/mp4">https://media/id/video.mp4</stream-url>
          </stream>
          <stream type="secondary">
            <stream-url mime-type="audio/*">https://media/id/audio2</stream-url>
          </stream>
        </streams>
        <metadata>
          <description>
            Väga kurb
          </description>
        </metadata>
        <comments>
          <comment author-id="1" post-timestamp="1489683470">
            Norm värk
          </comment>
        </comments>
      </video>
      <video id="2" view-count="69" author-id="2">
        <title>Lahe video</title>
        <streams>
          <stream type="primary">
            <stream-url mime-type="video/webm">https://u.wut.ee/youfuckedup.webm</stream-url>
            <stream-url mime-type="audio/mp3">https://media/id/audio.mp3</stream-url>
            <stream-url mime-type="video/mp4">https://media/id/video.mp4</stream-url>
          </stream>
          <stream type="secondary">
            <stream-url mime-type="audio/*">https://media/id/audio2</stream-url>
          </stream>
        </streams>
        <metadata>
          <description>
            See on väga äge video on see
          </description>
        </metadata>
        <comments>
          <comment author-id="1" post-timestamp="1489683470">
            Norm värk
          </comment>
          <comment author-id="2" post-timestamp="1489683470">
            Norm värk 2
          </comment>
        </comments>
      </video>

      <video id="3" view-count="69" author-id="3">
        <title>Nalja kah</title>
        <streams>
          <stream type="primary">
            <stream-url mime-type="video/webm">https://u.wut.ee/perlvspython.webm</stream-url>
            <stream-url mime-type="audio/mp3">https://media/id/audio.mp3</stream-url>
            <stream-url mime-type="video/mp4">https://media/id/video.mp4</stream-url>
          </stream>
          <stream type="secondary">
            <stream-url mime-type="audio/*">https://media/id/audio2</stream-url>
          </stream>
        </streams>
        <metadata>
          <description>
            Väga hea huumor
          </description>
        </metadata>
        <comments>
          <comment author-id="1" post-timestamp="1489683470">
            Norm värk
          </comment>
        </comments>
      </video>

      <video id="4" view-count="69" author-id="1">
        <title>Arti areng</title>
        <streams>
          <stream type="primary">
            <stream-url mime-type="video/webm">https://u.wut.ee/sittmissitt.webm</stream-url>
            <stream-url mime-type="audio/mp3">https://media/id/audio.mp3</stream-url>
            <stream-url mime-type="video/mp4">https://media/id/video.mp4</stream-url>
          </stream>
          <stream type="secondary">
            <stream-url mime-type="audio/*">https://media/id/audio2</stream-url>
          </stream>
        </streams>
        <metadata>
          <description>
            Väga kurb
          </description>
        </metadata>
        <comments>
          <comment author-id="1" post-timestamp="1489683470">
            Imelik oli
          </comment>
        </comments>
      </video>

      <video id="4" view-count="69" author-id="4">
        <title>Oldja laulud</title>
        <streams>
          <stream type="primary">
            <stream-url mime-type="video/webm">https://u.wut.ee/healtscare.webm</stream-url>
            <stream-url mime-type="audio/mp3">https://media/id/audio.mp3</stream-url>
            <stream-url mime-type="video/mp4">https://media/id/video.mp4</stream-url>
          </stream>
          <stream type="secondary">
            <stream-url mime-type="audio/*">https://media/id/audio2</stream-url>
          </stream>
        </streams>
        <metadata>
          <description>
            Draama Queen
          </description>
        </metadata>
        <comments>
          <comment author-id="1" post-timestamp="1489683420">
            Norm värk
          </comment>
        </comments>
      </video>

      <video id="4" view-count="69" author-id="5">
        <title>Osa 13 ehk Oolo kadumine</title>
        <streams>
          <stream type="primary">
            <stream-url mime-type="video/webm">https://u.wut.ee/healtscare.webm</stream-url>
            <stream-url mime-type="audio/mp3">https://media/id/audio.mp3</stream-url>
            <stream-url mime-type="video/mp4">https://media/id/video.mp4</stream-url>
          </stream>
          <stream type="secondary">
            <stream-url mime-type="audio/*">https://media/id/audio2</stream-url>
          </stream>
        </streams>
        <metadata>
          <description>
            Lihtsalt kadus ära
          </description>
        </metadata>
        <comments>
          <comment author-id="1" post-timestamp="1489683470">
            Norm värk
          </comment>
        </comments>
      </video>

    </videos>
    <users>
      <user id="1">
        <username>admin</username>
        <full-name>Admin</full-name>
      </user>
      <user id="2">
        <username>oolo</username>
        <full-name>Oolo</full-name>
      </user>
      <user id="3">
        <username>zirk</username>
        <full-name>Hr. Zirk</full-name>
      </user>
    </users>
    <lists>
      <list owner-id="1">
        <video id="1" timestamp-added="1489684373"></video>
        <video id="3" timestamp-added="1489684379"></video>
      </list>
    </lists>
  </echo>

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:template match="/">
      <videos>
        <xsl:for-each select="echo/videos/video">
          <video>
            <xsl:variable name="author-id" select="@author-id"/>
            <title>
              <xsl:value-of select="title"/>
            </title>
            <xsl:copy-of select="streams/stream[@type='primary']" />
            <autor>
              <xsl:copy-of select="/echo/users/user[@id=$author-id]" />
            </autor>
            <description>
              <xsl:value-of select="metadata/description"/>
            </description>
            <comments>
              <xsl:for-each select="comments/comment">
                <xsl:variable name="comment-author-id" select="@author-id"/>
                <comment>
                  <text>
                    <xsl:value-of select="." />
                  </text>
                  <xsl:copy-of select="/echo/users/user[@id=$comment-author-id]/username" />
                  <xsl:copy-of select="/echo/users/user[@id=$comment-author-id]/full-name" />
                </comment>
              </xsl:for-each>
            </comments>
          </video>
        </xsl:for-each>
      </videos>
    </xsl:template>
  </xsl:stylesheet>


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">
    <xsl:output method="html" indent="yes"/>

    <xsl:template match="/">
      <html>
        <title>Media Kogumik</title>
        <link rel="stylesheet" type="text/css" href="https://d.arti.ee/media.css"/>
        <xsl:for-each select="echo/videos/video">
          <div>
            <xsl:variable name="author-id" select="@author-id"/>
            <h3>
              <xsl:value-of select="title"/>
            </h3>
            <h4>
              <xsl:value-of select="/echo/users/user[@id=$author-id]/full-name" />
            </h4>
            <video controls="" loop="">
              <xsl:for-each select="streams/stream[@type='primary']">
                <xsl:for-each select="stream-url">
                  <source>
                    <xsl:attribute name="type">
                      <xsl:value-of select="@mime-type"/>
                    </xsl:attribute>
                    <xsl:attribute name="src">
                      <xsl:value-of select="."/>
                    </xsl:attribute>
                  </source>
                </xsl:for-each>
              </xsl:for-each>
            </video>
            <p>
              <xsl:value-of select="metadata/description"/>
            </p>
            <div>
              <h4>Komentaarid:</h4>
              <ol>
                <xsl:for-each select="comments/comment">
                  <li>
                    <xsl:variable name="comment-author-id" select="@author-id"/>
                    <div>
                      <xsl:value-of select="." />
                    </div>
                    <div>
                      <b>Autor:</b>
                      <xsl:value-of select="/echo/users/user[@id=$comment-author-id]/full-name" />
                    </div>
                  </li>
                </xsl:for-each>
              </ol>
            </div>
          </div>
          <hr/>
        </xsl:for-each>
      </html>
    </xsl:template>
  </xsl:stylesheet>

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="echo">
      <xs:complexType>
        <xs:sequence>
          <xs:element name="videos">
            <xs:complexType>
              <xs:sequence>
                <xs:element maxOccurs="unbounded" name="video">
                  <xs:complexType>
                    <xs:sequence>
                      <xs:element name="title" type="xs:string" />
                      <xs:element name="streams">
                        <xs:complexType>
                          <xs:sequence>
                            <xs:element maxOccurs="unbounded" name="stream">
                              <xs:complexType>
                                <xs:sequence>
                                  <xs:element maxOccurs="unbounded" name="stream-url">
                                    <xs:complexType>
                                      <xs:simpleContent>
                                        <xs:extension base="xs:string">
                                          <xs:attribute name="mime-type" type="xs:string" use="required" />
                                        </xs:extension>
                                      </xs:simpleContent>
                                    </xs:complexType>
                                  </xs:element>
                                </xs:sequence>
                                <xs:attribute name="type" type="xs:string" use="required" />
                              </xs:complexType>
                            </xs:element>
                          </xs:sequence>
                        </xs:complexType>
                      </xs:element>
                      <xs:element name="metadata">
                        <xs:complexType>
                          <xs:sequence>
                            <xs:element name="description" type="xs:string" />
                          </xs:sequence>
                        </xs:complexType>
                      </xs:element>
                      <xs:element name="comments">
                        <xs:complexType>
                          <xs:sequence>
                            <xs:element maxOccurs="unbounded" name="comment">
                              <xs:complexType>
                                <xs:simpleContent>
                                  <xs:extension base="xs:string">
                                    <xs:attribute name="author-id" type="xs:unsignedInt" use="required" />
                                    <xs:attribute name="post-timestamp" type="xs:unsignedInt" use="required" />
                                  </xs:extension>
                                </xs:simpleContent>
                              </xs:complexType>
                            </xs:element>
                          </xs:sequence>
                        </xs:complexType>
                      </xs:element>
                    </xs:sequence>
                    <xs:attribute name="id" type="xs:unsignedInt" use="required" />
                    <xs:attribute name="view-count" type="xs:unsignedInt" use="required" />
                    <xs:attribute name="author-id" type="xs:unsignedInt" use="required" />
                  </xs:complexType>
                </xs:element>
              </xs:sequence>
            </xs:complexType>
          </xs:element>
          <xs:element name="users">
            <xs:complexType>
              <xs:sequence>
                <xs:element maxOccurs="unbounded" name="user">
                  <xs:complexType>
                    <xs:sequence>
                      <xs:element name="username" type="xs:string" />
                      <xs:element name="full-name" type="xs:string" />
                    </xs:sequence>
                    <xs:attribute name="id" type="xs:unsignedInt" use="required" />
                  </xs:complexType>
                </xs:element>
              </xs:sequence>
            </xs:complexType>
          </xs:element>
          <xs:element name="lists">
            <xs:complexType>
              <xs:sequence>
                <xs:element name="list">
                  <xs:complexType>
                    <xs:sequence>
                      <xs:element maxOccurs="unbounded" name="video">
                        <xs:complexType>
                          <xs:attribute name="id" type="xs:unsignedInt" use="required" />
                          <xs:attribute name="timestamp-added" type="xs:unsignedInt" use="required" />
                        </xs:complexType>
                      </xs:element>
                    </xs:sequence>
                    <xs:attribute name="owner-id" type="xs:unsignedInt" use="required" />
                  </xs:complexType>
                </xs:element>
              </xs:sequence>
            </xs:complexType>
          </xs:element>
        </xs:sequence>
      </xs:complexType>
    </xs:element>
  </xs:schema>