Team Echo: Difference between revisions
From ICO wiki
Jump to navigationJump to search
Add pretty pictures |
|||
(20 intermediate revisions by 3 users not shown) | |||
Line 5: | Line 5: | ||
* Mari-Liis Oldja | * Mari-Liis Oldja | ||
* Arti Zirk | * Arti Zirk | ||
=Projekt= | |||
==Veebiteenuse analüüs== | |||
=== Kirjeldus === | |||
Team Echo on kooli videosalvestuste mahamängimise veebirakendus. Selle abil konverteeritakse olemasolevad flash videod mp4 formaati, et seda oleks hea ja mugav meie veebirakenduses maha mängida. Selle boonuseks on sujuv ja probleemivaba salvestuste vaatamine, ning vanade salvestuste kätte saamine kui tulevikus echo360 tarkvara uueneb. Salvestused on kategoriseeritud kooli ja aine alusel. Salvestuste vaatamiseks pole vaja kasutajat, kuigi redigeerimiseks/lisamiseks on vaja. | |||
==XML== | ====Must have==== | ||
< | |||
* Video konverteerimine | |||
* Kategoriseerimine EIK ainete alusel | |||
* Video striimimine meie veebiliides | |||
* Videode lisamine / eemaldamine | |||
* Logi kirjete kogumine | |||
* mp4 exportimine | |||
====Nice to have==== | |||
* Timestamp ja nende avalik kommenteerimine salvestusele | |||
* Konveteerimise progress | |||
* Kategoriseerimine Kooli ja aine alusel | |||
* Kooli kasutajaga sisselogimine | |||
* Videote otsing aine/õppejõu alusel | |||
* Saab vaadata playlist alusel | |||
====Joonised==== | |||
[[File:Echo360teenustejoonis.jpg|500px|]] | |||
[[File:Echo360erdversion1.png|1000px|]] | |||
=XML= | |||
<div class="mw-collapsible mw-collapsed" id="mw-customtoggle-xmlThings" style="float:left"> | |||
=== 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. | |||
<source lang="xml"> | |||
<?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> | |||
</source> | |||
==XSLT XML== | ==XSLT XML== | ||
< | <source lang="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> | |||
</source> | |||
==XSLT HTML== | ==XSLT HTML== | ||
<pre> | <pre> | ||
<nowiki> | |||
<?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> | |||
</nowiki> | |||
</pre> | </pre> | ||
[[File:Echoxmlxstlhtml.png|320px]] | |||
==XSD== | ==XSD== | ||
< | <source lang="xml"> | ||
<?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> | |||
</source> | |||
</div> |
Latest revision as of 20:54, 16 April 2017
Team Echo Võrgurakendused II
- Mihkel Vajak
- Janno Oolo
- Mari-Liis Oldja
- Arti Zirk
Projekt
Veebiteenuse analüüs
Kirjeldus
Team Echo on kooli videosalvestuste mahamängimise veebirakendus. Selle abil konverteeritakse olemasolevad flash videod mp4 formaati, et seda oleks hea ja mugav meie veebirakenduses maha mängida. Selle boonuseks on sujuv ja probleemivaba salvestuste vaatamine, ning vanade salvestuste kätte saamine kui tulevikus echo360 tarkvara uueneb. Salvestused on kategoriseeritud kooli ja aine alusel. Salvestuste vaatamiseks pole vaja kasutajat, kuigi redigeerimiseks/lisamiseks on vaja.
Must have
- Video konverteerimine
- Kategoriseerimine EIK ainete alusel
- Video striimimine meie veebiliides
- Videode lisamine / eemaldamine
- Logi kirjete kogumine
- mp4 exportimine
Nice to have
- Timestamp ja nende avalik kommenteerimine salvestusele
- Konveteerimise progress
- Kategoriseerimine Kooli ja aine alusel
- Kooli kasutajaga sisselogimine
- Videote otsing aine/õppejõu alusel
- Saab vaadata playlist alusel
Joonised
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>