|
|
Line 56: |
Line 56: |
| </Users> | | </Users> |
| </Main> | | </Main> |
| </source>
| |
|
| |
|
| |
| === XSD fail ===
| |
| <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="Main">
| |
| <xs:complexType>
| |
| <xs:sequence>
| |
| <xs:element name="Posts">
| |
| <xs:complexType>
| |
| <xs:sequence>
| |
| <xs:element maxOccurs="unbounded" name="Post">
| |
| <xs:complexType>
| |
| <xs:sequence>
| |
| <xs:element name="Content" type="xs:string" />
| |
| <xs:element name="Comments">
| |
| <xs:complexType>
| |
| <xs:sequence>
| |
| <xs:element maxOccurs="unbounded" name="Comment">
| |
| <xs:complexType>
| |
| <xs:sequence>
| |
| <xs:element name="Content" type="xs:string" />
| |
| </xs:sequence>
| |
| <xs:attribute name="UserId" type="xs:unsignedInt" use="required" />
| |
| <xs:attribute name="Date" type="xs:dateTime" use="required" />
| |
| <xs:attribute name="Title" type="xs:string" use="required" />
| |
| </xs:complexType>
| |
| </xs:element>
| |
| </xs:sequence>
| |
| </xs:complexType>
| |
| </xs:element>
| |
| </xs:sequence>
| |
| <xs:attribute name="PostId" type="xs:unsignedInt" use="required" />
| |
| <xs:attribute name="UserId" type="xs:unsignedInt" use="required" />
| |
| <xs:attribute name="Date" type="xs:dateTime" use="required" />
| |
| <xs:attribute name="Title" type="xs:string" 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="Description" type="xs:string" />
| |
| </xs:sequence>
| |
| <xs:attribute name="UserId" type="xs:unsignedInt" use="required" />
| |
| <xs:attribute name="Username" type="xs:string" use="required" />
| |
| <xs:attribute name="Firstname" type="xs:string" use="required" />
| |
| <xs:attribute name="Surname" type="xs:string" use="required" />
| |
| <xs:attribute name="Email" type="xs:string" use="required" />
| |
| </xs:complexType>
| |
| </xs:element>
| |
| </xs:sequence>
| |
| </xs:complexType>
| |
| </xs:element>
| |
| </xs:sequence>
| |
| </xs:complexType>
| |
| </xs:element>
| |
| </xs:schema>
| |
| </source>
| |
|
| |
| ===1. XSLT - Posts===
| |
| <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="html" indent="yes"/>
| |
|
| |
| <xsl:template name="formatDate">
| |
| <xsl:param name="dateTime" />
| |
| <xsl:variable name="date" select="substring-before($dateTime, 'T')" />
| |
| <xsl:variable name="year" select="substring-before($date, '-')" />
| |
| <xsl:variable name="month" select="substring-before(substring-after($date, '-'), '-')" />
| |
| <xsl:variable name="day" select="substring-after(substring-after($date, '-'), '-')" />
| |
| <xsl:value-of select="concat($day, '.', $month, '.', $year)" />
| |
| </xsl:template>
| |
|
| |
| <xsl:template match="/">
| |
| <html>
| |
| <body>
| |
| <h1>Blog posts!</h1>
| |
| <xsl:for-each select="/Main/Posts/Post">
| |
| <h2>
| |
| <xsl:value-of select="@Title"/> (
| |
| <xsl:call-template name="formatDate">
| |
| <xsl:with-param name="dateTime" select="@Date" />
| |
| </xsl:call-template>
| |
| )
| |
| </h2>
| |
| <p>
| |
| <xsl:value-of select="Content"/>
| |
| </p>
| |
|
| |
| <h3>Comments</h3>
| |
| <ol>
| |
| <xsl:for-each select="Comments/Comment">
| |
| <li>
| |
| <b>
| |
| <xsl:value-of select="@Title"/>
| |
| </b>
| |
| (
| |
| <xsl:call-template name="formatDate">
| |
| <xsl:with-param name="dateTime" select="@Date" />
| |
| </xsl:call-template>
| |
| )
| |
| <p>
| |
| <xsl:value-of select="Content"/>
| |
| </p>
| |
| </li>
| |
| <!--Ends comments list-->
| |
| </xsl:for-each>
| |
| </ol>
| |
| <!--Ends posts list-->
| |
| </xsl:for-each>
| |
| <hr></hr>
| |
| <h2>
| |
| <u>Comments from user IronMan</u>
| |
| </h2>
| |
| <ol>
| |
| <xsl:for-each select="/Main/Posts/Post/Comments/Comment">
| |
| <xsl:if test="@UserId = 3">
| |
| <li>
| |
| <xsl:value-of select="@Title"/>
| |
| (
| |
| <xsl:call-template name="formatDate">
| |
| <xsl:with-param name="dateTime" select="@Date" />
| |
| </xsl:call-template>
| |
| )
| |
| <br></br>
| |
| <xsl:value-of select="Content"/>
| |
| </li>
| |
| </xsl:if>
| |
| </xsl:for-each>
| |
| </ol>
| |
|
| |
| <hr></hr>
| |
| <h2>
| |
| <u>Showing all posts with comments,<br></br>
| |
| where day of week of published comment is less than 15, and sorted in descending order</u>
| |
| </h2>
| |
| <xsl:for-each select="/Main/Posts/Post">
| |
| <xsl:for-each select="Comments/Comment">
| |
| <xsl:sort select="@Date" order="descending"/>
| |
|
| |
| <xsl:variable name="date" select="substring-before(@Date, 'T')" />
| |
| <xsl:variable name="day" select="substring-after(substring-after($date, '-'), '-')" />
| |
|
| |
| <xsl:if test="$day < 15">
| |
| <h2>
| |
| <xsl:value-of select="@Title"/>
| |
| (
| |
| <xsl:call-template name="formatDate">
| |
| <xsl:with-param name="dateTime" select="@Date" />
| |
| </xsl:call-template>
| |
| )
| |
| </h2>
| |
| <p>
| |
| <xsl:value-of select="Content"/>
| |
| </p>
| |
|
| |
| <h3>Comments</h3>
| |
| <ol>
| |
| <li>
| |
| <b>
| |
| <xsl:value-of select="@Title"/>
| |
| </b>
| |
| (
| |
| <xsl:call-template name="formatDate">
| |
| <xsl:with-param name="dateTime" select="@Date" />
| |
| </xsl:call-template>
| |
| )
| |
| <p>
| |
| <xsl:value-of select="Content"/>
| |
| </p>
| |
| </li>
| |
| </ol>
| |
| </xsl:if>
| |
| </xsl:for-each>
| |
| </xsl:for-each>
| |
| </body>
| |
| </html>
| |
| </xsl:template>
| |
| </xsl:stylesheet>
| |
|
| |
| </source>
| |
|
| |
| ===2. XSLT - Users===
| |
| <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="html" indent="yes"/>
| |
|
| |
| <xsl:template match="/">
| |
| <html>
| |
| <body>
| |
| <h1>Blog Users!</h1>
| |
| <xsl:for-each select="/Main/Users/User">
| |
| <h2>
| |
| Username: <xsl:value-of select="@Username"/>
| |
| </h2>
| |
| <ul>
| |
| <li>
| |
| Firstname: <xsl:value-of select="@Firstname"/>
| |
| </li>
| |
| <li>
| |
| Surname: <xsl:value-of select="@Surname"/>
| |
| </li>
| |
| <li>
| |
| Email: <xsl:value-of select="@Email"/>
| |
| </li>
| |
| <li>
| |
| Description: <xsl:value-of select="Description"/>
| |
| </li>
| |
| </ul>
| |
| </xsl:for-each>
| |
| </body>
| |
| </html>
| |
| </xsl:template>
| |
| </xsl:stylesheet>
| |
|
| |
| </source>
| |
|
| |
| ===Tulemus===
| |
| <source lang="xml">
| |
| <?xml version="1.0" encoding="utf-8"?>
| |
| <Users>
| |
| <User>
| |
| <Username>IronMan</Username>
| |
| <Firstname>Mitch</Firstname>
| |
| <Surname>Rapp</Surname>
| |
| <Email>eyeinthemiddleeast@hotmail.com</Email>
| |
| <Description>I have been, where few American men have been.</Description>
| |
| </User>
| |
| </Users>
| |
| </source> | | </source> |
Meeskond
- Hando Laasmägi
- Tarvo Tammejuur
- Cathy Toomast
- Tõnn Vaher
XML fail
<?xml version="1.0" encoding="utf-8" ?>
<Main>
<Posts>
<Post PostId="1" UserId="1" Date="2015-01-13T07:25:15" Title="My trip to Norway">
<Content><![CDATA[Blog post content.]]></Content>
<Comments>
<Comment UserId="2" Date="2015-01-14T13:55:33" Title="I am so envious!!!">
<Content><![CDATA[I wish i had the time to do those cool things]]></Content>
</Comment>
<Comment UserId="3" Date="2015-02-11T19:24:22" Title="Prr... So cold out there">
<Content><![CDATA[I don't know how you managed to stay alive there...]]></Content>
</Comment>
</Comments>
</Post>
<Post PostId="2" UserId="1" Date="2016-03-14T10:24:12" Title="My summer in Romania">
<Content><![CDATA[Blog post content..]]></Content>
<Comments>
<Comment UserId="3" Date="2017-03-14T11:21:34" Title="Home of Dracula?!">
<Content><![CDATA[So did you meat the charming beast out in the mountains?]]></Content>
</Comment>
<Comment UserId="2" Date="2017-03-15T12:56:11" Title="Do they use Euros there?">
<Content><![CDATA[Do they have their own money or are they using Euros?]]></Content>
</Comment>
<Comment UserId="3" Date="2017-03-16T19:22:54" Title="Why u so poor?">
<Content><![CDATA[Romania is for people who can't afford Greece?!]]></Content>
</Comment>
</Comments>
</Post>
<Post PostId="3" UserId="2" Date="2017-03-16T11:33:55" Title="Our love in Berlin">
<Content><![CDATA[Blog post content.]]></Content>
<Comments>
<Comment UserId="1" Date="2017-03-19T16:23:12" Title="Such love, such lies...">
<Content><![CDATA[I know all your secrets and all about Mark]]></Content>
</Comment>
</Comments>
</Post>
</Posts>
<Users>
<User UserId="1" Username="Hunter241" Firstname="Thomas" Surname="Stansfield" Email="tommy.stansfield@gmail.com">
<Description><![CDATA[I am a tough old man standing out for my country]]></Description>
</User>
<User UserId="2" Username="ToughChick53" Firstname="Irene" Surname="Kennedy" Email="irene@cia.gov">
<Description><![CDATA[Recently I have been feeling a little down because of the death of my mentor and all those attacks against me.]]></Description>
</User>
<User UserId="3" Username="IronMan" Firstname="Mitch" Surname="Rapp" Email="eyeinthemiddleeast@hotmail.com">
<Description><![CDATA[I have been, where few American men have been.]]></Description>
</User>
</Users>
</Main>