lunes, 16 de febrero de 2015

Tutorial primeros pasos en Mongo

Tutorial primeros pasos en Mongo

Este tutorial está enfocado a personas con conocimientos de Linux, JavaScript y JSON.
MongoDB es una base de datos documental (NoSQL - Not Only SQL) organizada en bases de datos (como las bases de datos de MySQL o algo similar a los Schemas de Oracle). A su vez las bases de datos se organizan en colecciones (lo que en relacional serían las tablas).
Mongo está muy relacionado con el mundo JavaScript y NodeJS porque la información que almacena y gestiona está en formato JSON.
Recordamos que JSON (JavaScript Object Notation) es un objeto JavaScript con el formato:
 { clave: valor }
Imagina que quieres almacenar una "persona", pues un ejemplo de este objeto sería:
{
 "Nombre":"John",
 "Apellidos":"Doe",
 "DNI":"12345678Z",
 "FechaNac": "01-01-1980",
 "Sexo": "V"
}

Si complicamos esto un poco, una lista de personas sería (fíjate en la coma):
{
 "Nombre":"John",
 "Apellidos":"Doe",
 "DNI":"12345678Z",
 "FechaNac": "01-01-1980",
 "Sexo": "V"
} ,
{
 "Nombre":"Pepa",
 "Apellidos":"Pérez",
 "DNI":"87654321X",
 "FechaNac": "01-01-1980",
 "Sexo": "M"
}

Estos objetos se pueden asignar directamente a una variable en JavaScript y luego acceder a ellos como atributos, ejemplo:
<script>
var unaPersona =  {
"Nombre":"John",
"Apellidos":"Doe",
"DNI":"12345678Z",
"FechaNac": "01-01-1980",
"Sexo": "V"
 };
 document.write(unaPersona.Nombre);
</script>

Instalación

Suponemos que partimos de una máquina Linux 64 bits (por defecto Mongo en 32 bits no tiene activado el journaling para recuperarse de errores inesperados).
Podemos descargar el servidor de su Web o bien instalarlo desde el gestor de paquetes de nuestra distribución.
Nosotros tenemos un equipo basado en Ubuntu, así que usamos el comando:
$ sudo apt-get install mongodb mongodb-clients mongodb-server

Probando el servidor

Para conectar a la base de datos "local" de nuestro servidor, abrimos una terminal y escribimos en la consola:
juangu@pegasus:~$ mongo
MongoDB shell version: 2.0.4
connecting to: test
> show dbs
local    0.0625GB
> use local

switched to db local
  • El comando "show dbs" nos mostrará las bases de datos que tenemos en el servidor y el espacio ocupado.
  • El comando "use local", es similar al de MySQL e indica al cliente que use la base de datos "local".

Consultando las colecciones de documentos disponibles 

Para operar sobre una colección seguimos la nomenclatura "db.nombreColeccion.operacion()", como podemos ver en este ejemplo:
> use local
> show collections
system.indexes
testData
> db.testData.find()
{ "_id" : ObjectId("54e0ea85d8d26ebe65f13132"), "name" : "mongo" }
{ "_id" : ObjectId("54e0ea85d8d26ebe65f13133"), "x" : 3 }
>

Insertando datos 

Para insertar datos, éstos deben ser cadenas JSON ( clave: valor ), podemos almacenarlos en una variable y luego, insertar la variable en la colección:
> use local
> j = { name : "mongo" } 
> k = { x : 3 }
> db.testData.insert( j ) db.testData.insert( k )

Cargando ficheros JSON desde el sistema de archivos

Guardamos esta cadena (string) JSON en el fichero personas.json:
  • {
    • "People":
    • [
      • {
        • "nombre": "Manuel",
        • "apellidos": "Pérez",
        • "fecha_nacimiento": "1982-03-03",
        • "altura": 1.80,
        • "activo": true,
        • "intereses":["fútbol","tenis"],
        • "tarjeta_credito": null,
        • "dni":
        • {
          • "numero":"465464646J",
          • "caducidad":"2013-10-21"
        • }
      • },
      • {
        • "nombre": "Sara",
        • "apellidos": "Ruano",
        • "fecha_nacimiento": "1985-12-03",
        • "altura": 1.65,
        • "activo": false,
        • "intereses":["moda","libros","fotografía","política"],
        • "tarjeta_credito": null
      • }
    • ]
  • }

Cargamos el fichero desde la shell mongo (¡ojo! lo que tenemos en el fichero es un string y hay que convertirlo en objeto, de ahí el "JSON.parse()"):
> use local
> ls()
[ "./personas.json" ]
> gente=cat("./personas.json");

> db.personas.insert(JSON.parse(gente));
> db.personas.find();
{ "_id" : ObjectId("54e1c092eda758b3eb9c5389"), "People" : [     {     "nombre" : "Manuel",     "apellidos" : "Pérez",     "fecha_nacimiento" : "1982-03-03",     "altura" : 1.8,     "activo" : true,     "intereses" : [     "fútbol",     "tenis" ],     "tarjeta_credito" : null,     "dni" : {     "numero" : "465464646J",     "caducidad" : "2013-10-21" } },     {     "nombre" : "Sara",     "apellidos" : "Ruano",     "fecha_nacimiento" : "1985-12-03",     "altura" : 1.65,     "activo" : false,     "intereses" : [     "moda",     "libros",     "fotografía",     "política" ],     "tarjeta_credito" : null } ] }
>

Bibliografía

miércoles, 28 de enero de 2015

Validar XML contra DTD y XSD en Windows con xmllint

Ante las dudas que muchos habéis planteado, la respuesta es sí, es posible validar nuestros XML en Windows con editores ligeros y haciendo uso de software libre.
Una opción interesante es instalarse Cygwin, y de ahí usar xmllint.Cygwin NO es un emulador para usar aplicaciones nativas Linux en Windows, sino una colección de aplicaciones GNU muy recomendables para programadores o para administradores de sistemas.
Aunque hay proyectos para usar xmllint en Windows sin instalar Cygwin, aún no contempla toda la funcionalidad que tendríamos si optamos por la primera opción.
Instalación de Cygwin:



 Instalar Cygwin
  1. De la Web de Cywin, descargamos y ejecutamos el instalador correspondiente (32 o 64 bits).
  2.  Seleccionamos instalar de internet y después la carpeta de destino. En mi caso he opctado por instalarlo en la carpeta c:\usr\cygwin 
  3. Seleccionamos la carpeta de nuestro disco duro donde descargar los archivos temporales y un mirror cercano de donde descargarlo.

Una vez instalado, podemos descargar Geany para Windows, lo descargamos e instalamos desde su Web.
Ahora podemos abrir Geany y configurarlo como comentamos en un post anterior, seleccionando el menú Construir --> Establecer Comandos de Construcción y ahí podemos por ejemplo escribir (como puedes ver en la imagen):
  1. Para ver si es bien formado: C:\Usr\cygwin\bin\xmllint %f
  2. Para ver si valida contra DTD: C:\Usr\cygwin\bin\xmllint --valid %f
  3. Para ver si valida contra XSD: C:\Usr\cygwin\bin\xmllint --schema %d.xsd %f (damos por hecho que el fichero XML y el XSD tienen mismo nombre, pero distinta extensión).