domingo, 21 de febrero de 2010

Vistas - Primera parte

Suponiendo que tenemos una taxonomía similar a la siguiente:



Para mostrar un listado de tareas de una persona en concreto, el código de la consulta podería ser algo similar a:


[[View::
  [[Ask::
    [[Type::Tarea]]
    [[Property::
      [[Type::IdTodoList]][[Value::YYYY]]
    ]]
    [[Property::
      [[Type::IdAutor]]
      [[Value::
        [[Ref::
          [[Type::Persona]]
          [[Property::
            [[Type::Nombre]][[Value::Aitor Tilla]]
          ]]
        ]]
      ]]
    ]]
    [[Sort::
      [[Type::Fecha]]
      [[Order::Desc]]
    ]]
  ]]
]]

Principales atributos semánticos utilizados:

  • View: Define una vista.
  • Ask: Define la consulta correspondiente a la vista. Su contenido y funcionamiento es similar al de Ref.
  • Ref: Referencia dinámica con el contenido de otro bloque semántico.
  • Type: Dentro de una referencia (Ref) o una consulta (Ask) indica el tipo del bloque semántico del cual queremos extraer la información.
  • Property: Parte de la consulta. Se compone de un Tipo "Type" y el valor esperado "Value".
  • Type: Una propiedad semántica.
  • Value: El valor que debe tomar esta propiedad semántica.

Conclusiones

Sabemos que se podrían realizar consultas simples a partir de una taxonomía "básica" extendiendo la funcionalidad semántica.

Aunque se puede empezar a intuir cual es el funcionamiento de las taxonomías básicas para la definición de relaciones y para realización de consultas, parece que cada vez se hace más patente la necesidad de formalizarlas, cosa que espero hacer en próximas publicaciones.

viernes, 19 de febrero de 2010

Tipos de enlace - Conclusiones

Aunque aparentemente el mismo problema puede solucionarse de diversas formas, existen diferencias conceptuales en función del tipo de relación que seleccionamos. Por lo que será necesario pensar en las consecuencias de cada tipo de enlace: Enlaces estáticos, enlaces ligeros, enlaces dinámicos y enlaces mixtos.

Para las relaciones "dinámicas" es necesario haber definir una nueva taxonomía con atributos semánticos que permitan formalizar dicha relación. Por ejemplo:
  [[Ref::
    [[Type::Bloque o atributo semántico]]
    [[Property::
      [[Type::Atributo semántico]][[Value::Valor del atributo]]
    ]]
  ]]

  • Ref: Contiene la referencia al contenido de otro bloque semántico.
  • Type: Tipo del bloque semántico del cual queremos referenciar su contenido.
  • Property: Consulta sobre una propiedad semántica contenida dentro del bloque.
  • Type y Value: Atributo semántico y valor esperado para ese atributo.

Al añadir en un bloque semántico una referencia "dinámica" a otro bloque semántico, el primer bloque contendrá "formalmente" todos los atributos semánticos de dicha referencia.
Por ejemplo, en el caso expuesto en los posts anteriores, parece lógico que si mi TodoList puede llegar a contener "cientos" de tareas, la solución más simple y dinámica sería el uso de un enlace "ligero".

Si queremos "formalizar" el modelo o queremos definir una relación es más compleja, probablemente sería más correcto el uso de un enlace "dinámico".

Sin embargo, si decidiésemos que una tarea puede componerse de subtareas, puede que nos interese para esta implementación un enlace más "estático": Cualquier cambio de una subtarea se ve reflejado en el propio sentido semántico de la tarea. Si implementamos el segundo ejemplo del post sobre enlaces dinámicos, se vería afectada la tarea sólo en el caso de añadir o eliminar subtareas.

miércoles, 17 de febrero de 2010

Tipos de enlace - Enlaces mixtos

Un enlace mixto implicaría que un valor de atributo semántico estático pueda ser utilizado a la vez de forma dinámica por otro elemento.

Un ejemplo diagramado:



El ejemplo en código:


[[TodoList Estática::
  [[Tarea::
    [[IdTarea::XXXX]]
    [[Título::Una tarea]]
    [[Descripción::Tarea que se llama igual que la primera]]
  ]]
  [[Tarea::
    [[IdTarea::YYYY]]
    [[Título::Otra tarea]]
    [[Descripción::Esta es otra posible tarea]]
  ]]
]]

[[TodoList Dinámica::
  [[Ref::
    [[Type::Tarea]]
    [[Property::
      [[Type::IdTarea]][[Value::XXXX]]
    ]]
  ]]
  [[Ref::
    [[Type::Tarea]]
    [[Property::
      [[Type::IdTarea]][[Value::YYYY]]
    ]]
  ]]
]]

Las dos TodoList comparten las mismas tareas. Modificar el contenido de las tareas implica variar el sentido semántico de la TodoList "Estática" pero no de la "Dinámica".