I.E.S. Suárez de Figueroa @vanza C.F.G.S. Administración de Sistemas Informáticos en Red Módulo "Lenguaje de Marcas y Sistemas de Gestión de la Información" PLANTILLAS RSS ATOM DTD XSD XPath XSL PLANTILLA RSS PLANTILLA DTD Fichero HTML: Fichero XML con DTD en fichero.dtd externo: <!DOCTYPE html> <html><head><title>...</title> <link rel="alternate" type="application/rss+xml" title="..." href="./fichero.rss" /> </head> <body>...</body></html> <?xml version="1.0" encoding="UTF-8" standalone="no" ?> <!DOCTYPE ejemplar SYSTEM "fichero.dtd"> <ejemplar> ... </ejemplar> Fichero RSS: <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <rss version="2.0"> <channel> <title>...</title> <link>...</link> <description>...</description> <language>...</language> <item> <title>...</title> <link>...</link> <description>...</description> </item> <item>...</item> ... </channel> </rss> PLANTILLA ATOM Fichero HTML: <!DOCTYPE html> <html><head><title>...</title> <link rel="alternate" type="application/atom+xml" title="..." href="./fichero.atom" /> </head> <body>...</body></html> Fichero ATOM: <?xml version="1.0" encoding="ISO-8859-1" standalone="yes"?> <feed xmlns="http://www.w3.org/2005/Atom" xml:lang="eses"> <title>...</title> <id>...</id> <link rel="self" type="application/atom+xml" href=".."/> <link rel="alternate" type="text/html" href="..."/> <updated>...</updated> <author> <name>...</name> <email>...</email> </author> <entry> <title>...</title> <id>...</id> <link rel="alternate" type="text/html" href="..."/> <updated>...</updated> <author> <name>...</name> </author> <summary>...</summary> </entry> <entry>...</entry> ... </feed> Fichero DTD: Tipo de elemento terminal: <!ELEMENT ElementoTerminal (#PCDATA)> Tipo de elemento no terminal: <!ELEMENT ElementoNoTerminal (elem1, elem2,...)> Operadores ? + * | <!ELEMENT ElemNoTerm (elem1?, elem2+, elem3*)> <!ELEMENT ElemNoTerm (elem4 | elem5 | elem6)> Ejemplos de variaciones: <!ELEMENT ElemNoTerm ((elem1+, (elem2, elem3)*)> <!ELEMENT ElemNoTerm (elem4 | (elem5,elem6))> Atributos <!ATTLIST Elemento NombreAtributo Tipo> El Tipo puede ser: CDATA NMTOKEN (Valor1 | Valor2 | ...) Modificadores de atributos: <!ATTLIST <!ATTLIST <!ATTLIST <!ATTLIST Elem Elem Elem Elem NombreAtributo NombreAtributo NombreAtributo NombreAtributo Tipo Tipo Tipo Tipo #IMPLIED> #REQUIRED> #FIXED "Valor"> "Literal"> Entidades &lt; < &gt; > &quot; " &apos; ' &amp; & &#8364; € &#169; © &#UNICODE; Carácter código UNICODE Constante: <!ENTITY NombreEntidad "Valor"> Uso en .xml: &NombreEntidad; Trozo de código: <!ENTITY % NombEntidad "Trozo código"> Uso en .dtd: %NombEntidad; PLANTILLA XSD PLANTILLA XPath Fichero XML con fichero.xsd: Elementos y atributos: <?xml version="1.0" encoding="UTF-8" ?> <ejemplar xmlns:xs="http://www.w3.org/2001/XMLSchemainstance" xs:noNamespaceSchemaLocation="fichero.xsd"> ... </ejemplar> /Elemento /ElemPadre/ElemHijo/ElemNieto /Elemento/@Atributo //Elemento //@Atributo /Elemento/. /Elemento/.. Fichero XSD: Predicados: <?xml version="1.0" encoding="UTF-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="ejemplar" type="TipoEjemplar" /> ... </xs:schema> /Elemento[Número] /Elemento1[Elemento2] /Elemento1[Elemento2 = "Valor"] /Elemento[@Atributo] /Elemento[@Atributo = "Valor"] Operadores: = != < > <= >= Comodines *: /Elemento/* /Elemento/@* Elemento: <xs:element name="NombreElem" type="TipoElem" /> TipoElem puede ser: tipo base, simple o complex. Número de elementos mínimo y máximo: <xs:element name="NombreElem" type="TipoElem" minOccurs="Valor" maxOccurs="Valor"/> El Valor es un número o unbounded. Tipos Base: xs:string xs:boolean xs:positiveInteger xs:decimal xs:dateTime xs:time xs:date xs:gYear xs:gMonthDay xs:gMonth xs:language xs:integer xs:negativeInteger xs:duration xs:gYearMonth xs:gDay Tipo simpleType: <xs:element name="NombreElem" type="TipoElem"/> <xs:simpleType name="TipoElem"> <xs:restriction base="TipoBase"> ...Facetas... </xs:restriction> </xs:simpleType> Facetas: <xs:length value="Valor"/> <xs:minLength value="Valor"/> <xs:maxLength value="Valor"/> <xs:enumeration value="Valor"/> <xs:whiteSpace value="preserve o replace o collapse"/> <xs:maxInclusive value="Valor"/> <xs:maxExclusive value="Valor"/> <xs:minInclusive value="Valor"/> <xs:minExclusive value="Valor"/> <xs:totalDigits value="Valor"/> <xs:fractionDigits value="Valor"/> <xs:pattern value="Patrones"/> Los Patrones pueden ser: [A-Za-z] [A-Z] [a-z] [0-9] \D (A) A|B AB A? A+ A* [abcd] [^abcd] \t [XYZ] [XYZ] [3-7XYZ] [A-DZ] Tipo complexType: <xs:complexType name="TipoElem"> <xs:sequence> <xs:element name="Elem1" type="TipoE1" /> <xs:element name="Elem2" type="TipoE2" /> ... </xs:sequence> </xs:complexType> Secuencias de complexType: <xs:sequence> <xs:all> <xs:choice> Grupo xs:group (para complexType): <xs:group name="NombreGrupo"> <xs:sequence> <xs:element name="Elem1" type="TipoEle1"/> ... </xs:sequence> </xs:group> Uso de xs:group: <xs:group ref="NombreGrupo"/> Atributos (en complexType): <xs:attribute name="NomAtrib" type="TipoAtrib"/> TipoAtrib es un TipoBase <xs:attribute name="NomAt" type="TipAt" use="required"/> Funciones: boolean() not() count() name() string() concat() string-length() Varias selecciones: operador | Predicados compuestos: and true() false() position() last() sum() normalize-space() or PLANTILLA XSL Fichero XML con fichero.xsl: <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <?xml-stylesheet type="text/xsl" href="fichero.xsl"?> <ejemplar> ... </ejemplar> Ejemplo de fichero XSL: <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0"> <xsl:template match="/"> <html><head><title>TITULO</title></head> <body bgcolor="#00dd00"> ... </body> </html> </xsl:template> </xsl:stylesheet> Selección de datos: <xsl:value-of select="...Expresión XPath..."/> Añadir texto: <xsl:text>...Texto a añadir...</xsl:text> Estructura repetitiva: <xsl:for-each select="...Expresión XPath..."> ... </xsl:for-each> Estructura condicional: <xsl:if test="...Condición XPath..."> ... </xsl:if> Estructura condicional múltiple: <xsl:choose> <xsl:when test="...Condición1 XPath..."> ... </xsl:when> <xsl:when test="...Condición2 XPath..."> ... </xsl:when> <xsl:otherwise> ... </xsl:otherwise> </xsl:choose> Ordenación: <xsl:sort select="...Expresión XPath..." order="ascending o descending"/>