|
|
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> |