﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<xsl:stylesheet version="1.0" rdf:dummy-for-xmlns="" rss:dummy-for-xmlns="" dc:dummy-for-xmlns="" admin:dummy-for-xmlns="" blogChannel:dummy-for-xmlns="" xs:dummy-for-xmlns="" sy:dummy-for-xmlns="" content:dummy-for-xmlns="" xhtml:dummy-for-xmlns="" creativeCommons:dummy-for-xmlns="" rss09:dummy-for-xmlns="" trackback:dummy-for-xmlns="" wfw:dummy-for-xmlns="" slash:dummy-for-xmlns="" atom:dummy-for-xmlns="" dcterms:dummy-for-xmlns="" ent:dummy-for-xmlns="" l:dummy-for-xmlns="" rdfs:dummy-for-xmlns="" foaf:dummy-for-xmlns="" xmlns:foaf="http://xmlns.com/foaf/0.1/" xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" xmlns:l="http://purl.org/rss/1.0/modules/link/" xmlns:ent="http://www.purl.org/NET/ENT/1.0/" xmlns:dcterms="http://purl.org/dc/terms/" xmlns:atom="http://purl.org/atom/ns#" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:rss09="http://my.netscape.com/rdf/simple/0.9/" xmlns:creativeCommons="http://backend.userland.com/creativeCommonsRssModule" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:blogChannel="http://backend.userland.com/blogChannelModule" xmlns:admin="http://webns.net/mvcb/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rss="http://purl.org/rss/1.0/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:sch="http://www.ascc.net/xml/schematron" xmlns:rsv="http://www.kbcafe.com/rsv">
  <xsl:output method="xml" omit-xml-declaration="no" standalone="yes" indent="yes" />
  <xsl:template match="*|@*" mode="schematron-get-full-path">
    <xsl:apply-templates select="parent::*" mode="schematron-get-full-path" />
    <xsl:text>/</xsl:text>
    <xsl:if test="count(. | ../@*) = count(../@*)">@</xsl:if>
    <xsl:value-of select="name()" />
    <xsl:text>[</xsl:text>
    <xsl:value-of select="1+count(preceding-sibling::*[name()=name(current())])" />
    <xsl:text>]</xsl:text>
  </xsl:template>
  <xsl:template match="/">
    <xsl:processing-instruction name="xml-stylesheet">type="text/xsl" href="rsv.xslt"</xsl:processing-instruction>
    <rsv:rsv>
      <xsl:apply-templates select="/" mode="M22" />
      <xsl:apply-templates select="/" mode="M23" />
      <xsl:apply-templates select="/" mode="M24" />
      <xsl:apply-templates select="/" mode="M25" />
      <xsl:apply-templates select="/" mode="M26" />
      <xsl:apply-templates select="/" mode="M27" />
      <xsl:apply-templates select="/" mode="M28" />
      <xsl:apply-templates select="/" mode="M29" />
      <xsl:apply-templates select="/" mode="M30" />
      <xsl:apply-templates select="/" mode="M31" />
      <xsl:apply-templates select="/" mode="M32" />
      <xsl:apply-templates select="/" mode="M33" />
      <xsl:apply-templates select="/" mode="M34" />
      <xsl:apply-templates select="/" mode="M35" />
      <xsl:apply-templates select="/" mode="M36" />
      <xsl:apply-templates select="/" mode="M37" />
      <xsl:apply-templates select="/" mode="M38" />
      <xsl:apply-templates select="/" mode="M39" />
      <xsl:apply-templates select="/" mode="M40" />
      <xsl:apply-templates select="/" mode="M41" />
      <xsl:apply-templates select="/" mode="M42" />
      <xsl:apply-templates select="/" mode="M43" />
      <xsl:apply-templates select="/" mode="M44" />
      <xsl:apply-templates select="/" mode="M45" />
      <xsl:apply-templates select="/" mode="M46" />
      <xsl:apply-templates select="/" mode="M47" />
      <xsl:apply-templates select="/" mode="M48" />
      <xsl:apply-templates select="/" mode="M49" />
      <xsl:apply-templates select="/" mode="M50" />
      <xsl:apply-templates select="/" mode="M51" />
      <xsl:apply-templates select="/" mode="M52" />
    </rsv:rsv>
  </xsl:template>
  <xsl:template match="/*" priority="4000" mode="M22">
    <xsl:choose>
      <xsl:when test="/atom:feed or /rss or /rdf:RDF or /opml or /redirect" />
      <xsl:otherwise>
        <rsv:assert>Root element must be &lt;rss&gt; or &lt;rdf:RDF&gt; or &lt;opml&gt; or &lt;atom:feed&gt; or &lt;redirect&gt;. Root element is<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:apply-templates mode="M22" />
  </xsl:template>
  <xsl:template match="text()" priority="-1" mode="M22">
  </xsl:template>
  <xsl:template match="rdf:RDF|rdf:type|rdf:Bay|rdf:Seq|rdf:Alt|rdf:List|rdf:first|rdf:rest|rdf:nil|&#xD;&#xA;				rdf:Statement|rdf:subject|rdf:predicate|rdf:object|rdf:value|rdf:li" priority="4000" mode="M23">
    <xsl:apply-templates mode="M23" />
  </xsl:template>
  <xsl:template match="rdf:*" priority="3999" mode="M23">
    <xsl:choose>
      <xsl:when test="false" />
      <xsl:otherwise>
        <rsv:assert>&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; is not a valid rdf namespace element</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:apply-templates mode="M23" />
  </xsl:template>
  <xsl:template match="text()" priority="-1" mode="M23">
  </xsl:template>
  <xsl:template match="rdfs:Resource|rdfs:Class|rdfs:Literal|rdfs:Datatype|rdfs:XMLLiteral|rdfs:Property|&#xD;&#xA;				rdfs:range|rdfs:domain|rdfs:subClassOf|rdfs:subPropertyOf|rdfs:label|rdfs:comment|&#xD;&#xA;				rdfs:Container|rdfs:ContainerMembershipProperty|rdfs:member|rdfs:seeAlso|rdfs:isDefinedBy" priority="4000" mode="M24">
    <xsl:apply-templates mode="M24" />
  </xsl:template>
  <xsl:template match="rdfs:*" priority="3999" mode="M24">
    <xsl:choose>
      <xsl:when test="false" />
      <xsl:otherwise>
        <rsv:assert>&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; is not a valid rdfs namespace element</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:apply-templates mode="M24" />
  </xsl:template>
  <xsl:template match="text()" priority="-1" mode="M24">
  </xsl:template>
  <xsl:template match="rss:channel|rss:item" priority="4000" mode="M25">
    <xsl:choose>
      <xsl:when test="parent::rdf:RDF" />
      <xsl:otherwise>
        <rsv:assert see="http://web.resource.org/rss/1.0/spec">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have the &lt;rdf:RDF&gt; parent element. Parent is<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:apply-templates mode="M25" />
  </xsl:template>
  <xsl:template match="rss:items" priority="3999" mode="M25">
    <xsl:choose>
      <xsl:when test="parent::rss:channel" />
      <xsl:otherwise>
        <rsv:assert see="http://web.resource.org/rss/1.0/spec">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have the &lt;rss:channel&gt; parent element. Parent is<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:apply-templates mode="M25" />
  </xsl:template>
  <xsl:template match="rss:name" priority="3998" mode="M25">
    <xsl:choose>
      <xsl:when test="parent::rss:textinput" />
      <xsl:otherwise>
        <rsv:assert see="http://web.resource.org/rss/1.0/spec#s5.6.3">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have a the &lt;rss:textinput&gt; parent element. Parent is<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:apply-templates mode="M25" />
  </xsl:template>
  <xsl:template match="rss:textinput|rss:image" priority="3997" mode="M25">
    <xsl:choose>
      <xsl:when test="parent::rdf:RDF or parent::rss:channel" />
      <xsl:otherwise>
        <rsv:assert see="http://web.resource.org/rss/1.0/spec">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have the &lt;rdf:RDF&gt; or &lt;rss:channel&gt; parent element. Parent is<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:apply-templates mode="M25" />
  </xsl:template>
  <xsl:template match="rss:url" priority="3996" mode="M25">
    <xsl:choose>
      <xsl:when test="parent::rss:image" />
      <xsl:otherwise>
        <rsv:assert see="http://web.resource.org/rss/1.0/spec#s5.4.2">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have a the &lt;rss:image&gt; parent element. Parent is<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:apply-templates mode="M25" />
  </xsl:template>
  <xsl:template match="rss:description" priority="3995" mode="M25">
    <xsl:choose>
      <xsl:when test="parent::rss:channel or parent::rss:item or parent::rss:textinput" />
      <xsl:otherwise>
        <rsv:assert see="http://web.resource.org/rss/1.0/spec">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have a the &lt;rss:channel&gt;, &lt;rss:item&gt; or &lt;rss:textinput&gt; parent element. Parent is<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:apply-templates mode="M25" />
  </xsl:template>
  <xsl:template match="rss:link|rss:title" priority="3994" mode="M25">
    <xsl:choose>
      <xsl:when test="parent::rss:channel or parent::rss:image or parent::rss:item or parent::rss:textinput" />
      <xsl:otherwise>
        <rsv:assert see="http://web.resource.org/rss/1.0/spec">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have a the &lt;rss:channel&gt;, &lt;rss:image&gt;, &lt;rss:item&gt; or &lt;rss:textinput&gt; parent element. Parent is<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:apply-templates mode="M25" />
  </xsl:template>
  <xsl:template match="text()" priority="-1" mode="M25">
  </xsl:template>
  <xsl:template match="rdf:RDF" priority="4000" mode="M26">
    <xsl:if test="rss:*">
      <rsv:report see="http://web.resource.org/rss/1.0/">RSS version 1.0.</rsv:report>
    </xsl:if>
    <xsl:if test="rss09:*">
      <rsv:report see="http://www.purplepages.ie/RSS/netscape/rss0.90.html">RSS version 0.9. RSS version 0.9 is obsolete. You should upgrade to RSS version 2.0.</rsv:report>
    </xsl:if>
    <xsl:if test="string(normalize-space(text()))">
      <rsv:report>&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; should not have mixed text content.</rsv:report>
    </xsl:if>
    <xsl:choose>
      <xsl:when test="not(rss:*) or count(rss:channel)=1" />
      <xsl:otherwise>
        <rsv:assert see="http://web.resource.org/rss/1.0/spec#s5.2">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have exactly one &lt;rss:channel&gt; child element.<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="count(rss:channel|rss09:channel)" /><xsl:text xml:space="preserve"> </xsl:text>occurance(s) found.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="not(rss09:*) or count(rss09:channel)=1" />
      <xsl:otherwise>
        <rsv:assert see="http://web.resource.org/rss/1.0/spec#s5.2">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have exactly one &lt;rss:channel&gt; child element.<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="count(rss:channel|rss09:channel)" /><xsl:text xml:space="preserve"> </xsl:text>occurance(s) found.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="not(rss:*) or count(rss:item)&gt;0" />
      <xsl:otherwise>
        <rsv:assert see="http://web.resource.org/rss/1.0/spec#s5.2">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have at least one &lt;rss:item&gt; child element.<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="count(rss:item|rss09:item)" /><xsl:text xml:space="preserve"> </xsl:text>occurance(s) found.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="not(rss09:*) or count(rss09:item)&gt;0" />
      <xsl:otherwise>
        <rsv:assert see="http://web.resource.org/rss/1.0/spec#s5.2">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have at least one &lt;rss:item&gt; child element.<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="count(rss:item|rss09:item)" /><xsl:text xml:space="preserve"> </xsl:text>occurance(s) found.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="count(rss:image)&lt;2" />
      <xsl:otherwise>
        <rsv:assert see="http://web.resource.org/rss/1.0/spec#s5.2">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have zero or one &lt;rss:image&gt; child element.<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="count(rss:image)" /><xsl:text xml:space="preserve"> </xsl:text>occurance(s) found.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="count(rss:textinput)&lt;2" />
      <xsl:otherwise>
        <rsv:assert see="http://web.resource.org/rss/1.0/spec#s5.2">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have zero or one &lt;rss:textinput&gt; child element.<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="count(rss:textinput)" /><xsl:text xml:space="preserve"> </xsl:text>occurance(s) found.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:if test="count(rss:item)&gt;15">
      <rsv:report see="http://web.resource.org/rss/1.0/spec#s5.5">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; should have at most 15 &lt;rss:item&gt; child elements.<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="count(rss:item)" /><xsl:text xml:space="preserve"> </xsl:text>occurance(s) found.</rsv:report>
    </xsl:if>
    <xsl:choose>
      <xsl:when test="/rdf:RDF[generate-id(.)=generate-id(current())]" />
      <xsl:otherwise>
        <rsv:assert see="http://web.resource.org/rss/1.0/spec#s5.2">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must be the document root element.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:apply-templates mode="M26" />
  </xsl:template>
  <xsl:template match="rss:items/rdf:Seq" priority="3999" mode="M26">
    <xsl:if test="string(normalize-space(text()))">
      <rsv:report>&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; should not have mixed text content.</rsv:report>
    </xsl:if>
    <xsl:choose>
      <xsl:when test="count(rdf:li)&gt;0" />
      <xsl:otherwise>
        <rsv:assert see="http://web.resource.org/rss/1.0/spec#s5.3.5">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have at least one &lt;rdf:li&lt; child element.<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="count(rdf:li)" /><xsl:text xml:space="preserve"> </xsl:text>occurance(s) found.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:apply-templates mode="M26" />
  </xsl:template>
  <xsl:template match="rss:items/rdf:Seq/rdf:li" priority="3998" mode="M26">
    <xsl:choose>
      <xsl:when test="@rdf:resource" />
      <xsl:otherwise>
        <rsv:assert see="http://web.resource.org/rss/1.0/spec#s5.3.5">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have a rdf:resource attribute.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="not(@rdf:resource) or /rdf:RDF/rss:item[@rdf:about=current()/@rdf:resource]" />
      <xsl:otherwise>
        <rsv:assert see="http://web.resource.org/rss/1.0/spec#s5.3.5">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have a &lt;rss:item&gt; element whose rdf:about attribute value is equal to the &lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; attribute's rdf:resource attribute value.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:apply-templates mode="M26" />
  </xsl:template>
  <xsl:template match="rss:channel" priority="3997" mode="M26">
    <xsl:if test="string(normalize-space(text()))">
      <rsv:report>&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; should not have mixed text content.</rsv:report>
    </xsl:if>
    <xsl:choose>
      <xsl:when test="count(rss:title)=1" />
      <xsl:otherwise>
        <rsv:assert see="http://web.resource.org/rss/1.0/spec#s5.3">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have exactly one &lt;rss:title&gt; child element.<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="count(rss:title)" /><xsl:text xml:space="preserve"> </xsl:text>occurance(s) found.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="count(rss:link)=1" />
      <xsl:otherwise>
        <rsv:assert see="http://web.resource.org/rss/1.0/spec#s5.3">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have exactly one &lt;rss:link&gt; child element.<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="count(rss:link)" /><xsl:text xml:space="preserve"> </xsl:text>occurance(s) found.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="count(rss:description)=1" />
      <xsl:otherwise>
        <rsv:assert see="http://web.resource.org/rss/1.0/spec#s5.3">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have exactly one &lt;rss:description&gt; child element.<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="count(rss:description)" /><xsl:text xml:space="preserve"> </xsl:text>occurance(s) found.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="@rdf:about" />
      <xsl:otherwise>
        <rsv:assert see="http://web.resource.org/rss/1.0/spec#s5.3">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have a rdf:about attribute.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="count(rss:items)=1" />
      <xsl:otherwise>
        <rsv:assert see="http://web.resource.org/rss/1.0/spec#s5.3">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have exactly one &lt;rss:items&gt; child element.<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="count(rss:items)" /><xsl:text xml:space="preserve"> </xsl:text>occurance(s) found.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="count(rss:image)&lt;2" />
      <xsl:otherwise>
        <rsv:assert see="http://web.resource.org/rss/1.0/spec#s5.3">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have zero or one &lt;rss:image&gt; child element.<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="count(rss:image)" /><xsl:text xml:space="preserve"> </xsl:text>occurance(s) found.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="count(rss:textinput)&lt;2" />
      <xsl:otherwise>
        <rsv:assert see="http://web.resource.org/rss/1.0/spec#s5.3">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have zero or one &lt;rss:textinput&gt; child element.<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="count(rss:textinput)" /><xsl:text xml:space="preserve"> </xsl:text>occurance(s) found.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:if test="//@rdf:about[.=current()/@rdf:about and generate-id(.)!=generate-id(current()/@rdf:about)]">
      <rsv:report see="http://web.resource.org/rss/1.0/spec#s5.3">The value of a<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>rdf:about attribute must be unique Duplicate value<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="@rdf:about" /><xsl:text xml:space="preserve"> </xsl:text>found.</rsv:report>
    </xsl:if>
    <xsl:apply-templates mode="M26" />
  </xsl:template>
  <xsl:template match="rss:textinput/rss:description" priority="3996" mode="M26">
    <xsl:choose>
      <xsl:when test="count(child::*)=0" />
      <xsl:otherwise>
        <rsv:assert see="http://web.resource.org/rss/1.0/spec#s5.6.2">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must not contain child elements. Child<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(child::*[position()=1])" /><xsl:text xml:space="preserve"> </xsl:text>found.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:if test="string-length(text())&gt;100">
      <rsv:report see="http://web.resource.org/rss/1.0/spec#s5.6.2">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; should have at most 100 characters. &lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; has<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="string-length(text())" /><xsl:text xml:space="preserve"> </xsl:text>characters.</rsv:report>
    </xsl:if>
    <xsl:apply-templates mode="M26" />
  </xsl:template>
  <xsl:template match="rss:channel/rss:description" priority="3995" mode="M26">
    <xsl:choose>
      <xsl:when test="count(child::*)=0" />
      <xsl:otherwise>
        <rsv:assert>&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must not contain child elements. Child<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(child::*[position()=1])" /><xsl:text xml:space="preserve"> </xsl:text>found.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:if test="string-length(text())&gt;500">
      <rsv:report see="http://web.resource.org/rss/1.0/spec#s5.3.3">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; should have at most 500 characters. &lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; has<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="string-length(text())" /><xsl:text xml:space="preserve"> </xsl:text>characters.</rsv:report>
    </xsl:if>
    <xsl:apply-templates mode="M26" />
  </xsl:template>
  <xsl:template match="rss:item/rss:description" priority="3994" mode="M26">
    <xsl:choose>
      <xsl:when test="count(child::*)=0" />
      <xsl:otherwise>
        <rsv:assert see="http://web.resource.org/rss/1.0/spec#s5.5.3">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must not contain child elements. Child<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(child::*[position()=1])" /><xsl:text xml:space="preserve"> </xsl:text>found.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:if test="string-length(text())&gt;500">
      <rsv:report see="http://web.resource.org/rss/1.0/spec#s5.5.3">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; should have at most 500 characters. &lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; has<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="string-length(text())" /><xsl:text xml:space="preserve"> </xsl:text>characters.</rsv:report>
    </xsl:if>
    <xsl:apply-templates mode="M26" />
  </xsl:template>
  <xsl:template match="rss:channel/rss:image" priority="3993" mode="M26">
    <xsl:choose>
      <xsl:when test="not(string-length(.))" />
      <xsl:otherwise>
        <rsv:assert see="http://web.resource.org/rss/1.0/spec#s5.3.4">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must not have content.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="count(child::*)=0" />
      <xsl:otherwise>
        <rsv:assert see="http://web.resource.org/rss/1.0/spec#s5.3.4">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must not contain child elements. Child<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(child::*[position()=1])" /><xsl:text xml:space="preserve"> </xsl:text>found.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="@rdf:resource" />
      <xsl:otherwise>
        <rsv:assert see="http://web.resource.org/rss/1.0/spec#s5.3.4">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have a rdf:resource attribute.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:apply-templates mode="M26" />
  </xsl:template>
  <xsl:template match="rdf:RDF/rss:image" priority="3992" mode="M26">
    <xsl:if test="string(normalize-space(text()))">
      <rsv:report see="http://web.resource.org/rss/1.0/spec#s5.4">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; should not have mixed text content.</rsv:report>
    </xsl:if>
    <xsl:choose>
      <xsl:when test="count(rss:title)=1" />
      <xsl:otherwise>
        <rsv:assert see="http://web.resource.org/rss/1.0/spec#s5.4">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have exactly one &lt;rss:title&gt; child element.<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="count(rss:title)" /><xsl:text xml:space="preserve"> </xsl:text>occurance(s) found.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="count(rss:link)=1" />
      <xsl:otherwise>
        <rsv:assert see="http://web.resource.org/rss/1.0/spec#s5.4">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have exactly one &lt;rss:link&gt; child element.<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="count(rss:link)" /><xsl:text xml:space="preserve"> </xsl:text>occurance(s) found.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="count(rss:url)=1" />
      <xsl:otherwise>
        <rsv:assert see="http://web.resource.org/rss/1.0/spec#s5.4">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have exactly one &lt;rss:url&gt; child element.<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="count(rss:url)" /><xsl:text xml:space="preserve"> </xsl:text>occurance(s) found.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="@rdf:about" />
      <xsl:otherwise>
        <rsv:assert see="http://web.resource.org/rss/1.0/spec#s5.4">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have the about attribute.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:if test="//@rdf:about[.=current()/@rdf:about and generate-id(.)!=generate-id(current()/@rdf:about)]">
      <rsv:report>The value of a<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>rdf:about attribute must be unique Duplicate value<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="@rdf:about" /><xsl:text xml:space="preserve"> </xsl:text>found.</rsv:report>
    </xsl:if>
    <xsl:if test="@rdf:about!=rss:url">
      <rsv:report>The value of an<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>rdf:about attribute should be the same as its url. Value of rdf:about is<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="@rdf:about" /><xsl:text xml:space="preserve"> </xsl:text>and value of rss:url is<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="rss:url" /><xsl:text xml:space="preserve"> </xsl:text>.</rsv:report>
    </xsl:if>
    <xsl:choose>
      <xsl:when test="/rdf:RDF/rss:channel/rss:image" />
      <xsl:otherwise>
        <rsv:assert>The &lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; child element of &lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt;, if present, must also be be present as a child element of &lt;rss:channel&gt;.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:apply-templates mode="M26" />
  </xsl:template>
  <xsl:template match="rss:item" priority="3991" mode="M26">
    <xsl:if test="string(normalize-space(text()))">
      <rsv:report>&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; should not have mixed text content.</rsv:report>
    </xsl:if>
    <xsl:choose>
      <xsl:when test="count(rss:title)=1" />
      <xsl:otherwise>
        <rsv:assert see="http://web.resource.org/rss/1.0/spec#s5.5">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have exactly one &lt;rss:title&gt; child element.<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="count(rss:title)" /><xsl:text xml:space="preserve"> </xsl:text>occurance(s) found.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="count(rss:link)=1" />
      <xsl:otherwise>
        <rsv:assert see="http://web.resource.org/rss/1.0/spec#s5.5">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have exactly one &lt;rss:link&gt; child element.<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="count(rss:link)" /><xsl:text xml:space="preserve"> </xsl:text>occurance(s) found.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="count(rss:description)&lt;2" />
      <xsl:otherwise>
        <rsv:assert see="http://web.resource.org/rss/1.0/spec#s5.5">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have zero or one &lt;rss:description&gt; child element.<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="count(rss:description)" /><xsl:text xml:space="preserve"> </xsl:text>occurance(s) found.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="@rdf:about" />
      <xsl:otherwise>
        <rsv:assert see="http://web.resource.org/rss/1.0/spec#s5.5">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have a rdf:about attribute.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:if test="//@rdf:about[.=current()/@rdf:about and generate-id(.)!=generate-id(current()/@rdf:about)]">
      <rsv:report see="http://web.resource.org/rss/1.0/spec#s5.5">The value of a<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>rdf:about attribute must be unique Duplicate value<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="@rdf:about" /><xsl:text xml:space="preserve"> </xsl:text>found.</rsv:report>
    </xsl:if>
    <xsl:apply-templates mode="M26" />
  </xsl:template>
  <xsl:template match="rss:items" priority="3990" mode="M26">
    <xsl:if test="string(normalize-space(text()))">
      <rsv:report>&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; should not have mixed text content.</rsv:report>
    </xsl:if>
    <xsl:choose>
      <xsl:when test="count(rdf:Seq)=1" />
      <xsl:otherwise>
        <rsv:assert see="http://web.resource.org/rss/1.0/spec#s5.3.5">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have exactly one &lt;rdf:Seq&gt; child element.<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="count(rdf:Seq)" /><xsl:text xml:space="preserve"> </xsl:text>occurance(s) found.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:apply-templates mode="M26" />
  </xsl:template>
  <xsl:template match="rss:channel/rss:link" priority="3989" mode="M26">
    <xsl:if test="string-length(text())&gt;500">
      <rsv:report see="http://web.resource.org/rss/1.0/spec#s5.3.2">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; should have at most 500 characters. &lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; has<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="string-length(text())" /><xsl:text xml:space="preserve"> </xsl:text>characters.</rsv:report>
    </xsl:if>
    <xsl:choose>
      <xsl:when test="count(child::*)=0" />
      <xsl:otherwise>
        <rsv:assert see="http://web.resource.org/rss/1.0/spec#s5.3.2">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must not contain child elements. Child<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(child::*[position()=1])" /><xsl:text xml:space="preserve"> </xsl:text>found.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:apply-templates mode="M26" />
  </xsl:template>
  <xsl:template match="rss:image/rss:link" priority="3988" mode="M26">
    <xsl:if test="string-length(text())&gt;500">
      <rsv:report see="http://web.resource.org/rss/1.0/spec#s5.4.3">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; should have at most 500 characters. &lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; has<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="string-length(text())" /><xsl:text xml:space="preserve"> </xsl:text>characters.</rsv:report>
    </xsl:if>
    <xsl:choose>
      <xsl:when test="count(child::*)=0" />
      <xsl:otherwise>
        <rsv:assert see="http://web.resource.org/rss/1.0/spec#s5.4.3">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must not contain child elements. Child<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(child::*[position()=1])" /><xsl:text xml:space="preserve"> </xsl:text>found.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:apply-templates mode="M26" />
  </xsl:template>
  <xsl:template match="rss:item/rss:link" priority="3987" mode="M26">
    <xsl:if test="string-length(text())&gt;500">
      <rsv:report see="http://web.resource.org/rss/1.0/spec#s5.5.2">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; should have at most 500 characters. &lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; has<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="string-length(text())" /><xsl:text xml:space="preserve"> </xsl:text>characters.</rsv:report>
    </xsl:if>
    <xsl:choose>
      <xsl:when test="count(child::*)=0" />
      <xsl:otherwise>
        <rsv:assert see="http://web.resource.org/rss/1.0/spec#s5.5.2">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must not contain child elements. Child<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(child::*[position()=1])" /><xsl:text xml:space="preserve"> </xsl:text>found.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:apply-templates mode="M26" />
  </xsl:template>
  <xsl:template match="rss:textinput/rss:link" priority="3986" mode="M26">
    <xsl:if test="string-length(text())&gt;500">
      <rsv:report see="http://web.resource.org/rss/1.0/spec#s5.6.4">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; should have at most 500 characters. &lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; has<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="string-length(text())" /><xsl:text xml:space="preserve"> </xsl:text>characters.</rsv:report>
    </xsl:if>
    <xsl:choose>
      <xsl:when test="count(child::*)=0" />
      <xsl:otherwise>
        <rsv:assert see="http://web.resource.org/rss/1.0/spec#s5.6.4">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must not contain child elements. Child<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(child::*[position()=1])" /><xsl:text xml:space="preserve"> </xsl:text>found.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:apply-templates mode="M26" />
  </xsl:template>
  <xsl:template match="rss:name" priority="3985" mode="M26">
    <xsl:choose>
      <xsl:when test="count(child::*)=0" />
      <xsl:otherwise>
        <rsv:assert see="http://web.resource.org/rss/1.0/spec#s5.6.3">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must not contain child elements. Child<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(child::*[position()=1])" /><xsl:text xml:space="preserve"> </xsl:text>found.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:if test="string-length(text())&gt;500">
      <rsv:report see="http://web.resource.org/rss/1.0/spec#s5.6.3">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; should have at most 500 characters. &lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; has<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="string-length(text())" /><xsl:text xml:space="preserve"> </xsl:text>characters.</rsv:report>
    </xsl:if>
    <xsl:apply-templates mode="M26" />
  </xsl:template>
  <xsl:template match="rss:channel/rss:textinput" priority="3984" mode="M26">
    <xsl:choose>
      <xsl:when test="not(string-length(.))" />
      <xsl:otherwise>
        <rsv:assert see="http://web.resource.org/rss/1.0/spec#s5.3.6">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must not have content.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="count(child::*)=0" />
      <xsl:otherwise>
        <rsv:assert see="http://web.resource.org/rss/1.0/spec#s5.3.6">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must not contain child elements. Child<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(child::*[position()=1])" /><xsl:text xml:space="preserve"> </xsl:text>found.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="@rdf:resource" />
      <xsl:otherwise>
        <rsv:assert>&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have a rdf:resource attribute.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:apply-templates mode="M26" />
  </xsl:template>
  <xsl:template match="rdf:RDF/rss:textinput" priority="3983" mode="M26">
    <xsl:if test="string(normalize-space(text()))">
      <rsv:report>&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; should not have mixed text content.</rsv:report>
    </xsl:if>
    <xsl:choose>
      <xsl:when test="count(rss:title)=1" />
      <xsl:otherwise>
        <rsv:assert see="http://web.resource.org/rss/1.0/spec#s5.6">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have exactly one &lt;rss:title&gt; child element.<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="count(rss:title)" /><xsl:text xml:space="preserve"> </xsl:text>occurance(s) found.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="count(rss:link)=1" />
      <xsl:otherwise>
        <rsv:assert see="http://web.resource.org/rss/1.0/spec#s5.6">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have exactly one &lt;rss:link&gt; child element.<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="count(rss:link)" /><xsl:text xml:space="preserve"> </xsl:text>occurance(s) found.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="count(rss:description)=1" />
      <xsl:otherwise>
        <rsv:assert see="http://web.resource.org/rss/1.0/spec#s5.6">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have exactly one &lt;rss:description&gt; child element.<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="count(rss:desription)" /><xsl:text xml:space="preserve"> </xsl:text>occurance(s) found.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="count(rss:name)=1" />
      <xsl:otherwise>
        <rsv:assert see="http://web.resource.org/rss/1.0/spec#s5.6">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have exactly one &lt;rss:name&gt; child element.<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="count(rss:name)" /><xsl:text xml:space="preserve"> </xsl:text>occurance(s) found.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="@rdf:about" />
      <xsl:otherwise>
        <rsv:assert see="http://web.resource.org/rss/1.0/spec#s5.6">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have the about attribute.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="not(//@rdf:about[.=current()/@rdf:about and generate-id(.)!=generate-id(current()/@rdf:about)])" />
      <xsl:otherwise>
        <rsv:assert see="http://web.resource.org/rss/1.0/spec#s5.6">The value of a<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>rdf:about attribute must be unique. Duplicate value<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="@rdf:about" /><xsl:text xml:space="preserve"> </xsl:text>found.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:if test="@rdf:about!=rss:link">
      <rsv:report see="http://web.resource.org/rss/1.0/spec#s5.6">The value of an<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>rdf:about attribute should be the same as its link.</rsv:report>
    </xsl:if>
    <xsl:choose>
      <xsl:when test="/rdf:RDF/rss:channel/rss:textinput" />
      <xsl:otherwise>
        <rsv:assert see="http://web.resource.org/rss/1.0/spec#s5.6">The &lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; child element of &lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt;, if present, must also be be present as a child element of &lt;rss:channel&gt;.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:apply-templates mode="M26" />
  </xsl:template>
  <xsl:template match="rss:channel/rss:title" priority="3982" mode="M26">
    <xsl:choose>
      <xsl:when test="count(child::*)=0" />
      <xsl:otherwise>
        <rsv:assert see="http://web.resource.org/rss/1.0/spec#s5.3.1">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must not contain child elements. Child<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(child::*[position()=1])" /><xsl:text xml:space="preserve"> </xsl:text>found.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:if test="string-length(text())&gt;40">
      <rsv:report see="http://web.resource.org/rss/1.0/spec#s5.3.1">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; should have at most 40 characters. &lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; has<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="string-length(text())" /><xsl:text xml:space="preserve"> </xsl:text>characters.</rsv:report>
    </xsl:if>
    <xsl:apply-templates mode="M26" />
  </xsl:template>
  <xsl:template match="rss:textinput/rss:title" priority="3981" mode="M26">
    <xsl:choose>
      <xsl:when test="count(child::*)=0" />
      <xsl:otherwise>
        <rsv:assert see="http://web.resource.org/rss/1.0/spec#s5.6.1">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must not contain child elements. Child<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(child::*[position()=1])" /><xsl:text xml:space="preserve"> </xsl:text>found.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:if test="string-length(text())&gt;40">
      <rsv:report see="http://web.resource.org/rss/1.0/spec#s5.6.1">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; should have at most 40 characters. &lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; has<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="string-length(text())" /><xsl:text xml:space="preserve"> </xsl:text>characters.</rsv:report>
    </xsl:if>
    <xsl:apply-templates mode="M26" />
  </xsl:template>
  <xsl:template match="rss:image/rss:title" priority="3980" mode="M26">
    <xsl:choose>
      <xsl:when test="count(child::*)=0" />
      <xsl:otherwise>
        <rsv:assert see="http://web.resource.org/rss/1.0/spec#s5.4.1">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must not contain child elements. Child<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(child::*[position()=1])" /><xsl:text xml:space="preserve"> </xsl:text>found.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:if test="string-length(text())&gt;40">
      <rsv:report see="http://web.resource.org/rss/1.0/spec#s5.4.1">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; should have at most 40 characters. &lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; has<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="string-length(text())" /><xsl:text xml:space="preserve"> </xsl:text>characters.</rsv:report>
    </xsl:if>
    <xsl:apply-templates mode="M26" />
  </xsl:template>
  <xsl:template match="rss:item/rss:title" priority="3979" mode="M26">
    <xsl:choose>
      <xsl:when test="count(child::*)=0" />
      <xsl:otherwise>
        <rsv:assert see="http://web.resource.org/rss/1.0/spec#s5.5.1">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must not contain child elements. Child<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(child::*[position()=1])" /><xsl:text xml:space="preserve"> </xsl:text>found.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:if test="string-length(text())&gt;100">
      <rsv:report see="http://web.resource.org/rss/1.0/spec#s5.5.1">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; should have at most 100 characters. &lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; has<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="string-length(text())" /><xsl:text xml:space="preserve"> </xsl:text>characters.</rsv:report>
    </xsl:if>
    <xsl:apply-templates mode="M26" />
  </xsl:template>
  <xsl:template match="rss:url" priority="3978" mode="M26">
    <xsl:if test="string-length(text())&gt;500">
      <rsv:report see="http://web.resource.org/rss/1.0/spec#s5.4.2">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; should have at most 500 characters. &lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; has<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="string-length(text())" /><xsl:text xml:space="preserve"> </xsl:text>characters.</rsv:report>
    </xsl:if>
    <xsl:choose>
      <xsl:when test="count(child::*)=0" />
      <xsl:otherwise>
        <rsv:assert see="http://web.resource.org/rss/1.0/spec#s5.4.2">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must not contain child elements. Child<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(child::*[position()=1])" /><xsl:text xml:space="preserve"> </xsl:text>found.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:apply-templates mode="M26" />
  </xsl:template>
  <xsl:template match="rss:*" priority="3977" mode="M26">
    <xsl:choose>
      <xsl:when test="false" />
      <xsl:otherwise>
        <rsv:assert>&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; is not a valid rss namespace element</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:apply-templates mode="M26" />
  </xsl:template>
  <xsl:template match="text()" priority="-1" mode="M26">
  </xsl:template>
  <xsl:template match="author|comments|enclosure|guid|source" priority="4000" mode="M27">
    <xsl:choose>
      <xsl:when test="parent::item" />
      <xsl:otherwise>
        <rsv:assert see="http://blogs.law.harvard.edu/tech/rss#hrelementsOfLtitemgt">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have a the &lt;item&gt; parent element. Parent is<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:apply-templates mode="M27" />
  </xsl:template>
  <xsl:template match="copyright|docs|generator|image|item|language|lastBuildDate|managingEditor|rating|skipDays|skipHours|textinput|textInput|ttl|webMaster" priority="3999" mode="M27">
    <xsl:choose>
      <xsl:when test="parent::channel" />
      <xsl:otherwise>
        <rsv:assert see="http://blogs.law.harvard.edu/tech/rss#optionalChannelElements">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have a the &lt;channel&gt; parent element. Parent is<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:apply-templates mode="M27" />
  </xsl:template>
  <xsl:template match="category" priority="3998" mode="M27">
    <xsl:choose>
      <xsl:when test="parent::channel or parent::item" />
      <xsl:otherwise>
        <rsv:assert see="http://blogs.law.harvard.edu/tech/rss">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have a the &lt;channel&gt; or &lt;item&gt; parent element. Parent is<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:apply-templates mode="M27" />
  </xsl:template>
  <xsl:template match="channel" priority="3997" mode="M27">
    <xsl:choose>
      <xsl:when test="parent::rss" />
      <xsl:otherwise>
        <rsv:assert see="http://blogs.law.harvard.edu/tech/rss#hrelementsOfLtitemgt">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have a the &lt;rss&gt; parent element. Parent is<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:apply-templates mode="M27" />
  </xsl:template>
  <xsl:template match="cloud" priority="3996" mode="M27">
    <xsl:choose>
      <xsl:when test="not(/rss) or parent::channel" />
      <xsl:otherwise>
        <rsv:assert see="http://blogs.law.harvard.edu/tech/rss#ltcloudgtSubelementOfLtchannelgt">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have a the &lt;channel&gt; parent element. Parent is<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:apply-templates mode="M27" />
  </xsl:template>
  <xsl:template match="day" priority="3995" mode="M27">
    <xsl:choose>
      <xsl:when test="parent::skipDays" />
      <xsl:otherwise>
        <rsv:assert see="http://blogs.law.harvard.edu/tech/skipHoursDays#skipdays">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have a the &lt;skipDays&gt; parent element. Parent is<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:apply-templates mode="M27" />
  </xsl:template>
  <xsl:template match="description" priority="3994" mode="M27">
    <xsl:choose>
      <xsl:when test="parent::channel or parent::item or parent::textinput or parent::textInput or parent::image" />
      <xsl:otherwise>
        <rsv:assert see="http://blogs.law.harvard.edu/tech/rss">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have a the &lt;channel&gt; or &lt;item&gt; or &lt;image&gt; or &lt;textinput&gt; or &lt;textInput&gt; parent element. Parent is<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:apply-templates mode="M27" />
  </xsl:template>
  <xsl:template match="height|url|width" priority="3993" mode="M27">
    <xsl:choose>
      <xsl:when test="parent::image" />
      <xsl:otherwise>
        <rsv:assert see="http://blogs.law.harvard.edu/tech/rss#ltimagegtSubelementOfLtchannelgt">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have a the &lt;image&gt; parent element. Parent is<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:apply-templates mode="M27" />
  </xsl:template>
  <xsl:template match="hour" priority="3992" mode="M27">
    <xsl:choose>
      <xsl:when test="parent::skipHours" />
      <xsl:otherwise>
        <rsv:assert see="http://blogs.law.harvard.edu/tech/skipHoursDays#skiphours">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have a the &lt;skipHours&gt; parent element. Parent is<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:apply-templates mode="M27" />
  </xsl:template>
  <xsl:template match="link" priority="3991" mode="M27">
    <xsl:choose>
      <xsl:when test="parent::channel or parent::item or parent::image or parent::textinput or parent::textInput" />
      <xsl:otherwise>
        <rsv:assert see="http://blogs.law.harvard.edu/tech/rss">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have a the &lt;channel&gt; or &lt;item&gt; or &lt;image&gt; or &lt;textinput&gt; or &lt;textInput&gt; parent element. Parent is<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:apply-templates mode="M27" />
  </xsl:template>
  <xsl:template match="name" priority="3990" mode="M27">
    <xsl:choose>
      <xsl:when test="/rss/@version='0.91' or parent::textInput" />
      <xsl:otherwise>
        <rsv:assert see="http://blogs.law.harvard.edu/tech/rss#lttextinputgtSubelementOfLtchannelgt">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have a the &lt;textInput&gt; parent element. Parent is<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:apply-templates mode="M27" />
  </xsl:template>
  <xsl:template match="pubDate" priority="3989" mode="M27">
    <xsl:choose>
      <xsl:when test="/rss/@version!='2.0' or parent::item or parent::channel" />
      <xsl:otherwise>
        <rsv:assert see="http://blogs.law.harvard.edu/tech/rss">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have a the &lt;item&gt; or &lt;channel&gt; parent element (RSS 2.0 specific). Parent is<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="/rss/@version!='0.91' or parent::channel" />
      <xsl:otherwise>
        <rsv:assert>&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have the &lt;channel&gt; parent element (RSS 0.91 specific). Parent is<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:apply-templates mode="M27" />
  </xsl:template>
  <xsl:template match="title" priority="3988" mode="M27">
    <xsl:choose>
      <xsl:when test="not(/rss) or parent::channel or parent::item or parent::image or parent::textinput or parent::textInput" />
      <xsl:otherwise>
        <rsv:assert see="http://blogs.law.harvard.edu/tech/rss">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have a the &lt;channel&gt; or &lt;item&gt; or &lt;image&gt; or &lt;textinput&gt; or &lt;textInput&gt; parent element. Parent is<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:apply-templates mode="M27" />
  </xsl:template>
  <xsl:template match="text()" priority="-1" mode="M27">
  </xsl:template>
  <xsl:template match="author" priority="4000" mode="M28">
    <xsl:choose>
      <xsl:when test="/rss/@version!='0.91'" />
      <xsl:otherwise>
        <rsv:assert>&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; is not a valid RSS 0.91 element.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:if test="child::*">
      <rsv:report>
        <xsl:text xml:space="preserve"> </xsl:text>
        <xsl:value-of select="name(.)" />
        <xsl:text xml:space="preserve"> </xsl:text>should not contain child elements. Child<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(child::*[position()=1])" /><xsl:text xml:space="preserve"> </xsl:text>found.</rsv:report>
    </xsl:if>
    <xsl:apply-templates mode="M28" />
  </xsl:template>
  <xsl:template match="category" priority="3999" mode="M28">
    <xsl:choose>
      <xsl:when test="/rss/@version!='0.91'" />
      <xsl:otherwise>
        <rsv:assert>&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; is not a valid RSS 0.91 element.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:apply-templates mode="M28" />
  </xsl:template>
  <xsl:template match="channel" priority="3998" mode="M28">
    <xsl:if test="string(normalize-space(text()))">
      <rsv:report>&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; should not have mixed text content.</rsv:report>
    </xsl:if>
    <xsl:choose>
      <xsl:when test="count(title)=1" />
      <xsl:otherwise>
        <rsv:assert see="http://blogs.law.harvard.edu/tech/rss#requiredChannelElements">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have exactly one &lt;title&gt; child element.<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="count(title)" /><xsl:text xml:space="preserve"> </xsl:text>occurance(s) found.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="count(link)=1" />
      <xsl:otherwise>
        <rsv:assert see="http://blogs.law.harvard.edu/tech/rss#requiredChannelElements">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have exactly one &lt;link&gt; child element.<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="count(link)" /><xsl:text xml:space="preserve"> </xsl:text>occurance(s) found.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="count(description)=1" />
      <xsl:otherwise>
        <rsv:assert see="http://blogs.law.harvard.edu/tech/rss#requiredChannelElements">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have exactly one &lt;description&gt; child element.<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="count(description)" /><xsl:text xml:space="preserve"> </xsl:text>occurance(s) found.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="count(language)&lt;2 or /rss/@version!='2.0'" />
      <xsl:otherwise>
        <rsv:assert see="http://blogs.law.harvard.edu/tech/rss#optionalChannelElements">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have zero or one &lt;languagegt; child element (version 2.0 specific).<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="count(language)" /><xsl:text xml:space="preserve"> </xsl:text>occurance(s) found.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="count(language)=1 or /rss/@version!='0.91'" />
      <xsl:otherwise>
        <rsv:assert>&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have exactly one &lt;language&gt; child element (version 0.91 specific).<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="count(language)" /><xsl:text xml:space="preserve"> </xsl:text>occurance(s) found.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="count(copyright)&lt;2" />
      <xsl:otherwise>
        <rsv:assert see="http://blogs.law.harvard.edu/tech/rss#optionalChannelElements">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have zero or one &lt;copyright&gt; child element.<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="count(copyright)" /><xsl:text xml:space="preserve"> </xsl:text>occurance(s) found.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="count(managingEditor)&lt;2" />
      <xsl:otherwise>
        <rsv:assert see="http://blogs.law.harvard.edu/tech/rss#optionalChannelElements">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have zero or one &lt;managingEditor&gt; child element.<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="count(managingEditor)" /><xsl:text xml:space="preserve"> </xsl:text>occurance(s) found.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="count(webMaster)&lt;2" />
      <xsl:otherwise>
        <rsv:assert see="http://blogs.law.harvard.edu/tech/rss#optionalChannelElements">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have zero or one &lt;webMaster&gt; child element.<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="count(webMaster)" /><xsl:text xml:space="preserve"> </xsl:text>occurance(s) found.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="count(pubDate)&lt;2" />
      <xsl:otherwise>
        <rsv:assert see="http://blogs.law.harvard.edu/tech/rss#optionalChannelElements">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have zero or one &lt;pubDate&gt; child element.<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="count(pubDate)" /><xsl:text xml:space="preserve"> </xsl:text>occurance(s) found.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="count(lastBuildDate)&lt;2" />
      <xsl:otherwise>
        <rsv:assert see="http://blogs.law.harvard.edu/tech/rss#optionalChannelElements">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have zero or one &lt;lastBuildDate&gt; child element.<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="count(lastBuildDate)" /><xsl:text xml:space="preserve"> </xsl:text>occurance(s) found.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="count(generator)&lt;2" />
      <xsl:otherwise>
        <rsv:assert see="http://blogs.law.harvard.edu/tech/rss#optionalChannelElements">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have zero or one &lt;generator&gt; child element.<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="count(generator)" /><xsl:text xml:space="preserve"> </xsl:text>occurance(s) found.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="count(docs)&lt;2" />
      <xsl:otherwise>
        <rsv:assert see="http://blogs.law.harvard.edu/tech/rss#optionalChannelElements">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have zero or one &lt;docs&gt; child element.<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="count(docs)" /><xsl:text xml:space="preserve"> </xsl:text>occurance(s) found.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="count(cloud)&lt;2" />
      <xsl:otherwise>
        <rsv:assert see="http://blogs.law.harvard.edu/tech/rss#optionalChannelElements">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have zero or one &lt;cloud&gt; child element.<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="count(cloud)" /><xsl:text xml:space="preserve"> </xsl:text>occurance(s) found.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="count(ttl)&lt;2" />
      <xsl:otherwise>
        <rsv:assert see="http://blogs.law.harvard.edu/tech/rss#optionalChannelElements">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have zero or one &lt;ttl&gt; child element.<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="count(ttl)" /><xsl:text xml:space="preserve"> </xsl:text>occurance(s) found.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="count(image)&lt;2" />
      <xsl:otherwise>
        <rsv:assert see="http://blogs.law.harvard.edu/tech/rss#optionalChannelElements">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have zero or one &lt;image&gt; child element.<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="count(image)" /><xsl:text xml:space="preserve"> </xsl:text>occurance(s) found.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="count(rating)&lt;2" />
      <xsl:otherwise>
        <rsv:assert see="http://blogs.law.harvard.edu/tech/rss#optionalChannelElements">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have zero or one &lt;rating&gt; child element.<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="count(rating)" /><xsl:text xml:space="preserve"> </xsl:text>occurance(s) found.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="count(textInput)&lt;2" />
      <xsl:otherwise>
        <rsv:assert see="http://blogs.law.harvard.edu/tech/rss#optionalChannelElements">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have zero or one &lt;textInput&gt; child element.<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="count(textInput)" /><xsl:text xml:space="preserve"> </xsl:text>occurance(s) found.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="count(skipHours)&lt;2" />
      <xsl:otherwise>
        <rsv:assert see="http://blogs.law.harvard.edu/tech/rss#optionalChannelElements">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have zero or one &lt;skipHours&gt; child element.<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="count(skipHours)" /><xsl:text xml:space="preserve"> </xsl:text>occurance(s) found.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="count(skipDays)&lt;2" />
      <xsl:otherwise>
        <rsv:assert see="http://blogs.law.harvard.edu/tech/rss#optionalChannelElements">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have zero or one &lt;skipDays&gt; child element.<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="count(skipDays)" /><xsl:text xml:space="preserve"> </xsl:text>occurance(s) found.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:apply-templates mode="M28" />
  </xsl:template>
  <xsl:template match="cloud" priority="3997" mode="M28">
    <xsl:choose>
      <xsl:when test="not(/rss) or /rss/@version!='0.91'" />
      <xsl:otherwise>
        <rsv:assert>&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; is not a valid RSS 0.91 element.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:apply-templates mode="M28" />
  </xsl:template>
  <xsl:template match="comments" priority="3996" mode="M28">
    <xsl:choose>
      <xsl:when test="/rss/@version!='0.91'" />
      <xsl:otherwise>
        <rsv:assert>&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; is not a valid RSS 0.91 element.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:if test="child::*">
      <rsv:report see="http://blogs.law.harvard.edu/tech/rss#ltcommentsgtSubelementOfLtitemgt">
        <xsl:text xml:space="preserve"> </xsl:text>
        <xsl:value-of select="name(.)" />
        <xsl:text xml:space="preserve"> </xsl:text>should not contain child elements. Child<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(child::*[position()=1])" /><xsl:text xml:space="preserve"> </xsl:text>found.</rsv:report>
    </xsl:if>
    <xsl:apply-templates mode="M28" />
  </xsl:template>
  <xsl:template match="copyright" priority="3995" mode="M28">
    <xsl:if test="false">
      <rsv:report>Nothing.</rsv:report>
    </xsl:if>
    <xsl:apply-templates mode="M28" />
  </xsl:template>
  <xsl:template match="day" priority="3994" mode="M28">
    <xsl:choose>
      <xsl:when test=".='Monday' or .='Tuesday' or .='Wednesday' or .='Thursday' or .='Friday' or .='Saturday' or .='Sunday'" />
      <xsl:otherwise>
        <rsv:assert see="http://blogs.law.harvard.edu/tech/skipHoursDays#skipdays">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must be Monday, Tuesday, Wednesday, Thursday, Friday, Saturday or Sunday.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:apply-templates mode="M28" />
  </xsl:template>
  <xsl:template match="item/description" priority="3993" mode="M28">
    <xsl:if test="child::*">
      <rsv:report>
        <xsl:text xml:space="preserve"> </xsl:text>
        <xsl:value-of select="name(.)" />
        <xsl:text xml:space="preserve"> </xsl:text>should not contain child elements. Child<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(child::*[position()=1])" /><xsl:text xml:space="preserve"> </xsl:text>found.</rsv:report>
    </xsl:if>
    <xsl:if test="contains(translate(.,'EMBD','embd'),'&lt;embed ') or contains(translate(.,'EMBD','embd'),'&lt;embed&gt;')">
      <rsv:report>&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; should not contain an entity-encoded HTML &lt;embed&gt; element.</rsv:report>
    </xsl:if>
    <xsl:if test="contains(translate(.,'META','meta'),'&lt;meta ') or contains(translate(.,'META','meta'),'&lt;meta&gt;')">
      <rsv:report>&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; should not contain an entity-encoded HTML &lt;meta&gt; element.</rsv:report>
    </xsl:if>
    <xsl:if test="contains(translate(.,'OBJECT','object'),'&lt;object ') or contains(translate(.,'OBJECT','object'),'&lt;object&gt;')">
      <rsv:report>&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; should not contain an entity-encoded HTML &lt;object&gt; element.</rsv:report>
    </xsl:if>
    <xsl:if test="contains(translate(.,'SCRIPT','script'),'&lt;script ') or contains(translate(.,'SCRIPT','script'),'&lt;script&gt;')">
      <rsv:report>&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; should not contain an entity-encoded HTML &lt;script&gt; element.</rsv:report>
    </xsl:if>
    <xsl:apply-templates mode="M28" />
  </xsl:template>
  <xsl:template match="description" priority="3992" mode="M28">
    <xsl:if test="child::*">
      <rsv:report>
        <xsl:text xml:space="preserve"> </xsl:text>
        <xsl:value-of select="name(.)" />
        <xsl:text xml:space="preserve"> </xsl:text>should not contain child elements. Child<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(child::*[position()=1])" /><xsl:text xml:space="preserve"> </xsl:text>found.</rsv:report>
    </xsl:if>
    <xsl:apply-templates mode="M28" />
  </xsl:template>
  <xsl:template match="docs" priority="3991" mode="M28">
    <xsl:if test="(.!='http://backend.userland.com/rss' and .!='http://blogs.law.harvard.edu/tech/rss') or /rss/@version!='2.0'">
      <rsv:report see="http://blogs.law.harvard.edu/tech/rss#optionalChannelElements">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; should be 'http://blogs.law.harvard.edu/tech/rss'.</rsv:report>
    </xsl:if>
    <xsl:apply-templates mode="M28" />
  </xsl:template>
  <xsl:template match="enclosure" priority="3990" mode="M28">
    <xsl:if test="string(normalize-space(text()))">
      <rsv:report>&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; should not have mixed text content.</rsv:report>
    </xsl:if>
    <xsl:choose>
      <xsl:when test="/rss/@version!='0.91'" />
      <xsl:otherwise>
        <rsv:assert>&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; is not a valid RSS 0.91 element.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="@length" />
      <xsl:otherwise>
        <rsv:assert see="http://blogs.law.harvard.edu/tech/rss#ltenclosuregtSubelementOfLtitemgt">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have the length attribute.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="not(@length) or (number(@length)&gt;0 and not(contains(@length,'.')))" />
      <xsl:otherwise>
        <rsv:assert see="http://blogs.law.harvard.edu/tech/rss#ltenclosuregtSubelementOfLtitemgt">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; length attribute must be a positive integer.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="@type" />
      <xsl:otherwise>
        <rsv:assert see="http://blogs.law.harvard.edu/tech/rss#ltenclosuregtSubelementOfLtitemgt">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have the type attribute.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="@url" />
      <xsl:otherwise>
        <rsv:assert see="http://blogs.law.harvard.edu/tech/rss#ltenclosuregtSubelementOfLtitemgt">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have the url attribute.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:apply-templates mode="M28" />
  </xsl:template>
  <xsl:template match="generator" priority="3989" mode="M28">
    <xsl:choose>
      <xsl:when test="/rss/@version!='0.91'" />
      <xsl:otherwise>
        <rsv:assert>&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; is not a valid RSS 0.91 element.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:apply-templates mode="M28" />
  </xsl:template>
  <xsl:template match="guid" priority="3988" mode="M28">
    <xsl:choose>
      <xsl:when test="/rss/@version!='0.91'" />
      <xsl:otherwise>
        <rsv:assert>&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; is not a valid RSS 0.91 element.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="not (@isPermaLink) or @isPermaLink='true' or @isPermaLink='false'" />
      <xsl:otherwise>
        <rsv:assert see="http://blogs.law.harvard.edu/tech/rss#ltguidgtSubelementOfLtitemgt">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; isPermaLink must be true or false or not present.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="@isPermaLink='false' or not(//guid[.=current() and generate-id(.)!=generate-id(current())])" />
      <xsl:otherwise>
        <rsv:assert see="http://blogs.law.harvard.edu/tech/rss#ltguidgtSubelementOfLtitemgt">The value of a &lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; should be unique. Duplicate value<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="text()" /><xsl:text xml:space="preserve"> </xsl:text>found.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:apply-templates mode="M28" />
  </xsl:template>
  <xsl:template match="height" priority="3987" mode="M28">
    <xsl:choose>
      <xsl:when test="number(.)&gt;0 and number(.)&lt;401 and not(contains(.,'.'))" />
      <xsl:otherwise>
        <rsv:assert see="http://blogs.law.harvard.edu/tech/rss#ltimagegtSubelementOfLtchannelgt">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must be a number greater than zero and less or equal to 400.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:apply-templates mode="M28" />
  </xsl:template>
  <xsl:template match="hour" priority="3986" mode="M28">
    <xsl:choose>
      <xsl:when test="not(contains(.,'.')) and number(.)&gt;-1 and number(.)&lt;24" />
      <xsl:otherwise>
        <rsv:assert see="http://blogs.law.harvard.edu/tech/skipHoursDays#skiphours">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must be an integer between 0 and 23.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:apply-templates mode="M28" />
  </xsl:template>
  <xsl:template match="image" priority="3985" mode="M28">
    <xsl:if test="string(normalize-space(text()))">
      <rsv:report>&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; should not have mixed text content.</rsv:report>
    </xsl:if>
    <xsl:choose>
      <xsl:when test="count(url)=1" />
      <xsl:otherwise>
        <rsv:assert see="http://blogs.law.harvard.edu/tech/rss#ltimagegtSubelementOfLtchannelgt">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have exactly one &lt;url&gt; child element.<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="count(url)" /><xsl:text xml:space="preserve"> </xsl:text>occurance(s) found.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="count(title)=1" />
      <xsl:otherwise>
        <rsv:assert see="http://blogs.law.harvard.edu/tech/rss#ltimagegtSubelementOfLtchannelgt">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have exactly one &lt;title&gt; child element.<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="count(title)" /><xsl:text xml:space="preserve"> </xsl:text>occurance(s) found.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="count(link)=1" />
      <xsl:otherwise>
        <rsv:assert see="http://blogs.law.harvard.edu/tech/rss#ltimagegtSubelementOfLtchannelgt">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have exactly one &lt;link&gt; child element.<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="count(link)" /><xsl:text xml:space="preserve"> </xsl:text>occurance(s) found.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="count(description)&lt;2" />
      <xsl:otherwise>
        <rsv:assert see="http://blogs.law.harvard.edu/tech/rss#ltimagegtSubelementOfLtchannelgt">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have zero or one &lt;description&gt; child element.<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="count(description)" /><xsl:text xml:space="preserve"> </xsl:text>occurance(s) found.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="count(width)&lt;2" />
      <xsl:otherwise>
        <rsv:assert see="http://blogs.law.harvard.edu/tech/rss#ltimagegtSubelementOfLtchannelgt">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have zero or one &lt;width&gt; child element.<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="count(width)" /><xsl:text xml:space="preserve"> </xsl:text>occurance(s) found.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="count(height)&lt;2" />
      <xsl:otherwise>
        <rsv:assert see="http://blogs.law.harvard.edu/tech/rss#ltimagegtSubelementOfLtchannelgt">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have zero or one &lt;height&gt; child element.<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="count(height)" /><xsl:text xml:space="preserve"> </xsl:text>occurance(s) found.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:apply-templates mode="M28" />
  </xsl:template>
  <xsl:template match="item" priority="3984" mode="M28">
    <xsl:if test="string(normalize-space(text()))">
      <rsv:report>&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; should not have mixed text content.</rsv:report>
    </xsl:if>
    <xsl:choose>
      <xsl:when test="count(title)&lt;2 or /rss/@version!='2.0'" />
      <xsl:otherwise>
        <rsv:assert see="http://blogs.law.harvard.edu/tech/rss#hrelementsOfLtitemgt">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have zero or one &lt;title&gt; child element (RSS version 2.0 specific).<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="count(title)" /><xsl:text xml:space="preserve"> </xsl:text>occurance(s) found.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="count(title)=1 or /rss/@version!='0.91'" />
      <xsl:otherwise>
        <rsv:assert>&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have exactly one &lt;title&gt; child element (RSS version 0.91 specific).<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="count(title)" /><xsl:text xml:space="preserve"> </xsl:text>occurance(s) found.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="count(description)&lt;2" />
      <xsl:otherwise>
        <rsv:assert see="http://blogs.law.harvard.edu/tech/rss#hrelementsOfLtitemgt">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have zero or one &lt;description&gt; child element.<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="count(description)" /><xsl:text xml:space="preserve"> </xsl:text>occurance(s) found.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="count(link)&lt;2 or /rss/@version!='2.0'" />
      <xsl:otherwise>
        <rsv:assert see="http://blogs.law.harvard.edu/tech/rss#hrelementsOfLtitemgt">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have zero or one &lt;link&gt; child element.<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="count(link)" /><xsl:text xml:space="preserve"> </xsl:text>occurance(s) found.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="count(link)=1 or /rss/@version!='0.91'" />
      <xsl:otherwise>
        <rsv:assert>&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have exactly one &lt;link&gt; child element (RSS version 0.91 specific).<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="count(link)" /><xsl:text xml:space="preserve"> </xsl:text>occurance(s) found.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="(count(title)+count(description))&gt;0 or /rss/@version!='2.0'" />
      <xsl:otherwise>
        <rsv:assert see="http://blogs.law.harvard.edu/tech/rss#hrelementsOfLtitemgt">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have at least one of title, description.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="count(author)&lt;2" />
      <xsl:otherwise>
        <rsv:assert see="http://blogs.law.harvard.edu/tech/rss#hrelementsOfLtitemgt">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have zero or one &lt;author&gt; child element.<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="count(author)" /><xsl:text xml:space="preserve"> </xsl:text>occurance(s) found.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="count(comments)&lt;2" />
      <xsl:otherwise>
        <rsv:assert see="http://blogs.law.harvard.edu/tech/rss#hrelementsOfLtitemgt">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have zero or one &lt;comments&gt; child element.<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="count(comments)" /><xsl:text xml:space="preserve"> </xsl:text>occurance(s) found.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="count(enclosure)&lt;2" />
      <xsl:otherwise>
        <rsv:assert see="http://blogs.law.harvard.edu/tech/rss#hrelementsOfLtitemgt">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have zero or one &lt;enclosure&gt; child element.<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="count(enclosure)" /><xsl:text xml:space="preserve"> </xsl:text>occurance(s) found.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="count(guid)&lt;2" />
      <xsl:otherwise>
        <rsv:assert see="http://blogs.law.harvard.edu/tech/rss#hrelementsOfLtitemgt">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have zero or one &lt;guid&gt; child element.<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="count(guid)" /><xsl:text xml:space="preserve"> </xsl:text>occurance(s) found.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="count(pubDate)&lt;2" />
      <xsl:otherwise>
        <rsv:assert see="http://blogs.law.harvard.edu/tech/rss#hrelementsOfLtitemgt">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have zero or one &lt;pubDate&gt; child element.<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="count(pubDate)" /><xsl:text xml:space="preserve"> </xsl:text>occurance(s) found.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="count(source)&lt;2" />
      <xsl:otherwise>
        <rsv:assert see="http://blogs.law.harvard.edu/tech/rss#hrelementsOfLtitemgt">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have zero or one &lt;source&gt; child element.<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="count(source)" /><xsl:text xml:space="preserve"> </xsl:text>occurance(s) found.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:apply-templates mode="M28" />
  </xsl:template>
  <xsl:template match="language" priority="3983" mode="M28">
    <xsl:choose>
      <xsl:when test="count(child::*)=0" />
      <xsl:otherwise>
        <rsv:assert see="http://blogs.law.harvard.edu/tech/rss#optionalChannelElements">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must not contain child elements. Child<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(child::*[position()=1])" /><xsl:text xml:space="preserve"> </xsl:text>found.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:if test="translate(.,'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz')!='af' and &#xD;&#xA;					translate(.,'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz')!='sq' and &#xD;&#xA;					translate(.,'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz')!='eu' and &#xD;&#xA;					translate(.,'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz')!='be' and &#xD;&#xA;					translate(.,'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz')!='bg' and &#xD;&#xA;					translate(.,'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz')!='ca' and &#xD;&#xA;					translate(.,'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz')!='zh-cn' and &#xD;&#xA;					translate(.,'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz')!='zh-tw' and &#xD;&#xA;					translate(.,'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz')!='hr' and &#xD;&#xA;					translate(.,'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz')!='cs' and &#xD;&#xA;					translate(.,'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz')!='da' and &#xD;&#xA;					translate(.,'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz')!='nl' and &#xD;&#xA;					translate(.,'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz')!='nl-be' and &#xD;&#xA;					translate(.,'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz')!='nl-nl' and &#xD;&#xA;					translate(.,'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz')!='en' and &#xD;&#xA;					translate(.,'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz')!='en-bz' and &#xD;&#xA;					translate(.,'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz')!='en-ca' and &#xD;&#xA;					translate(.,'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz')!='en-ie' and &#xD;&#xA;					translate(.,'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz')!='en-jm' and &#xD;&#xA;					translate(.,'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz')!='en-nz' and &#xD;&#xA;					translate(.,'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz')!='en-ph' and &#xD;&#xA;					translate(.,'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz')!='en-za' and &#xD;&#xA;					translate(.,'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz')!='en-tt' and &#xD;&#xA;					translate(.,'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz')!='en-gb' and &#xD;&#xA;					translate(.,'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz')!='en-us' and &#xD;&#xA;					translate(.,'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz')!='en-zw' and &#xD;&#xA;					translate(.,'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz')!='et' and &#xD;&#xA;					translate(.,'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz')!='fo' and &#xD;&#xA;					translate(.,'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz')!='fi' and &#xD;&#xA;					translate(.,'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz')!='fr' and &#xD;&#xA;					translate(.,'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz')!='fr-be' and &#xD;&#xA;					translate(.,'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz')!='fr-ca' and &#xD;&#xA;					translate(.,'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz')!='fr-fr' and &#xD;&#xA;					translate(.,'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz')!='fr-lu' and &#xD;&#xA;					translate(.,'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz')!='fr-mc' and &#xD;&#xA;					translate(.,'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz')!='fr-ch' and &#xD;&#xA;					translate(.,'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz')!='gl' and &#xD;&#xA;					translate(.,'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz')!='gd' and &#xD;&#xA;					translate(.,'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz')!='de' and &#xD;&#xA;					translate(.,'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz')!='de-at' and &#xD;&#xA;					translate(.,'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz')!='de-de' and &#xD;&#xA;					translate(.,'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz')!='de-li' and &#xD;&#xA;					translate(.,'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz')!='de-lu' and &#xD;&#xA;					translate(.,'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz')!='de-ch' and &#xD;&#xA;					translate(.,'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz')!='el' and &#xD;&#xA;					translate(.,'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz')!='haw' and &#xD;&#xA;					translate(.,'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz')!='hu' and &#xD;&#xA;					translate(.,'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz')!='is' and &#xD;&#xA;					translate(.,'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz')!='in' and &#xD;&#xA;					translate(.,'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz')!='ga' and &#xD;&#xA;					translate(.,'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz')!='it' and &#xD;&#xA;					translate(.,'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz')!='it-it' and &#xD;&#xA;					translate(.,'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz')!='it-ch' and &#xD;&#xA;					translate(.,'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz')!='ja' and &#xD;&#xA;					translate(.,'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz')!='ko' and &#xD;&#xA;					translate(.,'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz')!='mk' and &#xD;&#xA;					translate(.,'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz')!='no' and &#xD;&#xA;					translate(.,'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz')!='pl' and &#xD;&#xA;					translate(.,'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz')!='pt' and &#xD;&#xA;					translate(.,'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz')!='pt-br' and &#xD;&#xA;					translate(.,'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz')!='pt-pt' and &#xD;&#xA;					translate(.,'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz')!='ro' and &#xD;&#xA;					translate(.,'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz')!='ro-mo' and &#xD;&#xA;					translate(.,'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz')!='ro-ro' and &#xD;&#xA;					translate(.,'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz')!='ru' and &#xD;&#xA;					translate(.,'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz')!='ru-mo' and &#xD;&#xA;					translate(.,'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz')!='ru-ru' and &#xD;&#xA;					translate(.,'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz')!='sr' and &#xD;&#xA;					translate(.,'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz')!='sk' and &#xD;&#xA;					translate(.,'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz')!='sl' and &#xD;&#xA;					translate(.,'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz')!='es' and &#xD;&#xA;					translate(.,'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz')!='es-ar' and &#xD;&#xA;					translate(.,'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz')!='es-bo' and &#xD;&#xA;					translate(.,'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz')!='es-cl' and &#xD;&#xA;					translate(.,'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz')!='es-co' and &#xD;&#xA;					translate(.,'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz')!='es-cr' and &#xD;&#xA;					translate(.,'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz')!='es-do' and &#xD;&#xA;					translate(.,'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz')!='es-ec' and &#xD;&#xA;					translate(.,'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz')!='es-sv' and &#xD;&#xA;					translate(.,'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz')!='es-gt' and &#xD;&#xA;					translate(.,'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz')!='es-hn' and &#xD;&#xA;					translate(.,'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz')!='es-mx' and &#xD;&#xA;					translate(.,'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz')!='es-ni' and &#xD;&#xA;					translate(.,'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz')!='es-pa' and &#xD;&#xA;					translate(.,'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz')!='es-py' and &#xD;&#xA;					translate(.,'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz')!='es-pe' and &#xD;&#xA;					translate(.,'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz')!='es-pr' and &#xD;&#xA;					translate(.,'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz')!='es-es' and &#xD;&#xA;					translate(.,'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz')!='es-uy' and &#xD;&#xA;					translate(.,'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz')!='es-ve' and &#xD;&#xA;					translate(.,'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz')!='sv' and &#xD;&#xA;					translate(.,'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz')!='sv-fi' and &#xD;&#xA;					translate(.,'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz')!='sv-se' and &#xD;&#xA;					translate(.,'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz')!='tr' and &#xD;&#xA;					translate(.,'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz')!='uk'">
      <rsv:report see="http://blogs.law.harvard.edu/tech/stories/storyReader$15">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="." /><xsl:text xml:space="preserve"> </xsl:text>&gt; is not one of the suggested values for RSS language - http://blogs.law.harvard.edu/tech/stories/storyReader$15.</rsv:report>
    </xsl:if>
    <xsl:apply-templates mode="M28" />
  </xsl:template>
  <xsl:template match="lastBuildDate" priority="3982" mode="M28">
    <xsl:if test="child::*">
      <rsv:report see="http://blogs.law.harvard.edu/tech/rss#optionalChannelElements">
        <xsl:text xml:space="preserve"> </xsl:text>
        <xsl:value-of select="name(.)" />
        <xsl:text xml:space="preserve"> </xsl:text>should not contain child elements. Child<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(child::*[position()=1])" /><xsl:text xml:space="preserve"> </xsl:text>found.</rsv:report>
    </xsl:if>
    <xsl:apply-templates mode="M28" />
  </xsl:template>
  <xsl:template match="image/link" priority="3981" mode="M28">
    <xsl:choose>
      <xsl:when test="/rss/@version!='0.91' or not(starts-with(.,'https://'))" />
      <xsl:otherwise>
        <rsv:assert>&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must not start with https:// (RSS 0.91 specific).</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:if test=".!=//channel/link">
      <rsv:report see="http://blogs.law.harvard.edu/tech/rss#ltimagegtSubelementOfLtchannelgt">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; should be the same value as &lt;channel&gt; &lt;link&gt;.</rsv:report>
    </xsl:if>
    <xsl:apply-templates mode="M28" />
  </xsl:template>
  <xsl:template match="link" priority="3980" mode="M28">
    <xsl:choose>
      <xsl:when test="/rss/@version!='0.91' or not(starts-with(.,'https://'))" />
      <xsl:otherwise>
        <rsv:assert>&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must not start with https:// (RSS 0.91 specific).</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:if test="child::*">
      <rsv:report see="http://blogs.law.harvard.edu/tech/rss">
        <xsl:text xml:space="preserve"> </xsl:text>
        <xsl:value-of select="name(.)" />
        <xsl:text xml:space="preserve"> </xsl:text>should not contain child elements. Child<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(child::*[position()=1])" /><xsl:text xml:space="preserve"> </xsl:text>found.</rsv:report>
    </xsl:if>
    <xsl:apply-templates mode="M28" />
  </xsl:template>
  <xsl:template match="managingEditor" priority="3979" mode="M28">
    <xsl:if test="child::*">
      <rsv:report>
        <xsl:text xml:space="preserve"> </xsl:text>
        <xsl:value-of select="name(.)" />
        <xsl:text xml:space="preserve"> </xsl:text>should not contain child elements. Child<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(child::*[position()=1])" /><xsl:text xml:space="preserve"> </xsl:text>found.</rsv:report>
    </xsl:if>
    <xsl:apply-templates mode="M28" />
  </xsl:template>
  <xsl:template match="name" priority="3978" mode="M28">
    <xsl:if test="false">
      <rsv:report>Nothing.</rsv:report>
    </xsl:if>
    <xsl:apply-templates mode="M28" />
  </xsl:template>
  <xsl:template match="pubDate" priority="3977" mode="M28">
    <xsl:if test="child::*">
      <rsv:report see="http://blogs.law.harvard.edu/tech/rss">
        <xsl:text xml:space="preserve"> </xsl:text>
        <xsl:value-of select="name(.)" />
        <xsl:text xml:space="preserve"> </xsl:text>should not contain child elements. Child<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(child::*[position()=1])" /><xsl:text xml:space="preserve"> </xsl:text>found.</rsv:report>
    </xsl:if>
    <xsl:apply-templates mode="M28" />
  </xsl:template>
  <xsl:template match="rating" priority="3976" mode="M28">
    <xsl:if test="false">
      <rsv:report>Nothing.</rsv:report>
    </xsl:if>
    <xsl:apply-templates mode="M28" />
  </xsl:template>
  <xsl:template match="rss" priority="3975" mode="M28">
    <xsl:choose>
      <xsl:when test="/rss[generate-id(.)=generate-id(current())]" />
      <xsl:otherwise>
        <rsv:assert see="http://blogs.law.harvard.edu/tech/rss#whatIsRss">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must be the document root element.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:if test="string(normalize-space(text()))">
      <rsv:report>&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; should not have mixed text content.</rsv:report>
    </xsl:if>
    <xsl:choose>
      <xsl:when test="@version" />
      <xsl:otherwise>
        <rsv:assert see="http://blogs.law.harvard.edu/tech/rss#whatIsRss">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have a version attribute.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:if test="@version='2.0'">
      <rsv:report see="http://blogs.law.harvard.edu/tech/rss#whatIsRss">RSS version 2.0.</rsv:report>
    </xsl:if>
    <xsl:if test="@version!='2.0'">
      <rsv:report see="http://blogs.law.harvard.edu/tech/rss#whatIsRss">You should upgrade to RSS version 2.0.</rsv:report>
    </xsl:if>
    <xsl:if test="@version='0.91'">
      <rsv:report>RSS version 0.91.</rsv:report>
    </xsl:if>
    <xsl:if test="@version!='0.91' and @version!='2.0'">
      <rsv:report>This validator only works w/ version 0.91, 1.0 and 2.0 of RSS.</rsv:report>
    </xsl:if>
    <xsl:choose>
      <xsl:when test="count(channel)=1" />
      <xsl:otherwise>
        <rsv:assert see="http://blogs.law.harvard.edu/tech/rss#whatIsRss">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have exactly one &lt;channel&gt; child element.<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="count(channel)" /><xsl:text xml:space="preserve"> </xsl:text>occurance(s) found.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:if test="descendant-or-self::*/@xml:lang">
      <rsv:report>&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; xml:lang attribute rarely supported. Use &lt;language&gt;</rsv:report>
    </xsl:if>
    <xsl:apply-templates mode="M28" />
  </xsl:template>
  <xsl:template match="skipDays" priority="3974" mode="M28">
    <xsl:if test="string(normalize-space(text()))">
      <rsv:report>&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; should not have mixed text content.</rsv:report>
    </xsl:if>
    <xsl:choose>
      <xsl:when test="count(day)&lt;8" />
      <xsl:otherwise>
        <rsv:assert see="http://blogs.law.harvard.edu/tech/skipHoursDays#skipdays">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have at most 7 day child elements.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:apply-templates mode="M28" />
  </xsl:template>
  <xsl:template match="skipHours" priority="3973" mode="M28">
    <xsl:if test="string(normalize-space(text()))">
      <rsv:report>&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; should not have mixed text content.</rsv:report>
    </xsl:if>
    <xsl:choose>
      <xsl:when test="count(day)&lt;24" />
      <xsl:otherwise>
        <rsv:assert see="http://blogs.law.harvard.edu/tech/skipHoursDays#skipdays">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have at most 24 hour child elements.<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="count(day)" /><xsl:text xml:space="preserve"> </xsl:text>occurance(s) found.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:apply-templates mode="M28" />
  </xsl:template>
  <xsl:template match="source" priority="3972" mode="M28">
    <xsl:choose>
      <xsl:when test="@url" />
      <xsl:otherwise>
        <rsv:assert see="http://blogs.law.harvard.edu/tech/rss#ltsourcegtSubelementOfLtitemgt">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have the url attribute.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:if test="not(string(.))">
      <rsv:report see="http://blogs.law.harvard.edu/tech/rss#ltsourcegtSubelementOfLtitemgt">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; should have text content.</rsv:report>
    </xsl:if>
    <xsl:apply-templates mode="M28" />
  </xsl:template>
  <xsl:template match="textinput" priority="3971" mode="M28">
    <xsl:if test="string(normalize-space(text()))">
      <rsv:report>&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; should not have mixed text content.</rsv:report>
    </xsl:if>
    <xsl:choose>
      <xsl:when test="/rss/@version!='2.0'" />
      <xsl:otherwise>
        <rsv:assert see="http://blogs.law.harvard.edu/tech/rss#lttextinputgtSubelementOfLtchannelgt">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; is not a valid RSS 2.0 element. Use textInput (capitalization).</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="count(title)=1" />
      <xsl:otherwise>
        <rsv:assert>&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have exactly one &lt;title&gt; child element.<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="count(title)" /><xsl:text xml:space="preserve"> </xsl:text>occurance(s) found.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="count(description)=1" />
      <xsl:otherwise>
        <rsv:assert>&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have exactly one &lt;description&gt; child element.<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="count(description)" /><xsl:text xml:space="preserve"> </xsl:text>occurance(s) found.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="count(name)=1" />
      <xsl:otherwise>
        <rsv:assert>&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have exactly one &lt;name&gt; child element.<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="count(name)" /><xsl:text xml:space="preserve"> </xsl:text>occurance(s) found.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="count(link)=1" />
      <xsl:otherwise>
        <rsv:assert>&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have exactly one &lt;link&gt; child element.<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="count(link)" /><xsl:text xml:space="preserve"> </xsl:text>occurance(s) found.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:apply-templates mode="M28" />
  </xsl:template>
  <xsl:template match="textInput" priority="3970" mode="M28">
    <xsl:if test="string(normalize-space(text()))">
      <rsv:report>&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; should not have mixed text content.</rsv:report>
    </xsl:if>
    <xsl:choose>
      <xsl:when test="/rss/@version!='0.91'" />
      <xsl:otherwise>
        <rsv:assert>&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; is not a valid RSS 0.91 element. Use textinput (capitalization).</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="count(title)=1" />
      <xsl:otherwise>
        <rsv:assert see="http://blogs.law.harvard.edu/tech/rss#lttextinputgtSubelementOfLtchannelgt">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have exactly one &lt;title&gt; child element.<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="count(title)" /><xsl:text xml:space="preserve"> </xsl:text>occurance(s) found.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="count(description)=1" />
      <xsl:otherwise>
        <rsv:assert see="http://blogs.law.harvard.edu/tech/rss#lttextinputgtSubelementOfLtchannelgt">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have exactly one &lt;description&gt; child element.<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="count(description)" /><xsl:text xml:space="preserve"> </xsl:text>occurance(s) found.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="count(name)=1" />
      <xsl:otherwise>
        <rsv:assert see="http://blogs.law.harvard.edu/tech/rss#lttextinputgtSubelementOfLtchannelgt">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have exactly one &lt;name&gt; child element.<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="count(name)" /><xsl:text xml:space="preserve"> </xsl:text>occurance(s) found.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="count(link)=1" />
      <xsl:otherwise>
        <rsv:assert see="http://blogs.law.harvard.edu/tech/rss#lttextinputgtSubelementOfLtchannelgt">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have exactly one &lt;link&gt; child element.<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="count(link)" /><xsl:text xml:space="preserve"> </xsl:text>occurance(s) found.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:apply-templates mode="M28" />
  </xsl:template>
  <xsl:template match="image/title" priority="3969" mode="M28">
    <xsl:if test=".!=//channel/title">
      <rsv:report see="http://blogs.law.harvard.edu/tech/rss#ltimagegtSubelementOfLtchannelgt">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; should be the same value as &lt;channel&gt; &lt;title&gt;.</rsv:report>
    </xsl:if>
    <xsl:if test="child::*">
      <rsv:report>&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; should not contain child elements. Child<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(child::*[position()=1])" /><xsl:text xml:space="preserve"> </xsl:text>found.</rsv:report>
    </xsl:if>
    <xsl:if test="not(string(.))">
      <rsv:report see="http://blogs.law.harvard.edu/tech/rss#ltimagegtSubelementOfLtchannelgt">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; should contain text content.</rsv:report>
    </xsl:if>
    <xsl:apply-templates mode="M28" />
  </xsl:template>
  <xsl:template match="title" priority="3968" mode="M28">
    <xsl:if test="/rss and child::*">
      <rsv:report>
        <xsl:text xml:space="preserve"> </xsl:text>
        <xsl:value-of select="name(.)" />
        <xsl:text xml:space="preserve"> </xsl:text>should not contain child elements. Child<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(child::*[position()=1])" /><xsl:text xml:space="preserve"> </xsl:text>found.</rsv:report>
    </xsl:if>
    <xsl:apply-templates mode="M28" />
  </xsl:template>
  <xsl:template match="ttl" priority="3967" mode="M28">
    <xsl:choose>
      <xsl:when test="/rss/@version!='0.91'" />
      <xsl:otherwise>
        <rsv:assert>&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; is not a valid RSS 0.91 element.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="number(.)&gt;0 and not(contains(.,'.'))" />
      <xsl:otherwise>
        <rsv:assert see="http://blogs.law.harvard.edu/tech/rss#ltttlgtSubelementOfLtchannelgt">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must be a positive integer.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:apply-templates mode="M28" />
  </xsl:template>
  <xsl:template match="url" priority="3966" mode="M28">
    <xsl:choose>
      <xsl:when test="/rss/@version!='0.91' or not(starts-with(.,'https://'))" />
      <xsl:otherwise>
        <rsv:assert>&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must not start with https:// (RSS 0.91 specific).</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:apply-templates mode="M28" />
  </xsl:template>
  <xsl:template match="webMaster" priority="3965" mode="M28">
    <xsl:if test="child::*">
      <rsv:report>
        <xsl:text xml:space="preserve"> </xsl:text>
        <xsl:value-of select="name(.)" />
        <xsl:text xml:space="preserve"> </xsl:text>should not contain child elements. Child<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(child::*[position()=1])" /><xsl:text xml:space="preserve"> </xsl:text>found.</rsv:report>
    </xsl:if>
    <xsl:apply-templates mode="M28" />
  </xsl:template>
  <xsl:template match="width" priority="3964" mode="M28">
    <xsl:choose>
      <xsl:when test="number(.)&gt;0 and number(.)&lt;145 and not(contains(.,'.'))" />
      <xsl:otherwise>
        <rsv:assert see="http://blogs.law.harvard.edu/tech/rss#ltimagegtSubelementOfLtchannelgt">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must be a number greater than zero and less or equal to 144.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:apply-templates mode="M28" />
  </xsl:template>
  <xsl:template match="*" priority="3963" mode="M28">
    <xsl:choose>
      <xsl:when test="not(/rss) or string(namespace-uri())" />
      <xsl:otherwise>
        <rsv:assert see="http://blogs.law.harvard.edu/tech/rss">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; is not a valid rss element</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:apply-templates mode="M28" />
  </xsl:template>
  <xsl:template match="text()" priority="-1" mode="M28">
  </xsl:template>
  <xsl:template match="redirect" priority="4000" mode="M29">
    <xsl:choose>
      <xsl:when test="not(/redirect) or /redirect[generate-id(.)=generate-id(current())]" />
      <xsl:otherwise>
        <rsv:assert see="http://radio.userland.com/stories/storyReader$19964">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must be the document root element.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:if test="/redirect[generate-id(.)=generate-id(current())]">
      <rsv:report see="http://radio.userland.com/stories/storyReader$19964">RSS 2.0 redirect.</rsv:report>
    </xsl:if>
    <xsl:choose>
      <xsl:when test="not(/redirect) or count(newLocation)=1" />
      <xsl:otherwise>
        <rsv:assert>&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have exactly one &lt;newLocation&gt; child element.<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="count(newLocation)" /><xsl:text xml:space="preserve"> </xsl:text>occurance(s) found.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:apply-templates mode="M29" />
  </xsl:template>
  <xsl:template match="newLocation" priority="3999" mode="M29">
    <xsl:choose>
      <xsl:when test="not(/redirect) or parent::redirect" />
      <xsl:otherwise>
        <rsv:assert see="http://radio.userland.com/stories/storyReader$19964">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have a the &lt;redirect&gt; parent element. Parent is<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:apply-templates mode="M29" />
  </xsl:template>
  <xsl:template match="*" priority="3998" mode="M29">
    <xsl:choose>
      <xsl:when test="not(/redirect)" />
      <xsl:otherwise>
        <rsv:assert see="http://radio.userland.com/stories/storyReader$19964">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; is not a valid RSS redirect element</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:apply-templates mode="M29" />
  </xsl:template>
  <xsl:template match="text()" priority="-1" mode="M29">
  </xsl:template>
  <xsl:template match="admin:errorReportsTo" priority="4000" mode="M30">
    <xsl:choose>
      <xsl:when test="not(/rss or /rdf:RDF/rss:* or /rdf:RDF/rss09:*) or &#xD;&#xA;					parent::rss:channel or parent::channel" />
      <xsl:otherwise>
        <rsv:assert see="http://web.resource.org/rss/1.0/modules/admin/">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have the &lt;rss:channel&gt; or &lt;channel&gt; parent element. Parent is<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="@rdf:resource" />
      <xsl:otherwise>
        <rsv:assert see="http://web.resource.org/rss/1.0/modules/admin/">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have a rdf:resource attribute.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:if test="parent::channel">
      <rsv:report see="http://www.kbcafe.com/iBLOGthere4iM/?guid=20030619225318">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; in RSS 2.0 is funky, use webMaster.</rsv:report>
    </xsl:if>
    <xsl:apply-templates mode="M30" />
  </xsl:template>
  <xsl:template match="admin:generatorAgent" priority="3999" mode="M30">
    <xsl:choose>
      <xsl:when test="not(/rss or /rdf:RDF/rss:* or /rdf:RDF/rss09:*) or &#xD;&#xA;					parent::rss:channel or parent::channel" />
      <xsl:otherwise>
        <rsv:assert see="http://web.resource.org/rss/1.0/modules/admin/">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have the &lt;rss:channel&gt; or &lt;channel&gt; parent element. Parent is<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="@rdf:resource" />
      <xsl:otherwise>
        <rsv:assert see="http://web.resource.org/rss/1.0/modules/admin/">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have a rdf:resource attribute.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:if test="parent::channel">
      <rsv:report see="http://www.kbcafe.com/iBLOGthere4iM/?guid=20030619225318">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; in RSS 2.0 is funky, use generator.</rsv:report>
    </xsl:if>
    <xsl:apply-templates mode="M30" />
  </xsl:template>
  <xsl:template match="admin:*" priority="3998" mode="M30">
    <xsl:choose>
      <xsl:when test="false" />
      <xsl:otherwise>
        <rsv:assert see="http://web.resource.org/rss/1.0/modules/admin/">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; is not a valid admin namespace element.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:apply-templates mode="M30" />
  </xsl:template>
  <xsl:template match="text()" priority="-1" mode="M30">
  </xsl:template>
  <xsl:template match="blogChannel:*" priority="4000" mode="M31">
    <xsl:choose>
      <xsl:when test="parent::channel" />
      <xsl:otherwise>
        <rsv:assert>&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have the &lt;channel&gt; parent element. Parent is<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="not(blogChannel:blogRoll or blogChannel:mySubscriptions or blogChannel:blink or blogChannel:changes)" />
      <xsl:otherwise>
        <rsv:assert>&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; is not a valid blogChannel namespace element</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:apply-templates mode="M31" />
  </xsl:template>
  <xsl:template match="text()" priority="-1" mode="M31">
  </xsl:template>
  <xsl:template match="dc:date" priority="4000" mode="M32">
    <xsl:choose>
      <xsl:when test="not(@*[name()!='xml:lang' and name()!='xml:space' and name()!='rdf:parseType' and name()!='rdf:dataType' and name()!='rdf:ID' and name()!='rdf:resource'])" />
      <xsl:otherwise>
        <rsv:assert see="http://dublincore.org/documents/dces/">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must only have the xml:lang, xml:space, rdf:parseType, rdf:dataType, rdf:ID and rdf:resource attributes.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="not(@rdf:resource) or not(string-length(.)&gt;0 or child::*)" />
      <xsl:otherwise>
        <rsv:assert see="http://dublincore.org/documents/dces/">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must not have both content and the rdf:resource attribute.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:if test="count(child::*)&gt;0">
      <rsv:report see="http://dublincore.org/documents/dces/">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; should not contain child elements. Child<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(child::*[position()=1])" /><xsl:text xml:space="preserve"> </xsl:text>found.</rsv:report>
    </xsl:if>
    <xsl:if test="parent::item or parent::channel">
      <rsv:report see="http://www.kbcafe.com/iBLOGthere4iM/?guid=20030619225318">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; in RSS 2.0 is funky, use pubDate.</rsv:report>
    </xsl:if>
    <xsl:apply-templates mode="M32" />
  </xsl:template>
  <xsl:template match="dc:language" priority="3999" mode="M32">
    <xsl:choose>
      <xsl:when test="not(@*[name()!='xml:lang' and name()!='xml:space' and name()!='rdf:parseType' and name()!='rdf:dataType' and name()!='rdf:ID' and name()!='rdf:resource'])" />
      <xsl:otherwise>
        <rsv:assert see="http://dublincore.org/documents/dces/">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must only have the xml:lang, xml:space, rdf:parseType, rdf:dataType, rdf:ID and rdf:resource attributes.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="not(@rdf:resource) or not(string-length(.)&gt;0 or child::*)" />
      <xsl:otherwise>
        <rsv:assert see="http://dublincore.org/documents/dces/">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must not have both content and the rdf:resource attribute.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="string-length(.)&gt;0" />
      <xsl:otherwise>
        <rsv:assert see="http://dublincore.org/documents/dces/">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must not be empty.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:if test="count(child::*)&gt;0">
      <rsv:report see="http://dublincore.org/documents/dces/">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; should not contain child elements. Child<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(child::*[position()=1])" /><xsl:text xml:space="preserve"> </xsl:text>found.</rsv:report>
    </xsl:if>
    <xsl:choose>
      <xsl:when test="not(parent::channel/language) or parent::channel/language/text()=text()" />
      <xsl:otherwise>
        <rsv:assert see="http://dublincore.org/documents/dces/">If both &lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; and &lt;language&gt; are present, they must be equal.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:if test="parent::channel">
      <rsv:report see="http://www.kbcafe.com/iBLOGthere4iM/?guid=20030619225318">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; in RSS 2.0 is funky, use language.</rsv:report>
    </xsl:if>
    <xsl:apply-templates mode="M32" />
  </xsl:template>
  <xsl:template match="dc:subject|dc:publisher|dc:contributor|dc:type|dc:format|dc:identifier|dc:source|dc:relation|dc:coverage" priority="3998" mode="M32">
    <xsl:choose>
      <xsl:when test="not(@*[name()!='xml:lang' and name()!='xml:space' and name()!='rdf:parseType' and name()!='rdf:dataType' and name()!='rdf:ID' and name()!='rdf:resource'])" />
      <xsl:otherwise>
        <rsv:assert see="http://dublincore.org/documents/dces/">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must only have the xml:lang, xml:space, rdf:parseType, rdf:dataType, rdf:ID and rdf:resource attributes.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="not(@rdf:resource) or not(string-length(.)&gt;0 or child::*)" />
      <xsl:otherwise>
        <rsv:assert see="http://dublincore.org/documents/dces/">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must not have both content and the rdf:resource attribute.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:apply-templates mode="M32" />
  </xsl:template>
  <xsl:template match="dc:description" priority="3997" mode="M32">
    <xsl:choose>
      <xsl:when test="not(@*[name()!='xml:lang' and name()!='xml:space' and name()!='rdf:parseType' and name()!='rdf:dataType' and name()!='rdf:ID' and name()!='rdf:resource'])" />
      <xsl:otherwise>
        <rsv:assert see="http://dublincore.org/documents/dces/">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must only have the xml:lang, xml:space, rdf:parseType, rdf:dataType, rdf:ID and rdf:resource attributes.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="not(@rdf:resource) or not(string-length(.)&gt;0 or child::*)" />
      <xsl:otherwise>
        <rsv:assert see="http://dublincore.org/documents/dces/">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must not have both content and the rdf:resource attribute.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:if test="parent::rss:channel/rss:description or parent::rss:item/rss:description">
      <rsv:report>Using both &lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; and &lt;rss:title&gt; is redundant.</rsv:report>
    </xsl:if>
    <xsl:if test="parent::channel or parent::item">
      <rsv:report see="http://www.kbcafe.com/iBLOGthere4iM/?guid=20030619225318">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; in RSS 2.0 is funky, use description.</rsv:report>
    </xsl:if>
    <xsl:apply-templates mode="M32" />
  </xsl:template>
  <xsl:template match="dc:title" priority="3996" mode="M32">
    <xsl:choose>
      <xsl:when test="not(@*[name()!='xml:lang' and name()!='xml:space' and name()!='rdf:parseType' and name()!='rdf:dataType' and name()!='rdf:ID' and name()!='rdf:resource'])" />
      <xsl:otherwise>
        <rsv:assert see="http://dublincore.org/documents/dces/">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must only have the xml:lang, xml:space, rdf:parseType, rdf:dataType, rdf:ID and rdf:resource attributes.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="not(@rdf:resource) or not(string-length(.)&gt;0 or child::*)" />
      <xsl:otherwise>
        <rsv:assert see="http://dublincore.org/documents/dces/">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must not have both content and the rdf:resource attribute.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:if test="parent::channel or parent::item">
      <rsv:report see="http://www.kbcafe.com/iBLOGthere4iM/?guid=20030619225318">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; in RSS 2.0 is funky, use title.</rsv:report>
    </xsl:if>
    <xsl:if test="parent::rss:channel/rss:title or parent::rss:item/rss:title">
      <rsv:report>Using both &lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; and &lt;rss:title&gt; is redundant.</rsv:report>
    </xsl:if>
    <xsl:apply-templates mode="M32" />
  </xsl:template>
  <xsl:template match="dc:creator" priority="3995" mode="M32">
    <xsl:choose>
      <xsl:when test="not(@*[name()!='xml:lang' and name()!='xml:space' and name()!='rdf:parseType' and name()!='rdf:dataType' and name()!='rdf:ID' and name()!='rdf:resource'])" />
      <xsl:otherwise>
        <rsv:assert see="http://dublincore.org/documents/dces/">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must only have the xml:lang, xml:space, rdf:parseType, rdf:dataType, rdf:ID and rdf:resource attributes.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="not(@rdf:resource) or not(string-length(.)&gt;0 or child::*)" />
      <xsl:otherwise>
        <rsv:assert see="http://dublincore.org/documents/dces/">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must not have both content and the rdf:resource attribute.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:if test="parent::channel">
      <rsv:report see="http://www.kbcafe.com/iBLOGthere4iM/?guid=20030619225318">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; in RSS 2.0 is funky, use managingEditor.</rsv:report>
    </xsl:if>
    <xsl:if test="parent::item">
      <rsv:report see="http://www.kbcafe.com/iBLOGthere4iM/?guid=20030619225318">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; in RSS 2.0 is funky, use author.</rsv:report>
    </xsl:if>
    <xsl:apply-templates mode="M32" />
  </xsl:template>
  <xsl:template match="dc:rights" priority="3994" mode="M32">
    <xsl:choose>
      <xsl:when test="not(@*[name()!='xml:lang' and name()!='xml:space' and name()!='rdf:parseType' and name()!='rdf:dataType' and name()!='rdf:ID' and name()!='rdf:resource'])" />
      <xsl:otherwise>
        <rsv:assert see="http://dublincore.org/documents/dces/">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must only have the xml:lang, xml:space, rdf:parseType, rdf:dataType, rdf:ID and rdf:resource attributes.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="not(@rdf:resource) or not(string-length(.)&gt;0 or child::*)" />
      <xsl:otherwise>
        <rsv:assert see="http://dublincore.org/documents/dces/">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must not have both content and the rdf:resource attribute.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:if test="parent::channel">
      <rsv:report see="http://www.kbcafe.com/iBLOGthere4iM/?guid=20030619225318">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; in RSS 2.0 is funky, use copyright.</rsv:report>
    </xsl:if>
    <xsl:apply-templates mode="M32" />
  </xsl:template>
  <xsl:template match="dc:*" priority="3993" mode="M32">
    <xsl:choose>
      <xsl:when test="false" />
      <xsl:otherwise>
        <rsv:assert see="http://dublincore.org/documents/dces/">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; is not a valid dublin core namespace element</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:apply-templates mode="M32" />
  </xsl:template>
  <xsl:template match="text()" priority="-1" mode="M32">
  </xsl:template>
  <xsl:template match="sy:updatePeriod" priority="4000" mode="M33">
    <xsl:choose>
      <xsl:when test="parent::rss:channel or parent::channel" />
      <xsl:otherwise>
        <rsv:assert see="http://web.resource.org/rss/1.0/modules/syndication/">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have the &lt;rss:channel&gt; or &lt;channel&gt; parent element. Parent is<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test=".='hourly' or .='daily' or .='weekly' or .='monthly' or .='yearly'" />
      <xsl:otherwise>
        <rsv:assert see="http://web.resource.org/rss/1.0/modules/syndication/">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must be hourly, daily, weekly, monthly or yearly.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:if test="parent::channel">
      <rsv:report see="http://www.kbcafe.com/iBLOGthere4iM/?guid=20030619225318">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; in RSS 2.0 is funky, use ttl.</rsv:report>
    </xsl:if>
    <xsl:apply-templates mode="M33" />
  </xsl:template>
  <xsl:template match="sy:updateFrequency" priority="3999" mode="M33">
    <xsl:choose>
      <xsl:when test="parent::rss:channel or parent::channel" />
      <xsl:otherwise>
        <rsv:assert see="http://web.resource.org/rss/1.0/modules/syndication/">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have the &lt;rss:channel&gt; or &lt;channel&gt; parent element. Parent is<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="not(contains(.,'.')) and number(.)&gt;0" />
      <xsl:otherwise>
        <rsv:assert see="http://web.resource.org/rss/1.0/modules/syndication/">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must be a positive integer.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:if test="parent::channel">
      <rsv:report see="http://www.kbcafe.com/iBLOGthere4iM/?guid=20030619225318">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; in RSS 2.0 is funky, use ttl.</rsv:report>
    </xsl:if>
    <xsl:apply-templates mode="M33" />
  </xsl:template>
  <xsl:template match="sy:updateBase" priority="3998" mode="M33">
    <xsl:choose>
      <xsl:when test="parent::rss:channel or parent::channel" />
      <xsl:otherwise>
        <rsv:assert see="http://web.resource.org/rss/1.0/modules/syndication/">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have the &lt;rss:channel&gt; or &lt;channel&gt; parent element. Parent is<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:apply-templates mode="M33" />
  </xsl:template>
  <xsl:template match="sy:*" priority="3997" mode="M33">
    <xsl:choose>
      <xsl:when test="false" />
      <xsl:otherwise>
        <rsv:assert see="http://web.resource.org/rss/1.0/modules/syndication/">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; is not a valid syndication namespace element</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:apply-templates mode="M33" />
  </xsl:template>
  <xsl:template match="text()" priority="-1" mode="M33">
  </xsl:template>
  <xsl:template match="content:encoded" priority="4000" mode="M34">
    <xsl:choose>
      <xsl:when test="parent::rss:item or parent::item" />
      <xsl:otherwise>
        <rsv:assert see="http://web.resource.org/rss/1.0/modules/admin/">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have the &lt;rss:item&gt; or &lt;item&gt; parent element. Parent is<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:if test="parent::item">
      <rsv:report see="http://www.kbcafe.com/iBLOGthere4iM/?guid=20030619225318">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; in RSS 2.0 is funky, use description.</rsv:report>
    </xsl:if>
    <xsl:if test="contains(translate(.,'EMBD','embd'),'&lt;embed ') or contains(translate(.,'EMBD','embd'),'&lt;embed&gt;')">
      <rsv:report>&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; should not contain an entity-encoded HTML &lt;embed&gt; element.</rsv:report>
    </xsl:if>
    <xsl:if test="contains(translate(.,'META','meta'),'&lt;meta ') or contains(translate(.,'META','meta'),'&lt;meta&gt;')">
      <rsv:report>&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; should not contain an entity-encoded HTML &lt;meta&gt; element.</rsv:report>
    </xsl:if>
    <xsl:if test="contains(translate(.,'OBJECT','object'),'&lt;object ') or contains(translate(.,'OBJECT','object'),'&lt;object&gt;')">
      <rsv:report>&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; should not contain an entity-encoded HTML &lt;object&gt; element.</rsv:report>
    </xsl:if>
    <xsl:if test="contains(translate(.,'SCRIPT','script'),'&lt;script ') or contains(translate(.,'SCRIPT','script'),'&lt;script&gt;')">
      <rsv:report>&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; should not contain an entity-encoded HTML &lt;script&gt; element.</rsv:report>
    </xsl:if>
    <xsl:apply-templates mode="M34" />
  </xsl:template>
  <xsl:template match="content:items" priority="3999" mode="M34">
    <xsl:choose>
      <xsl:when test="parent::rss:item or parent::rss:channel" />
      <xsl:otherwise>
        <rsv:assert see="http://web.resource.org/rss/1.0/modules/admin/">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have the &lt;rss:item&gt; or &lt;rss:channel&gt; parent element. Parent is<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="count(rdf:Bag)=1" />
      <xsl:otherwise>
        <rsv:assert see="http://web.resource.org/rss/1.0/modules/admin/">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have exactly one &lt;rdf:Bag&gt; child element.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:apply-templates mode="M34" />
  </xsl:template>
  <xsl:template match="content:item" priority="3998" mode="M34">
    <xsl:if test="//@rdf:about[.=current()/@rdf:about and generate-id(.)!=generate-id(current()/@rdf:about)]">
      <rsv:report see="http://web.resource.org/rss/1.0/modules/admin/">The value of a<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>rdf:about attribute must be unique Duplicate value<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="@rdf:about" /><xsl:text xml:space="preserve"> </xsl:text>found.</rsv:report>
    </xsl:if>
    <xsl:choose>
      <xsl:when test="count(content:format)=1" />
      <xsl:otherwise>
        <rsv:assert see="http://web.resource.org/rss/1.0/modules/admin/">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have exactly one &lt;content:format&gt; child element.<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="count(content:format)" /><xsl:text xml:space="preserve"> </xsl:text>occurance(s) found.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="count(content:encoding)&lt;2" />
      <xsl:otherwise>
        <rsv:assert see="http://web.resource.org/rss/1.0/modules/admin/">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have zero or one &lt;content:encoding&gt; child element.<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="count(content:encoding)" /><xsl:text xml:space="preserve"> </xsl:text>occurance(s) found.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:apply-templates mode="M34" />
  </xsl:template>
  <xsl:template match="content:format" priority="3997" mode="M34">
    <xsl:choose>
      <xsl:when test="@rdf:resource" />
      <xsl:otherwise>
        <rsv:assert see="http://web.resource.org/rss/1.0/modules/admin/">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have the &lt;rdf:resource&gt; attribute.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:apply-templates mode="M34" />
  </xsl:template>
  <xsl:template match="content:encoding" priority="3996" mode="M34">
    <xsl:choose>
      <xsl:when test="@rdf:resource" />
      <xsl:otherwise>
        <rsv:assert see="http://web.resource.org/rss/1.0/modules/admin/">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have the &lt;rdf:resource&gt; attribute.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:apply-templates mode="M34" />
  </xsl:template>
  <xsl:template match="content:*" priority="3995" mode="M34">
    <xsl:choose>
      <xsl:when test="false" />
      <xsl:otherwise>
        <rsv:assert see="http://web.resource.org/rss/1.0/modules/admin/">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; is not a valid content namespace element</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:apply-templates mode="M34" />
  </xsl:template>
  <xsl:template match="text()" priority="-1" mode="M34">
  </xsl:template>
  <xsl:template match="xhtml:body" priority="4000" mode="M35">
    <xsl:if test="parent::item">
      <rsv:report see="http://www.kbcafe.com/iBLOGthere4iM/?guid=20030619225318">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; in RSS 2.0 is funky, use description.</rsv:report>
    </xsl:if>
    <xsl:if test="descendant::xhtml:embed">
      <rsv:report>&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; should not have an &lt;xhtml:embed&gt; descendant element.</rsv:report>
    </xsl:if>
    <xsl:if test="descendant::xhtml:meta">
      <rsv:report>&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; should not have an &lt;xhtml:meta&gt; descendant element.</rsv:report>
    </xsl:if>
    <xsl:if test="descendant::xhtml:object">
      <rsv:report>&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; should not have an &lt;xhtml:object&gt; descendant element.</rsv:report>
    </xsl:if>
    <xsl:if test="descendant::xhtml:script">
      <rsv:report>&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; should not have an &lt;xhtml:script&gt; descendant element.</rsv:report>
    </xsl:if>
    <xsl:apply-templates mode="M35" />
  </xsl:template>
  <xsl:template match="text()" priority="-1" mode="M35">
  </xsl:template>
  <xsl:template match="creativeCommons:license" priority="4000" mode="M36">
    <xsl:choose>
      <xsl:when test="parent::item or parent::rss:item or parent::channel or parent::rss:channel" />
      <xsl:otherwise>
        <rsv:assert see="http://backend.userland.com/creativeCommonsRssModule">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have the &lt;item&gt; or &lt;rss:item&gt; or &lt;channel&gt; or &lt;rss:channel&gt; parent element. Parent is<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="starts-with(., 'http://') or starts-with(., 'https://') or starts-with(., 'ftp://')" />
      <xsl:otherwise>
        <rsv:assert see="http://backend.userland.com/creativeCommonsRssModule">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must be a URL.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:apply-templates mode="M36" />
  </xsl:template>
  <xsl:template match="creativeCommons:*" priority="3999" mode="M36">
    <xsl:choose>
      <xsl:when test="false" />
      <xsl:otherwise>
        <rsv:assert see="http://backend.userland.com/creativeCommonsRssModule">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; is not a valid creativeCommons namespace element.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:apply-templates mode="M36" />
  </xsl:template>
  <xsl:template match="text()" priority="-1" mode="M36">
  </xsl:template>
  <xsl:template match="trackback:ping" priority="4000" mode="M37">
    <xsl:choose>
      <xsl:when test="parent::item or parent::rss:item" />
      <xsl:otherwise>
        <rsv:assert>&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have the &lt;rss:item&gt; or &lt;item&gt; parent element. Parent is<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="count(parent::item/trackback:ping)=1 or count(parent::rss:item/trackback:ping)=1" />
      <xsl:otherwise>
        <rsv:assert>&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must be the only &lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; element within the parent element.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="/rss/@version!='2.0' or starts-with(., 'http://') or starts-with(., 'https://')" />
      <xsl:otherwise>
        <rsv:assert>&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must be an HTTP URL (RSS 2.0 specific).</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="namespace-uri(parent::item)!='http://purl.org/rss/1.0/' or starts-with(@rdf:resource, 'http://') or starts-with(@rdf:resource, 'https://')" />
      <xsl:otherwise>
        <rsv:assert>&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; @rdf:resource attribute must be an HTTP URL (RSS 1.0 specific).</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="namespace-uri(parent::item)!='http://purl.org/rss/1.0/' or @rdf:resource" />
      <xsl:otherwise>
        <rsv:assert>&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have an @rdf:resource attribute (RSS 1.0 specific).</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:apply-templates mode="M37" />
  </xsl:template>
  <xsl:template match="trackback:about" priority="3999" mode="M37">
    <xsl:choose>
      <xsl:when test="parent::item or parent::rss:item" />
      <xsl:otherwise>
        <rsv:assert>&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have the &lt;rss:item&gt; or &lt;item&gt; parent element. Parent is<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="/rss/@version!='2.0' or starts-with(., 'http://') or starts-with(., 'https://')" />
      <xsl:otherwise>
        <rsv:assert>&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must be an HTTP URL (RSS 2.0 specific).</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="namespace-uri(parent::item)!='http://purl.org/rss/1.0/' or starts-with(@rdf:resource, 'http://') or starts-with(@rdf:resource, 'https://')" />
      <xsl:otherwise>
        <rsv:assert>&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; @rdf:resource attribute must be an HTTP URL (RSS 1.0 specific).</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="namespace-uri(parent::item)!='http://purl.org/rss/1.0/' or @rdf:resource" />
      <xsl:otherwise>
        <rsv:assert>&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have an @rdf:resource attribute (RSS 1.0 specific).</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:apply-templates mode="M37" />
  </xsl:template>
  <xsl:template match="trackback:*" priority="3998" mode="M37">
    <xsl:choose>
      <xsl:when test="false" />
      <xsl:otherwise>
        <rsv:assert>&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; is not a valid trackback namespace element.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:apply-templates mode="M37" />
  </xsl:template>
  <xsl:template match="text()" priority="-1" mode="M37">
  </xsl:template>
  <xsl:template match="wfw:comment|wfw:commentRSS|wfw:commentRss" priority="4000" mode="M38">
    <xsl:choose>
      <xsl:when test="parent::item or parent::rss:item" />
      <xsl:otherwise>
        <rsv:assert>&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have the &lt;rss:item&gt; or &lt;item&gt; parent element. Parent is<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="starts-with(., 'http://') or starts-with(., 'https://')" />
      <xsl:otherwise>
        <rsv:assert>&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must be an HTTP URL.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:if test="name()='wfw:commentRss'">
      <rsv:report>&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; should be commentRSS (capitalization).</rsv:report>
    </xsl:if>
    <xsl:apply-templates mode="M38" />
  </xsl:template>
  <xsl:template match="wfw:*" priority="3999" mode="M38">
    <xsl:choose>
      <xsl:when test="false" />
      <xsl:otherwise>
        <rsv:assert>&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; is not a valid well formed web namespace element.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:apply-templates mode="M38" />
  </xsl:template>
  <xsl:template match="text()" priority="-1" mode="M38">
  </xsl:template>
  <xsl:template match="slash:section|slash:department|slash:hit_parade" priority="4000" mode="M39">
    <xsl:choose>
      <xsl:when test="parent::item or parent::rss:item" />
      <xsl:otherwise>
        <rsv:assert>&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have the &lt;rss:item&gt; or &lt;item&gt; parent element. Parent is<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:apply-templates mode="M39" />
  </xsl:template>
  <xsl:template match="slash:comments" priority="3999" mode="M39">
    <xsl:choose>
      <xsl:when test="parent::item or parent::rss:item" />
      <xsl:otherwise>
        <rsv:assert>&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have the &lt;rss:item&gt; or &lt;item&gt; parent element. Parent is<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="number(.)&gt;-1 and not(contains(.,'.'))" />
      <xsl:otherwise>
        <rsv:assert>&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must be an non-negative integer.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:apply-templates mode="M39" />
  </xsl:template>
  <xsl:template match="slash:*" priority="3998" mode="M39">
    <xsl:choose>
      <xsl:when test="false" />
      <xsl:otherwise>
        <rsv:assert>&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; is not a valid well formed web namespace element.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:apply-templates mode="M39" />
  </xsl:template>
  <xsl:template match="text()" priority="-1" mode="M39">
  </xsl:template>
  <xsl:template match="opml" priority="4000" mode="M40">
    <xsl:choose>
      <xsl:when test="/opml[generate-id(.)=generate-id(current())]" />
      <xsl:otherwise>
        <rsv:assert>&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must be the document root element.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="@version" />
      <xsl:otherwise>
        <rsv:assert see="http://www.opml.org/spec#whatIsAnLtopmlgt">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have a version attribute.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:if test="@version!='1.0' and @version!='1.1'">
      <rsv:report see="http://www.opml.org/spec#whatIsAnLtopmlgt">This validator only supports OPML version 1.0 and 1.1. OPML version number is<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="@version" /><xsl:text xml:space="preserve"> </xsl:text>.</rsv:report>
    </xsl:if>
    <xsl:choose>
      <xsl:when test="count(head)=1" />
      <xsl:otherwise>
        <rsv:assert see="http://www.opml.org/spec#whatIsAnLtopmlgt">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have exactly one &lt;head&gt; child element.<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="count(head)" /><xsl:text xml:space="preserve"> </xsl:text>occurance(s) found.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="count(body)=1" />
      <xsl:otherwise>
        <rsv:assert see="http://www.opml.org/spec#whatIsAnLtopmlgt">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have exactly one &lt;body&gt; child element.<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="count(body)" /><xsl:text xml:space="preserve"> </xsl:text>occurance(s) found.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="not(@version) or (number(@version) and contains(@version,'.') and&#xD;&#xA;				number(substring-before(@version,'.'))&gt;0 and&#xD;&#xA;				number(substring-after(@version,'.'))&gt;-1 and&#xD;&#xA;				not(contains(substring-after(@version,'.'),'.')))" />
      <xsl:otherwise>
        <rsv:assert see="http://www.opml.org/spec#whatIsAnLtopmlgt">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; version attribute must be a number (format x.y).</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:if test="@version='1.0'">
      <rsv:report see="http://www.opml.org/spec#whatIsAnLtopmlgt">OPML version 1.0.</rsv:report>
    </xsl:if>
    <xsl:if test="@version='1.1'">
      <rsv:report>OPML version 1.1.</rsv:report>
    </xsl:if>
    <xsl:apply-templates mode="M40" />
  </xsl:template>
  <xsl:template match="head" priority="3999" mode="M40">
    <xsl:choose>
      <xsl:when test="parent::opml" />
      <xsl:otherwise>
        <rsv:assert>&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have the &lt;opml&gt; parent element. Parent is<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="count(title)&lt;2" />
      <xsl:otherwise>
        <rsv:assert see="http://www.opml.org/spec#whatIsALtheadgt">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have zero or one &lt;title&gt; child element.<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="count(title)" /><xsl:text xml:space="preserve"> </xsl:text>occurance(s) found.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="count(dateCreated)&lt;2" />
      <xsl:otherwise>
        <rsv:assert see="http://www.opml.org/spec#whatIsALtheadgt">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have zero or one &lt;dateCreated&gt; child element.<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="count(dateCreated)" /><xsl:text xml:space="preserve"> </xsl:text>occurance(s) found.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="count(dateModified)&lt;2" />
      <xsl:otherwise>
        <rsv:assert see="http://www.opml.org/spec#whatIsALtheadgt">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have zero or one &lt;dateModified&gt; child element.<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="count(dateModified)" /><xsl:text xml:space="preserve"> </xsl:text>occurance(s) found.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="count(ownerName)&lt;2" />
      <xsl:otherwise>
        <rsv:assert see="http://www.opml.org/spec#whatIsALtheadgt">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have zero or one &lt;ownerName&gt; child element.<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="count(ownerName)" /><xsl:text xml:space="preserve"> </xsl:text>occurance(s) found.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="count(ownerEmail)&lt;2" />
      <xsl:otherwise>
        <rsv:assert see="http://www.opml.org/spec#whatIsALtheadgt">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have zero or one &lt;ownerEmail&gt; child element.<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="count(ownerEmail)" /><xsl:text xml:space="preserve"> </xsl:text>occurance(s) found.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="count(expansionState)&lt;2" />
      <xsl:otherwise>
        <rsv:assert see="http://www.opml.org/spec#whatIsALtheadgt">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have zero or one &lt;expansionState&gt; child element.<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="count(expansionState)" /><xsl:text xml:space="preserve"> </xsl:text>occurance(s) found.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="count(vertScrollState)&lt;2" />
      <xsl:otherwise>
        <rsv:assert see="http://www.opml.org/spec#whatIsALtheadgt">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have zero or one &lt;vertScrollState&gt; child element.<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="count(vertScrollState)" /><xsl:text xml:space="preserve"> </xsl:text>occurance(s) found.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="count(windowTop)&lt;2" />
      <xsl:otherwise>
        <rsv:assert see="http://www.opml.org/spec#whatIsALtheadgt">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have zero or one &lt;windowTop&gt; child element.<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="count(windowTop)" /><xsl:text xml:space="preserve"> </xsl:text>occurance(s) found.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="count(windowLeft)&lt;2" />
      <xsl:otherwise>
        <rsv:assert see="http://www.opml.org/spec#whatIsALtheadgt">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have zero or one &lt;windowLeft&gt; child element.<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="count(windowLeft)" /><xsl:text xml:space="preserve"> </xsl:text>occurance(s) found.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="count(windowBottom)&lt;2" />
      <xsl:otherwise>
        <rsv:assert see="http://www.opml.org/spec#whatIsALtheadgt">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have zero or one &lt;windowBottom&gt; child element.<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="count(windowBottom)" /><xsl:text xml:space="preserve"> </xsl:text>occurance(s) found.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="count(windowRight)&lt;2" />
      <xsl:otherwise>
        <rsv:assert see="http://www.opml.org/spec#whatIsALtheadgt">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have zero or one &lt;windowRight&gt; child element.<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="count(windowRight)" /><xsl:text xml:space="preserve"> </xsl:text>occurance(s) found.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="count(cloud)&lt;2" />
      <xsl:otherwise>
        <rsv:assert see="http://www.opml.org/stories/storyReader$11">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have zero or one &lt;cloud&gt; child element.<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="count(cloud)" /><xsl:text xml:space="preserve"> </xsl:text>occurance(s) found.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:apply-templates mode="M40" />
  </xsl:template>
  <xsl:template match="title|dateCreated|dateModified|ownerName|ownerEmail|expansionState" priority="3998" mode="M40">
    <xsl:choose>
      <xsl:when test="not(/opml) or parent::head" />
      <xsl:otherwise>
        <rsv:assert see="http://www.opml.org/spec#whatIsALtheadgt">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have the &lt;head&gt; parent element. Parent is<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:apply-templates mode="M40" />
  </xsl:template>
  <xsl:template match="cloud" priority="3997" mode="M40">
    <xsl:choose>
      <xsl:when test="not(/opml) or parent::head" />
      <xsl:otherwise>
        <rsv:assert see="http://www.opml.org/stories/storyReader$11">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have the &lt;head&gt; parent element. Parent is<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:apply-templates mode="M40" />
  </xsl:template>
  <xsl:template match="vertScrollState|windowTop|windowLeft|windowBottom|windowRight" priority="3996" mode="M40">
    <xsl:choose>
      <xsl:when test="not(/opml) or parent::head" />
      <xsl:otherwise>
        <rsv:assert>&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have the &lt;head&gt; parent element. Parent is<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="number(.)&gt;-1 and not(contains(.,'.'))" />
      <xsl:otherwise>
        <rsv:assert see="http://www.opml.org/spec#whatIsALtheadgt">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must be a non-negative integer. Value is<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="." /><xsl:text xml:space="preserve"> </xsl:text>.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:apply-templates mode="M40" />
  </xsl:template>
  <xsl:template match="body" priority="3995" mode="M40">
    <xsl:choose>
      <xsl:when test="parent::opml" />
      <xsl:otherwise>
        <rsv:assert>&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have the &lt;opml&gt; parent element. Parent is<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:apply-templates mode="M40" />
  </xsl:template>
  <xsl:template match="outline" priority="3994" mode="M40">
    <xsl:choose>
      <xsl:when test="parent::outline or parent::body" />
      <xsl:otherwise>
        <rsv:assert>&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have the &lt;body&gt; or &lt;outline&gt; parent element. Parent is<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="not(@isComment) or @isComment='true' or @isComment='false'" />
      <xsl:otherwise>
        <rsv:assert see="http://www.opml.org/spec#commonAttributes">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must be true or false. Value is<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="." /><xsl:text xml:space="preserve"> </xsl:text>.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="not(@isBreakpoint) or @isBreakpoint='true' or @isBreakpoint='false'" />
      <xsl:otherwise>
        <rsv:assert see="http://www.opml.org/spec#commonAttributes">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must be true or false. Value is<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="." /><xsl:text xml:space="preserve"> </xsl:text>.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:if test="@title and not(@text)">
      <rsv:report see="http://www.opml.org/spec#commonAttributes">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; title attribute is unspecified, use text instead.</rsv:report>
    </xsl:if>
    <xsl:apply-templates mode="M40" />
  </xsl:template>
  <xsl:template match="*" priority="3993" mode="M40">
    <xsl:choose>
      <xsl:when test="not(/opml)" />
      <xsl:otherwise>
        <rsv:assert see="http://www.opml.org/spec">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; is not a valid opml element</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:apply-templates mode="M40" />
  </xsl:template>
  <xsl:template match="text()" priority="-1" mode="M40">
  </xsl:template>
  <xsl:template match="atom:feed" priority="4000" mode="M41">
    <xsl:choose>
      <xsl:when test="/atom:feed[generate-id(.)=generate-id(current())]" />
      <xsl:otherwise>
        <rsv:assert>&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must be the document root element.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:if test="@version='0.3'">
      <rsv:report>Atom version 0.3.</rsv:report>
    </xsl:if>
    <xsl:if test="@version!='0.3'">
      <rsv:report>The validator only works with Atom version 0.3. Version is<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="@version" /><xsl:text xml:space="preserve"> </xsl:text>.</rsv:report>
    </xsl:if>
    <xsl:choose>
      <xsl:when test="@version" />
      <xsl:otherwise>
        <rsv:assert>&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have a version attribute.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="count(atom:title)=1" />
      <xsl:otherwise>
        <rsv:assert>&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have exactly one &lt;atom:title&gt; child element.<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="count(atom:title)" /><xsl:text xml:space="preserve"> </xsl:text>occurance(s) found.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="count(atom:link[@rel='alternate'])&gt;0" />
      <xsl:otherwise>
        <rsv:assert>&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have at least one &lt;atom:link&gt; child element with the rel attribute of 'alternate'.<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="count(atom:link[@rel='alternate'])" /><xsl:text xml:space="preserve"> </xsl:text>occurance(s) found.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="count(atom:author)&lt;2" />
      <xsl:otherwise>
        <rsv:assert>&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have zero or one &lt;atom:author&gt; child element.<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="count(atom:author)" /><xsl:text xml:space="preserve"> </xsl:text>occurance(s) found.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="count(atom:tagline)&lt;2" />
      <xsl:otherwise>
        <rsv:assert>&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have zero or one &lt;atom:tagline&gt; child element.<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="count(atom:tagline)" /><xsl:text xml:space="preserve"> </xsl:text>occurance(s) found.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="count(atom:id)&lt;2" />
      <xsl:otherwise>
        <rsv:assert>&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have zero or one &lt;atom:id&gt; child element.<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="count(atom:id)" /><xsl:text xml:space="preserve"> </xsl:text>occurance(s) found.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="count(atom:generator)&lt;2" />
      <xsl:otherwise>
        <rsv:assert>&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have zero or one &lt;atom:generator&gt; child element.<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="count(atom:generator)" /><xsl:text xml:space="preserve"> </xsl:text>occurance(s) found.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="count(atom:copyright)&lt;2" />
      <xsl:otherwise>
        <rsv:assert>&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have zero or one &lt;atom:copyright&gt; child element.<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="count(atom:copyright)" /><xsl:text xml:space="preserve"> </xsl:text>occurance(s) found.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="count(atom:info)&lt;2" />
      <xsl:otherwise>
        <rsv:assert>&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have zero or one &lt;atom:info&gt; child element.<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="count(atom:info)" /><xsl:text xml:space="preserve"> </xsl:text>occurance(s) found.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="count(atom:modified)=1" />
      <xsl:otherwise>
        <rsv:assert>&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have exactly one &lt;atom:modified&gt; child element.<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="count(atom:modified)" /><xsl:text xml:space="preserve"> </xsl:text>occurance(s) found.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="count(atom:entry)&gt;0" />
      <xsl:otherwise>
        <rsv:assert>&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have at least one &lt;atom:entry&gt; child element.<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="count(atom:entry)" /><xsl:text xml:space="preserve"> </xsl:text>occurance(s) found.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:apply-templates mode="M41" />
  </xsl:template>
  <xsl:template match="atom:entry" priority="3999" mode="M41">
    <xsl:choose>
      <xsl:when test="parent::atom:feed" />
      <xsl:otherwise>
        <rsv:assert>&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have the &lt;atom:feed&gt; parent element. Parent is<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="count(atom:title)=1" />
      <xsl:otherwise>
        <rsv:assert>&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have exactly one &lt;atom:title&gt; child element.<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="count(atom:title)" /><xsl:text xml:space="preserve"> </xsl:text>occurance(s) found.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="count(atom:link[@rel='alternate'])&gt;0" />
      <xsl:otherwise>
        <rsv:assert>&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have at least one &lt;atom:link&gt; child element with the rel attribute of 'alternate'.<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="count(atom:link[@rel='alternate'])" /><xsl:text xml:space="preserve"> </xsl:text>occurance(s) found.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="count(atom:author)&lt;2" />
      <xsl:otherwise>
        <rsv:assert>&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have zero or one &lt;atom:author&gt; child element.<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="count(atom:author)" /><xsl:text xml:space="preserve"> </xsl:text>occurance(s) found.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="count(atom:author)=1 or /atom:feed/atom:author" />
      <xsl:otherwise>
        <rsv:assert>&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have an &lt;atom:author&gt; child element, if atom:feed does not have an atom:author child element.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="count(atom:id)&lt;2" />
      <xsl:otherwise>
        <rsv:assert>&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have zero or one &lt;atom:id&gt; child element.<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="count(atom:id)" /><xsl:text xml:space="preserve"> </xsl:text>occurance(s) found.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="count(atom:modified)=1" />
      <xsl:otherwise>
        <rsv:assert>&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have exactly one &lt;atom:modified&gt; child element.<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="count(atom:modified)" /><xsl:text xml:space="preserve"> </xsl:text>occurance(s) found.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="count(atom:issued)=1" />
      <xsl:otherwise>
        <rsv:assert>&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have exactly one &lt;atom:issued&gt; child element.<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="count(atom:issued)" /><xsl:text xml:space="preserve"> </xsl:text>occurance(s) found.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="count(atom:created)&lt;2" />
      <xsl:otherwise>
        <rsv:assert>&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have zero or one &lt;atom:created&gt; child element.<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="count(atom:created)" /><xsl:text xml:space="preserve"> </xsl:text>occurance(s) found.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="count(atom:summary)&lt;2" />
      <xsl:otherwise>
        <rsv:assert>&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have zero or one &lt;atom:summary&gt; child element.<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="count(atom:summary)" /><xsl:text xml:space="preserve"> </xsl:text>occurance(s) found.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:apply-templates mode="M41" />
  </xsl:template>
  <xsl:template match="atom:title" priority="3998" mode="M41">
    <xsl:choose>
      <xsl:when test="parent::atom:feed or parent::atom:entry or namespace-uri(parent::*)!='http://purl.org/atom/ns#'" />
      <xsl:otherwise>
        <rsv:assert>&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have the &lt;atom:feed&gt; or &lt;atom:entry&gt; parent element. Parent is<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:apply-templates mode="M41" />
  </xsl:template>
  <xsl:template match="atom:link" priority="3997" mode="M41">
    <xsl:choose>
      <xsl:when test="parent::atom:feed or parent::atom:entry or namespace-uri(parent::*)!='http://purl.org/atom/ns#'" />
      <xsl:otherwise>
        <rsv:assert>&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have the &lt;atom:feed&gt; or &lt;atom:entry&gt; parent element. Parent is<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="count(child::*)=0" />
      <xsl:otherwise>
        <rsv:assert>&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must not have any child elements.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="@rel" />
      <xsl:otherwise>
        <rsv:assert>&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have a rel attribute.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="not(@rel) or @rel='alternate' or @rel='start' or @rel='next' or @rel='prev' or @rel='service.edit' or @rel='service.post' or @rel='service.feed'" />
      <xsl:otherwise>
        <rsv:assert>&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; rel attribute must be alternate, start, next, prev, service.edit, service.post or service.feed.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="not(@rel='alternate' and parent::*/atom:link[@rel='alternate' and @type=current()/@type and generate-id(.)!=generate-id(current())])" />
      <xsl:otherwise>
        <rsv:assert>&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; with rel attribute of alternate must not have a sibling element rel attribute value of alternate and same type attribute value.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="@type" />
      <xsl:otherwise>
        <rsv:assert>&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have a type attribute.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="@href" />
      <xsl:otherwise>
        <rsv:assert>&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have a href attribute.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="not(@href) or string-length(@href)&gt;1" />
      <xsl:otherwise>
        <rsv:assert>&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; href attribute must be a URI.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="string-length(.)=0" />
      <xsl:otherwise>
        <rsv:assert>&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must not have text content.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:if test="@title and string-length(@title)=0">
      <rsv:report>&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; title attribute should not be empty.</rsv:report>
    </xsl:if>
    <xsl:apply-templates mode="M41" />
  </xsl:template>
  <xsl:template match="atom:author" priority="3996" mode="M41">
    <xsl:choose>
      <xsl:when test="parent::atom:feed or parent::atom:entry or namespace-uri(parent::*)!='http://purl.org/atom/ns#'" />
      <xsl:otherwise>
        <rsv:assert>&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have the &lt;atom:feed&gt; or &lt;atom:entry&gt; parent element. Parent is<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="count(atom:name)=1" />
      <xsl:otherwise>
        <rsv:assert>&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have exactly one &lt;atom:name&gt; child element.<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="count(atom:name)" /><xsl:text xml:space="preserve"> </xsl:text>occurance(s) found.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="count(atom:url)&lt;2" />
      <xsl:otherwise>
        <rsv:assert>&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have zero or one &lt;atom:url&gt; child element.<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="count(atom:url)" /><xsl:text xml:space="preserve"> </xsl:text>occurance(s) found.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="count(atom:email)&lt;2" />
      <xsl:otherwise>
        <rsv:assert>&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have zero or one &lt;atom:email&gt; child element.<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="count(atom:email)" /><xsl:text xml:space="preserve"> </xsl:text>occurance(s) found.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:apply-templates mode="M41" />
  </xsl:template>
  <xsl:template match="atom:contributor" priority="3995" mode="M41">
    <xsl:choose>
      <xsl:when test="parent::atom:feed or parent::atom:entry or namespace-uri(parent::*)!='http://purl.org/atom/ns#'" />
      <xsl:otherwise>
        <rsv:assert>&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have the &lt;atom:feed&gt; or &lt;atom:entry&gt; parent element. Parent is<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="count(atom:name)=1" />
      <xsl:otherwise>
        <rsv:assert>&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have exactly one &lt;atom:name&gt; child element.<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="count(atom:name)" /><xsl:text xml:space="preserve"> </xsl:text>occurance(s) found.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="count(atom:url)&lt;2" />
      <xsl:otherwise>
        <rsv:assert>&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have zero or one &lt;atom:url&gt; child element.<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="count(atom:url)" /><xsl:text xml:space="preserve"> </xsl:text>occurance(s) found.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="count(atom:email)&lt;2" />
      <xsl:otherwise>
        <rsv:assert>&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have zero or one &lt;atom:email&gt; child element.<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="count(atom:email)" /><xsl:text xml:space="preserve"> </xsl:text>occurance(s) found.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:apply-templates mode="M41" />
  </xsl:template>
  <xsl:template match="atom:id" priority="3994" mode="M41">
    <xsl:choose>
      <xsl:when test="parent::atom:feed or parent::atom:entry or namespace-uri(parent::*)!='http://purl.org/atom/ns#'" />
      <xsl:otherwise>
        <rsv:assert>&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have the &lt;atom:feed&gt; or &lt;atom:entry&gt; parent element. Parent is<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="not(//atom:id[.=current() and generate-id(.)!=generate-id(current())])" />
      <xsl:otherwise>
        <rsv:assert>The value of &lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; should be unique. Duplicate value<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="text()" /><xsl:text xml:space="preserve"> </xsl:text>found.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:apply-templates mode="M41" />
  </xsl:template>
  <xsl:template match="atom:feed/atom:modified" priority="3993" mode="M41">
    <xsl:choose>
      <xsl:when test="substring(.,string-length(.),1)='Z'" />
      <xsl:otherwise>
        <rsv:assert>&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; time must be UTC.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:apply-templates mode="M41" />
  </xsl:template>
  <xsl:template match="atom:modified" priority="3992" mode="M41">
    <xsl:choose>
      <xsl:when test="parent::atom:feed or parent::atom:entry or namespace-uri(parent::*)!='http://purl.org/atom/ns#'" />
      <xsl:otherwise>
        <rsv:assert>&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have the &lt;atom:feed&gt; or &lt;atom:entry&gt; parent element. Parent is<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:if test="string-length(.)&gt;16 and substring(.,string-length(.),1)!='Z'">
      <rsv:report>&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; time should be UTC.</rsv:report>
    </xsl:if>
    <xsl:apply-templates mode="M41" />
  </xsl:template>
  <xsl:template match="atom:issued" priority="3991" mode="M41">
    <xsl:choose>
      <xsl:when test="parent::atom:entry or namespace-uri(parent::*)!='http://purl.org/atom/ns#'" />
      <xsl:otherwise>
        <rsv:assert>&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have the &lt;atom:entry&gt; parent element. Parent is<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:apply-templates mode="M41" />
  </xsl:template>
  <xsl:template match="atom:created" priority="3990" mode="M41">
    <xsl:choose>
      <xsl:when test="parent::atom:entry or namespace-uri(parent::*)!='http://purl.org/atom/ns#'" />
      <xsl:otherwise>
        <rsv:assert>&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have the &lt;atom:entry&gt; parent element. Parent is<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:if test="string-length(.)&gt;16 and substring(.,string-length(.),1)!='Z'">
      <rsv:report>&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; time should be UTC.</rsv:report>
    </xsl:if>
    <xsl:apply-templates mode="M41" />
  </xsl:template>
  <xsl:template match="atom:summary" priority="3989" mode="M41">
    <xsl:choose>
      <xsl:when test="parent::atom:entry or namespace-uri(parent::*)!='http://purl.org/atom/ns#'" />
      <xsl:otherwise>
        <rsv:assert>&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have the &lt;atom:entry&gt; parent element. Parent is<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:apply-templates mode="M41" />
  </xsl:template>
  <xsl:template match="atom:content" priority="3988" mode="M41">
    <xsl:choose>
      <xsl:when test="parent::atom:entry or parent::atom:content or namespace-uri(parent::*)!='http://purl.org/atom/ns#'" />
      <xsl:otherwise>
        <rsv:assert>&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have the &lt;atom:entry&gt; or &lt;atom:content&gt; parent element. Parent is<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="@type!='multipart/alternative' or not(@mode)" />
      <xsl:otherwise>
        <rsv:assert>&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must not have a mode attribute if the type attribute is multipart/alternative.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="not(@type) or @type!='multipart/alternative' or count(atom:content)&gt;0" />
      <xsl:otherwise>
        <rsv:assert>&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have at least one atom:content child element if the type attribute is multipart/alternative.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="@type!='multipart/alternative' or not(parent::atom:content)" />
      <xsl:otherwise>
        <rsv:assert>&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must not have a atom:content parent element if the type attribute is multipart/alternative.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="not(parent::atom:content) or parent::atom:content/@type='multipart/alternative'" />
      <xsl:otherwise>
        <rsv:assert>if &lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; has parent &lt;atom:content&gt;, then the parent must have type attribute of multipart/alternative.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="not(parent::atom:content) or not(parent::atom:content/@mode)" />
      <xsl:otherwise>
        <rsv:assert>if &lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; has parent &lt;atom:content&gt;, then the parent must not have a mode attribute.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:if test="parent::atom:content and parent::atom:content/atom:content[@mode=current()/@mode and @type=current()/@type and generate-id(.)!=generate-id(current())]">
      <rsv:report>&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; has a duplicate representation under content/multipart.</rsv:report>
    </xsl:if>
    <xsl:apply-templates mode="M41" />
  </xsl:template>
  <xsl:template match="atom:tagline" priority="3987" mode="M41">
    <xsl:choose>
      <xsl:when test="parent::atom:feed or namespace-uri(parent::*)!='http://purl.org/atom/ns#'" />
      <xsl:otherwise>
        <rsv:assert>&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have the &lt;atom:feed&gt; parent element. Parent is<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:apply-templates mode="M41" />
  </xsl:template>
  <xsl:template match="atom:generator" priority="3986" mode="M41">
    <xsl:choose>
      <xsl:when test="parent::atom:feed or namespace-uri(parent::*)!='http://purl.org/atom/ns#'" />
      <xsl:otherwise>
        <rsv:assert>&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have the &lt;atom:feed&gt; parent element. Parent is<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:apply-templates mode="M41" />
  </xsl:template>
  <xsl:template match="atom:copyright" priority="3985" mode="M41">
    <xsl:choose>
      <xsl:when test="parent::atom:feed or namespace-uri(parent::*)!='http://purl.org/atom/ns#'" />
      <xsl:otherwise>
        <rsv:assert>&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have the &lt;atom:feed&gt; parent element. Parent is<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:apply-templates mode="M41" />
  </xsl:template>
  <xsl:template match="atom:info" priority="3984" mode="M41">
    <xsl:choose>
      <xsl:when test="parent::atom:feed or namespace-uri(parent::*)!='http://purl.org/atom/ns#'" />
      <xsl:otherwise>
        <rsv:assert>&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have the &lt;atom:feed&gt; parent element. Parent is<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:apply-templates mode="M41" />
  </xsl:template>
  <xsl:template match="atom:name" priority="3983" mode="M41">
    <xsl:choose>
      <xsl:when test="parent::atom:author or parent::atom:contributor" />
      <xsl:otherwise>
        <rsv:assert>&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have the &lt;atom:author&gt; or &lt;atom:contributor&gt; parent element. Parent is<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:if test="string-length(.)=0">
      <rsv:report>&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; should not be empty.</rsv:report>
    </xsl:if>
    <xsl:apply-templates mode="M41" />
  </xsl:template>
  <xsl:template match="atom:url" priority="3982" mode="M41">
    <xsl:choose>
      <xsl:when test="parent::atom:author or parent::atom:contributor" />
      <xsl:otherwise>
        <rsv:assert>&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have the &lt;atom:author&gt; or &lt;atom:contributor&gt; parent element. Parent is<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:if test="not(starts-with(., 'http://') or starts-with(., 'https://') or starts-with(., 'ftp://'))">
      <rsv:report>&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; should contain http, https, and ftp urls.</rsv:report>
    </xsl:if>
    <xsl:apply-templates mode="M41" />
  </xsl:template>
  <xsl:template match="atom:email" priority="3981" mode="M41">
    <xsl:choose>
      <xsl:when test="parent::atom:author or parent::atom:contributor" />
      <xsl:otherwise>
        <rsv:assert>&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have the &lt;atom:author&gt; or &lt;atom:contributor&gt; parent element. Parent is<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:apply-templates mode="M41" />
  </xsl:template>
  <xsl:template match="atom:*" priority="3980" mode="M41">
    <xsl:choose>
      <xsl:when test="false" />
      <xsl:otherwise>
        <rsv:assert>&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; is not a valid atom element</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:apply-templates mode="M41" />
  </xsl:template>
  <xsl:template match="text()" priority="-1" mode="M41">
  </xsl:template>
  <xsl:template match="dcterms:alternative|dcterms:abstract|dcterms:tableOfContents|dcterms:valid|dcterms:available|&#xD;&#xA;				dcterms:extent|dcterms:medium|dcterms:isVersionOf|dcterms:hasVersion|&#xD;&#xA;				dcterms:isReplacedBy|dcterms:replaces|dcterms:isRequiredBy|dcterms:requires|dcterms:isPartOf|&#xD;&#xA;				dcterms:hasPart|dcterms:isReferencedBy|dcterms:references|dcterms:isFormatOf|dcterms:hasFormat|&#xD;&#xA;				dcterms:conformsTo|dcterms:spatial|dcterms:temporal|dcterms:audience|dcterms:mediator" priority="4000" mode="M42">
    <xsl:choose>
      <xsl:when test="parent::rss:channel or parent::rss:item or parent::rss:image or parent::rss:textinput or parent::channel or parent::item" />
      <xsl:otherwise>
        <rsv:assert>&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have the &lt;rss:channel&gt; or &lt;rss:item&gt; or &lt;rss:image&gt; or &lt;rss:textinput&gt; or &lt;channel&gt; or &lt;item&gt; parent element. Parent is<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:apply-templates mode="M42" />
  </xsl:template>
  <xsl:template match="dcterms:created|dcterms:issued|dcterms:modified|dcterms:dataAccepted|dcterms:dateSubmitted|dcterms:dateCopyrighted" priority="3999" mode="M42">
    <xsl:choose>
      <xsl:when test="parent::rss:channel or parent::rss:item or parent::rss:image or parent::rss:textinput or parent::channel or parent::item" />
      <xsl:otherwise>
        <rsv:assert>&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have the &lt;rss:channel&gt; or &lt;rss:item&gt; or &lt;rss:image&gt; or &lt;rss:textinput&gt; or &lt;channel&gt; or &lt;item&gt; parent element. Parent is<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:apply-templates mode="M42" />
  </xsl:template>
  <xsl:template match="dcterms:*" priority="3998" mode="M42">
    <xsl:choose>
      <xsl:when test="false" />
      <xsl:otherwise>
        <rsv:assert>&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; is not a valid dublin core terms namespace element.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:apply-templates mode="M42" />
  </xsl:template>
  <xsl:template match="text()" priority="-1" mode="M42">
  </xsl:template>
  <xsl:template match="l:link" priority="4000" mode="M43">
    <xsl:choose>
      <xsl:when test="@l:rel" />
      <xsl:otherwise>
        <rsv:assert>&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have the rel attribute.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="@rdf:resource" />
      <xsl:otherwise>
        <rsv:assert>&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have the rdf:resource attribute.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:apply-templates mode="M43" />
  </xsl:template>
  <xsl:template match="l:*" priority="3999" mode="M43">
    <xsl:choose>
      <xsl:when test="false" />
      <xsl:otherwise>
        <rsv:assert>&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; is not a link module namespace element.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:apply-templates mode="M43" />
  </xsl:template>
  <xsl:template match="text()" priority="-1" mode="M43">
  </xsl:template>
  <xsl:template match="ent:cloud" priority="4000" mode="M44">
    <xsl:if test="not(parent::item)">
      <rsv:report>&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; should have the &lt;item&gt; parent element. Parent is<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>.</rsv:report>
    </xsl:if>
    <xsl:choose>
      <xsl:when test="count(ent:topic)&gt;0" />
      <xsl:otherwise>
        <rsv:assert>&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have at least one &lt;ent:topic&gt; child element.<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="count(ent:topic)" /><xsl:text xml:space="preserve"> </xsl:text>occurance(s) found.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="@href" />
      <xsl:otherwise>
        <rsv:assert>&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have an href attribute.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:apply-templates mode="M44" />
  </xsl:template>
  <xsl:template match="ent:topic" priority="3999" mode="M44">
    <xsl:choose>
      <xsl:when test="parent::ent:cloud" />
      <xsl:otherwise>
        <rsv:assert>&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have the &lt;ent:cloud&gt; parent element. Parent is<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="@id" />
      <xsl:otherwise>
        <rsv:assert>&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have an id attribute.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:apply-templates mode="M44" />
  </xsl:template>
  <xsl:template match="ent:*" priority="3998" mode="M44">
    <xsl:choose>
      <xsl:when test="false" />
      <xsl:otherwise>
        <rsv:assert>&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; is not a valid Easy News Topic namespace element.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:apply-templates mode="M44" />
  </xsl:template>
  <xsl:template match="text()" priority="-1" mode="M44">
  </xsl:template>
  <xsl:template match="rdf:RDF" priority="4000" mode="M45">
    <xsl:if test="foaf:*">
      <rsv:report see="http://xmlns.com/foaf/0.1/">FOAF version 0.1. The FOAF implementation in the Really Simple Validator is incomplete and untested.</rsv:report>
    </xsl:if>
    <xsl:apply-templates mode="M45" />
  </xsl:template>
  <xsl:template match="foaf:Agent" priority="3999" mode="M45">
    <xsl:choose>
      <xsl:when test="namespace-uri(parent::*)!='http://xmlns.com/foaf/0.1/' or &#xD;&#xA;					parent::foaf:member or parent::foaf:maker" />
      <xsl:otherwise>
        <rsv:assert see="http://xmlns.com/foaf/0.1/#term_Agent">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have the foaf:member or foaf:maker or a non-foaf parent element.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:apply-templates mode="M45" />
  </xsl:template>
  <xsl:template match="foaf:Document" priority="3998" mode="M45">
    <xsl:choose>
      <xsl:when test="namespace-uri(parent::*)!='http://xmlns.com/foaf/0.1/' or &#xD;&#xA;					parent::foaf:interest or parent::foaf:accountServiceHomepage or parent::foaf:publications or &#xD;&#xA;					parent::foaf:weblog or parent::foaf:homepage or parent::foaf:workplaceHomepage or &#xD;&#xA;					parent::foaf:tipjar or parent::foaf:workInfoHomepage or parent::foaf:schoolHomepage or &#xD;&#xA;					parent::foaf:page" />
      <xsl:otherwise>
        <rsv:assert see="http://xmlns.com/foaf/0.1/#term_Document">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have the &lt;foaf:interest&gt; or &lt;foaf:accountServiceHomepage&gt; or &lt;foaf:publications&gt; or &lt;foaf:weblog&gt; or &lt;foaf:homepage&gt; or &lt;foaf:workplaceHomepage&gt; or &lt;foaf:tipjar&gt; or &lt;foaf:workInfoHomepage&gt; or &lt;foaf:schoolHomepage&gt; or &lt;foaf:page&gt; or a non-foaf parent element.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:apply-templates mode="M45" />
  </xsl:template>
  <xsl:template match="foaf:Group" priority="3997" mode="M45">
    <xsl:choose>
      <xsl:when test="namespace-uri(parent::*)!='http://xmlns.com/foaf/0.1/'" />
      <xsl:otherwise>
        <rsv:assert see="http://xmlns.com/foaf/0.1/#term_Group">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have a non-foaf parent element.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:apply-templates mode="M45" />
  </xsl:template>
  <xsl:template match="foaf:Image" priority="3996" mode="M45">
    <xsl:choose>
      <xsl:when test="namespace-uri(parent::*)!='http://xmlns.com/foaf/0.1/' or &#xD;&#xA;					parent::foaf:img or parent::foaf:depiction or parent::foaf:thumbnail" />
      <xsl:otherwise>
        <rsv:assert see="http://xmlns.com/foaf/0.1/#term_Image">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have the &lt;foaf:img&gt; or &lt;foaf:depiction&gt; or &lt;foaf:thumbnail&gt; or a non-foaf parent element.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:apply-templates mode="M45" />
  </xsl:template>
  <xsl:template match="foaf:OnlineAccount" priority="3995" mode="M45">
    <xsl:choose>
      <xsl:when test="namespace-uri(parent::*)!='http://xmlns.com/foaf/0.1/' or &#xD;&#xA;					parent::foaf:holdsAccount" />
      <xsl:otherwise>
        <rsv:assert see="http://xmlns.com/foaf/0.1/#term_OnlineAccount">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have the &lt;foaf:holdsAccount&gt; or &lt;foaf:thumbnail&gt; or a non-foaf parent element.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:apply-templates mode="M45" />
  </xsl:template>
  <xsl:template match="foaf:OnlineChatAccount" priority="3994" mode="M45">
    <xsl:choose>
      <xsl:when test="namespace-uri(parent::*)!='http://xmlns.com/foaf/0.1/' or &#xD;&#xA;					parent::foaf:holdsAccount" />
      <xsl:otherwise>
        <rsv:assert see="http://xmlns.com/foaf/0.1/#term_OnlineChatAccount">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have the &lt;foaf:holdsAccount&gt; or &lt;foaf:thumbnail&gt; or a non-foaf parent element.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:apply-templates mode="M45" />
  </xsl:template>
  <xsl:template match="foaf:OnlineEcommerceAccount" priority="3993" mode="M45">
    <xsl:choose>
      <xsl:when test="namespace-uri(parent::*)!='http://xmlns.com/foaf/0.1/' or &#xD;&#xA;					parent::foaf:holdsAccount" />
      <xsl:otherwise>
        <rsv:assert see="http://xmlns.com/foaf/0.1/#term_OnlineEcommerceAccount">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have the &lt;foaf:holdsAccount&gt; or &lt;foaf:thumbnail&gt; or a non-foaf parent element.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:apply-templates mode="M45" />
  </xsl:template>
  <xsl:template match="foaf:OnlineGamingAccount" priority="3992" mode="M45">
    <xsl:choose>
      <xsl:when test="namespace-uri(parent::*)!='http://xmlns.com/foaf/0.1/' or &#xD;&#xA;					parent::foaf:holdsAccount" />
      <xsl:otherwise>
        <rsv:assert see="http://xmlns.com/foaf/0.1/#term_OnlineGamingAccount">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have the &lt;foaf:holdsAccount&gt; or &lt;foaf:thumbnail&gt; or a non-foaf parent element.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:apply-templates mode="M45" />
  </xsl:template>
  <xsl:template match="foaf:Organization" priority="3991" mode="M45">
    <xsl:choose>
      <xsl:when test="namespace-uri(parent::*)!='http://xmlns.com/foaf/0.1/' or &#xD;&#xA;					parent::foaf:member or parent::foaf:maker" />
      <xsl:otherwise>
        <rsv:assert see="http://xmlns.com/foaf/0.1/#term_Organization">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have the &lt;foaf:member&gt; or &lt;foaf:maker&gt; or a non-foaf parent element.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:apply-templates mode="M45" />
  </xsl:template>
  <xsl:template match="foaf:Person" priority="3990" mode="M45">
    <xsl:choose>
      <xsl:when test="namespace-uri(parent::*)!='http://xmlns.com/foaf/0.1/' or &#xD;&#xA;					parent::foaf:member or parent::foaf:maker or parent::foaf:knows" />
      <xsl:otherwise>
        <rsv:assert see="http://xmlns.com/foaf/0.1/#term_Person">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have the &lt;foaf:member&gt; or &lt;foaf:maker&gt; or &lt;foaf:knows&gt; or a non-foaf parent element.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:apply-templates mode="M45" />
  </xsl:template>
  <xsl:template match="foaf:PersonalProfileDocument" priority="3989" mode="M45">
    <xsl:choose>
      <xsl:when test="namespace-uri(parent::*)!='http://xmlns.com/foaf/0.1/'" />
      <xsl:otherwise>
        <rsv:assert see="http://xmlns.com/foaf/0.1/#term_PersonalProfileDocument">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have the a non-foaf parent element.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:apply-templates mode="M45" />
  </xsl:template>
  <xsl:template match="foaf:Project" priority="3988" mode="M45">
    <xsl:choose>
      <xsl:when test="namespace-uri(parent::*)!='http://xmlns.com/foaf/0.1/'" />
      <xsl:otherwise>
        <rsv:assert see="http://xmlns.com/foaf/0.1/#term_Project">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have the a non-foaf parent element.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:apply-templates mode="M45" />
  </xsl:template>
  <xsl:template match="foaf:accountName" priority="3987" mode="M45">
    <xsl:choose>
      <xsl:when test="not(@*[name()!='xml:lang'])" />
      <xsl:otherwise>
        <rsv:assert see="http://xmlns.com/foaf/0.1/#term_accountName">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must not have an attribute other than xml:lang.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="count(child::*)=0" />
      <xsl:otherwise>
        <rsv:assert see="http://xmlns.com/foaf/0.1/#term_accountName">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must not have child elements. Child<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(child::*[position()=1])" /><xsl:text xml:space="preserve"> </xsl:text>found.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="string-length(.)&gt;0" />
      <xsl:otherwise>
        <rsv:assert see="http://xmlns.com/foaf/0.1/#term_accountName">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have text content.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="parent::foaf:OnlineAccount or parent::foaf:OnlineChatAccount or &#xD;&#xA;					parent::foaf:OnlineEcommerceAccount or parent::foaf:OnlineGamingAccount" />
      <xsl:otherwise>
        <rsv:assert see="http://xmlns.com/foaf/0.1/#term_accountName">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have the &lt;foaf:OnlineAccount&gt;, &lt;foaf:OnlineChatAccount&gt;, &lt;foaf:OnlineEcommerceAccount&gt; or &lt;foaf:OnlineGamingAccount&gt; parent element.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:apply-templates mode="M45" />
  </xsl:template>
  <xsl:template match="foaf:accountServiceHomepage" priority="3986" mode="M45">
    <xsl:choose>
      <xsl:when test="parent::foaf:OnlineAccount or parent::foaf:OnlineChatAccount or &#xD;&#xA;					parent::foaf:OnlineEcommerceAccount or parent::foaf:OnlineGamingAccount" />
      <xsl:otherwise>
        <rsv:assert see="http://xmlns.com/foaf/0.1/#term_accountServiceHomepage">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have the &lt;foaf:OnlineAccount&gt;, &lt;foaf:OnlineChatAccount&gt;, &lt;foaf:OnlineEcommerceAccount&gt; or &lt;foaf:OnlineGamingAccount&gt; parent element.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:apply-templates mode="M45" />
  </xsl:template>
  <xsl:template match="foaf:aimChatID" priority="3985" mode="M45">
    <xsl:choose>
      <xsl:when test="not(@*[name()!='xml:lang'])" />
      <xsl:otherwise>
        <rsv:assert see="http://xmlns.com/foaf/0.1/#term_aimChatID">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must not have an attribute other than xml:lang.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="count(child::*)=0" />
      <xsl:otherwise>
        <rsv:assert see="http://xmlns.com/foaf/0.1/#term_aimChatID">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must not have child elements. Child<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(child::*[position()=1])" /><xsl:text xml:space="preserve"> </xsl:text>found.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="string-length(.)&gt;0" />
      <xsl:otherwise>
        <rsv:assert see="http://xmlns.com/foaf/0.1/#term_aimChatID">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have text content.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="parent::foaf:Agent or parent::foaf:Group or parent::foaf:Organization or parent::foaf:Person" />
      <xsl:otherwise>
        <rsv:assert see="http://xmlns.com/foaf/0.1/#term_aimChatID">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have the &lt;foaf:Agent&gt; or &lt;foaf:Group&gt; or &lt;foaf:Organization&gt; or &lt;foaf:Person&gt; parent element.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:apply-templates mode="M45" />
  </xsl:template>
  <xsl:template match="foaf:based_near" priority="3984" mode="M45">
    <xsl:choose>
      <xsl:when test="true" />
      <xsl:otherwise>
        <rsv:assert>Nothing.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:apply-templates mode="M45" />
  </xsl:template>
  <xsl:template match="foaf:currentProject" priority="3983" mode="M45">
    <xsl:choose>
      <xsl:when test="parent::foaf:Person" />
      <xsl:otherwise>
        <rsv:assert see="http://xmlns.com/foaf/0.1/#term_currentProject">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have the &lt;foaf:Person&gt; parent element.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="@rdf:resource" />
      <xsl:otherwise>
        <rsv:assert see="http://xmlns.com/foaf/0.1/#term_currentProject">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have the rdf:resource attribute.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="not(@*[name()!='rdf:resource'])" />
      <xsl:otherwise>
        <rsv:assert see="http://xmlns.com/foaf/0.1/#term_currentProject">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must not have an attribute other than rdf:resource.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="count(child::*)=0" />
      <xsl:otherwise>
        <rsv:assert see="http://xmlns.com/foaf/0.1/#term_currentProject">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must not have child elements. Child<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(child::*[position()=1])" /><xsl:text xml:space="preserve"> </xsl:text>found.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="string-length(.)=0" />
      <xsl:otherwise>
        <rsv:assert see="http://xmlns.com/foaf/0.1/#term_currentProject">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must not have text content.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:apply-templates mode="M45" />
  </xsl:template>
  <xsl:template match="foaf:depiction" priority="3982" mode="M45">
    <xsl:choose>
      <xsl:when test="@rdf:resource" />
      <xsl:otherwise>
        <rsv:assert see="http://xmlns.com/foaf/0.1/#term_depiction">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have the rdf:resource attribute.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="not(@*[name()!='rdf:resource'])" />
      <xsl:otherwise>
        <rsv:assert see="http://xmlns.com/foaf/0.1/#term_depiction">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must not have an attribute other than rdf:resource.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="count(child::*)=0" />
      <xsl:otherwise>
        <rsv:assert see="http://xmlns.com/foaf/0.1/#term_depiction">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must not have child elements. Child<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(child::*[position()=1])" /><xsl:text xml:space="preserve"> </xsl:text>found.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="string-length(.)=0" />
      <xsl:otherwise>
        <rsv:assert see="http://xmlns.com/foaf/0.1/#term_depiction">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must not have text content.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:apply-templates mode="M45" />
  </xsl:template>
  <xsl:template match="foaf:depicts" priority="3981" mode="M45">
    <xsl:choose>
      <xsl:when test="parent::foaf:Image" />
      <xsl:otherwise>
        <rsv:assert see="http://xmlns.com/foaf/0.1/#term_depicts">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have the &lt;foaf:Image&gt; parent element.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="not(@*[name()!='rdf:resource'])" />
      <xsl:otherwise>
        <rsv:assert see="http://xmlns.com/foaf/0.1/#term_depicts">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must not have an attribute other than rdf:resource.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="count(child::*)=0" />
      <xsl:otherwise>
        <rsv:assert see="http://xmlns.com/foaf/0.1/#term_depicts">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must not have child elements. Child<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(child::*[position()=1])" /><xsl:text xml:space="preserve"> </xsl:text>found.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="string-length(.)=0" />
      <xsl:otherwise>
        <rsv:assert see="http://xmlns.com/foaf/0.1/#term_depicts">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must not have text content.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:apply-templates mode="M45" />
  </xsl:template>
  <xsl:template match="foaf:dnaChecksum" priority="3980" mode="M45">
    <xsl:choose>
      <xsl:when test="not(@*[name()!='xml:lang'])" />
      <xsl:otherwise>
        <rsv:assert see="http://xmlns.com/foaf/0.1/#term_dnaChecksum">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must not have an attribute other than xml:lang.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="count(child::*)=0" />
      <xsl:otherwise>
        <rsv:assert see="http://xmlns.com/foaf/0.1/#term_dnaChecksum">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must not have child elements. Child<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(child::*[position()=1])" /><xsl:text xml:space="preserve"> </xsl:text>found.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="string-length(.)&gt;0" />
      <xsl:otherwise>
        <rsv:assert see="http://xmlns.com/foaf/0.1/#term_dnaChecksum">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have text content.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:apply-templates mode="M45" />
  </xsl:template>
  <xsl:template match="foaf:family_name" priority="3979" mode="M45">
    <xsl:choose>
      <xsl:when test="parent::foaf:Person" />
      <xsl:otherwise>
        <rsv:assert see="http://xmlns.com/foaf/0.1/#term_family_name">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have the &lt;foaf:Person&gt; parent element.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="not(@*[name()!='xml:lang'])" />
      <xsl:otherwise>
        <rsv:assert see="http://xmlns.com/foaf/0.1/#term_family_name">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must not have an attribute other than xml:lang.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="count(child::*)=0" />
      <xsl:otherwise>
        <rsv:assert see="http://xmlns.com/foaf/0.1/#term_family_name">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must not have child elements. Child<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(child::*[position()=1])" /><xsl:text xml:space="preserve"> </xsl:text>found.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="string-length(.)&gt;0" />
      <xsl:otherwise>
        <rsv:assert see="http://xmlns.com/foaf/0.1/#term_family_name">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have text content.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:apply-templates mode="M45" />
  </xsl:template>
  <xsl:template match="foaf:firstName" priority="3978" mode="M45">
    <xsl:choose>
      <xsl:when test="parent::foaf:Person" />
      <xsl:otherwise>
        <rsv:assert see="http://xmlns.com/foaf/0.1/#term_firstName">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have the &lt;foaf:Person&gt; parent element.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="not(@*[name()!='xml:lang'])" />
      <xsl:otherwise>
        <rsv:assert see="http://xmlns.com/foaf/0.1/#term_firstName">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must not have an attribute other than xml:lang.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="count(child::*)=0" />
      <xsl:otherwise>
        <rsv:assert see="http://xmlns.com/foaf/0.1/#term_firstName">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must not have child elements. Child<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(child::*[position()=1])" /><xsl:text xml:space="preserve"> </xsl:text>found.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="string-length(.)&gt;0" />
      <xsl:otherwise>
        <rsv:assert see="http://xmlns.com/foaf/0.1/#term_firstName">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have text content.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:apply-templates mode="M45" />
  </xsl:template>
  <xsl:template match="foaf:fundedBy" priority="3977" mode="M45">
    <xsl:choose>
      <xsl:when test="not(@*[name()!='rdf:resource'])" />
      <xsl:otherwise>
        <rsv:assert see="http://xmlns.com/foaf/0.1/#term_fundedBy">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must not have an attribute other than rdf:resource.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="count(child::*)=0" />
      <xsl:otherwise>
        <rsv:assert see="http://xmlns.com/foaf/0.1/#term_fundedBy">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must not have child elements. Child<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(child::*[position()=1])" /><xsl:text xml:space="preserve"> </xsl:text>found.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="string-length(.)=0" />
      <xsl:otherwise>
        <rsv:assert see="http://xmlns.com/foaf/0.1/#term_fundedBy">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must not have text content.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:apply-templates mode="M45" />
  </xsl:template>
  <xsl:template match="foaf:geekcode" priority="3976" mode="M45">
    <xsl:choose>
      <xsl:when test="parent::foaf:Person" />
      <xsl:otherwise>
        <rsv:assert see="http://xmlns.com/foaf/0.1/#term_geekCode">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have the &lt;foaf:Person&gt; parent element.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="not(@*[name()!='xml:lang'])" />
      <xsl:otherwise>
        <rsv:assert see="http://xmlns.com/foaf/0.1/#term_geekCode">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must not have an attribute other than xml:lang.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="count(child::*)=0" />
      <xsl:otherwise>
        <rsv:assert see="http://xmlns.com/foaf/0.1/#term_geekCode">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must not have child elements. Child<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(child::*[position()=1])" /><xsl:text xml:space="preserve"> </xsl:text>found.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="string-length(.)&gt;0" />
      <xsl:otherwise>
        <rsv:assert see="http://xmlns.com/foaf/0.1/#term_geekCode">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have text content.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:apply-templates mode="M45" />
  </xsl:template>
  <xsl:template match="foaf:gender" priority="3975" mode="M45">
    <xsl:choose>
      <xsl:when test="parent::foaf:Person" />
      <xsl:otherwise>
        <rsv:assert see="http://xmlns.com/foaf/0.1/#term_gender">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have the &lt;foaf:Person&gt; parent element.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="not(@*[name()!='xml:lang'])" />
      <xsl:otherwise>
        <rsv:assert see="http://xmlns.com/foaf/0.1/#term_gender">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must not have an attribute other than xml:lang.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="count(child::*)=0" />
      <xsl:otherwise>
        <rsv:assert see="http://xmlns.com/foaf/0.1/#term_gender">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must not have child elements. Child<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(child::*[position()=1])" /><xsl:text xml:space="preserve"> </xsl:text>found.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="string-length(.)&gt;0" />
      <xsl:otherwise>
        <rsv:assert see="http://xmlns.com/foaf/0.1/#term_gender">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have text content.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:if test=".!='male' and .!='female'">
      <rsv:report see="http://xmlns.com/foaf/0.1/#term_gender">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; should be male or female.</rsv:report>
    </xsl:if>
    <xsl:apply-templates mode="M45" />
  </xsl:template>
  <xsl:template match="foaf:givenname" priority="3974" mode="M45">
    <xsl:choose>
      <xsl:when test="parent::foaf:Person" />
      <xsl:otherwise>
        <rsv:assert see="http://xmlns.com/foaf/0.1/#term_givenname">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have the &lt;foaf:Person&gt; parent element.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="not(@*[name()!='xml:lang'])" />
      <xsl:otherwise>
        <rsv:assert see="http://xmlns.com/foaf/0.1/#term_givenname">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must not have an attribute other than xml:lang.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="count(child::*)=0" />
      <xsl:otherwise>
        <rsv:assert see="http://xmlns.com/foaf/0.1/#term_givenname">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must not have child elements. Child<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(child::*[position()=1])" /><xsl:text xml:space="preserve"> </xsl:text>found.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="string-length(.)&gt;0" />
      <xsl:otherwise>
        <rsv:assert see="http://xmlns.com/foaf/0.1/#term_givenname">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have text content.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:apply-templates mode="M45" />
  </xsl:template>
  <xsl:template match="foaf:holdsAccount" priority="3973" mode="M45">
    <xsl:choose>
      <xsl:when test="parent::foaf:Agent or parent::foaf:Group or parent::foaf:Organization or parent::foaf:Person" />
      <xsl:otherwise>
        <rsv:assert see="http://xmlns.com/foaf/0.1/#term_holdsAccount">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have the &lt;foaf:Agent&gt; or &lt;foaf:Group&gt; or &lt;foaf:Organization&gt; or &lt;foaf:Person&gt; parent element.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:apply-templates mode="M45" />
  </xsl:template>
  <xsl:template match="foaf:homepage" priority="3972" mode="M45">
    <xsl:choose>
      <xsl:when test="@rdf:resource" />
      <xsl:otherwise>
        <rsv:assert see="http://xmlns.com/foaf/0.1/#term_homepage">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have the rdf:resource attribute.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="not(@*[name()!='rdf:resource'])" />
      <xsl:otherwise>
        <rsv:assert see="http://xmlns.com/foaf/0.1/#term_homepage">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must not have an attribute other than rdf:resource.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="count(child::*)=0" />
      <xsl:otherwise>
        <rsv:assert see="http://xmlns.com/foaf/0.1/#term_homepage">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must not have child elements. Child<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(child::*[position()=1])" /><xsl:text xml:space="preserve"> </xsl:text>found.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="string-length(.)=0" />
      <xsl:otherwise>
        <rsv:assert see="http://xmlns.com/foaf/0.1/#term_homepage">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must not have text content.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:apply-templates mode="M45" />
  </xsl:template>
  <xsl:template match="foaf:icqChatID" priority="3971" mode="M45">
    <xsl:choose>
      <xsl:when test="parent::foaf:Agent or parent::foaf:Group or parent::foaf:Organization or parent::foaf:Person" />
      <xsl:otherwise>
        <rsv:assert see="http://xmlns.com/foaf/0.1/#term_icqChatID">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have the &lt;foaf:Agent&gt; or &lt;foaf:Group&gt; or &lt;foaf:Organization&gt; or &lt;foaf:Person&gt; parent element.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="not(@*[name()!='xml:lang'])" />
      <xsl:otherwise>
        <rsv:assert see="http://xmlns.com/foaf/0.1/#term_icqChatID">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must not have an attribute other than xml:lang.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="count(child::*)=0" />
      <xsl:otherwise>
        <rsv:assert see="http://xmlns.com/foaf/0.1/#term_icqChatID">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must not have child elements. Child<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(child::*[position()=1])" /><xsl:text xml:space="preserve"> </xsl:text>found.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="string-length(.)&gt;0" />
      <xsl:otherwise>
        <rsv:assert see="http://xmlns.com/foaf/0.1/#term_icqChatID">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have text content.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:apply-templates mode="M45" />
  </xsl:template>
  <xsl:template match="foaf:img" priority="3970" mode="M45">
    <xsl:choose>
      <xsl:when test="parent::foaf:Person" />
      <xsl:otherwise>
        <rsv:assert see="http://xmlns.com/foaf/0.1/#term_img">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have the &lt;foaf:Person&gt; parent element.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:apply-templates mode="M45" />
  </xsl:template>
  <xsl:template match="foaf:interest" priority="3969" mode="M45">
    <xsl:choose>
      <xsl:when test="parent::foaf:Person" />
      <xsl:otherwise>
        <rsv:assert see="http://xmlns.com/foaf/0.1/#term_interest">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have the &lt;foaf:Person&gt; parent element.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:apply-templates mode="M45" />
  </xsl:template>
  <xsl:template match="foaf:jabberID" priority="3968" mode="M45">
    <xsl:choose>
      <xsl:when test="parent::foaf:Agent or parent::foaf:Group or parent::foaf:Organization or parent::foaf:Person" />
      <xsl:otherwise>
        <rsv:assert see="http://xmlns.com/foaf/0.1/#term_jabberID">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have the &lt;foaf:Agent&gt; or &lt;foaf:Group&gt; or &lt;foaf:Organization&gt; or &lt;foaf:Person&gt; parent element.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="not(@*[name()!='xml:lang'])" />
      <xsl:otherwise>
        <rsv:assert see="http://xmlns.com/foaf/0.1/#term_jabberID">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must not have an attribute other than xml:lang.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="count(child::*)=0" />
      <xsl:otherwise>
        <rsv:assert see="http://xmlns.com/foaf/0.1/#term_jabberID">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must not have child elements. Child<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(child::*[position()=1])" /><xsl:text xml:space="preserve"> </xsl:text>found.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="string-length(.)&gt;0" />
      <xsl:otherwise>
        <rsv:assert see="http://xmlns.com/foaf/0.1/#term_jabberID">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have text content.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:apply-templates mode="M45" />
  </xsl:template>
  <xsl:template match="foaf:knows" priority="3967" mode="M45">
    <xsl:choose>
      <xsl:when test="parent::foaf:Person" />
      <xsl:otherwise>
        <rsv:assert see="http://xmlns.com/foaf/0.1/#term_knows">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have the &lt;foaf:Person&gt; parent element.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:apply-templates mode="M45" />
  </xsl:template>
  <xsl:template match="foaf:logo" priority="3966" mode="M45">
    <xsl:choose>
      <xsl:when test="@rdf:resource" />
      <xsl:otherwise>
        <rsv:assert see="http://xmlns.com/foaf/0.1/#term_logo">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have the rdf:resource attribute.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="not(@*[name()!='rdf:resource'])" />
      <xsl:otherwise>
        <rsv:assert see="http://xmlns.com/foaf/0.1/#term_logo">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must not have an attribute other than rdf:resource.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="count(child::*)=0" />
      <xsl:otherwise>
        <rsv:assert see="http://xmlns.com/foaf/0.1/#term_logo">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must not have child elements. Child<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(child::*[position()=1])" /><xsl:text xml:space="preserve"> </xsl:text>found.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="string-length(.)=0" />
      <xsl:otherwise>
        <rsv:assert see="http://xmlns.com/foaf/0.1/#term_logo">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must not have text content.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:apply-templates mode="M45" />
  </xsl:template>
  <xsl:template match="foaf:made" priority="3965" mode="M45">
    <xsl:choose>
      <xsl:when test="parent::foaf:Agent or parent::foaf:Group or parent::foaf:Organization or parent::foaf:Person" />
      <xsl:otherwise>
        <rsv:assert see="http://xmlns.com/foaf/0.1/#term_made">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have the &lt;foaf:Agent&gt; or &lt;foaf:Group&gt; or &lt;foaf:Organization&gt; or &lt;foaf:Person&gt; parent element.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="@rdf:resource" />
      <xsl:otherwise>
        <rsv:assert see="http://xmlns.com/foaf/0.1/#term_made">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have the rdf:resource attribute.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="not(@*[name()!='rdf:resource'])" />
      <xsl:otherwise>
        <rsv:assert see="http://xmlns.com/foaf/0.1/#term_made">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must not have an attribute other than rdf:resource.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="count(child::*)=0" />
      <xsl:otherwise>
        <rsv:assert see="http://xmlns.com/foaf/0.1/#term_made">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must not have child elements. Child<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(child::*[position()=1])" /><xsl:text xml:space="preserve"> </xsl:text>found.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="string-length(.)=0" />
      <xsl:otherwise>
        <rsv:assert see="http://xmlns.com/foaf/0.1/#term_made">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must not have text content.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:apply-templates mode="M45" />
  </xsl:template>
  <xsl:template match="foaf:maker" priority="3964" mode="M45">
    <xsl:if test="false">
      <rsv:report>Nothing.</rsv:report>
    </xsl:if>
    <xsl:apply-templates mode="M45" />
  </xsl:template>
  <xsl:template match="foaf:mbox" priority="3963" mode="M45">
    <xsl:choose>
      <xsl:when test="parent::foaf:Agent or parent::foaf:Group or parent::foaf:Organization or parent::foaf:Person" />
      <xsl:otherwise>
        <rsv:assert see="http://xmlns.com/foaf/0.1/#term_mbox">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have the &lt;foaf:Agent&gt; or &lt;foaf:Group&gt; or &lt;foaf:Organization&gt; or &lt;foaf:Person&gt; parent element.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="@rdf:resource" />
      <xsl:otherwise>
        <rsv:assert see="http://xmlns.com/foaf/0.1/#term_mbox">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have the rdf:resource attribute.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="not(@*[name()!='rdf:resource'])" />
      <xsl:otherwise>
        <rsv:assert see="http://xmlns.com/foaf/0.1/#term_mbox">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must not have an attribute other than rdf:resource.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="count(child::*)=0" />
      <xsl:otherwise>
        <rsv:assert see="http://xmlns.com/foaf/0.1/#term_mbox">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must not have child elements. Child<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(child::*[position()=1])" /><xsl:text xml:space="preserve"> </xsl:text>found.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="string-length(.)=0" />
      <xsl:otherwise>
        <rsv:assert see="http://xmlns.com/foaf/0.1/#term_mbox">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must not have text content.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:apply-templates mode="M45" />
  </xsl:template>
  <xsl:template match="foaf:mbox_sha1sum" priority="3962" mode="M45">
    <xsl:choose>
      <xsl:when test="parent::foaf:Agent or parent::foaf:Group or parent::foaf:Organization or parent::foaf:Person" />
      <xsl:otherwise>
        <rsv:assert see="http://xmlns.com/foaf/0.1/#term_mbox_sha1sum">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have the &lt;foaf:Agent&gt; or &lt;foaf:Group&gt; or &lt;foaf:Organization&gt; or &lt;foaf:Person&gt; parent element.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="not(@*[name()!='xml:lang'])" />
      <xsl:otherwise>
        <rsv:assert see="http://xmlns.com/foaf/0.1/#term_mbox_sha1sum">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must not have an attribute other than xml:lang.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="count(child::*)=0" />
      <xsl:otherwise>
        <rsv:assert see="http://xmlns.com/foaf/0.1/#term_mbox_sha1sum">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must not have child elements. Child<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(child::*[position()=1])" /><xsl:text xml:space="preserve"> </xsl:text>found.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="string-length(.)&gt;0" />
      <xsl:otherwise>
        <rsv:assert see="http://xmlns.com/foaf/0.1/#term_mbox_sha1sum">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have text content.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:apply-templates mode="M45" />
  </xsl:template>
  <xsl:template match="foaf:member" priority="3961" mode="M45">
    <xsl:choose>
      <xsl:when test="parent::foaf:Group" />
      <xsl:otherwise>
        <rsv:assert see="http://xmlns.com/foaf/0.1/#term_member">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have the &lt;foaf:Group&gt; parent element.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:apply-templates mode="M45" />
  </xsl:template>
  <xsl:template match="foaf:membershipClass" priority="3960" mode="M45">
    <xsl:choose>
      <xsl:when test="parent::foaf:Group" />
      <xsl:otherwise>
        <rsv:assert see="http://xmlns.com/foaf/0.1/#term_membershipClass">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have the &lt;foaf:Group&gt; parent element.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:apply-templates mode="M45" />
  </xsl:template>
  <xsl:template match="foaf:msnChatID" priority="3959" mode="M45">
    <xsl:choose>
      <xsl:when test="parent::foaf:Agent or parent::foaf:Group or parent::foaf:Organization or parent::foaf:Person" />
      <xsl:otherwise>
        <rsv:assert see="http://xmlns.com/foaf/0.1/#term_msnChatID">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have the &lt;foaf:Agent&gt; or &lt;foaf:Group&gt; or &lt;foaf:Organization&gt; or &lt;foaf:Person&gt; parent element.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="not(@*[name()!='xml:lang'])" />
      <xsl:otherwise>
        <rsv:assert see="http://xmlns.com/foaf/0.1/#term_msnChatID">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must not have an attribute other than xml:lang.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="count(child::*)=0" />
      <xsl:otherwise>
        <rsv:assert see="http://xmlns.com/foaf/0.1/#term_msnChatID">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must not have child elements. Child<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(child::*[position()=1])" /><xsl:text xml:space="preserve"> </xsl:text>found.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="string-length(.)&gt;0" />
      <xsl:otherwise>
        <rsv:assert see="http://xmlns.com/foaf/0.1/#term_msnChatID">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have text content.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:apply-templates mode="M45" />
  </xsl:template>
  <xsl:template match="foaf:myersBriggs" priority="3958" mode="M45">
    <xsl:choose>
      <xsl:when test="parent::foaf:Person" />
      <xsl:otherwise>
        <rsv:assert see="http://xmlns.com/foaf/0.1/#term_myersBriggs">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have the &lt;foaf:Person&gt; parent element.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="not(@*[name()!='xml:lang'])" />
      <xsl:otherwise>
        <rsv:assert see="http://xmlns.com/foaf/0.1/#term_myersBriggs">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must not have an attribute other than xml:lang.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="count(child::*)=0" />
      <xsl:otherwise>
        <rsv:assert see="http://xmlns.com/foaf/0.1/#term_myersBriggs">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must not have child elements. Child<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(child::*[position()=1])" /><xsl:text xml:space="preserve"> </xsl:text>found.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="string-length(.)&gt;0" />
      <xsl:otherwise>
        <rsv:assert see="http://xmlns.com/foaf/0.1/#term_myersBriggs">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have text content.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test=".='ESTJ' or .='INFP' or .='ESFP' or .='INTJ' or .='ESFJ' or .='INTP' or .='ENFP' or &#xD;&#xA;					.='ISTJ' or .='ESTP' or .='INFJ' or .='ENFJ' or .='ISTP' or .='ENTJ' or .='ISFP' or &#xD;&#xA;					.='ENTP' or .='ISFJ'" />
      <xsl:otherwise>
        <rsv:assert see="http://xmlns.com/foaf/0.1/#term_myersBriggs">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must be a valid Myers-Briggs class [EI][SN][TF][JP].</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:apply-templates mode="M45" />
  </xsl:template>
  <xsl:template match="foaf:name" priority="3957" mode="M45">
    <xsl:choose>
      <xsl:when test="not(@*[name()!='xml:lang'])" />
      <xsl:otherwise>
        <rsv:assert see="http://xmlns.com/foaf/0.1/#term_name">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must not have an attribute other than xml:lang.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="count(child::*)=0" />
      <xsl:otherwise>
        <rsv:assert see="http://xmlns.com/foaf/0.1/#term_name">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must not have child elements. Child<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(child::*[position()=1])" /><xsl:text xml:space="preserve"> </xsl:text>found.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="string-length(.)&gt;0" />
      <xsl:otherwise>
        <rsv:assert see="http://xmlns.com/foaf/0.1/#term_name">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have text content.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:apply-templates mode="M45" />
  </xsl:template>
  <xsl:template match="foaf:nick" priority="3956" mode="M45">
    <xsl:choose>
      <xsl:when test="parent::foaf:Person" />
      <xsl:otherwise>
        <rsv:assert see="http://xmlns.com/foaf/0.1/#term_nick">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have the &lt;foaf:Person&gt; parent element.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="not(@*[name()!='xml:lang'])" />
      <xsl:otherwise>
        <rsv:assert see="http://xmlns.com/foaf/0.1/#term_nick">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must not have an attribute other than xml:lang.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="count(child::*)=0" />
      <xsl:otherwise>
        <rsv:assert see="http://xmlns.com/foaf/0.1/#term_nick">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must not have child elements. Child<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(child::*[position()=1])" /><xsl:text xml:space="preserve"> </xsl:text>found.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="string-length(.)&gt;0" />
      <xsl:otherwise>
        <rsv:assert see="http://xmlns.com/foaf/0.1/#term_nick">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have text content.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:apply-templates mode="M45" />
  </xsl:template>
  <xsl:template match="foaf:page" priority="3955" mode="M45">
    <xsl:choose>
      <xsl:when test="@rdf:resource" />
      <xsl:otherwise>
        <rsv:assert see="http://xmlns.com/foaf/0.1/#term_page">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have the rdf:resource attribute.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="not(@*[name()!='rdf:resource'])" />
      <xsl:otherwise>
        <rsv:assert see="http://xmlns.com/foaf/0.1/#term_page">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must not have an attribute other than rdf:resource.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="count(child::*)=0" />
      <xsl:otherwise>
        <rsv:assert see="http://xmlns.com/foaf/0.1/#term_page">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must not have child elements. Child<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(child::*[position()=1])" /><xsl:text xml:space="preserve"> </xsl:text>found.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="string-length(.)=0" />
      <xsl:otherwise>
        <rsv:assert see="http://xmlns.com/foaf/0.1/#term_page">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must not have text content.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:apply-templates mode="M45" />
  </xsl:template>
  <xsl:template match="foaf:pastProject" priority="3954" mode="M45">
    <xsl:choose>
      <xsl:when test="parent::foaf:Person" />
      <xsl:otherwise>
        <rsv:assert see="http://xmlns.com/foaf/0.1/#term_pastProject">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have the &lt;foaf:Person&gt; parent element.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="@rdf:resource" />
      <xsl:otherwise>
        <rsv:assert see="http://xmlns.com/foaf/0.1/#term_pastProject">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have the rdf:resource attribute.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="not(@*[name()!='rdf:resource'])" />
      <xsl:otherwise>
        <rsv:assert see="http://xmlns.com/foaf/0.1/#term_pastProject">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must not have an attribute other than rdf:resource.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="count(child::*)=0" />
      <xsl:otherwise>
        <rsv:assert see="http://xmlns.com/foaf/0.1/#term_pastProject">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must not have child elements. Child<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(child::*[position()=1])" /><xsl:text xml:space="preserve"> </xsl:text>found.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="string-length(.)=0" />
      <xsl:otherwise>
        <rsv:assert see="http://xmlns.com/foaf/0.1/#term_pastProject">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must not have text content.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:apply-templates mode="M45" />
  </xsl:template>
  <xsl:template match="foaf:phone" priority="3953" mode="M45">
    <xsl:choose>
      <xsl:when test="@rdf:resource" />
      <xsl:otherwise>
        <rsv:assert see="http://xmlns.com/foaf/0.1/#term_phone">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have the rdf:resource attribute.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="not(@*[name()!='rdf:resource'])" />
      <xsl:otherwise>
        <rsv:assert see="http://xmlns.com/foaf/0.1/#term_phone">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must not have an attribute other than rdf:resource.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="count(child::*)=0" />
      <xsl:otherwise>
        <rsv:assert see="http://xmlns.com/foaf/0.1/#term_phone">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must not have child elements. Child<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(child::*[position()=1])" /><xsl:text xml:space="preserve"> </xsl:text>found.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="string-length(.)=0" />
      <xsl:otherwise>
        <rsv:assert see="http://xmlns.com/foaf/0.1/#term_phone">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must not have text content.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:apply-templates mode="M45" />
  </xsl:template>
  <xsl:template match="foaf:plan" priority="3952" mode="M45">
    <xsl:choose>
      <xsl:when test="parent::foaf:Person" />
      <xsl:otherwise>
        <rsv:assert see="http://xmlns.com/foaf/0.1/#term_plan">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have the &lt;foaf:Person&gt; parent element.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="not(@*[name()!='xml:lang'])" />
      <xsl:otherwise>
        <rsv:assert see="http://xmlns.com/foaf/0.1/#term_plan">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must not have an attribute other than xml:lang.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="count(child::*)=0" />
      <xsl:otherwise>
        <rsv:assert see="http://xmlns.com/foaf/0.1/#term_plan">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must not have child elements. Child<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(child::*[position()=1])" /><xsl:text xml:space="preserve"> </xsl:text>found.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="string-length(.)&gt;0" />
      <xsl:otherwise>
        <rsv:assert see="http://xmlns.com/foaf/0.1/#term_plan">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have text content.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:apply-templates mode="M45" />
  </xsl:template>
  <xsl:template match="foaf:primaryTopic" priority="3951" mode="M45">
    <xsl:choose>
      <xsl:when test="parent::foaf:Document" />
      <xsl:otherwise>
        <rsv:assert see="http://xmlns.com/foaf/0.1/#term_primaryTopic">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have the &lt;foaf:Document&gt; parent element.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="@rdf:resource" />
      <xsl:otherwise>
        <rsv:assert see="http://xmlns.com/foaf/0.1/#term_primaryTopic">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have the rdf:resource attribute.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="not(@*[name()!='rdf:resource'])" />
      <xsl:otherwise>
        <rsv:assert see="http://xmlns.com/foaf/0.1/#term_primaryTopic">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must not have an attribute other than rdf:resource.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="count(child::*)=0" />
      <xsl:otherwise>
        <rsv:assert see="http://xmlns.com/foaf/0.1/#term_primaryTopic">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must not have child elements. Child<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(child::*[position()=1])" /><xsl:text xml:space="preserve"> </xsl:text>found.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="string-length(.)=0" />
      <xsl:otherwise>
        <rsv:assert see="http://xmlns.com/foaf/0.1/#term_primaryTopic">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must not have text content.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:apply-templates mode="M45" />
  </xsl:template>
  <xsl:template match="foaf:publications" priority="3950" mode="M45">
    <xsl:choose>
      <xsl:when test="parent::foaf:Person" />
      <xsl:otherwise>
        <rsv:assert see="http://xmlns.com/foaf/0.1/#term_publications">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have the &lt;foaf:Person&gt; parent element.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:apply-templates mode="M45" />
  </xsl:template>
  <xsl:template match="foaf:schoolHomepage" priority="3949" mode="M45">
    <xsl:choose>
      <xsl:when test="parent::foaf:Person" />
      <xsl:otherwise>
        <rsv:assert see="http://xmlns.com/foaf/0.1/#term_schoolHomepage">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have the &lt;foaf:Person&gt; parent element.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:apply-templates mode="M45" />
  </xsl:template>
  <xsl:template match="foaf:sha1" priority="3948" mode="M45">
    <xsl:choose>
      <xsl:when test="parent::foaf:Document" />
      <xsl:otherwise>
        <rsv:assert see="http://xmlns.com/foaf/0.1/#term_sha1">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have the &lt;foaf:Document&gt; parent element.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="not(@*[name()!='xml:lang'])" />
      <xsl:otherwise>
        <rsv:assert see="http://xmlns.com/foaf/0.1/#term_sha1">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must not have an attribute other than xml:lang.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="count(child::*)=0" />
      <xsl:otherwise>
        <rsv:assert see="http://xmlns.com/foaf/0.1/#term_sha1">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must not have child elements. Child<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(child::*[position()=1])" /><xsl:text xml:space="preserve"> </xsl:text>found.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="string-length(.)&gt;0" />
      <xsl:otherwise>
        <rsv:assert see="http://xmlns.com/foaf/0.1/#term_sha1">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have text content.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:apply-templates mode="M45" />
  </xsl:template>
  <xsl:template match="foaf:surname" priority="3947" mode="M45">
    <xsl:choose>
      <xsl:when test="parent::foaf:Person" />
      <xsl:otherwise>
        <rsv:assert see="http://xmlns.com/foaf/0.1/#term_surname">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have the &lt;foaf:Person&gt; parent element.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="not(@*[name()!='xml:lang'])" />
      <xsl:otherwise>
        <rsv:assert see="http://xmlns.com/foaf/0.1/#term_surname">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must not have an attribute other than xml:lang.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="count(child::*)=0" />
      <xsl:otherwise>
        <rsv:assert see="http://xmlns.com/foaf/0.1/#term_surname">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must not have child elements. Child<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(child::*[position()=1])" /><xsl:text xml:space="preserve"> </xsl:text>found.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="string-length(.)&gt;0" />
      <xsl:otherwise>
        <rsv:assert see="http://xmlns.com/foaf/0.1/#term_surname">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have text content.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:apply-templates mode="M45" />
  </xsl:template>
  <xsl:template match="foaf:theme" priority="3946" mode="M45">
    <xsl:choose>
      <xsl:when test="@rdf:resource" />
      <xsl:otherwise>
        <rsv:assert see="http://xmlns.com/foaf/0.1/#term_theme">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have the rdf:resource attribute.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="not(@*[name()!='rdf:resource'])" />
      <xsl:otherwise>
        <rsv:assert see="http://xmlns.com/foaf/0.1/#term_theme">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must not have an attribute other than rdf:resource.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="count(child::*)=0" />
      <xsl:otherwise>
        <rsv:assert see="http://xmlns.com/foaf/0.1/#term_theme">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must not have child elements. Child<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(child::*[position()=1])" /><xsl:text xml:space="preserve"> </xsl:text>found.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="string-length(.)=0" />
      <xsl:otherwise>
        <rsv:assert see="http://xmlns.com/foaf/0.1/#term_theme">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must not have text content.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:apply-templates mode="M45" />
  </xsl:template>
  <xsl:template match="foaf:thumbnail" priority="3945" mode="M45">
    <xsl:choose>
      <xsl:when test="parent::foaf:Image" />
      <xsl:otherwise>
        <rsv:assert see="http://xmlns.com/foaf/0.1/#term_thumbnail">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have the &lt;foaf:Image&gt; parent element.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:apply-templates mode="M45" />
  </xsl:template>
  <xsl:template match="foaf:tipjar" priority="3944" mode="M45">
    <xsl:choose>
      <xsl:when test="parent::foaf:Agent or parent::foaf:Group or parent::foaf:Organization or parent::foaf:Person" />
      <xsl:otherwise>
        <rsv:assert see="http://xmlns.com/foaf/0.1/#term_tipjar">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have the &lt;foaf:Agent&gt; or &lt;foaf:Group&gt; or &lt;foaf:Organization&gt; or &lt;foaf:Person&gt; parent element.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:apply-templates mode="M45" />
  </xsl:template>
  <xsl:template match="foaf:title" priority="3943" mode="M45">
    <xsl:choose>
      <xsl:when test="parent::foaf:Person" />
      <xsl:otherwise>
        <rsv:assert see="http://xmlns.com/foaf/0.1/#term_title">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have the &lt;foaf:Person&gt; parent element.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="not(@*[name()!='xml:lang'])" />
      <xsl:otherwise>
        <rsv:assert see="http://xmlns.com/foaf/0.1/#term_title">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must not have an attribute other than xml:lang.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="count(child::*)=0" />
      <xsl:otherwise>
        <rsv:assert see="http://xmlns.com/foaf/0.1/#term_title">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must not have child elements. Child<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(child::*[position()=1])" /><xsl:text xml:space="preserve"> </xsl:text>found.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="string-length(.)&gt;0" />
      <xsl:otherwise>
        <rsv:assert see="http://xmlns.com/foaf/0.1/#term_title">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have text content.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:apply-templates mode="M45" />
  </xsl:template>
  <xsl:template match="foaf:topic" priority="3942" mode="M45">
    <xsl:choose>
      <xsl:when test="parent::foaf:Document" />
      <xsl:otherwise>
        <rsv:assert see="http://xmlns.com/foaf/0.1/#term_topic">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have the &lt;foaf:Document&gt; parent element.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="@rdf:resource" />
      <xsl:otherwise>
        <rsv:assert see="http://xmlns.com/foaf/0.1/#term_topic">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have the rdf:resource attribute.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="not(@*[name()!='rdf:resource'])" />
      <xsl:otherwise>
        <rsv:assert see="http://xmlns.com/foaf/0.1/#term_topic">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must not have an attribute other than rdf:resource.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="count(child::*)=0" />
      <xsl:otherwise>
        <rsv:assert see="http://xmlns.com/foaf/0.1/#term_topic">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must not have child elements. Child<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(child::*[position()=1])" /><xsl:text xml:space="preserve"> </xsl:text>found.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="string-length(.)=0" />
      <xsl:otherwise>
        <rsv:assert see="http://xmlns.com/foaf/0.1/#term_topic">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must not have text content.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:apply-templates mode="M45" />
  </xsl:template>
  <xsl:template match="foaf:topic_interest" priority="3941" mode="M45">
    <xsl:choose>
      <xsl:when test="parent::foaf:Person" />
      <xsl:otherwise>
        <rsv:assert see="http://xmlns.com/foaf/0.1/#term_topic_interest">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have the &lt;foaf:Person&gt; parent element.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="@rdf:resource" />
      <xsl:otherwise>
        <rsv:assert see="http://xmlns.com/foaf/0.1/#term_topic_interest">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have the rdf:resource attribute.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="not(@*[name()!='rdf:resource'])" />
      <xsl:otherwise>
        <rsv:assert see="http://xmlns.com/foaf/0.1/#term_topic_interest">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must not have an attribute other than rdf:resource.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="count(child::*)=0" />
      <xsl:otherwise>
        <rsv:assert see="http://xmlns.com/foaf/0.1/#term_topic_interest">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must not have child elements. Child<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(child::*[position()=1])" /><xsl:text xml:space="preserve"> </xsl:text>found.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="string-length(.)=0" />
      <xsl:otherwise>
        <rsv:assert see="http://xmlns.com/foaf/0.1/#term_topic_interest">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must not have text content.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:apply-templates mode="M45" />
  </xsl:template>
  <xsl:template match="foaf:weblog" priority="3940" mode="M45">
    <xsl:choose>
      <xsl:when test="parent::foaf:Agent or parent::foaf:Group or parent::foaf:Organization or parent::foaf:Person" />
      <xsl:otherwise>
        <rsv:assert see="http://xmlns.com/foaf/0.1/#term_weblog">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have the &lt;foaf:Agent&gt; or &lt;foaf:Group&gt; or &lt;foaf:Organization&gt; or &lt;foaf:Person&gt; parent element.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:apply-templates mode="M45" />
  </xsl:template>
  <xsl:template match="foaf:workInfoHomepage" priority="3939" mode="M45">
    <xsl:choose>
      <xsl:when test="parent::foaf:Person" />
      <xsl:otherwise>
        <rsv:assert see="http://xmlns.com/foaf/0.1/#term_workInfoHomepage">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have the &lt;foaf:Person&gt; parent element.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:apply-templates mode="M45" />
  </xsl:template>
  <xsl:template match="foaf:workplaceHomepage" priority="3938" mode="M45">
    <xsl:choose>
      <xsl:when test="parent::foaf:Person" />
      <xsl:otherwise>
        <rsv:assert see="http://xmlns.com/foaf/0.1/#term_workplaceHomepage">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have the &lt;foaf:Person&gt; parent element.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:apply-templates mode="M45" />
  </xsl:template>
  <xsl:template match="foaf:yahooChatID" priority="3937" mode="M45">
    <xsl:choose>
      <xsl:when test="parent::foaf:Agent or parent::foaf:Group or parent::foaf:Organization or parent::foaf:Person" />
      <xsl:otherwise>
        <rsv:assert see="http://xmlns.com/foaf/0.1/#term_yahooChatID">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have the &lt;foaf:Agent&gt; or &lt;foaf:Group&gt; or &lt;foaf:Organization&gt; or &lt;foaf:Person&gt; parent element.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="not(@*[name()!='xml:lang'])" />
      <xsl:otherwise>
        <rsv:assert see="http://xmlns.com/foaf/0.1/#term_yahooChatID">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must not have an attribute other than xml:lang.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="count(child::*)=0" />
      <xsl:otherwise>
        <rsv:assert see="http://xmlns.com/foaf/0.1/#term_yahooChatID">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must not have child elements. Child<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(child::*[position()=1])" /><xsl:text xml:space="preserve"> </xsl:text>found.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="string-length(.)&gt;0" />
      <xsl:otherwise>
        <rsv:assert see="http://xmlns.com/foaf/0.1/#term_yahooChatID">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have text content.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:apply-templates mode="M45" />
  </xsl:template>
  <xsl:template match="foaf:*" priority="3936" mode="M45">
    <xsl:choose>
      <xsl:when test="false" />
      <xsl:otherwise>
        <rsv:assert>&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; is not a valid FOAF namespace element.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:apply-templates mode="M45" />
  </xsl:template>
  <xsl:template match="text()" priority="-1" mode="M45">
  </xsl:template>
  <xsl:template match="*" priority="4000" mode="M46">
    <xsl:if test="namespace-uri()!='http://www.w3.org/1999/02/22-rdf-syntax-ns#' and&#xD;&#xA;				namespace-uri()!='http://purl.org/rss/1.0/' and&#xD;&#xA;				namespace-uri()!='http://purl.org/dc/elements/1.1/' and&#xD;&#xA;				namespace-uri()!='http://webns.net/mvcb/' and&#xD;&#xA;				namespace-uri()!='http://backend.userland.com/blogChannelModule' and&#xD;&#xA;				namespace-uri()!='http://www.w3.org/2001/XMLSchema' and&#xD;&#xA;				namespace-uri()!='http://purl.org/rss/1.0/modules/syndication/' and&#xD;&#xA;				namespace-uri()!='http://purl.org/rss/1.0/modules/content/' and&#xD;&#xA;				namespace-uri()!='http://www.w3.org/1999/xhtml' and&#xD;&#xA;				namespace-uri()!='http://backend.userland.com/creativeCommonsRssModule' and&#xD;&#xA;				namespace-uri()!='http://my.netscape.com/rdf/simple/0.9/' and&#xD;&#xA;				namespace-uri()!='http://madskills.com/public/xml/rss/module/trackback/' and&#xD;&#xA;				namespace-uri()!='http://wellformedweb.org/CommentAPI/' and&#xD;&#xA;				namespace-uri()!='http://purl.org/rss/1.0/modules/slash/' and&#xD;&#xA;				namespace-uri()!='http://purl.org/atom/ns#' and&#xD;&#xA;				namespace-uri()!='http://purl.org/dc/terms/' and&#xD;&#xA;				namespace-uri()!='http://www.purl.org/NET/ENT/1.0/' and&#xD;&#xA;				namespace-uri()!='http://xmlns.com/foaf/0.1/' and&#xD;&#xA;				namespace-uri()!='http://www.w3.org/2000/01/rdf-schema#' and&#xD;&#xA;				string(namespace-uri()) ">
      <rsv:report>&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; is not supported by this validator.</rsv:report>
    </xsl:if>
    <xsl:apply-templates mode="M46" />
  </xsl:template>
  <xsl:template match="text()" priority="-1" mode="M46">
  </xsl:template>
  <xsl:template match="atom:issued" priority="4000" mode="M47">
    <xsl:choose>
      <xsl:when test="number(substring(.,1,4))&gt;0 and number(substring(.,1,4))&lt;10000 and&#xD;&#xA;					(string-length(.)&lt;5 or &#xD;&#xA;						(substring(.,5,1)='-' and number(substring(.,6,2))&gt;0 and number(substring(.,6,2))&lt;13)) and&#xD;&#xA;					(string-length(.)&lt;8 or &#xD;&#xA;						(substring(.,8,1)='-' and number(substring(.,9,2))&gt;0 and number(substring(.,9,2))&lt;32)) and&#xD;&#xA;					(string-length(.)&lt;11 or &#xD;&#xA;						(substring(.,11,1)='T' and number(substring(.,12,2))&gt;-1 and number(substring(.,12,2))&lt;25 and&#xD;&#xA;						substring(.,14,1)=':' and number(substring(.,15,2))&gt;-1 and number(substring(.,15,2))&lt;61)) and&#xD;&#xA;					(string-length(.)&lt;11 or string-length(.)=16 or substring(.,17,1)=':' or substring(.,17,1)='+' or substring(.,17,1)='-' or substring(.,17,1)='Z') and&#xD;&#xA;					(string-length(.)&lt;11 or string-length(.)=16 or string-length(.)&gt;17 or substring(.,17,1)='Z') and&#xD;&#xA;					(string-length(.)&lt;11 or string-length(.)=16 or substring(.,17,1)=':' or substring(.,17,1)='Z' or ( (substring(.,17,1)='+' or substring(.,17,1)='-') and number(substring(.,18,2))&gt;-1 and number(substring(.,18,2))&lt;13)) and&#xD;&#xA;					(string-length(.)&lt;11 or string-length(.)=16 or substring(.,17,1)=':' or substring(.,17,1)='Z' or ( (substring(.,17,1)='+' or substring(.,17,1)='-') and substring(.,20,1)=':')) and&#xD;&#xA;					(string-length(.)&lt;11 or string-length(.)=16 or substring(.,17,1)=':' or substring(.,17,1)='Z' or ( (substring(.,17,1)='+' or substring(.,17,1)='-') and number(substring(.,21,2))&gt;-1 and number(substring(.,21,2))&lt;61)) and&#xD;&#xA;					(string-length(.)&lt;11 or string-length(.)=16 or substring(.,17,1)=':' or substring(.,17,1)='Z' or string-length(.)=22) and&#xD;&#xA;					(string-length(.)&lt;18 or string-length(.)=16 or substring(.,17,1)='+' or substring(.,17,1)='-' or (substring(.,17,1)=':' and number(substring(.,18,2))&gt;-1 and number(substring(.,18,2))&lt;61)) and&#xD;&#xA;					(string-length(.)&lt;18 or string-length(.)=16 or substring(.,17,1)='+' or substring(.,17,1)='-' or string-length(.)=19 or substring(.,20,1)='.' or substring(.,20,1)='Z' or string-length(.)&gt;20) and&#xD;&#xA;					(string-length(.)&lt;21 or string-length(.)=16 or substring(.,17,1)='+' or substring(.,17,1)='-' or string-length(.)=19 or substring(.,20,1)='.' or substring(.,20,1)='Z' or ( (substring(.,20,1)='+' or substring(.,20,1)='-') and number(substring(.,21,2))&gt;-1 and number(substring(.,21,2))&lt;13)) and&#xD;&#xA;					(string-length(.)&lt;21 or string-length(.)=16 or substring(.,17,1)='+' or substring(.,17,1)='-' or string-length(.)=19 or substring(.,20,1)='.' or substring(.,20,1)='Z' or ( (substring(.,20,1)='+' or substring(.,20,1)='-') and substring(.,23,1)=':')) and&#xD;&#xA;					(string-length(.)&lt;21 or string-length(.)=16 or substring(.,17,1)='+' or substring(.,17,1)='-' or string-length(.)=19 or substring(.,20,1)='.' or substring(.,20,1)='Z' or ( (substring(.,20,1)='+' or substring(.,20,1)='-') and number(substring(.,24,2))&gt;-1 and number(substring(.,24,2))&lt;61)) and&#xD;&#xA;					(string-length(.)&lt;21 or string-length(.)=16 or substring(.,17,1)='+' or substring(.,17,1)='-' or string-length(.)=19 or substring(.,20,1)='.' or substring(.,20,1)='Z' or ( (substring(.,20,1)='+' or substring(.,20,1)='-') and string-length(.)=25))" />
      <xsl:otherwise>
        <rsv:assert>&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; is not in ISO 8601 date format.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:if test="string-length(.)&gt;20 and substring(.,20,1)='.'">
      <rsv:report>No validation of ISO 8601 data format milliseconds or timezone when milliseconds are presents.</rsv:report>
    </xsl:if>
    <xsl:choose>
      <xsl:when test="not ((substring(.,6,2)='02' or substring(.,6,2)='04' or substring(.,6,2)='06' or substring(.,6,2)='09' or substring(.,6,2)='11') and substring(.,9,2)='31')" />
      <xsl:otherwise>
        <rsv:assert>&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; is not a valid date (31st of the month).</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="not (substring(.,6,2)='02' and substring(.,9,2)='30')" />
      <xsl:otherwise>
        <rsv:assert>&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; is not a valid date (February 30th).</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:apply-templates mode="M47" />
  </xsl:template>
  <xsl:template match="atom:created|atom:modified|dc:date|sy:updateBase|dcterms:created|dcterms:issued|dcterms:modified|dcterms:dataAccepted|dcterms:dateSubmitted|dcterms:dateCopyrighted" priority="3999" mode="M47">
    <xsl:choose>
      <xsl:when test="number(substring(.,1,4))&gt;0 and number(substring(.,1,4))&lt;10000 and&#xD;&#xA;					(string-length(.)&lt;5 or &#xD;&#xA;						(substring(.,5,1)='-' and number(substring(.,6,2))&gt;0 and number(substring(.,6,2))&lt;13)) and&#xD;&#xA;					(string-length(.)&lt;8 or &#xD;&#xA;						(substring(.,8,1)='-' and number(substring(.,9,2))&gt;0 and number(substring(.,9,2))&lt;32)) and&#xD;&#xA;					(string-length(.)&lt;11 or &#xD;&#xA;						(substring(.,11,1)='T' and number(substring(.,12,2))&gt;-1 and number(substring(.,12,2))&lt;25 and&#xD;&#xA;						substring(.,14,1)=':' and number(substring(.,15,2))&gt;-1 and number(substring(.,15,2))&lt;61)) and&#xD;&#xA;					(string-length(.)&lt;11 or substring(.,17,1)=':' or substring(.,17,1)='+' or substring(.,17,1)='-' or substring(.,17,1)='Z') and&#xD;&#xA;					(string-length(.)&lt;11 or string-length(.)&gt;17 or substring(.,17,1)='Z') and&#xD;&#xA;					(string-length(.)&lt;11 or substring(.,17,1)=':' or substring(.,17,1)='Z' or ( (substring(.,17,1)='+' or substring(.,17,1)='-') and number(substring(.,18,2))&gt;-1 and number(substring(.,18,2))&lt;13)) and&#xD;&#xA;					(string-length(.)&lt;11 or substring(.,17,1)=':' or substring(.,17,1)='Z' or ( (substring(.,17,1)='+' or substring(.,17,1)='-') and substring(.,20,1)=':')) and&#xD;&#xA;					(string-length(.)&lt;11 or substring(.,17,1)=':' or substring(.,17,1)='Z' or ( (substring(.,17,1)='+' or substring(.,17,1)='-') and number(substring(.,21,2))&gt;-1 and number(substring(.,21,2))&lt;61)) and&#xD;&#xA;					(string-length(.)&lt;11 or substring(.,17,1)=':' or substring(.,17,1)='Z' or string-length(.)=22) and&#xD;&#xA;					(string-length(.)&lt;18 or substring(.,17,1)='+' or substring(.,17,1)='-' or (substring(.,17,1)=':' and number(substring(.,18,2))&gt;-1 and number(substring(.,18,2))&lt;61)) and&#xD;&#xA;					(string-length(.)&lt;18 or substring(.,17,1)='+' or substring(.,17,1)='-' or substring(.,20,1)='.' or substring(.,20,1)='Z' or string-length(.)&gt;20) and&#xD;&#xA;					(string-length(.)&lt;21 or substring(.,17,1)='+' or substring(.,17,1)='-' or substring(.,20,1)='.' or substring(.,20,1)='Z' or ( (substring(.,20,1)='+' or substring(.,20,1)='-') and number(substring(.,21,2))&gt;-1 and number(substring(.,21,2))&lt;13)) and&#xD;&#xA;					(string-length(.)&lt;21 or substring(.,17,1)='+' or substring(.,17,1)='-' or substring(.,20,1)='.' or substring(.,20,1)='Z' or ( (substring(.,20,1)='+' or substring(.,20,1)='-') and substring(.,23,1)=':')) and&#xD;&#xA;					(string-length(.)&lt;21 or substring(.,17,1)='+' or substring(.,17,1)='-' or substring(.,20,1)='.' or substring(.,20,1)='Z' or ( (substring(.,20,1)='+' or substring(.,20,1)='-') and number(substring(.,24,2))&gt;-1 and number(substring(.,24,2))&lt;61)) and&#xD;&#xA;					(string-length(.)&lt;21 or substring(.,17,1)='+' or substring(.,17,1)='-' or substring(.,20,1)='.' or substring(.,20,1)='Z' or ( (substring(.,20,1)='+' or substring(.,20,1)='-') and string-length(.)=25))" />
      <xsl:otherwise>
        <rsv:assert>&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; is not in ISO 8601 date format.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:if test="string-length(.)&gt;20 and substring(.,20,1)='.'">
      <rsv:report>No validation of ISO 8601 data format milliseconds or timezone when milliseconds are presents.</rsv:report>
    </xsl:if>
    <xsl:choose>
      <xsl:when test="not ((substring(.,6,2)='02' or substring(.,6,2)='04' or substring(.,6,2)='06' or substring(.,6,2)='09' or substring(.,6,2)='11') and substring(.,9,2)='31')" />
      <xsl:otherwise>
        <rsv:assert>&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; is not a valid date (31st of the month).</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="not (substring(.,6,2)='02' and substring(.,9,2)='30')" />
      <xsl:otherwise>
        <rsv:assert>&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; is not a valid date (February 30th).</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:apply-templates mode="M47" />
  </xsl:template>
  <xsl:template match="pubDate|lastBuildDate|dateCreated|dateModified" priority="3998" mode="M47">
    <xsl:choose>
      <xsl:when test="(substring(.,4,1)!=',' or &#xD;&#xA;						((substring(.,1,5)='Mon, ' or substring(.,1,5)='Tue, ' or substring(.,1,5)='Wed, ' or substring(.,1,5)='Thu, ' or substring(.,1,5)='Fri, ' or substring(.,1,5)='Sat, ' or substring(.,1,5)='Sun, ') and&#xD;&#xA;						(substring(.,7,1)!=' ' or number(substring(.,6,1))&gt;0) and&#xD;&#xA;						(substring(.,7,1)=' ' or (number(substring(.,6,2))&gt;0 and number(substring(.,6,2))&lt;32)) and&#xD;&#xA;						(substring(.,7,1)=' ' or substring(.,8,5)=' Jan ' or substring(.,8,5)=' Feb ' or substring(.,8,5)=' Mar ' or substring(.,8,5)=' Apr ' or substring(.,8,5)=' May ' or substring(.,8,5)=' Jun ' or substring(.,8,5)=' Jul ' or substring(.,8,5)=' Aug ' or substring(.,8,5)=' Sep ' or substring(.,8,5)=' Oct ' or substring(.,8,5)=' Nov ' or substring(.,8,5)=' Dec ') and&#xD;&#xA;						(substring(.,7,1)!=' ' or substring(.,7,5)=' Jan ' or substring(.,7,5)=' Feb ' or substring(.,7,5)=' Mar ' or substring(.,7,5)=' Apr ' or substring(.,7,5)=' May ' or substring(.,7,5)=' Jun ' or substring(.,7,5)=' Jul ' or substring(.,7,5)=' Aug ' or substring(.,7,5)=' Sep ' or substring(.,7,5)=' Oct ' or substring(.,7,5)=' Nov ' or substring(.,7,5)=' Dec ') and&#xD;&#xA;						(substring(.,7,1)=' ' or (number(substring(.,13,4))&gt;0 and number(substring(.,13,4))&lt;10000)) and&#xD;&#xA;						(substring(.,7,1)!=' ' or (number(substring(.,12,4))&gt;0 and number(substring(.,12,4))&lt;10000)) and&#xD;&#xA;						(substring(.,7,1)=' ' or substring(.,17,1)=' ') and&#xD;&#xA;						(substring(.,7,1)!=' ' or substring(.,16,1)=' ') and&#xD;&#xA;						(substring(.,7,1)=' ' or (number(substring(.,18,2))&gt;-1 and number(substring(.,18,2))&lt;24)) and&#xD;&#xA;						(substring(.,7,1)!=' ' or (number(substring(.,17,2))&gt;-1 and number(substring(.,17,2))&lt;24)) and&#xD;&#xA;						(substring(.,7,1)=' ' or substring(.,20,1)=':') and&#xD;&#xA;						(substring(.,7,1)!=' ' or substring(.,19,1)=':') and&#xD;&#xA;						(substring(.,7,1)=' ' or (number(substring(.,21,2))&gt;-1 and number(substring(.,21,2))&lt;60)) and&#xD;&#xA;						(substring(.,7,1)!=' ' or (number(substring(.,20,2))&gt;-1 and number(substring(.,20,2))&lt;60)) and&#xD;&#xA;						(substring(.,7,1)=' ' or substring(.,23,1)=' ' or (number(substring(.,24,2))&gt;-1 and number(substring(.,24,2))&lt;60)) and&#xD;&#xA;						(substring(.,7,1)!=' ' or substring(.,22,1)=' ' or (number(substring(.,23,2))&gt;-1 and number(substring(.,23,2))&lt;60)) and&#xD;&#xA;						(substring(.,7,1)=' ' or substring(.,23,1)=' ' or (substring(.,26,2)&gt;=' A' and substring(.,26,2)&lt;=' Z' and string-length(.)=27) or (substring(.,26,3)=' UT' and string-length(.)=28) or string-length(.)=29 or string-length(.)=31) and&#xD;&#xA;						(substring(.,7,1)=' ' or substring(.,23,1)=':' or (substring(.,23,2)&gt;=' A' and substring(.,23,2)&lt;=' Z' and string-length(.)=24) or (substring(.,23,3)=' UT' and string-length(.)=25) or string-length(.)=26 or string-length(.)=28) and&#xD;&#xA;						(substring(.,7,1)!=' ' or substring(.,22,1)=' ' or (substring(.,25,2)&gt;=' A' and substring(.,25,2)&lt;=' Z' and string-length(.)=26) or (substring(.,25,3)=' UT' and string-length(.)=27) or string-length(.)=28 or string-length(.)=30) and&#xD;&#xA;						(substring(.,7,1)!=' ' or substring(.,22,1)=':' or (substring(.,22,2)&gt;=' A' and substring(.,22,2)&lt;=' Z' and string-length(.)=23) or (substring(.,22,3)=' UT' and string-length(.)=24) or string-length(.)=25 or string-length(.)=27) and&#xD;&#xA;						(substring(.,7,1)=' ' or substring(.,23,1)=' ' or string-length(.)!=29 or substring(.,26,4)=' GMT' or substring(.,26,4)=' EST' or substring(.,26,4)=' EDT' or substring(.,26,4)=' CST' or substring(.,26,4)=' CDT' or substring(.,26,4)=' MST' or substring(.,26,4)=' MDT' or substring(.,26,4)=' PST' or substring(.,26,4)=' PDT') and&#xD;&#xA;						(substring(.,7,1)=' ' or substring(.,23,1)=':' or string-length(.)!=26 or substring(.,23,4)=' GMT' or substring(.,23,4)=' EST' or substring(.,23,4)=' EDT' or substring(.,23,4)=' CST' or substring(.,23,4)=' CDT' or substring(.,23,4)=' MST' or substring(.,23,4)=' MDT' or substring(.,23,4)=' PST' or substring(.,23,4)=' PDT') and&#xD;&#xA;						(substring(.,7,1)!=' ' or substring(.,22,1)=' ' or string-length(.)!=28 or substring(.,25,4)=' GMT' or substring(.,25,4)=' EST' or substring(.,25,4)=' EDT' or substring(.,25,4)=' CST' or substring(.,25,4)=' CDT' or substring(.,25,4)=' MST' or substring(.,25,4)=' MDT' or substring(.,25,4)=' PST' or substring(.,25,4)=' PDT') and&#xD;&#xA;						(substring(.,7,1)!=' ' or substring(.,22,1)=':' or string-length(.)!=25 or substring(.,22,4)=' GMT' or substring(.,22,4)=' EST' or substring(.,22,4)=' EDT' or substring(.,22,4)=' CST' or substring(.,22,4)=' CDT' or substring(.,22,4)=' MST' or substring(.,22,4)=' MDT' or substring(.,22,4)=' PST' or substring(.,22,4)=' PDT') and&#xD;&#xA;						(substring(.,7,1)=' ' or substring(.,23,1)=' ' or string-length(.)!=31 or ((substring(.,27,1)='+' or substring(.,27,1)='-') and substring(.,28,4)&gt;-1)) and&#xD;&#xA;						(substring(.,7,1)=' ' or substring(.,23,1)=':' or string-length(.)!=28 or ((substring(.,24,1)='+' or substring(.,24,1)='-') and substring(.,25,4)&gt;-1)) and&#xD;&#xA;						(substring(.,7,1)!=' ' or substring(.,22,1)=' ' or string-length(.)!=30 or ((substring(.,26,1)='+' or substring(.,26,1)='-') and substring(.,27,4)&gt;-1)) and&#xD;&#xA;						(substring(.,7,1)!=' ' or substring(.,22,1)=':' or string-length(.)!=27 or ((substring(.,23,1)='+' or substring(.,23,1)='-') and substring(.,24,4)&gt;-1)))) and&#xD;&#xA;					(substring(.,4,1)=',' or &#xD;&#xA;						((substring(.,2,1)!=' ' or number(substring(.,1,1))&gt;0) and&#xD;&#xA;						(substring(.,2,1)=' ' or (number(substring(.,1,2))&gt;0 and number(substring(.,1,2))&lt;32)) and&#xD;&#xA;						(substring(.,2,1)=' ' or substring(.,3,5)=' Jan ' or substring(.,3,5)=' Feb ' or substring(.,3,5)=' Mar ' or substring(.,3,5)=' Apr ' or substring(.,3,5)=' May ' or substring(.,3,5)=' Jun ' or substring(.,3,5)=' Jul ' or substring(.,3,5)=' Aug ' or substring(.,3,5)=' Sep ' or substring(.,3,5)=' Oct ' or substring(.,3,5)=' Nov ' or substring(.,3,5)=' Dec ') and&#xD;&#xA;						(substring(.,2,1)!=' ' or substring(.,2,5)=' Jan ' or substring(.,2,5)=' Feb ' or substring(.,2,5)=' Mar ' or substring(.,2,5)=' Apr ' or substring(.,2,5)=' May ' or substring(.,2,5)=' Jun ' or substring(.,2,5)=' Jul ' or substring(.,2,5)=' Aug ' or substring(.,2,5)=' Sep ' or substring(.,2,5)=' Oct ' or substring(.,2,5)=' Nov ' or substring(.,2,5)=' Dec ') and&#xD;&#xA;						(substring(.,2,1)=' ' or (number(substring(.,8,4))&gt;0 and number(substring(.,8,4))&lt;10000)) and&#xD;&#xA;						(substring(.,2,1)!=' ' or (number(substring(.,7,4))&gt;0 and number(substring(.,7,4))&lt;10000)) and&#xD;&#xA;						(substring(.,2,1)=' ' or substring(.,12,1)=' ') and&#xD;&#xA;						(substring(.,2,1)!=' ' or substring(.,11,1)=' ') and&#xD;&#xA;						(substring(.,2,1)=' ' or (number(substring(.,13,2))&gt;-1 and number(substring(.,13,2))&lt;24)) and&#xD;&#xA;						(substring(.,2,1)!=' ' or (number(substring(.,12,2))&gt;-1 and number(substring(.,12,2))&lt;24)) and&#xD;&#xA;						(substring(.,2,1)=' ' or substring(.,15,1)=':') and&#xD;&#xA;						(substring(.,2,1)!=' ' or substring(.,14,1)=':') and&#xD;&#xA;						(substring(.,2,1)=' ' or (number(substring(.,16,2))&gt;-1 and number(substring(.,16,2))&lt;60)) and&#xD;&#xA;						(substring(.,2,1)!=' ' or (number(substring(.,15,2))&gt;-1 and number(substring(.,15,2))&lt;60)) and&#xD;&#xA;						(substring(.,2,1)=' ' or substring(.,18,1)=' ' or (number(substring(.,19,2))&gt;-1 and number(substring(.,19,2))&lt;60)) and&#xD;&#xA;						(substring(.,2,1)!=' ' or substring(.,17,1)=' ' or (number(substring(.,18,2))&gt;-1 and number(substring(.,18,2))&lt;60)) and&#xD;&#xA;						(substring(.,2,1)=' ' or substring(.,18,1)=' ' or (substring(.,21,1)=' ' and string-length(.)=22) or (substring(.,21,3)=' UT' and string-length(.)=23) or string-length(.)=24 or string-length(.)=26) and&#xD;&#xA;						(substring(.,2,1)=' ' or substring(.,18,1)=':' or (substring(.,18,1)=' ' and string-length(.)=19) or (substring(.,18,3)=' UT' and string-length(.)=20) or string-length(.)=21 or string-length(.)=23) and&#xD;&#xA;						(substring(.,2,1)!=' ' or substring(.,17,1)=' ' or (substring(.,20,1)=' ' and string-length(.)=21) or (substring(.,20,3)=' UT' and string-length(.)=22) or string-length(.)=23 or string-length(.)=25) and&#xD;&#xA;						(substring(.,2,1)!=' ' or substring(.,17,1)=':' or (substring(.,17,1)=' ' and string-length(.)=18) or (substring(.,17,3)=' UT' and string-length(.)=19) or string-length(.)=20 or string-length(.)=22) and&#xD;&#xA;						(substring(.,2,1)=' ' or substring(.,18,1)=' ' or string-length(.)!=24 or substring(.,21,4)=' GMT' or substring(.,21,4)=' EST' or substring(.,21,4)=' EDT' or substring(.,21,4)=' CST' or substring(.,21,4)=' CDT' or substring(.,21,4)=' MST' or substring(.,21,4)=' MDT' or substring(.,21,4)=' PST' or substring(.,21,4)=' PDT') and&#xD;&#xA;						(substring(.,2,1)=' ' or substring(.,18,1)=':' or string-length(.)!=21 or substring(.,18,4)=' GMT' or substring(.,18,4)=' EST' or substring(.,18,4)=' EDT' or substring(.,18,4)=' CST' or substring(.,18,4)=' CDT' or substring(.,18,4)=' MST' or substring(.,18,4)=' MDT' or substring(.,18,4)=' PST' or substring(.,18,4)=' PDT') and&#xD;&#xA;						(substring(.,2,1)!=' ' or substring(.,17,1)=' ' or string-length(.)!=23 or substring(.,20,4)=' GMT' or substring(.,20,4)=' EST' or substring(.,20,4)=' EDT' or substring(.,20,4)=' CST' or substring(.,20,4)=' CDT' or substring(.,20,4)=' MST' or substring(.,20,4)=' MDT' or substring(.,20,4)=' PST' or substring(.,20,4)=' PDT') and&#xD;&#xA;						(substring(.,2,1)!=' ' or substring(.,17,1)=':' or string-length(.)!=20 or substring(.,17,4)=' GMT' or substring(.,17,4)=' EST' or substring(.,17,4)=' EDT' or substring(.,17,4)=' CST' or substring(.,17,4)=' CDT' or substring(.,17,4)=' MST' or substring(.,17,4)=' MDT' or substring(.,17,4)=' PST' or substring(.,17,4)=' PDT') and&#xD;&#xA;						(substring(.,2,1)=' ' or substring(.,18,1)=' ' or string-length(.)!=26 or ((substring(.,22,1)='+' or substring(.,22,1)='-') and substring(.,23,4)&gt;-1)) and&#xD;&#xA;						(substring(.,2,1)=' ' or substring(.,18,1)=':' or string-length(.)!=23 or ((substring(.,19,1)='+' or substring(.,19,1)='-') and substring(.,20,4)&gt;-1)) and&#xD;&#xA;						(substring(.,2,1)!=' ' or substring(.,17,1)=' ' or string-length(.)!=25 or ((substring(.,21,1)='+' or substring(.,21,1)='-') and substring(.,22,4)&gt;-1)) and&#xD;&#xA;						(substring(.,2,1)!=' ' or substring(.,17,1)=':' or string-length(.)!=22 or ((substring(.,18,1)='+' or substring(.,18,1)='-') and substring(.,19,4)&gt;-1))))" />
      <xsl:otherwise>
        <rsv:assert>&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; is not in RFC 822 date format.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:apply-templates mode="M47" />
  </xsl:template>
  <xsl:template match="text()" priority="-1" mode="M47">
  </xsl:template>
  <xsl:template match="atom:content|atom:title|atom:summary|atom:tagline|atom:copyright|atom:info" priority="4000" mode="M48">
    <xsl:if test="@mode='escaped' and @type='text/html' and (contains(translate(.,'EMBD','embd'),'&lt;embed ') or contains(translate(.,'EMBD','embd'),'&lt;embed&gt;'))">
      <rsv:report>&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; should not contain an entity-encoded HTML &lt;embed&gt; element.</rsv:report>
    </xsl:if>
    <xsl:if test="@mode='escaped' and @type='text/html' and (contains(translate(.,'META','meta'),'&lt;meta ') or contains(translate(.,'META','meta'),'&lt;meta&gt;'))">
      <rsv:report>&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; should not contain an entity-encoded HTML &lt;meta&gt; element.</rsv:report>
    </xsl:if>
    <xsl:if test="@mode='escaped' and @type='text/html' and (contains(translate(.,'OBJECT','object'),'&lt;object ') or contains(translate(.,'OBJECT','object'),'&lt;object&gt;'))">
      <rsv:report>&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; should not contain an entity-encoded HTML &lt;object&gt; element.</rsv:report>
    </xsl:if>
    <xsl:if test="@mode='escaped' and @type='text/html' and (contains(translate(.,'SCRIPT','script'),'&lt;script ') or contains(translate(.,'SCRIPT','script'),'&lt;script&gt;'))">
      <rsv:report>&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; should not contain an entity-encoded HTML &lt;script&gt; element.</rsv:report>
    </xsl:if>
    <xsl:choose>
      <xsl:when test="not(@mode) or @mode='xml' or @mode='escaped' or @mode='base64'" />
      <xsl:otherwise>
        <rsv:assert>&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; mode attribute must be xml, escaped or base64.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="not(@mode) or @mode='xml' or count(child::*)=0" />
      <xsl:otherwise>
        <rsv:assert>&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; may not have child elements if mode attribute is not xml.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="(@type and @type!='text/html' and @type!='text/plain') or count(child::*)=0" />
      <xsl:otherwise>
        <rsv:assert>&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; may not have child elements if type attribute is 'text/html' or 'text/plain'.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:if test="(not(@mode) or @mode='xml') and @type='text/html'">
      <rsv:report>&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; should not have mode attribute of xml and type attribute of text/html. Use mode attribute of escaped.</rsv:report>
    </xsl:if>
    <xsl:if test="@mode='base64' and @type='text/html'">
      <rsv:report>&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; should not have mode attribute of base64 and type attribute of text/html. Use mode attribute of escaped.</rsv:report>
    </xsl:if>
    <xsl:if test="@mode='base64' and (not(@type) or @type='text/plain')">
      <rsv:report>&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; should not have mode attribute of base64 and type attribute of text/html. Use mode attribute of escaped.</rsv:report>
    </xsl:if>
    <xsl:choose>
      <xsl:when test="not(@type) or starts-with(@type,'text/') or starts-with(@type,'image/') or starts-with(@type,'audio/') or starts-with(@type,'video/') or starts-with(@type,'application/') or starts-with(@type,'multipart/') or starts-with(@type,'message/')" />
      <xsl:otherwise>
        <rsv:assert>&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; type attribute must be a valid media type.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:apply-templates mode="M48" />
  </xsl:template>
  <xsl:template match="text()" priority="-1" mode="M48">
  </xsl:template>
  <xsl:template match="cloud" priority="4000" mode="M49">
    <xsl:if test="string(normalize-space(text()))">
      <rsv:report>&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; should not have mixed text content.</rsv:report>
    </xsl:if>
    <xsl:choose>
      <xsl:when test="@domain" />
      <xsl:otherwise>
        <rsv:assert see="http://blogs.law.harvard.edu/tech/soapMeetsRss#aNewFeatureForRss">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have a domain attribute.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="@port" />
      <xsl:otherwise>
        <rsv:assert see="http://blogs.law.harvard.edu/tech/soapMeetsRss#aNewFeatureForRss">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have a port attribute.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="@path" />
      <xsl:otherwise>
        <rsv:assert see="http://blogs.law.harvard.edu/tech/soapMeetsRss#aNewFeatureForRss">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have a path attribute.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="@registerProcedure" />
      <xsl:otherwise>
        <rsv:assert see="http://blogs.law.harvard.edu/tech/soapMeetsRss#aNewFeatureForRss">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have a registerProcedure attribute.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="@protocol" />
      <xsl:otherwise>
        <rsv:assert see="http://blogs.law.harvard.edu/tech/soapMeetsRss#aNewFeatureForRss">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must have a protocol attribute.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="not(@port) or (number(@port)&gt;0 and not(contains(@port,'.')))" />
      <xsl:otherwise>
        <rsv:assert see="http://blogs.law.harvard.edu/tech/soapMeetsRss#aNewFeatureForRss">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; port attribute must be a positive integer.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:choose>
      <xsl:when test="not(@protocol) or (@protocol='xml-rpc' or @protocol='soap' or @protocol='http-post')" />
      <xsl:otherwise>
        <rsv:assert see="http://blogs.law.harvard.edu/tech/soapMeetsRss#aNewFeatureForRss">&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; protocol attribute must be xml-rpc, soap or http-post.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:apply-templates mode="M49" />
  </xsl:template>
  <xsl:template match="text()" priority="-1" mode="M49">
  </xsl:template>
  <xsl:template match="webMaster|managingEditor|author" priority="4000" mode="M50">
    <xsl:choose>
      <xsl:when test="(not(contains(.,' ')) or (substring(substring-after(.,' '),1,1)='(' and substring(.,string-length(.),1)=')')) and&#xD;&#xA;				(not(contains(.,' ')) or (contains(substring-before(.,' '),'@') and contains(substring-after(substring-before(.,' '),'@'),'.'))) and&#xD;&#xA;				contains(.,'@') and contains(substring-after(.,'@'),'.')" />
      <xsl:otherwise>
        <rsv:assert>&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must be an email address.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:apply-templates mode="M50" />
  </xsl:template>
  <xsl:template match="atom:email" priority="3999" mode="M50">
    <xsl:choose>
      <xsl:when test="(not(contains(.,'&lt;')) or (substring(.,string-length(.),1)='&gt;' and contains(substring-after(.,'&gt;'),'@'))) and&#xD;&#xA;				(not(contains(.,'&lt;')) or (contains(substring-after(.,'&lt;'),'@') and contains(substring-after(substring-after(.,'&lt;'),'@'),'.'))) and&#xD;&#xA;				(not(contains(.,'&lt;')) or not(contains(substring-after(.,'&lt;'),' '))) and&#xD;&#xA;				(contains(.,'&lt;') or not(contains(.,' '))) and&#xD;&#xA;				contains(.,'@') and contains(substring-after(.,'@'),'.')" />
      <xsl:otherwise>
        <rsv:assert>&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must be an RFC 2822 email address.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:apply-templates mode="M50" />
  </xsl:template>
  <xsl:template match="text()" priority="-1" mode="M50">
  </xsl:template>
  <xsl:template match="atom:url|atom:id|rss:url|rss:link|link|url|comments|blogChannel:*" priority="4000" mode="M51">
    <xsl:choose>
      <xsl:when test="contains(.,':') and&#xD;&#xA;				not(contains(substring-before(translate(.,'`~!@#$%^&amp;*()_={}[]\|;&lt;,&gt;?/&quot; ','????????????????????????????'),':'),'?'))" />
      <xsl:otherwise>
        <rsv:assert>&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must be a URI.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:apply-templates mode="M51" />
  </xsl:template>
  <xsl:template match="guid" priority="3999" mode="M51">
    <xsl:choose>
      <xsl:when test="@isPermaLink='false' or (contains(.,':') and&#xD;&#xA;				not(contains(substring-before(translate(.,'`~!@#$%^&amp;*()_={}[]\|;&lt;,&gt;?/&quot; ','????????????????????????????'),':'),'?')))" />
      <xsl:otherwise>
        <rsv:assert>&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must be a URL, if isPermaLink is not false.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:apply-templates mode="M51" />
  </xsl:template>
  <xsl:template match="newLocation" priority="3998" mode="M51">
    <xsl:choose>
      <xsl:when test="string-length(.)=0 or (contains(.,':') and&#xD;&#xA;				not(contains(substring-before(translate(.,'`~!@#$%^&amp;*()_={}[]\|;&lt;,&gt;?/&quot; ','????????????????????????????'),':'),'?')))" />
      <xsl:otherwise>
        <rsv:assert>&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; must be a URL or empty.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:apply-templates mode="M51" />
  </xsl:template>
  <xsl:template match="atom:generator|enclosure|source" priority="3997" mode="M51">
    <xsl:choose>
      <xsl:when test="not(@url) or (contains(@url,':') and&#xD;&#xA;				not(contains(substring-before(translate(@url,'`~!@#$%^&amp;*()_={}[]\|;&lt;,&gt;?/&quot; ','????????????????????????????'),':'),'?')))" />
      <xsl:otherwise>
        <rsv:assert>&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; url attribute must be a URL.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:apply-templates mode="M51" />
  </xsl:template>
  <xsl:template match="atom:link" priority="3996" mode="M51">
    <xsl:choose>
      <xsl:when test="not(@href) or (contains(@href,':') and&#xD;&#xA;				not(contains(substring-before(translate(@href,'`~!@#$%^&amp;*()_={}[]\|;&lt;,&gt;?/&quot; ','????????????????????????????'),':'),'?')))" />
      <xsl:otherwise>
        <rsv:assert>&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; href attribute must be a URL.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:apply-templates mode="M51" />
  </xsl:template>
  <xsl:template match="l:link" priority="3995" mode="M51">
    <xsl:choose>
      <xsl:when test="not(@rdf:resource) or (contains(@rdf:resource,':') and&#xD;&#xA;				not(contains(substring-before(translate(@rdf:resource,'`~!@#$%^&amp;*()_={}[]\|;&lt;,&gt;?/&quot; ','????????????????????????????'),':'),'?')))" />
      <xsl:otherwise>
        <rsv:assert>&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; rdf:resource attribute must be a URL.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:apply-templates mode="M51" />
  </xsl:template>
  <xsl:template match="text()" priority="-1" mode="M51">
  </xsl:template>
  <xsl:template match="enclosure|atom:link" priority="4000" mode="M52">
    <xsl:choose>
      <xsl:when test="not(@type) or starts-with(@type,'text/') or starts-with(@type,'image/') or &#xD;&#xA;					starts-with(@type,'audio/') or starts-with(@type,'video/') or &#xD;&#xA;					starts-with(@type,'application/') or starts-with(@type,'multipart/') or &#xD;&#xA;					starts-with(@type,'message/') or starts-with(@type,'model/')" />
      <xsl:otherwise>
        <rsv:assert>&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; type attribute must be a valid media type.</rsv:assert>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:apply-templates mode="M52" />
  </xsl:template>
  <xsl:template match="l:link" priority="3999" mode="M52">
    <xsl:if test="@type and not(starts-with(@type,'text/') or starts-with(@type,'image/') or &#xD;&#xA;					starts-with(@type,'audio/') or starts-with(@type,'video/') or &#xD;&#xA;					starts-with(@type,'application/') or starts-with(@type,'multipart/') or &#xD;&#xA;					starts-with(@type,'message/') or starts-with(@type,'model/'))">
      <rsv:report>&lt;<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(..)" /><xsl:text xml:space="preserve"> </xsl:text>/<xsl:text xml:space="preserve"> </xsl:text><xsl:value-of select="name(.)" /><xsl:text xml:space="preserve"> </xsl:text>&gt; type attribute should be a valid media type.</rsv:report>
    </xsl:if>
    <xsl:apply-templates mode="M52" />
  </xsl:template>
  <xsl:template match="text()" priority="-1" mode="M52">
  </xsl:template>
  <xsl:template match="text()" priority="-1">
  </xsl:template>
</xsl:stylesheet>