Ver Mensaje Individual
  #2 (permalink)  
Antiguo 07/06/2005, 03:08
Avatar de [N]obalogi[C]
[N]obalogi[C]
 
Fecha de Ingreso: junio-2005
Ubicación: Nicaragua
Mensajes: 28
Antigüedad: 18 años, 11 meses
Puntos: 0
Los NameSpaces

La vez pasada casi todo era facil, pero en esta parte vamos a aprender a solucionar errores y plantear de una mejor manera los codigos. Solo se necesitan ganas de leer y practicar.

El XML Namespaces provee algunos metodos para evadir y evitar conflictos de elementos y nombres, estos seran explicados a continuacion.

Conflictos de Nombre y Elementos

Como los elementos y nombres en documentos XML no han sido reparados, conflictos de nombres y elementos sucederan amenudo, estos van a suceder por la razon de usar dos nombres iguales describiendo dos tipos de elementos diferentes.

Este documeto XML traffica informacion en una table:

Código:
<table>
   <tr>
   <td>Webmaster</td>
   <td>Coder</td>
   </tr>
</table>
Este documento XML trafica informacion sobre una table.

Código:
<table>
   <name>Foro de Informatica</name>
   <width>80</width>
   <length>120</length>
</table>
Si estos dos documentos XML fueran sumados y hechos uno solo, habrian conflictos de nombres y elementos. Esto pasa porque ambos documentos presantan y contienen un elemento <table> con diferentes contenidos y definiciones pero con el mismo nombre.

Ahora les voy a mostrar una manera para solucionar estos conflictos.

Solucionando conflictos de nombres y elementos usando prefijos:

Este documento XML trafica informacion en una table:

Código:
<h:table>
   <h:tr>
   <h:td>Webmaster</h:td>
   <h:td>Coder</h:td>
   </h:tr>
</h:table>
Este documento XML trafica informacion sobre una table:

Código:
<f:table>
   <f:name>Foro de Informatica</f:name>
   <f:width>80</f:width>
   <f:length>120</f:length>
</f:table>
Como puedes observar si has practicado, el conflicto a sido solucionado por la simple razon de que ahora usan diferentes nombres <table> (<h:table> y <f:table>).

Este conflicto fue solucionado al crear dos tipos difrentes de elementos <table>

Usando el NameSpaces:

Este documento XML trafica informacion en una table.

Código:
<h:table xmlns:h="http://www.w3.org/TR/html4/">
   <h:tr>
   <h:td>Webamaster</h:td>
   <h:td>Coder</h:td>
   </h:tr>
</h:table>
Este documento XML trafica informacion sobre una table:

Código:
<f:table xmlns:f="http://www.forosdelweb.com">
   <f:name>Foro de Informatica</f:name>
   <f:width>80</f:width>
   <f:length>120</f:length>
</f:table>
Esta vez no vamos a usar prefijos, un atributo xmlns se le a sumado el tag <table> para dar al elemento un prefijo clasificado name associated con un spacename.

El atributo del NameSpace:

El atributo de el namespace es colocado al principio de el tag de un elemento y tiene el sintaxis siguiente:

Código:
xmlns:namespace-prefix="namespace"
En el ejemplo arriba, el namespace por si solo esta definido usando una URL.

Código:
xmlns:f="http://www.forosdelweb.com"
El especificado W3C namespace dice que el namespace por si mismo deberia deberia de ser un (URI) Uniform Resource Identifier.
Cuando un namespace es definido en el comienzo de un elemento tag, todos los elementos child con el mismo prefijo son associadas con el mismo namespace.

Fijate que la URL que usas para indentificar el namspace, no es usada por el parser para buscar informacion. El unico proposito es darle el namspace a un nombre unico. Aunque, muy a menudo algunas webs usan el namespace como un pointer, cosa que veo absurda ya que lo que queremos hacer es expesificar de que trata nuestra web. Trata de visitar http://www.w3.org/TR/html4/ para que te informes.


(URI) Uniform Resource Identifiers:

Pues si no me supieron entender cuando dije algo de (URI) ahora les explico que significa. (URI) es un cordon de caracteres los cuales identifican recursos en el internet. El (URI) mas comun es el que todos conocemos como (URL) Uniform Resource Locator el cual identificca dominios y direcciones en la internet. Otro (URI) no tan comun es el (URN) Universal Resource Name.
Como el mas conocido es el URL en los ejemplos solo voy a utilizar estos.


NameSpace por Default:

Cuando ocupamos esta tecnica, nos ahorra usar lo de los prefijos en todo los childs. Esta topologia tiene el siguiente syntaxis:

Código:
<element xmlns="namespace">
Este documento XML trafica informacion en una table:


Código:
<table xmlns="http://www.w3.org/TR/html4/">
   <tr>
   <td>Webmaster</td>
   <td>Coder</td>
   </tr>
</table>
Este documento XML trafica informaicon sobre una table.

Código:
<table xmlns="http://www.elhacker.net/foro">
   <name>Foro de Informatica</name>
   <width>80</width>
   <length>120</length>
</table>

Uso real del NameSpace

Cuando se comienzes a usar XSL, van a ver el uso the namespaces en accion. Los XSL son como ojas te estilo transformados a otro formato como el HTML.

Si das una buena mirada al script abajo veras, que la mayoria de los tags son tags HTML. Los que no son HTML tienen los prefijos XSL, y estan identificados por el namespace " "http://www.w3.org/TR/xsl":. Ahora si me entendieron pasemos a analizar el script.

Código:
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/xsl">
<xsl:template match="/">
  <html>
  <body>
    <table border="2" bgcolor="yellow">
      <tr>
        <th>NoBaLoGiC</th>
        <th>Lagarto Juancho</th>
      </tr>
      <xsl:for-each select="CATALOG/CD">
      <tr>
        <td><xsl:value-of select="TITLE"/></td>
        <td><xsl:value-of select="ARTIST"/></td>
      </tr>
      </xsl:for-each>
    </table>
  </body>
  </html>
</xsl:template>
</xsl:stylesheet>
[size=15pt]XML CDATA[/size]


Todo texto dentro de un documento XML va a ser parsiado por el parser.
Solo el texto dentro de la seccion CDATA va a ser ignorado por el parser.

Parsed Data

Los parser XML normalmente parsean todo los textos en un documento XML.
Cuando un elemento XML es parseado, el texto entre los tags XML tambien lo es.

Código:
<message>Este texto quedo parseado xD</message>
El parser toma estas medidas porque los elementos XML pueden contener a otros elements, mira el ejemplo del script abajo, el element <name> contiene dos elementos mas (<first> y <last>:

Código:
<name><first>QuiQue</first><last>NoBaLoGiC</last></name>
entonces el parser lo va a desintegrar a sub elementos como estos:

Código:
<name>
   <first>QuiQue</first>
   <last>NoBaLoGiC</last>
</name>
Con el proposito de que este mas ordenado.

Caracteres de Escape:

Caracteres XML que son ilegales tienen que ser borrados y cambiados por unos verdaderos.
Si puedes colocar un caracter como "<Dentro de un elemento XML, este automaticamente te va a generar error porque el parser lo interpretara como si fuera el principio de un elmento nuevo. Es decir que no puedes escribir algo como esto:

Código:
<message>este foro <es el mejor</message>
Para evitar esto, lo unico que tendras que hacer es lo siguiente: "<un caracter con una entrada igual a esta:

Código:
<message>este foro &lt; es el mejor</message>
Hay 5 entitys que estan predeterminadas en las referencias XML:

Cita:
&lt; < less than
&gt; > greater than
&amp; & ampersand
&apos; ' apostrophe
&quot; " quotation mark
Estas entitys siempre comienzan con el caracter "&" y terminan con el ";"


Escrito por Enrique Gutierrez AKA [N]obalogi[C]