<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Blog de Raúl Serrano &#187; XML</title>
	<atom:link href="http://www.raulserrano.net/tag/xml/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.raulserrano.net</link>
	<description>Blog sobre tecnología y de actualidad informática</description>
	<lastBuildDate>Thu, 02 Feb 2012 07:13:35 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Guardar como DAISY desde Word</title>
		<link>http://www.raulserrano.net/2008/05/guardar-como-daisy-desde-word/</link>
		<comments>http://www.raulserrano.net/2008/05/guardar-como-daisy-desde-word/#comments</comments>
		<pubDate>Mon, 26 May 2008 17:46:42 +0000</pubDate>
		<dc:creator>Raúl S.</dc:creator>
				<category><![CDATA[Tecnología]]></category>
		<category><![CDATA[Accesibilidad]]></category>
		<category><![CDATA[Daisy]]></category>
		<category><![CDATA[Estándar]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Word]]></category>
		<category><![CDATA[XML]]></category>

		<guid isPermaLink="false">http://www.raulserrano.net/?p=73</guid>
		<description><![CDATA[A través del blog de Hector Montenegro me llega la información del desarrollo de un proyecto publicado en SourceForge que posibilita guardar en el formato [...]]]></description>
			<content:encoded><![CDATA[<p>A través del blog de <a title="En el país de los ciegos, la reina es ... DAISY" href="http://blogs.technet.com/hectormontenegro/archive/2008/05/08/revoluci-n.aspx">Hector Montenegro</a> me llega la información del desarrollo de un proyecto publicado en <a title="OpenXML to Daisy XML Translator" href="http://sourceforge.net/projects/openxml-daisy">SourceForge</a> que posibilita guardar en el formato estándar <em>DAISY XML</em> directamente desde <em>Microsoft Word</em>.</p>
<p>Se trata de un sencillo plugin que añade la opción <strong>Save As DAISY</strong> en nuestro <em>Word</em>, para guardar en dicho formato, aunque previamente debemos haber guardado el documento en formato original de <em>Word</em>, lo que generará un nuevo documento <acronym title="Extensible Markup Language - Lenguaje de Marcas eXtensible">XML </acronym>utilizado por los libros audibles <acronym title="Digital Talking Books">DTB</acronym>.</p>
<p>DAISY, <em><strong>D</strong>igital <strong>A</strong>ccesible <strong>I</strong>nformation <strong>SY</strong>stem</em>, es un consorcio mundial cuyo objetivo es conseguir que la información sea accesible a personas con discapacidad visual. </p>
<p>En el desarrollo de este plugin han participado <a title="Microsoft" href="http://www.microsoft.com">Microsoft</a>,  <a title="Sonata Software-Application Engineering Services" href="http://www.sonata-software.com/">Sonata Software Ltd.</a> y  <a title="Digital Accesible Information SYstem Consortium" href="http://www.daisy.org">DAISY Consortium</a> y funciona sobre las versiones XP, 2003 y 2007 de <em>Word</em>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.raulserrano.net/2008/05/guardar-como-daisy-desde-word/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Sindicación RSS</title>
		<link>http://www.raulserrano.net/2005/12/sindicacion-rss/</link>
		<comments>http://www.raulserrano.net/2005/12/sindicacion-rss/#comments</comments>
		<pubDate>Mon, 12 Dec 2005 11:00:00 +0000</pubDate>
		<dc:creator>Raúl S.</dc:creator>
				<category><![CDATA[Articulos]]></category>
		<category><![CDATA[ASP.NET]]></category>
		<category><![CDATA[Desarrollo]]></category>
		<category><![CDATA[Feed]]></category>
		<category><![CDATA[RSS]]></category>
		<category><![CDATA[XML]]></category>

		<guid isPermaLink="false">http://localhost/blog/?p=28</guid>
		<description><![CDATA[Tutorial sobre cómo generar automáticamente el feed RSS para la sindicación de contenido en una Web utilizando la tecnología .NET Se describe el método empleado [...]]]></description>
			<content:encoded><![CDATA[<p>Tutorial sobre cómo generar automáticamente el feed <acronym title="Really Simple Syndication – Sindicación Realmente Simple">RSS</acronym> para la sindicación de contenido en una Web utilizando la tecnología <em>.NET</em><br />
Se describe el método empleado en esta Web (antes de usar un <acronym title="Content Management System - Sistema de Gestión de Contenido">CMS</acronym> estándar) para generar automáticamente un archivo <em>RSS</em> que recoge las actualizaciones que se van publicando. Un método tan sencillo como útil que puede servir para implementar en tu Sitio Web.</p>
<p><span id="more-28"></span></p>
<p><em>RSS</em> se ha convertido en una utilidad muy habitual no solo en los <dfn title="Sitio web con publicacoines periódicas y ordenados cronologicamente, temática particular">blog’s</dfn> sino también en muchos portales de noticias y demás Web’s<br />
Si necesitas profundizar sobre <em>RSS</em>, ojea los enlaces al final de este artículo o a través de Internet es muy fácil encontrar amplia información.</p>
<p>Una breve descripción de la terminología que engloba este servicio, seria la siguiente:</p>
<ul>
<li>Feed: conjunto de información que se pretende distribuir.</li>
<li>RSS (Really Simple Syndication – Sindicación Realmente Simple): formato basado en el estándar <acronym title="eXtensible Markup Language ">XML</acronym> en el que se distribuye el feed.</li>
<li>Sindicar contenido: proceso mediante el que un software cliente RSS obtiene el feed</li>
<li>Aggregator: software cliente RSS, como <a class="ext" title="Descarga RSSBandit" href="http://www.rssbandit.org">RSSBandit</a> o <a title="Descarga NewsDesk" href="http://www.wildgrape.net">NewsDesk</a></li>
</ul>
<p>Y tras esta rápida reseña vamos al tema que nos ocupa.</p>
<p>Mantener un archivo .rss de manera manual con las nuevas actualizaciones que vamos publicando, es tarea fácil para un pequeño Sitio Web, pero si esas actualizaciones son frecuentes, o se trata de una Web algo más grande, esa tarea se convierte en un proceso algo tedioso.</p>
<p>Cuando decidí incorporar <em>RSS</em> a esta Web, dado mí bajo nivel en programación, en principio era mi intención hacerlo de manera manual, ya que la estructura de un archivo .RSS es realmente sencilla, aparte que soy bastante cabezota y de los que aun pica <acronym title="HyperText Markup Language - Lenguaje de Marcas Hipertextuales">HTML</acronym> &#8220;a pelo&#8221;.<br />
Pero, analizando un poco la estructura de mi Web, documentándome sobre el soporte <acronym title="eXtensible Markup Language ">XML</acronym> de <dfn title="Tecnologia sucesora de Active Server Pages, basada en plataforma .NET">ASP.NET</dfn> y poco más, pronto me di cuenta que no era tan difícil automatizar totalmente este proceso, por lo que básicamente sería:</p>
<ul>
<li>Mediante la clase <a class="ext" title="XmlTextWriter (Clase)" href="http://msdn.microsoft.com/library/spa/default.asp?url=/library/SPA/cpref/html/frlrfsystemxmlxmltextwriterclasstopic.asp">XmlTextWriter</a> generar el contenido <em>XML</em> con el esquema que <em>RSS</em> necesita.</li>
<li>Crear un <a class="ext" title="Crear y utilizar DataSets" href="http://msdn.microsoft.com/library/spa/default.asp?url=/library/SPA/cpguide/html/cpconcreatingusingdatasets.asp">DataSet</a> con el contenido de la tabla de anuncios (ahí guardo los posts que aparecen en la página principal de esta Web)</li>
<li><em>XmlTextWriter</em> debe iterar sobre el <em>DataSet</em> para crear los correspondientes Ítems</li>
<li>Por último mostrar los resultados en formato <em>XML</em>.</li>
</ul>
<p>Conociendo el planteamiento veamos el código generado para ello con los comentarios sobre el mismo:</p>
<pre>
<code>Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
<span style="color:#888">'Declara el escritor</span>
Dim Escritor = New XmlTextWriter(Response.OutputStream, System.Text.Encoding.UTF8)

<span style="color:#888">'Genera el encabezado del archivo RSS con la información de nuestro Sitio Web</span>
Escritor.WriteStartDocument()
Escritor.WriteComment("www.raulserrano.net - RSS generado automáticamente")
Escritor.WriteStartElement("rss")
Escritor.WriteAttributeString("version", "2.0")
Escritor.WriteStartElement("channel")
Escritor.WriteElementString("title", "www.raulserrano.net")
Escritor.WriteElementString("link", "http://www.raulserrano.net")
Escritor.WriteElementString("description", "Portal sobre tecnologias Microsoft y actualidad informática")

<span style="color:#888">'Conecta a la BD y vuelca los datos a un DataTable</span>
Dim Conexion As OleDbConnection
Dim Comando As OleDbDataAdapter
Dim ds As DataSet
Dim tblPost As DataTable
Dim registro, numrows As Integer
Dim strSQL As String

strSQL = "SELECT titulo, link, descripcion, fecha FROM posts ORDER BY fecha_pub DESC;"
Conexion = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=x:\archvo.mdb")
Comando = New OleDbDataAdapter(strSQL, Conexion)
ds = New DataSet
Comando.Fill(ds)
tblPost = New DataTable
tblPost = ds.Tables(0)
numrows = tblPost.Rows.Count

<span style="color:#888">'Itera por el DataTable para crear los correspondientes Items</span>
For registro = 0 To numrows - 1
AgregarRSS(Escritor, tblPost.Rows(registro).Item("titulo"), _
tblPost.Rows(registro).Item("link"), _
tblPost.Rows(registro).Item("descipcion"), _
tblPost.Rows(registro).Item("fecha"))
Next registro

<span style="color:#888">'Finaliza el archivo RSS</span>
Escritor.WriteEndElement()
Escritor.WriteEndElement()
Escritor.WriteEndDocument()
Escritor.Flush()
Escritor.Close()

<span style="color:#888">'Codifica y envía el archivo RSS</span>
Response.ContentEncoding = System.Text.Encoding.UTF8
Response.ContentType = "text/xml"
Response.Cache.SetCacheability(HttpCacheability.Public)
Response.End()
End Sub

Public Function AgregarRSS(ByVal Escritor As XmlTextWriter, ByVal titulo As String, ByVal link As String, ByVal descripcion As String, ByVal fecha As String)
<span style="color:#888">'Crea un nuevo elemento</span>
Escritor.WriteStartElement("item")

<span style="color:#888">'Añade subelementos</span>
Escritor.WriteElementString("title", titulo)
Escritor.WriteElementString("link", link)
Escritor.WriteElementString("description", descripcion)
Escritor.WriteElementString("pubDate", fecha)

<span style="color:#888">'Finaliza el elemento</span>
Escritor.WriteEndElement()
Return Escritor
End Function
</code>
</pre>
<p><strong>Más información</strong></p>
<p>Para la realizar este artículo me he basado en la documentación disponible en Internet, especialmente útil el artículo de Carlos Carmona de <a class="ext" title="Diseño de páginas web, Diseño gráfico, Artículos y Tutoriales - xhtml, css, W3C!" href="http://www.scourdesign.com/">Scour Design</a>:</p>
<p><a class="ext" title="RSS 2.0 Dinámicamente. XmlTextWriter (Visual C#)" href="http://www.scourdesign.com/articulos/tutoriales/net/5.php">RSS 2.0 Dinámicamente. XmlTextWriter (Visual C#)</a></p>
<p>Documentación adicional:</p>
<ul>
<li><a class="ext" title="Todo acerca de Blogs y RSS" href="http://www.microsoft.com/spanish/msdn/articulos/archivo/070404/voices/blogs_rss.asp">Todo acerca de Blogs y RSS</a></li>
<li><a class="ext" title="How to Create an RSS Feed With Notepad, a Web Server, and a Beer" href="http://www.downes.ca/cgi-bin/page.cgi?db=post&amp;q=crdate=1059503386&amp;format=full">How to Create an RSS Feed With Notepad, a Web Server, and a Beer</a></li>
<li><a class="ext" title="MSDN Library: XmlTextWriter (Clase)" href="http://msdn.microsoft.com/library/spa/default.asp?url=/library/SPA/cpref/html/frlrfsystemxmlxmltextwriterclasstopic.asp">MSDN Library: XmlTextWriter (Clase)</a></li>
<li><a class="ext" title="MSDN Library: Crear y utilizar DataSets" href="http://msdn.microsoft.com/library/spa/default.asp?url=/library/SPA/cpguide/html/cpconcreatingusingdatasets.asp">MSDN Library: Crear y utilizar DataSets</a></li>
<li><a class="ext" title="MSDN Library: Agregar DataTable a DataSet" href="http://msdn.microsoft.com/library/spa/default.asp?url=/library/SPA/cpguide/html/cpconaddingdatatabletodataset.asp">MSDN Library: Agregar DataTable a DataSet</a></li>
<li><a class="ext" title="CÓMO: Llenar un objeto DataSet desde una base de datos mediante Visual Basic .NET" href="http://support.microsoft.com/default.aspx?scid=kb;es;301216">CÓMO: Llenar un objeto DataSet desde una base de datos mediante Visual Basic .NET</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.raulserrano.net/2005/12/sindicacion-rss/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

