DOCUMENTO DE FUNCIONALIDAD Este documento contiene los requerimientos funcionales de la aplicación. Se espera que el lector tenga un conocimiento medio de Semantic Web para entender algunos conceptos utilizados en el documento. Documentos como “RDF Primer”, o “An Introduction to RDF and the Jena RDF API” pueden ser de gran utilidad. Ingreso de QNames La aplicación permitira al usuario el ingreso de QNames para ser utilizados en cualquier parte donde ingresar un URI sea necesario. De este modo el usuario podrá ingresar el URI que desea completo o ingresarlo utilizando el QName. El usuario podrá editar los QNames a utilizar (crear, modificar y borrar). La información de los QNames es la siguiente: Prefijo. URI asociado con el prefijo. Anotaciones sobre el QName. Además, inicialmente se debe contar con algunos QNames por omisión que son bastantes comunes como: Prefijo rdf rdfs dc Namespace http://www.w3.org/1999/02/22-rdf-syntax-ns# http://www.w3.org/2000/01/rdf-schema# http://purl.org/dc/elements/1.1/ Anotación Términos básicos de RDF. Términos de RDFS Terminos para describir información muy usada. Ingreso de Resources El usuario puede crear un Resource (Sujeto, Propiedad y Objeto son Resources) en un modelo indicando un URIref. El usuario debe indicar el URIref del Resource y la aplicación lo ingresara. Este URIref tambien se puede ingresar utilizando QNames. Ingreso de Statements La aplicación permitirá ingresar statements sobre los Resources ingresados previamente. Se debe indicar el Resource sobre el cual se desea decir algo. Luego se debe indicar el valor del URIref de la propiedad y del objeto. Si el Object de la aserción es un Resource, este debe ser previamente ingresado. También como Object de la aserción se puede ingresar un valor literal. En la creación de los Statements, los Objects que son los valores de los Predicates deben soportar typed literals. Los datatypes a soportar son: XMLLiteral. Define contenido XML como valor del literal. XMLSchema datatypes: o Boolean. o Date. o Double. o Float o Long. o Int. Además como Object de la aserción tambien se puede ingresar un blank node. Sobre este blank node se pueden realizar futuras aserciones, como lo define el modelo. Esta lista puede ser modificada posteriormente. (Revisar soporte de JENA) El usuario podrá también ingresar un Resource de tipo Container. Los tipos de Container son: BAG para una colección no ordenada. ALT para una colección no ordenada que representa alternativas. SEQ para una colección de objetos ordenada. A un Resource de tipo Container entonces se le pueden agregar Resources y luego recuperarlos, remover elementos y consultar sobre sus nodos y su tamaño. Se podrá utilizar el vocabulario de RDF junto con los definidos por RDFSchema y OWL. //**Revisar bien la funcionalidad que se va a realizar con RDFSchema y OWL Para la utilización de modelos de ontologías, es decir, el uso de RDFSchema o de OWL se debe tomar en cuenta las posibilidades que estos brindan para ofrecer al usuario. Es decir que si el usuario escoge crear una ontologia utilizando RDFSchema, solo deben estar disponibles cosas como subclase, sub-properties, domain y range. Pero si en lugar de este se escogiera OWL, herramientas como disjointness deben estar disponibles. ( buscar reasoner capabilities en inference documentation ). Cuando se use OWL, se debe tambien indicar si se desean importar documentos dentro de la ontologia ya que este lenguaje lo permite. Tambien se puede indicar que se cree un modelo sin tomar en cuenta los imports de este. Tambien se puede ser más selecto indicando que URIS no se quieren cargar. Al ingresar Resource (OntResource), se pueden especificar información sobre la version del recurso, algun comentario, una marca (label), etc. (Mayor información en Jena Ontology API, The generic ontology type). Se pueden eliminar resources completamente de una ontologia, lo que implica que se retira de todos los statements donde aparezca como subject o object. Al ingresar nodos de tipo properties utilizando un lenguaje como OWL se pueden especificar propiedades como funcionales, transitivas, simetricas, inversamente funcional.**/ Guardado y Recuperación de Modelos La aplicación permitirá guardar los modelos creados por el usuario en un archivo con el formato RDF/XML (REVISAR LO DE LOS OTROS LENGUAJES). La aplicación también permitirá recuperar modelos guardados en un archivo con el formato RDF/XML. El usuario debe especificar el archivo que contiene el modelo. La aplicación permitirá trabajar con modelos en XML especificados por un URL. Navegación de modelos La aplicación permitira visualizar todos los Resources que tienen propiedades en el modelo. Sobre cada uno de los Resources, se podrán ver todas las propiedades del mismo especificadas en el modelo. La aplicación permitirá ver todos los statements realizados sobre un modelo predeterminado. Estos se podrán ver en notación RDF/XML y N-Triples. ( Notación gráfica pendiente). Búsqueda en modelos La aplicación permitirá al usuario realizar búsqueda con cualquier combinación en los campos de un Statement. Por ejemplo, si el usuario especifica únicamente el Subject de un Statement, encontrara todos los Statements que contengan el Subject que específico el usuario. Si además especificara el Predicate del Statement, como resultado de la consulta obtendrá todos los Statements que contengan como Subject y Predicate los valores especificados por el usuario. Por ejemplo: Si los siguientes Statements han sido introducidos: http://algo/GabrielLozano http://www.w3.org/2001/vcard-rdf/3.0#N “Gabriel” http://algo/GabrielLozano http://www.w3.org/2001/vcard-rdf/3.0#FN “Gabriel Lozano” Entonces, si se realiza la búsqueda por los Staments con “http://algo/GabrielLozano” como Subject y http://www.w3.org/2001/vcard-rdf/3.0#N como Predicate, se obtendrá como resultado el primer Statement de los introducidos. Además, la aplicación permitirá hacer búsquedas anidadas. Por ejemplo, supongamos que tenemos los siguientes Statements (no validos, pero simplificados para mejorar su visualización): X Y A B X Y A B X Y FN FN FN FN G G G G F F Gabriel Lozano Rene Bareño. Leonardo Lozano. Marcela Lozano. Gabriel Rene Leonardo Marcela Lozano Bareño A B F F Lozano Lozano Con X, Y, A y B como URI de los Subjects, FN, G y F ( Full Name, Given y Family) URI de los Predicates y lo demás como los valores literales de los Predicates. Ahora, supongamos que queremos saber los nombres de las personas que pertenezcan a la Familia Lozano. Para esto necesitaremos una búsqueda anidada. Primero debemos seleccionar las personas de la Familia Lozano. Una consulta de estas se puede ver de la siguiente forma: ?x FN Lozano Con esto obtenemos todas los URI de las personas que pertenecen a la familia Lozano. Ahora, sobre estos obtenemos sus nombres. Esta consulta se puede ver de la siguiente forma: ?x G ?y De esta forma obtendríamos los nombres de todas las personas que pertenezcan a la familia Lozano. Toda la consulta se puede ver de la siguiente forma: ?x FN Lozano && ?x G ?y Además, las búsquedas se pueden filtrar sobre los valores de las propiedades encontradas. Por ejemplo, si se desea buscar Personas que tengan una edad mayor a 24 años la consulta se puede ver de la siguiente forma: ?x edad ?y && ?y >= 24 Además, se pueden filtrar los resultados utilizando expresiones regulares. (PENDIENTE REVISAR ESTE PUNTO Y DEJAR CLARO QUE TIPOS DE FILTRADO SE PUEDEN LLEVAR A CABO. ) Grafos representantes de modelos Seria bueno poder representar en grafos el RDF, y ver su representación al menos en XML. Para los grafos los URIRefs se representan como óvalos y los literales como cuadrados. En los grafos se deben representar los blank nodes. Los grafos se pueden mostrar con relaciones directas o no directas de acuerdo a las jerarquias especificadas con lenguajes como RDFSchema u OWL. (ver Jena Ontology API the generis ontology type: OntResource) Representación de sentencias usando tripletas El programa debe permitir la representación de las sentencias de RDF utilizando el formato de tripletas, en donde cada sentencia es representada por sujeto, predicado y objeto, en ese orden. Cada tripleta corresponde a un arco en la representación con grafos. La representación de una tripleta requiere que cada URIRef sea descrita completamente encerrada en < y >.Se debe revisar si se implementa la notación abreviada que sustituye un XML qualified name (QName) sin < > como una abreviatura para una URIRef completa[1]. Se deben poder usar prefijos para QNames conocidos[2]. Representación de modelos en RDF/XML El programa debe poder crear modelos RDF y verlos representados según la sintaxis RDF/XML. Tomar en cuenta el uso de XML Entibies como mecanismo de abreviación. En la sintaxis de RDF/XML se deben tomar en cuenta el uso de containers como baq, seq y alt. Creación de shortcuts ( PENDIENTE ) La herramienta permite al usuario crear shortcuts para namespaces comunes, que se puedan utilizar en todas las tareas de la herramienta, serian como un tipo de constantes. Creación y edición de vocabularios (modelos con rdfschema y owl) La aplicación debe permitir la creación de vocabularios. A su vez, debe permitir la edición de estos y la navegación para su posterior uso. Se debe permitir importar y exportar estos vocabularios. Normalmente un namespace común es definido para un conjunto de términos que constituyen un vocabulario. Se puede pensar en crear una pagina Web con la URL de la URIRef del vocabulario definido para describir este vocabulario. Descripción de clases con RDFSchema La aplicación debe permitir la descripción de clases de objetos con XMLSchema. Utilización de otros recursos de RDF La aplicación debe permitir el uso de containers, del tipo bag, seq y alt. Tambien el uso de listas que permitan describir un conjunto finito de ítems en un grupo, a diferencia de los containers. El uso de RDF reification también debe ser permitido, el cual describe los propios statements. Entonces si uno realiza statements y se desea una funcionalidad adicional como la de dar información de los statements, sería apropiado que cuando se generan statements el usuario este plenamente identificado. Tambien se puede salvar la fecha en que el statement fue realizado. La aplicación puede tener un mecanismo para asociar URI´s a statements unicos de tal forma que pueda hacer aserciones sobre estos. Creación de vocabularios La aplicación debe por medio del uso de RDFSChema poder especificar vocabularios con las siguientes características: 1. Especificación de clases. 2. Especificación de jerarquías. 3. Descripción de propiedades. Esto a su vez consta de: a. Descripción del rango de una propiedad. b. Descripción del dominio de una propiedad. c. Especificación de jerarquías de propiedades. 4. fdfd Creación de plantillas También deben existir plantillas con modelos predeterminados que permitan llevar a cabo fácilmente esta tarea. Entre estas están: Creación de información sobre páginas Web (Se puede usar el vocabulario DC). Creación de noticias utilizando RSS. Ayuda de Procesos Edición de modelos Undo/redo, copy/paste, etc.. Glosario URIRef: Referencia a un URI. Vocabulario: Conjunto de URIRefs que tienen un propósito común. Referencias [1] RDFPrimer pagina 11. [2] RDFPrimer pagina 11 [3] RDF CONCEPTS