Representación

XML

XML, siglas en inglés de eXtensible Markup Language(Lenguaje de Marcas Extensible), es un lenguaje de marcas desarrollado por el World Wide Web Consortium (W3C) utilizado para almacenar datos en forma legible. A diferencia de otros lenguajes, XML da soporte a bases de datos, siendo útil cuando varias aplicaciones deben comunicarse entre sí o integrar información. - Wikipedia

La primera definición de XML fue la de "Sistema para definir, validar y compartir formatos de documentos en la Web". La diferencia fundamental entre HTML y XML es que el primero estaba orientado a la presentación de datos, mientras que XML está orientado a los datos en sí mismos, por lo que cualquier software informático trabajará mejor con XML. El lenguaje XML es más estricto que el HTML. Los principales usos de XML son: separación de contenido y presentación, comunicación entre aplicaciones y configuración de programas - Hipertexto - XML

Componentes básicos

  • Elementos-Etiquetas (anidadas):

      <empleado>
        <nombre>Juan</nombre>
        <apellido>
          <paterno>Perez</paterno>
          <materno>Perez</materno>
        </apellido>
        ...
      </empleado>
    
  • Atributos: es un par de nombre=valor:

      <producto id="123" precio="i34.98" existencia="true"> ... </producto>
    
  • Texto:

      <cita>
        ...
        <observacion>
          El paciente no presentó su tarjeta de derechohabiente.
        </observacion>
        ...
      </cita>
    

XML bien-formado o bien-estructurado

Es un documento XML que se ajusta a 3 requerimientos básicos:

  1. Existe un solo elemento-etiqueta raíz en todo el documento:

    Incorrecto:

      <etiqueta-a>
      </etiqueta-a>
      <etiqueta-b>
      </etiqueta-b>
    

    Correcto:

      <etiqueta-a>
        <etiqueta-b>
        </etiqueta-b>
      </etiqueta-a>
    

    Permitido:

      <etiqueta-a>
        <etiqueta-b>
        </etiqueta-b>
        <etiqueta-b>
        </etiqueta-b>
        <etiqueta-b>
        </etiqueta-b>
      </etiqueta-a>
    
  2. Los elementos-etiquetas están debidamente anidadas:

    Incorrecto:

      <etiqueta-a>
        <etiqueta-b>
        <etiqueta-c>
        </etiqueta-b>
        </etiqueta-c>
      </etiqueta-a>
    

    Correcto:

      <etiqueta-a>
        <etiqueta-b>
        </etiqueta-b>
        <etiqueta-c>
        </etiqueta-c>
      </etiqueta-a>
    
  3. Los atributos no pueden repetirse en un mismo elemento-etiqueta:

    Incorrecto:

      <etiqueta nombre1="valor1" nombre2="valor2" nombre1="valor3"> ... </etiqueta>
    

    Correcto:

      <etiqueta nombre1="valor1" nombre2="valor2" nombre3="valor3"> ... </etiqueta>
    

    Permitido:

      <etiqueta nombre1="valor1" nombre2="valor1" nombre3="valor1"> ... </etiqueta>
    

XML válido

Es un documento XML bien-formado que además se ajusta a la especificación dada por un descriptor de contenido o schema:

Un documento XML es un documento de texto plano, por lo que es posible estar ante un documento bien-formado pero que carezca con algún significado o semántica útil para una aplicación/sistema, por ejemplo:

<empleado id="hola mundo">
  <nombre>12@#???? Juan  00</nombre>
  <apellido>
    <paterno>true</paterno>
  </apellido>
  <materno></materno>
  <domicilio>%</domicilio>
  <estado>másculino</estado>
</empleado>

Ejemplos

Comparativa con el Modelo Relacional

XML Modelo Relacional
Estructura Jerárquico / Árbol Tabla / Tupla
Esquema (Schema) Flexible y auto-documentado / DTD y XML Schema Fijo y anticipado / Data Definition Language (DDL)
Consultas (Queries) XPath y XQuery SQL
Orden Implicado por la jerarquía/árbol (nodo padre, nodos hijos) Ninguno
Implementación BaseX, eXist, Qizx, IBM DB2, PostgreSQL, etc PostgreSQL, MariaDB, MySQL, SQLite, etc

Lecturas

JSON

JSON (JavaScript Object Notation - Notación de Objetos de JavaScript) es un formato ligero de intercambio de datos. Leerlo y escribirlo es simple para humanos, mientras que para las máquinas es simple interpretarlo y generarlo. JSON es un formato de texto que es completamente independiente del lenguaje pero utiliza convenciones que son ampliamente conocidos por los programadores de la familia de lenguajes C, incluyendo C, C++, C#, Java, JavaScript, Perl, Python, y muchos otros. Estas propiedades hacen que JSON sea un lenguaje ideal para el intercambio de datos. JSON.org

Componentes básicos

  • Valores: cadenas de caracteres (encerrados con comillas dobles), números (enteros y de punto flotante, con o sin signo), true, false y null.
  • Objetos: pares de nombre-valor. Los pares son separados por una coma y encerrados por llave de apertura y de cierre. Los nombres son cadenas de caracteres y son únicos en el objeto, independientemente del valor al que estén asociados.
  • Arreglos: secuencias de valores y/o objetos. Los valores son separados por una coma y encerrados por corchete de apertura y de cierre.

JSON sintacticamente válido

Es todo aquel documento de JSON que se ajusta a 3 requerimientos básicos:

  • Objetos como colección de pares nombre-valor.
  • Arreglos como secuencia de valores.
  • Los valores como tipos de datos predefinidos en JavaScript. Exceptuando a undefined.

JSON semánticamente válido

Es un documento JSON sintacticamente válido que además se ajusta a la especificación dada por un descriptor de contenido o schema:

Un documento JSON es un documento de texto plano, por lo que es posible estar ante un documento sintacticamente válido pero que carezca con algún significado o semántica útil para una aplicación/sistema, por ejemplo:

{
  "tipo": "empleado",
  "id": "hola mundo",
  "nombre": "12@#???? Juan  00",
  "apellido": {
    "paterno": true
  },
  "materno": 786,
  "domicilio": "%",
  "estado": "másculino"
}

Ejemplos

Comparativa con el Modelo Relacional

JSON Modelo Relacional
Estructura Jerárquico (Objeto) y/o Secuencial (Arreglo) Tabla / Tupla
Esquema (Schema) Flexible y auto-documentado / JSON Schema, Ajv y joi Fijo y anticipado / Data Definition Language (DDL)
Consultas (Queries) JSON Path, JSON Query, JSONiq, etc SQL
Orden Implicado por la jerarquía o secuencia Ninguno
Implementación MongoDB, RethinkDB, CouchDB, OrientDB, Elasticsearch, PostgreSQL, etc PostgreSQL, MariaDB, MySQL, SQLite, etc

Lecturas