VRFeeds

From ICO wiki
Jump to navigationJump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

Tiimi liige

  • Tarmo Sillajõe

Kasutatavad tehnoloogiad

Täiendatakse jooksvalt

XML

Rakenduse kirjeldus

Eesmärgiks luua RSS voogude haldusteenus:

  • kasutaja saab teenuses RSS vooge lisada ja kustudada
  • kasutaja saab pärida talle huvipakkuvate voogude viimaseid uudiseid
  • luua võimalus ühele kasutajale (või erinevatele kasutajagruppidele) maksimumpäringute hulga määramiseks
  • kasutaja saab RSS vooge vaadata eraldi või grupeeritult
  • vooge peab puhverdama, kuna voogude lugemine võtab enamasti üsna palju aega

XML/XSD/XSLT

XML

<?xml version="1.0" encoding="utf-8" ?>
<subscriptions>
  <feed_categories>
    <feed_category>technology</feed_category>
    <feed_category>sports</feed_category>
    <feed_category>politics</feed_category>
    <feed_category>economy</feed_category>
    <feed_category>entertainment</feed_category>
    <feed_category>local</feed_category>
    <feed_category>educational</feed_category>
  </feed_categories>

  <user id="1">
    <user-name><![CDATA[jaan.fiktiivne@itcollege.ee]]></user-name>
    <group_id><![CDATA[student]]></group_id>
    <feeds max_number="6">
      <feed id="1" active="yes">
        <feed_category>local</feed_category>
        <feed_category>politics</feed_category>
        <feed_description><![CDATA[Postimees]]></feed_description>
        <feed_url>http://www.postimees.ee/rss/</feed_url>
        <no_of_episodes>10</no_of_episodes>
      </feed>
      <feed id="2" active="yes">
        <feed_category>technology</feed_category>
        <feed_description><![CDATA[Digitund]]></feed_description>
        <feed_url>http://raadio1.ee/digitund/feed/</feed_url>
        <no_of_episodes>10</no_of_episodes>
      </feed>
      <feed id="3" active="yes">
        <feed_category>economy</feed_category>
        <feed_description><![CDATA[Bloomberg]]></feed_description>
        <feed_url>http://www.newslookup.com/rss/business/bloomberg.rss</feed_url>
        <no_of_episodes>10</no_of_episodes>
      </feed>
    </feeds>
  </user>

  <user id="2">
    <user-name><![CDATA[jyri@mingimail.ee]]></user-name>
    <group_id><![CDATA[child]]></group_id>
    <feeds max_number="6">
      <feed id="1" active="yes">
        <feed_category>educational</feed_category>
        <feed_category>entertainment</feed_category>
        <feed_description><![CDATA[Educational Documentaries]]></feed_description>
        <feed_url>https://www.youtube.com/channel/UCLvs-IJf0B2T2v8hzy2zhEg</feed_url>
        <no_of_episodes>10</no_of_episodes>      
      </feed>     
    </feeds>
  </user>

  <user id="3">
    <user-name><![CDATA[mari@mingimail.ee]]></user-name>
    <group_id><![CDATA[student]]></group_id>
    <feeds max_number="6">
      <feed id="1" active="yes">
        <feed_category>educational</feed_category>
        <feed_category>technology</feed_category>
        <feed_category>entertainment</feed_category>
        <feed_description><![CDATA[Air Crash Investigation]]></feed_description>
        <feed_url>https://www.youtube.com/channel/UCIsX1NI5W05MU0eKlhVwm8g</feed_url>
        <no_of_episodes>10</no_of_episodes>
      </feed>     
    </feeds>
  </user>
 
</subscriptions>

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="subscriptions">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="feed_categories">
          <xs:complexType>
            <xs:sequence>
              <xs:element maxOccurs="40" name="feed_category" type="xs:string" />
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element maxOccurs="unbounded" name="user">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="user-name" type="xs:string" />
              <xs:element name="group_id" type="xs:string" />
              <xs:element name="feeds">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element maxOccurs="unbounded" name="feed">
                      <xs:complexType>
                        <xs:sequence>
                          <xs:element maxOccurs="unbounded" name="feed_category" type="xs:string" />
                          <xs:element name="feed_description" type="xs:string" />
                          <xs:element name="feed_url" type="xs:string" />
                          <xs:element name="no_of_episodes" type="xs:unsignedByte" />
                        </xs:sequence>
                        <xs:attribute name="id" type="xs:unsignedByte" use="required" />
                        <xs:attribute name="active" type="xs:string" use="required" />
                      </xs:complexType>
                    </xs:element>
                  </xs:sequence>
                  <xs:attribute name="max_number" type="xs:unsignedByte" use="required" />
                </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:schema>

XSLT

Näitame kõiki kasutajaid ja nende tellimusi.

<?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="/">

    <xsl:param name="filter">""</xsl:param>

    <html>
      <head>
        <title>Kõik kasutajad</title>
      </head>
      <body>
        <p>
          <h3>
            <xsl:for-each select="/subscriptions/user">
              <!-- valime järjest tsüklis kõik ROOM elemendid -->

              id: <xsl:value-of select="@id"/>; <br/>
              user-name: <xsl:value-of select="user-name"/>; <br/>
              group: <xsl:value-of select="group_id"/>; <br/>
              max number of feeds allowed: <xsl:value-of select="feeds/@max_number"/>
              <table border="1">

                <tr>
                  <th>
                    description
                  </th>
                  <th>
                    url
                  </th>
                  <th>
                    feed_category
                  </th>
                </tr>

                <xsl:for-each select="feeds/feed">

                  <tr>
                    
                    <td valign="top">
                      <xsl:value-of select="feed_description"/>
                    </td>
                    
                    <td valign="top">
                      <xsl:value-of select="feed_url"/>
                    </td>
                    
                    <td >
                      <xsl:for-each select="feed_category">
                        <li>
                          <xsl:value-of select="."/>
                       </li>
                      </xsl:for-each>
                    </td>

                  </tr>
                </xsl:for-each >

              </table>
              <br></br>
              <br></br>

            </xsl:for-each>
          </h3>
        </p>
      </body>
    </html>
  </xsl:template>
</xsl:stylesheet>

Näitame kasutajaid, kes on omale tellinud tehnoloogiateemalised vood

<?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="/">

    <xsl:param name="search_category">technology</xsl:param>

    <html>
      <head>
        <title>valitud kasutajad</title>
      </head>

      <body>
        <xsl:for-each select="/subscriptions/user">
          <xsl:variable name="outer" select="."></xsl:variable>
          <xsl:for-each select="feeds/feed/feed_category">
            <xsl:if test=".=$search_category">
              <h3>
                <xsl:value-of select="$outer/user-name"/>
              </h3>
            </xsl:if>

          </xsl:for-each>

        </xsl:for-each>
      </body>
    </html>
  </xsl:template>
</xsl:stylesheet>

Leiame, kui palju on igal kasutajal aktiivseid voogude tellimusi.

<?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="/">

    <xsl:param name="search_category">technology</xsl:param>

    <html>
      <head>
        <title>feedide arv kasutaja kohta</title>
      </head>

      <body>
        <h3>
          <xsl:for-each select="/subscriptions/user">
            Kasutajal <xsl:value-of select="./user-name"/> on aktiivseid feed'isid: <xsl:value-of select="count(feeds/feed[@active='yes'])" />
            <br></br>
          </xsl:for-each>
        </h3>
      </body>
    </html>
  </xsl:template>
</xsl:stylesheet>

Logi

  • 03-04 XML'i, skeemifaili ja transformatsioonide loomine.
  • 09-04 XMLi osa retsensioonide lisamine.