+entityToRSS :: (ArrowXml a, ArrowChoice a, ArrowIO a) => Environment -> a XmlTree XmlTree
+entityToRSS env
+ = proc page
+ -> do SiteName siteName <- getSysConfA (envSysConf env) -< ()
+ BaseURI baseURI <- getSysConfA (envSysConf env) -< ()
+
+ name <- (getXPathTreesInDoc "/page/@name/text()" >>> getText) -< page
+ summary <- maybeA (getXPathTreesInDoc "/page/summary/text()" >>> getText) -< page
+ pages <- makePageLinkList (envStorage env) (envSysConf env) (envInterpTable env) -< page
+
+ ( eelem "/"
+ += ( eelem "rdf:RDF"
+ += sattr "xmlns" "http://purl.org/rss/1.0/"
+ += sattr "xmlns:rdf" "http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ += sattr "xmlns:dc" "http://purl.org/dc/elements/1.1/"
+ += sattr "xmlns:trackback" "http://madskills.com/public/xml/rss/module/trackback/"
+ += ( eelem "channel"
+ += sattr "rdf:about" (uriToString id (mkFeedURI baseURI name) "")
+ += ( eelem "title"
+ += txt siteName
+ += txt " - "
+ += getXPathTreesInDoc "/page/@name/text()"
+ )
+ += ( eelem "link"
+ += txt (uriToString id baseURI "")
+ )
+ += ( eelem "description"
+ += txt (case summary of
+ Nothing -> "RSS Feed for " ++ siteName
+ Just s -> s)
+ )
+ += ( eelem "items"
+ += ( eelem "rdf:Seq"
+ += ( constL pages
+ >>>
+ eelem "rdf:li"
+ += attr "resource" (arr (mkPageURIStr baseURI) >>> mkText)
+ )
+ )
+ )
+ )
+ += ( constL pages
+ >>>
+ arr (\ n -> (n, Nothing))
+ >>>
+ getPageA (envStorage env)
+ >>>
+ arr fromJust
+ >>>
+ eelem "item"
+ += attr "rdf:about" (arr (mkPageURIStr baseURI . entityName) >>> mkText)
+ += ( eelem "title"
+ += (arr entityName >>> mkText)
+ )
+ += ( eelem "link"
+ += (arr (mkPageURIStr baseURI . entityName) >>> mkText)
+ )
+ += ( arrL (\ p -> case entitySummary p of
+ Nothing -> []
+ Just s -> [s])
+ >>>
+ eelem "description"
+ += mkText
+ )
+ += ( eelem "dc:date"
+ += ( arrIO (utcToLocalZonedTime . entityLastMod)
+ >>>
+ arr formatW3CDateTime
+ >>>
+ mkText
+ )
+ )
+ += ( eelem "trackback:ping"
+ += attr "rdf:resource" (arr (mkTrackbackURIStr baseURI . entityName) >>> mkText)
+ )
+ )
+ >>>
+ uniqueNamespacesFromDeclAndQNames
+ ) ) -<< page
+ where
+ mkPageURIStr :: URI -> PageName -> String
+ mkPageURIStr baseURI name
+ = uriToString id (mkPageURI baseURI name) ""
+
+ mkTrackbackURIStr :: URI -> PageName -> String
+ mkTrackbackURIStr baseURI name
+ = uriToString id (mkAuxiliaryURI baseURI ["trackback"] name) ""
+
+