miércoles, 18 de junio de 2014

<?xml version="1.0" encoding="utf-8" ?>
<?xml-stylesheet type="text/xsl" href="TaskList.xsl" ?>
<!-- MIGUEL I. GARCIA LOPEZ
     ======================
REPASO 2ª EVAL. LdM
  -->
<TaskList User="Miguel"
          xsd:noNamespaceSchemaLocation="TaskList.xsd"
 xmlns:xsd="http://www.w3.org/2001/XMLSchema-instance" >
<Task Number="1">
<Subject>Programar Mastermind</Subject>
<Type>Hobby</Type>
<Priority>Low</Priority>
<State>Pending</State>
<Topics>
<Topic>MESCC</Topic>
<Topic>CP/M</Topic>
</Topics>
<Expenses />
<PhoneNumbers />
</Task>
<Task Number="2">
<Subject>Programar Minesweeper</Subject>
<Type>Hobby</Type>
<Priority>Low</Priority>
<State>In progress</State>
<Topics>
<Topic>MESCC</Topic>
<Topic>CP/M</Topic>
</Topics>
<Expenses />
<PhoneNumbers />
</Task>
<Task Number="3">
<Subject>Pintar el salón-comedor</Subject>
<Type>Home</Type>
<Priority>Medium</Priority>
<State>Pending</State>
<Topics />
<Expenses />
<PhoneNumbers />
</Task>
<Task Number="4">
<Subject>Arreglar ducha</Subject>
<Type>Home</Type>
<Priority>High</Priority>
<State>In progress</State>
<Topics />
<Expenses>
<Expense Concept="Alcachofa">5.75</Expense>
</Expenses>
<PhoneNumbers />
</Task>
<Task Number="5">
<Subject>Hacer la compra semanal</Subject>
<Type>Home</Type>
<Priority>High</Priority>
<State>Pending</State>
<Topics />
<Expenses>
<Expense Concept="Mercadona">100</Expense>
<Expense Concept="Carrefour">50</Expense>
</Expenses>
<PhoneNumbers />
</Task>
<Task Number="6">
<Subject>Cumpleaños Tía Salustiana</Subject>
<Type>Family</Type>
<Priority>Low</Priority>
<State>Pending</State>
<Topics>
<Topic>Regalo</Topic>
<Topic>Tarjeta</Topic>
</Topics>
<Expenses>
<Expense>5</Expense>
</Expenses>
<PhoneNumbers>
<PhoneNumber>94333888</PhoneNumber>
</PhoneNumbers>
</Task>
<Task Number="7">
<Subject>Cortarme el pelo</Subject>
<Type>Other</Type>
<Priority>High</Priority>
<State>Done</State>
<Topics>
<Topic>A lo afro</Topic>
</Topics>
<Expenses>
<Expense>20</Expense>
</Expenses>
<PhoneNumbers />
</Task>
</TaskList>
---------------------------
<?xml version="1.0" encoding="utf-8" ?>
<!-- MIGUEL I. GARCIA LOPEZ
     ======================
REPASO 2ª EVAL. LdM
  -->
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" >

<!-- Tipo: TpType - Tipo de tarea -->
<xsd:simpleType name="TpType">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="Hobby" />
<xsd:enumeration value="Home" />
<xsd:enumeration value="Family" />
<xsd:enumeration value="Work" />
<xsd:enumeration value="Other" />
</xsd:restriction>
</xsd:simpleType>

<!-- Tipo: TpPriority - Prioridad de tarea -->
<xsd:simpleType name="TpPriority">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="Low" />
<xsd:enumeration value="Medium" />
<xsd:enumeration value="High" />
</xsd:restriction>
</xsd:simpleType>

<!-- Tipo: TpState - Estado de tarea -->
<xsd:simpleType name="TpState">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="Pending" />
<xsd:enumeration value="In progress" />
<xsd:enumeration value="Done" />
</xsd:restriction>
</xsd:simpleType>

<!-- Tipo: TpTopic - Topico, máximo 16 carácteres -->
<xsd:simpleType name="TpTopic">
<xsd:restriction base="xsd:token">
<xsd:maxLength value="16" />
</xsd:restriction>
</xsd:simpleType>

<!-- Tipo: TpExpense - Gasto -->
<xsd:complexType name="TpExpense">
<xsd:simpleContent>
<xsd:extension base="xsd:decimal">
<xsd:attribute name="Concept" type="xsd:string" use="optional" />
</xsd:extension>
</xsd:simpleContent>
</xsd:complexType>

<!-- Tipo: TpPhone - Teléfono -->
<xsd:simpleType name="TpPhone">
<xsd:restriction base="xsd:positiveInteger" />
</xsd:simpleType>

<!-- -->

<xsd:element name="TaskList">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="Task" maxOccurs="unbounded">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="Subject" type="xsd:string" />
<xsd:element name="Type" type="TpType" />
<xsd:element name="Priority" type="TpPriority" />
<xsd:element name="State" type="TpState" />
<xsd:element name="Topics">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="Topic" type="TpTopic" minOccurs="0" maxOccurs="unbounded" />
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="Expenses">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="Expense" type="TpExpense" minOccurs="0" maxOccurs="unbounded" />
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="PhoneNumbers">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="PhoneNumber" minOccurs="0" maxOccurs="unbounded" />
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
<xsd:attribute name="Number" type="xsd:positiveInteger" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:sequence>
<xsd:attribute name="User" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>

</xsd:schema>
-----------------------
<?xml version="1.0" encoding="utf-8" ?>
<!-- MIGUEL I. GARCIA LOPEZ
     ======================
REPASO 2ª EVAL. LdM
  -->
<xsl:stylesheet version="1.0"
                xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >
<xsl:template match="/">

<html>
<head>
<title><xsl:value-of select="TaskList/@User" />'s Task List</title>
</head>
<body style="font-family:'Consolas'">
<h1><xsl:value-of select="TaskList/@User" />'s Task List</h1>
<p>There are <xsl:value-of select="count(/TaskList/Task)" /> tasks:</p>
<table style="border-width:2px">
<tr style="background-color:blue">
<th>Task Number</th>
<th>Subject</th>
<th>Type</th>
<th>Priority</th>
<th>State</th>
<th>Topics</th>
<th>Expenses</th>
<th>Phone Numbers</th>
</tr>
<xsl:for-each select="/TaskList">
<xsl:apply-templates>
<xsl:sort select="Priority" />
</xsl:apply-templates>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>

<xsl:template match="Task">
<tr>
<td style="text-align:center"><xsl:value-of select="@Number"/></td>
<xsl:apply-templates />
</tr>
</xsl:template>

<xsl:template match="Subject">
<td><xsl:value-of select="."/></td>
</xsl:template>

<xsl:template match="Type">
<td><xsl:value-of select="."/></td>
</xsl:template>

<xsl:template match="Priority">
<xsl:choose>
<xsl:when test=".='High'">
<td style="background-color:red"><xsl:value-of select="."/></td>
</xsl:when>
<xsl:when test=".='Low'">
<td style="background-color:green"><xsl:value-of select="."/></td>
</xsl:when>
<xsl:otherwise>
<td style="background-color:yellow"><xsl:value-of select="."/></td>
</xsl:otherwise>
</xsl:choose>
</xsl:template>

<xsl:template match="State">
<xsl:choose>
<xsl:when test=".='Pending'">
<td style="background-color:red"><xsl:value-of select="."/></td>
</xsl:when>
<xsl:when test=".='Done'">
<td style="background-color:green"><xsl:value-of select="."/></td>
</xsl:when>
<xsl:otherwise>
<td style="background-color:yellow"><xsl:value-of select="."/></td>
</xsl:otherwise>
</xsl:choose>
</xsl:template>

<xsl:template match="Topics">
<td>
<xsl:for-each select=".">
<xsl:apply-templates />
</xsl:for-each>
</td>
</xsl:template>

<xsl:template match="Topic">
<xsl:value-of select="." />.
</xsl:template>

<xsl:template match="Expenses">
<td>
<xsl:for-each select=".">
<xsl:apply-templates />
</xsl:for-each>
</td>
</xsl:template>

<xsl:template match="Expense">
<xsl:if test="@Concept!=''"><xsl:value-of select="@Concept"/>:</xsl:if><xsl:value-of select="." />
</xsl:template>

<xsl:template match="PhoneNumbers">
<td><xsl:value-of select="."/></td>
</xsl:template>

</xsl:stylesheet>

<?xml version="1.0" encoding="UTF-8"?>
<!--
===============================
Lenguajes de Marcas
Bloque 6, Actividad 6
Alumno: Miguel I. García López.
===============================
=      SCHEMA PARA TABLAS     =
=      CUENTAS Y APUNTES      =
===============================
-->

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">

<!-- TipoImporte: Importe con 2 decimales (float) -->
<xsd:simpleType name="TipoImporte">
<xsd:restriction base="xsd:decimal">
<xsd:fractionDigits value="2" />
</xsd:restriction>
</xsd:simpleType>

<!-- TipoIban (nº de cuenta bancaria según norma IBAN) -->
<xsd:simpleType name="TipoIban">
<xsd:restriction base="xsd:string">
<xsd:pattern value="[A-Z]{2}\d{2}([A-Z]||\d){1,30}" />
</xsd:restriction>
</xsd:simpleType>

<!-- TipoNIF: 8 dígitos decimales + letra mayúscula -->
<xsd:simpleType name="TipoNIF">
<xsd:restriction base="xsd:string">
<xsd:pattern value="\d{8}[A-Z]" />
</xsd:restriction>
</xsd:simpleType>

<!-- TipoConcepto: Conceptos disponibles para los apuntes -->
<xsd:simpleType name="TipoConcepto">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="Ingreso efectivo" />
<xsd:enumeration value="Reintegro efectivo" />
<xsd:enumeration value="Ingreso cheque" />
<xsd:enumeration value="Gastos bancarios" />
</xsd:restriction>
</xsd:simpleType>

<!-- TipoApunte: Fecha, Concepto, Importe y atributo Numero -->
<xsd:complexType name="TipoApunte">
<xsd:sequence>
<xsd:element name="fecha" type="xsd:date" />
<xsd:element name="concepto" type="TipoConcepto" />
<xsd:element name="importe" type="TipoImporte" />
</xsd:sequence>
<xsd:attribute name="numero" type="xsd:positiveInteger" />
</xsd:complexType>

<xsd:element name="cuentas">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="cuenta" minOccurs="0" maxOccurs="unbounded">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="fecha_apertura" type="xsd:date" />
<xsd:element name="titulares">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="titular" type="TipoNIF" minOccurs="1" maxOccurs="unbounded" />
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="apuntes">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="apunte" type="TipoApunte" minOccurs="0" maxOccurs="unbounded" />
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
<xsd:attribute name="iban" type="TipoIban" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
--------------------------------
<?xml version="1.0" encoding="UTF-8"?>
<!--
===============================
Lenguajes de Marcas
Bloque 6, Actividad 6
Alumno: Miguel I. García López.
===============================
=  TABLAS CUENTAS Y APUNTES   =
=         CON SCHEMA          =
===============================
-->

<cuentas xmlns:xsd="http://www.w3.org/2001/XMLSchema-instance"
         xsd:noNamespaceSchemaLocation="cuentas.xsd">
<cuenta iban="ES33123123123">
<fecha_apertura>2013-10-24</fecha_apertura>
<titulares>
<titular>83709245Y</titular>
<titular>83845902R</titular>
</titulares>
<apuntes>
<apunte numero="1">
<fecha>2013-10-24</fecha>
<concepto>Ingreso efectivo</concepto>
<importe>100.00</importe>
</apunte>
<apunte numero="2">
<fecha>2013-10-26</fecha>
<concepto>Reintegro efectivo</concepto>
<importe>-10.00</importe>
</apunte>
<apunte numero="3">
<fecha>2013-11-01</fecha>
<concepto>Reintegro efectivo</concepto>
<importe>-35.00</importe>
</apunte>
<apunte numero="4">
<fecha>2013-12-04</fecha>
<concepto>Ingreso cheque</concepto>
<importe>550.00</importe>
</apunte>
<apunte numero="5">
<fecha>2014-01-04</fecha>
<concepto>Gastos bancarios</concepto>
<importe>-5.00</importe>
</apunte>
</apuntes>
</cuenta>
<cuenta iban="ES4455764598766">
<fecha_apertura>2014-01-25</fecha_apertura>
<titulares>
<titular>83745090T</titular>
</titulares>
<apuntes>
<apunte numero="1">
<fecha>2014-01-25</fecha>
<concepto>Ingreso efectivo</concepto>
<importe>500.00</importe>
</apunte>
<apunte numero="2">
<fecha>2014-02-15</fecha>
<concepto>Ingreso efectivo</concepto>
<importe>50.00</importe>
</apunte>
</apuntes>
</cuenta>
<cuenta iban="ES949586746725">
<fecha_apertura>2014-04-03</fecha_apertura>
<titulares>
<titular>83764592X</titular>
</titulares>
<apuntes>
<apunte numero="1">
<fecha>2014-04-03</fecha>
<concepto>Ingreso cheque</concepto>
<importe>350.00</importe>
</apunte>
</apuntes>
</cuenta>
<cuenta iban="ES948576543231">
<fecha_apertura>2012-11-01</fecha_apertura>
<titulares>
<titular>98934059J</titular>
<titular>83845902R</titular>
</titulares>
<apuntes>
<apunte numero="1">
<fecha>2012-11-01</fecha>
<concepto>Ingreso efectivo</concepto>
<importe>75.00</importe>
</apunte>
<apunte numero="2">
<fecha>2013-09-05</fecha>
<concepto>Gastos bancarios</concepto>
<importe>-5.00</importe>
</apunte>
</apuntes>
</cuenta>
<cuenta iban="ES444555666782">
<fecha_apertura>2010-01-02</fecha_apertura>
<titulares>
<titular>83709245Y</titular>
<titular>28376350S</titular>
</titulares>
<apuntes>
<apunte numero="1">
<fecha>2010-01-02</fecha>
<concepto>Ingreso cheque</concepto>
<importe>458.00</importe>
</apunte>
<apunte numero="2">
<fecha>2011-05-04</fecha>
<concepto>Reintegro efectivo</concepto>
<importe>-35.00</importe>
</apunte>
<apunte numero="3">
<fecha>2011-07-15</fecha>
<concepto>Ingreso efectivo</concepto>
<importe>123.00</importe>
</apunte>
</apuntes>
</cuenta>
</cuentas>

<?xml version="1.0" encoding="UTF-8"?>
<!--
===============================
Lenguajes de Marcas
Bloque 6, Actividad 6
Alumno: Miguel I. García López.
===============================
= SCHEMA PARA TABLA TITULARES =
===============================
-->

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">

<!-- TipoNIF: 8 dígitos decimales + letra mayúscula -->
<xsd:simpleType name="TipoNIF">
<xsd:restriction base="xsd:string">
<xsd:pattern value="\d{8}[A-Z]" />
</xsd:restriction>
</xsd:simpleType>

<!-- TipoCodigoPostal: 5 dígitos decimales -->
<xsd:simpleType name="TipoCodigoPostal">
<xsd:restriction base="xsd:positiveInteger">
<xsd:totalDigits value="5" />
</xsd:restriction>
</xsd:simpleType>

<!-- TipoProvincia: Provincias disponibles -->
<xsd:simpleType name="TipoProvincia">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="Álava" />
<xsd:enumeration value="Albacete" />
<xsd:enumeration value="Alicante" />
<xsd:enumeration value="Almería" />
<xsd:enumeration value="Asturias" />
<xsd:enumeration value="Avila" />
<xsd:enumeration value="Badajoz" />
<xsd:enumeration value="Barcelona" />
<xsd:enumeration value="Burgos" />
<xsd:enumeration value="Cáceres" />
<xsd:enumeration value="Cádiz" />
<xsd:enumeration value="Cantabria" />
<xsd:enumeration value="Castellón" />
<xsd:enumeration value="Ceuta" />
<xsd:enumeration value="Ciudad Real" />
<xsd:enumeration value="Córdoba" />
<xsd:enumeration value="Cuenca" />
<xsd:enumeration value="Gerona" />
<xsd:enumeration value="Granada" />
<xsd:enumeration value="Guadalajara" />
<xsd:enumeration value="Guipúzcoa" />
<xsd:enumeration value="Huelva" />
<xsd:enumeration value="Huesca" />
<xsd:enumeration value="Islas Baleares" />
<xsd:enumeration value="Jaén" />
<xsd:enumeration value="La Coruña" />
<xsd:enumeration value="La Rioja" />
<xsd:enumeration value="Las Palmas" />
<xsd:enumeration value="León" />
<xsd:enumeration value="Lérida" />
<xsd:enumeration value="Lugo" />
<xsd:enumeration value="Madrid" />
<xsd:enumeration value="Málaga" />
<xsd:enumeration value="Melilla" />
<xsd:enumeration value="Murcia" />
<xsd:enumeration value="Navarra" />
<xsd:enumeration value="Orense" />
<xsd:enumeration value="Palencia" />
<xsd:enumeration value="Pontevedra" />
<xsd:enumeration value="Santa Cruz de Tenerife" />
<xsd:enumeration value="Salamanca" />
<xsd:enumeration value="Segovia" />
<xsd:enumeration value="Sevilla" />
<xsd:enumeration value="Soria" />
<xsd:enumeration value="Tarragona" />
<xsd:enumeration value="Teruel" />
<xsd:enumeration value="Toledo" />
<xsd:enumeration value="Valencia" />
<xsd:enumeration value="Valladolid" />
<xsd:enumeration value="Vizcaya" />
<xsd:enumeration value="Zamora" />
<xsd:enumeration value="Zaragoza" />
</xsd:restriction>
</xsd:simpleType>

<xsd:element name="titulares">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="titular" minOccurs="0" maxOccurs="unbounded">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="nombre" type="xsd:string" />
<xsd:element name="domicilio" type="xsd:string" />
<xsd:element name="codigo_postal" type="TipoCodigoPostal" />
<xsd:element name="poblacion" type="xsd:string" />
<xsd:element name="provincia" type="TipoProvincia" />
</xsd:sequence>
<xsd:attribute name="nif" type="TipoNIF" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
-------------------------------------------------------
<?xml version="1.0" encoding="UTF-8"?>
<!--
===============================
Lenguajes de Marcas
Bloque 6, Actividad 6
Alumno: Miguel I. García López.
===============================
=       TABLA TITULARES       =
=         CON SCHEMA          =
===============================
-->

<titulares xmlns:xsd="http://www.w3.org/2001/XMLSchema-instance"
           xsd:noNamespaceSchemaLocation="titulares.xsd">
<titular nif="83709245Y">
<nombre>Rica Chon, Esteban</nombre>
<domicilio>Avda. de la Plata, 32</domicilio>
<codigo_postal>46023</codigo_postal>
<poblacion>Valencia</poblacion>
<provincia>Valencia</provincia>
</titular>
<titular nif="83845902R">
<nombre>Forrao Bucho, Joaquín</nombre>
<domicilio>Plaza del Oro, 45</domicilio>
<codigo_postal>44000</codigo_postal>
<poblacion>La Mina</poblacion>
<provincia>Albacete</provincia>
</titular>
<titular nif="83745090T">
<nombre>Rico Grande, Juan</nombre>
<domicilio>Avda. de la Plata, 32</domicilio>
<codigo_postal>46300</codigo_postal>
<poblacion>Valencia</poblacion>
<provincia>Valencia</provincia>
</titular>
<titular nif="83764592X">
<nombre>Forrada Mogollón, Ana Rosa</nombre>
<domicilio>Plaza de la Moneda, 54</domicilio>
<codigo_postal>45001</codigo_postal>
<poblacion>San Juan</poblacion>
<provincia>Alicante</provincia>
</titular>
<titular nif="98934059J">
<nombre>Pelao Sinblanca, Eusebio</nombre>
<domicilio>Calle Seunrato, 92</domicilio>
<codigo_postal>46020</codigo_postal>
<poblacion>Massanassa</poblacion>
<provincia>Valencia</provincia>
</titular>
<titular nif="28376350S">
<nombre>Sinun Duro, Jaime</nombre>
<domicilio>Avda. Calderilla, s/n</domicilio>
<codigo_postal>44100</codigo_postal>
<poblacion>Rebollons</poblacion>
<provincia>Castellón</provincia>
</titular>
<titular nif="23569350X">
<nombre>Sin Blanca, Paloma</nombre>
<domicilio>Calle Jon, 3</domicilio>
<codigo_postal>46200</codigo_postal>
<poblacion>Beniparrell</poblacion>
<provincia>Valencia</provincia>
</titular>
</titulares>

(: Miguel I. García López            :)
(: Selección de todos los titulares. :)

doc("titulares.xml")/titulares/titular
------------
(: Miguel I. García López         :)
(: Selección de todos los nombres :)
(: de los titulares.              :)

doc("titulares.xml")/titulares/titular/nombre
-------
(: Miguel I. García López         :)
(: Selección de todos los apuntes :)
(: de la la cuenta ES33123123123. :)

doc("cuentas.xml")/cuentas/cuenta[@iban="ES33123123123"]/apuntes/apunte
-------
(: Miguel I. García López :)
(: Elimina el titular con :)
(: el NIF 83745090T.      :)

delete node 
doc("titulares")//titulares/titular[@nif="83745090T"]
-------
(: Miguel I. García López      :)
(: Elimina el apunte nº de 2   :)
(: de la cuenta ES33123123123. :)

delete node 
doc("cuentas")//cuentas/cuenta[@iban="ES33123123123"]/apuntes/apunte[@numero="2"]
---------
(: Miguel I. García López          :)
(: Selección de todos los apuntes  :)
(: de cualquier cuenta que no sean :)
(: ingresos (importe < 0)          :)

for $sq_apunte in doc("cuentas")/cuentas/cuenta/apuntes/apunte
where $sq_apunte/importe < 0
return $sq_apunte
--------
(: Miguel I. García López          :)
(: Consulta de todas las cuentas   :)
(: de un titular, almacenado en la :)
(: variable $sq_titular.           :)
(: Sólo muestra el nº de IBAN.     :)

let $sq_titular := "83845902R"
for $sq_path in doc("cuentas")/cuentas/cuenta/titulares/titular
let $sq_iban := $sq_path/../../@iban
where $sq_path = $sq_titular
return data($sq_iban)

-------
(: Miguel I. García López                  :)
(: Selección ordenada de todos los nombres :)
(: de los titulares, cuya letra del cif    :)
(: sea "X".                                :)

for $sq_titular in doc("titulares")/titulares/titular
let $sq_letra := substring($sq_titular/@nif, 9, 1)
where $sq_letra = "X"
order by $sq_titular/nombre
return $sq_titular/nombre
----------
(: Miguel I. García López                 :)
(: Inserta un nuevo registro al principio :)
(: de la tabla 'titulares'.               :)

insert node
<titular nif="73890234K">
<nombre>Pobre Cico, Daniel</nombre>
<domicilio>C/Del Esmirriao, 23-1</domicilio>
<codigo_postal>46900</codigo_postal>
<poblacion>Benimacarrón</poblacion>
<provincia>Valencia</provincia>
</titular>
as first into doc("titulares")//titulares
---------
(: Miguel I. García López             :)
(: Inserta un nuevo registro al final :)
(: de la tabla 'cuentas'.             :)
(: Es decir, crea una nueva cuenta    :)
(: sin apuntes, y el titular es el    :)
(: correspondiente al registro        :)
(: insertado con el xq anterior.      :)

insert node
<cuenta iban="UK9394KKK7625341">
<fecha_apertura>2014-05-10</fecha_apertura>
<titulares>
<titular>73890234K</titular>
</titulares>
</cuenta>
as last into doc("cuentas")//cuentas
-------
(: Miguel I. García López       :)
(: Crea un apunte, dentro de la :)
(: cuenta 'UK9394KKK7625341',   :)
(: creada con el anterior xq.   :)

insert node
<apuntes>
<apunte numero="1">
<fecha>2014-05-10</fecha>
<concepto>Ingreso efectivo</concepto>
<importe>300.00</importe>
</apunte>
</apuntes>
as last into doc("cuentas")/cuentas/cuenta[@iban="UK9394KKK7625341"]
------------
(: Miguel I. García López         :)
(: Actualiza el código postal del :)
(: titular con NIF 83709245Y.     :)

replace value of node 
doc("titulares")//titulares/titular[@nif="83709245Y"]/codigo_postal
with
"46999"
----------
(: Miguel I. García López                  :)
(: Actualiza el concepto del apunte nº 1   :)
(: de la cuenta ES33123123123, cambiándolo :)
(: de 'Ingreso efectivo'                   :)
(: a  'Ingreso cheque'.                    :)

replace value of node 
doc("cuentas")//cuentas/cuenta[@iban="ES33123123123"]/apuntes/apunte[@numero="1"]/concepto
with
"Ingreso cheque"
---------------
(: Miguel I. García López      :)
(: Cambia la fecha de apertura :)
(: de la cuenta ES33123123123. :)

replace value of node 
doc("cuentas")//cuentas/cuenta[@iban="ES33123123123"]/fecha_apertura
with
"2013-09-01"
-----------------
(: Miguel I. García López           :)
(: Genera un archivo HTML con todas :)
(: las cuentas de la BD, ordenadas  :)
(: por su número de IBAN, indicando :)
(: la fecha de apertura, y el nº de :)
(: titulares que tiene.             :)
(: Muestra también el número de     :)
(: cuentas que hay en la BD.        :)

<html>
<head>
<title>Listado de cuentas</title>
<meta charset="UTF-8" />
</head>
<body style="font-family: monospace">
<h1>Banco Chambroso</h1>
<h2>Listado de cuentas</h2>
<table style="border: 1px solid black">
<caption style="text-align: left; font-weight: bold">Hay {count(doc("cuentas")//cuentas/cuenta)} cuentas:</caption>
<tr>
<th style="background-color: brown">IBAN</th>
<th style="background-color: brown">Fecha de apertura</th>
<th style="background-color: brown">Nº de titulares</th>
</tr>
{
for $sq_cuenta in doc("cuentas")//cuentas/cuenta
let $sq_iban := $sq_cuenta/@iban
let $sq_fecha := $sq_cuenta/fecha_apertura
let $sq_titulares := $sq_cuenta/titulares/titular

order by $sq_iban
return
<tr>
<td style="background-color: yellow">{data($sq_iban)}</td>
<td style="background-color: yellow">{data($sq_fecha)}</td>
<td style="background-color: yellow">{count($sq_titulares)}</td>
</tr>
}
</table>
</body>
</html>
----------------------
(: Miguel I. García López                   :)
(: Genera un archivo HTML con los titulares :)
(: y apuntes de la cuenta almacenada en     :)
(: $sq_iban y calcula el saldo actual.      :)
(: Formatea la salida de importes mediante  :)
(: una función local.                       :)

declare variable $sq_iban as xs:string:="ES33123123123";

(: Función definida para formatear la salida de importes :)

declare function local:formatea($valor as xs:double) as xs:string
{
let $cadena := format-number($valor, "###,##0.00 €")
return $cadena
};

<html>
<head>
<title>Detalle de la cuenta: {$sq_iban}</title>
<meta charset="UTF-8" />
</head>
<body style="font-family: monospace">
<h1>Caja de Ahogos y Tensiones</h1>
<h2>Detalle de la cuenta: {$sq_iban}</h2>
<table style="border: 1px solid black">
<caption style="text-align: left; font-weight: bold">Titulares:</caption>
<tr>
<th style="background-color: brown">NIF</th>
<th style="background-color: brown">Nombre</th>
</tr>
{
for $titular in doc("cuentas")//cuenta[@iban = $sq_iban]/titulares/titular
let $nif := $titular
let $nombre := doc("titulares")//titular[@nif=$nif]/nombre
return
<tr>
<td style="background-color: yellow">{data($nif)}</td>
<td style="background-color: yellow">{data($nombre)}</td>
</tr>
}
</table>
<p></p>
<table style="border: 1px solid black">
<caption style="text-align: left; font-weight: bold">Movimientos:</caption>
<tr>
<th style="background-color: brown">Fecha</th>
<th style="background-color: brown">Concepto</th>
<th style="background-color: brown">Importe</th>
</tr>
{
for $apunte in doc("cuentas")//cuenta/apuntes/apunte
let $fecha := $apunte/fecha
let $concepto := $apunte/concepto
let $importe := $apunte/importe
where $apunte/../..[@iban=$sq_iban]
order by $apunte/@numero
return
<tr>
<td style="background-color: yellow">{data($fecha)}</td>
<td style="background-color: yellow">{data($concepto)}</td>
<td style="background-color: yellow; text-align: right">{local:formatea(data($importe))}</td>
</tr>
}
<tr>
<td></td>
<td>Saldo ...</td>
<td style="background-color: yellow; text-align: right">
{
local:formatea(sum(doc("cuentas")//cuenta[@iban=$sq_iban]/apuntes/apunte/importe))
}
</td>
</tr>
</table>
</body>
</html>
-----------

(: Miguel I. García López           :)
(: Genera un archivo HTML con todos :)
(: los titulares de la BD.          :)
(: Muestra también el número total  :)
(: de titulares que hay.            :)
(: Ordena por nif.                  :)

<html>
<head>
<title>Titulares de la BD</title>
<meta charset="UTF-8" />
</head>
<body style="font-family: monospace">
<h1>Banco Ralito</h1>
<h2>Listado de titulares</h2>
<table style="border: 1px solid black">
<caption style="text-align: left; font-weight: bold">Hay {count(doc("titulares")//titulares/titular)} titulares:</caption>
<tr>
<th style="background-color: brown">NIF</th>
<th style="background-color: brown">Nombre</th>
<th style="background-color: brown">Domicilio</th>
<th style="background-color: brown">CP</th>
<th style="background-color: brown">Población</th>
<th style="background-color: brown">Provincia</th>
</tr>
{
for $sq_titular in doc("titulares")//titulares/titular
let $sq_nif := $sq_titular/@nif
let $sq_nombre := $sq_titular/nombre
let $sq_domicilio := $sq_titular/domicilio
let $sq_codigo_postal := $sq_titular/codigo_postal
let $sq_poblacion := $sq_titular/poblacion
let $sq_provincia := $sq_titular/provincia

order by $sq_nif
return
<tr>
<td style="background-color: yellow">{data($sq_nif)}</td>
<td style="background-color: yellow">{data($sq_nombre)}</td>
<td style="background-color: yellow">{data($sq_domicilio)}</td>
<td style="background-color: yellow">{data($sq_codigo_postal)}</td>
<td style="background-color: yellow">{data($sq_poblacion)}</td>
<td style="background-color: yellow">{data($sq_provincia)}</td>
</tr>
}
</table>
</body>
</html>

<?xml version="1.0" encoding="UTF-8"?>
<!--
===============================
Lenguajes de Marcas
Bloque 5, actividad 5, Schema.
Alumno: Miguel I. García López.
===============================

- La lista de productos tiene asociados un nombre de supermercado, y un logo (atributos).
- Cada producto tiene una referencia, y pertenece a una categoría (atributos).
- Un producto puede estar en oferta.
- Un distribuidor es una empresa, y puede tener cero o más comerciales.
- Una empresa tiene asociados una razón social y un CIF.
- Un comercial puede tener asignado un nº de teléfono (atributo).
- Un producto tiene un precio, una unidad de medida, una fotografía,
 un código de barras, y una URL para obtener más información.
-->
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">

<!-- TipoReferencia: Letra + 3 dígitos decimales, p. ej. 'P001' -->
<xsd:simpleType name="TipoReferencia">
<xsd:restriction base="xsd:string">
<xsd:pattern value="[A-Z]\d{3}" />
</xsd:restriction>
</xsd:simpleType>

<!-- TipoPrecio: Importe con 2 decimales, p. ej. '12,05' -->
<xsd:simpleType name="TipoPrecio">
<xsd:restriction base="xsd:string">
<xsd:pattern value="\d{1,},\d{2}" />
</xsd:restriction>
</xsd:simpleType>

<!-- TipoCategoria: Categorías disponibles para los productos, p. ej. 'ZUMOS' -->
<xsd:simpleType name="TipoCategoria">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="AGUA" />
<xsd:enumeration value="COSMETICA" />
<xsd:enumeration value="HORTALIZAS" />
<xsd:enumeration value="LACTEOS" />
<xsd:enumeration value="REFRESCOS" />
<xsd:enumeration value="ZUMOS" />
</xsd:restriction>
</xsd:simpleType>

<!-- TipoTelefono: Compuesto por un nº variable de dígitos decimales, p. ej. '96123456' -->
<xsd:simpleType name="TipoTelefono">
<xsd:restriction base="xsd:nonNegativeInteger" />
</xsd:simpleType>

<!-- TipoCodigoBarras: Compuesto por 3 letras + 6 dígitos decimales, p. ej. 'ZUM654321' -->
<xsd:simpleType name="TipoCodigoBarras">
<xsd:restriction base="xsd:string">
<xsd:pattern value="[A-Z]{3}\d{6}" />
</xsd:restriction>
</xsd:simpleType>

<!-- TipoCIF: (letra o dígito decimal) + 7 números + (letra o dígito decimal) -->
<xsd:simpleType name="TipoCIF">
<xsd:restriction base="xsd:string">
<xsd:pattern value="([A-Z]|\d)\d{7}([A-Z]|\d)" />
</xsd:restriction>
</xsd:simpleType>

<xsd:element name="productos">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="producto" minOccurs="1" maxOccurs="unbounded">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="nombre" type="xsd:string" />
<xsd:element name="descripcion" type="xsd:string" />
<xsd:element name="distribuidor">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="empresa">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="razon_social" type="xsd:string" />
<xsd:element name="cif" type="TipoCIF" />
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="comerciales" >
<xsd:complexType>
<xsd:sequence>
<xsd:element name="comercial" minOccurs="0" maxOccurs="unbounded">
<xsd:complexType>
<xsd:simpleContent>
<xsd:extension base="xsd:string">
<xsd:attribute name="tlf" type="TipoTelefono" use="optional" />
</xsd:extension>
</xsd:simpleContent>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="precio" type="TipoPrecio" />
<xsd:element name="unidad" type="xsd:string" />
<xsd:element name="foto" type="xsd:string" />
<xsd:element name="codigo_barras" type="TipoCodigoBarras" />
<xsd:element name="oferta" type="xsd:string" />
<xsd:element name="mas_info" type="xsd:string" />
</xsd:sequence>
<xsd:attribute name="referencia" type="TipoReferencia" use="required" />
<xsd:attribute name="categoria" type="TipoCategoria" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:sequence>
<xsd:attribute name="supermercado" type="xsd:string" use="required" />
<xsd:attribute name="logo" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:schema>