Esta traducción se concluyó, el 27 de diciembre de 2002.
Los posibles errores presentes en este documento, debidos a la traducción, son responsabilidad de la traductora y no son achacables en modo alguno al W3C. Para cualquier comentario sobre la traducción dirigirse a Emmanuelle Gutiérrez y Restrepo
La única versión normativa oficial de este documento es la versión original (en inglés):
http://www.w3.org/TR/photo-rdf/.
Copyright © 2002 W3C® (MIT, INRIA, Keio), Todos los derechos reservados. Son aplicables todas las normas del W3C de responsabilidad, marca registrada, uso del documento y licencia de software.
Esta nota describe un proyecto para describir y recuperar fotos (digitalizadas) con metadatos (RDF) Describe los esquemas RDF, un programa de introducción de datos para introducir rápidamente metadatos de una gran cantidad de fotos, una manera de servir las fotos y los metadatos en HTTP, y algunas sugerencias para métodos de búsqueda para recuperar fotos basándose en su descripción.
El programa de introducción de datos ha sido desarrollado en Java, un bloque específico de Jigsaw se ha dedicado a la recuperación del RDF desde la imagen a través de HTTP. El esquema RDF usa el esquema Dublin Core así como otros esquemas para datos técnicos.
Hemos creado un sitio de demostración y allí hay código de ejemplo que puede descargarse.
El sistema puede ser útil para colecciones de instantáneas de vacaciones así como para otras colecciones de fotos más ambiciosas.
Este documento es una NOTA publicada por el W3C sólo para su discusión. La publicación de esta Nota por parte del W3C no indica su respaldo por parte del W3C ni de su directiva, o de cualquier miembro del W3C. Por favor, envíe sus comentarios a los autores.
Pensamos actualizar esta nota una vez hayamos ganado más experiencia con el sistema y los esquemas.
Puede encontrarse una lista de los informes técnicos y publicaciones actuales del W3C, incluyendo Borradores de Trabajo y Notas, en: http://www.w3.org/TR/.
Los objetivos del proyecto son en parte personales y en parte para promover la tecnología del W3C. Las razones personales son que nosotros, los autores, tenemos una gran cantidad de fotos pero siempre tenemos dificultades para encontrar la foto exacta que queremos mostrar a alguien. Digitalizándolas y describiéndolas en RDF puede hacer que sean más fáciles de encontrar las que estamos buscando en determinado momento.
También pensamos que un ejemplo concreto de un esquema RDF y de un sistema de trabajo sobre ello puede ayudar a explicar el potencial de los metadatos en la Web, especialmente, ya que los sistemas de búsqueda tradicionales, basados en texto, tal como se usan para documentos HTML, claramente no funcionan para las fotos. También, usando metadatos proporcionaremos automáticamente una descripción no visual de las fotos, con lo cual contribuiremos a la accesibilidad.
El proyecto, entonces, consiste en tomar piezas de la tecnología existente (RDF [RDF], HTTP [HTTP] y Jigsaw [Jigsaw] del W3C; JPEG [JPEG], Java [Java] de cualquier parte) y proporcionar algo de unión entre ellas para producir una aplicación útil e interesante.
El sistema comprende las siguientes piezas, totalmente independientes:
Algunas cámaras digitales ya producen información sobre la foto, que puede ser leída y reformateada en RDF por scripts. No nos ocuparemos de esto en esta versión del editor de metadatos.
Los datos RDF se expresan en tres esquemas separados, uno de los cuales es el esquema Dublin Core. Los otros dos se ocupan de datos técnicos de la foto y de categorías temáticas. La única razón para usar tres esquemas es permitir a cada una de ellos ser usado en otros proyectos; para los usuarios del programa de introducción de datos el verdadero RDF está completamente escondido.
El programa de introducción de datos es muy sencillo. Ha sido diseñado para habilitar la introducción rápida de metadatos para cantidades de fotos, asumiendo que las fotos normalmente serán de una o unas pocas series. Por tanto la mayoría de los campos muestran por defecto el valor que fue introducido para la foto anterior, y ofrece un acceso rápido a los valores introducidos para las últimas fotos. Normalmente, sólo deberán cambiarse los valores de unos pocos campos de una foto a la siguiente y la cantidad de escritura se reducirá.
El programa está escrito en Java, pero la interfaz de usuario de hecho se genera mientras el programa está en marcha, directamente desde una versión de los esquemas legible por un ordenador (normalmente no la sintaxis RDF sino una transformación de ella, con información equivalente). Esto significa que el programa no necesita ser cambiado cuando nosotros cambiamos los esquemas RDF.
El dato RDF se almacena en el archivo JPEG en bloques de comentario (bloques del tipo "COM", tal como se definen en la norma ISO DIS 10918-1) Según el estándar JPEG, un bloque de comentario puede contener texto arbitrario. No puede asignarse un tipo al texto. Nosotros simplemente confiamos en el hecho de que RDF puede distinguirse fácilmente por métodos heurísticos de un texto plano. JPEG limita cada bloque de comentarios a 64K, pero puede haber tantos bloques como sean necesarios, así que pueden añadirse tantos bloques de texto como se quiera. En la práctica, las descripciones generadas por el programa rdfpic normalmente sólo ocupan unos pocos cientos de bytes.
La mejor manera de servir tanto la versión RDF como la imagen completa, usando los navegadores y herramientas existentes, era usar la Negociación de Contenido. Por supuesto, esto no excluye el uso de otras técnicas, tales como las extensiones HTTP, para recuperar y almacenar metadatos de la mejor manera posible.
Usar la Negociación de Contenido tiene dos ventajas: Funcionará bien con navegadores solo texto (lynx, emacs con emacsspeak, etc.) y la salida puede representarse directamente seleccionando, por ejemplo, el título o la descripción desde RDF. También, un buscador RDF será capaz de obtener todas las descripciones de una colección de fotos para crear una base de datos, solo pidiendo el tipo de MIME correcto.
En Jigsaw [Jigsaw], se ha creado un marco, para simular dos recursos diferentes bajo la misma URI, uno para la imagen en sí misma. Estos dos recursos tienen su propia serie de valores HTTP, tales como "ETags", "Content-Length" y otros, y el resultado se envía usando la clásica Negociación de Contenido de HTTP.
El RDF puede también obtenerse directamente sin la Negociación de Contenido, con tan sólo añadir el tipo MIME buscado tras un punto y como (;) Por ejemplo: foo.jpg;nombredeaplicación%2Frdf+xml ("%2F" es "/", evitando su ocurrencia en una URL.)
Nótese que también es posible modificar la descripción RDF usando el método PUT, siempre que la ETag de la descripción esté en la cabecera HTTP de la consulta.
El metadato se separa en tres esquemas diferentes:
Todas las propiedades son opcionales. Cuantas más propiedades tengan valores, la foto estará mejor descrita y será más fácil de encontrar, pero dejar las propiedades sin definir no invalida el metadato.
No hay dependencia entre propiedades: cada propiedad puede tener un valor dado independientemente de si cualquier otra propiedad tiene un valor o no. Los valores también son independientes, excepto por restricciones de sentido común: una foto no puede haber sido tomada en fecha posterior a la de revelado de la película...
Nosotros no utilizamos todas las propiedades definidas por Dublin Core (esto es: los demás pueden añadirlas, pero son ignoradas por nuestro editor de metadatos). Aquí hay una interpretación de las propiedades de Dublin Core, aplicadas a material fotográfico. En el apéndice B se incluye un esquema legible por una máquina. La etiqueta que aparece entre paréntesis es la que se muestra en la interfaz de usuario de rdfpic, si es diferente del nombre de propiedad.
El esquema técnico está definido por el esquema RDF (para ver la definición formal, ve al apéndice B):
El esquema de contenido contiene las palabras clave que usamos en la propiedad "asunto" del esquema Dublin Core. Esta propiedad debe contener tantas palabras clave como sean aplicables. Las palabras clave tienen los siguientes significados:
A continuación algunas sugerencias para extensiones para el sistema que estamos estudiando. Sin orden de preferencia:
Se ha preparado un servidor de ejemplo y hay algunas fotos disponibles. Cualquier solicitud a la versión texto de estas fotos te dará la descripción RDF de la foto. Por ejemplo, una solicitud HTTP del tipo de MIME image/jpeg
o image/*
devolverá la foto, una solicitud de application/rdf+xml
o application/*
devolverá el metadato. O pueden verse los metadatos añadiendo
";application%2Frdf+xml" al final de las URI de las fotos. Nótese que la página índice ha sido creada con un script usando el RDF incrustado en las fotos para mantener las leyendas y el texto alternativo.
Planeamos incrementar constantemente el número de fotos disponibles en línea.
La extensión Jigsaw y las clases relacionadas JPEG están disponibles en la distribución Jigsaw 2.0.4, el editor de metadatos rdfpic está disponible desde el sitio de demostración de Jigsaw.
Un sistema aparentemente muy similar al nuestro ha sido desarrollado por Jane Hunter y Zhimin Zhan [HunterZhan], pero para el formato PNG y con el formato de creación de palabras clave/valores de PNG en vez de RDF para expresar el metadato, aunque ellos usan RDF para especificar los esquemas de metadatos.
El IPTC tiene una lista de palabras clave para la descripción de imágenes de foto periodismo. El Photoshop de Adobe soporta algunas de ellas.
El formato de archivo DIG2000 [DIG2000] propuesto para el algoritmo de compresión de imagen JPEG2000 [JPEG2000] contiene un bloque de metadatos basado en XML con entradas para gente, lugares, eventos, localización GPS, tipo de cámara, etc. Permite extensiones con entradas adicionales. El borrador de octubre de 1998 no usa RDF.
Desde que publicamos esta nota y lanzamos el programa rdfpic (en marzo de 2000) Adobe ha desarrollado una tecnología similar, llamada "Extensible Metadata Platform" [XMP]. XMP se publicó por primera vez allá por septiembre de 2001. Almacena el RDF en la cadena APP1 de JPEG, en vez de en la cadena COM (comment) y añade una cadena mágica ("W5M0MpCehiHzreSzNTczkc9d") al principio del RDF par ayudar a distinguir XMP de otras cadenas que pueden estar presentes en el archivo JPEG. XMP incrustado está también definido para otros formatos distintos a JPEG, tales como TIFF y PDF. Como nosotros, Adobe recomienda el esquema Dublin Core y ofrece esquemas adicionales para grabar la historia de las versiones, manipulaciones de la imagen, etc.
La primera versión del editor de metadatos rdfpic fue escrita por Thierry Kormann (formalmente de Bull, Francia). La segunda versión es el trabajo de Eamon Nerbonne. Colas Nahaboo (también formalmente de Bull) ha dado su valiosa asesoría.
Janne Saarela (de Pro-Solution, ahora Profium, de Finlandia) ha escrito el esquema RDF original de los que los esquemas actuales descienden y ha ayudado con la evaluación y revisión de los esquemas. Su programa SiRPAC ha sido de gran ayuda en la evaluación y revisión de los esquemas así como los metadatos reales generados por el editor de metadatos.
Los tres esquemas que se presentan a continuación (Dublin Core, técnico y contenido) son esquemas legibles por una máquina con la sintaxis propuesta por el borrador de esquemas RDF [Schema].
El esquema de abajo es un mínimo esquema RDF para el Dublin Core. El nombre del esquema es http://www.w3.org/2000/PhotoRDF/dc-1-0
, pero tal como muestra el esquema, cada propiedad es de hecho una restricción de la propiedad DC del mismo nombre, como se encuentra en http://purl.org/dc/elements/1.1/
La traducción francesa de las etiquetas está basada en la de
Anne-Marie Vercoustre.
<rdf:RDF xmlns="http://www.w3.org/TR/1999/PR-rdf-schema-19990303#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" > <rdf:Property rdf:ID="title"> <label xml:lang="en">Title</label> <label xml:lang="fr">Titre</label> <label xml:lang="nl">Titel</label> <subPropertyOf rdf:resource="http://purl.org/dc/elements/1.1/title" /> </rdf:Property> <rdf:Property rdf:ID="creator"> <label xml:lang="en">Author/creator</label> <label xml:lang="fr">Auteur/créateur</label> <label xml:lang="nl">Auteur/maker</label> <subPropertyOf rdf:resource="http://purl.org/dc/elements/1.1/creator" /> </rdf:Property> <rdf:Property rdf:ID="subject"> <label xml:lang="en">Subject</label> <label xml:lang="fr">Sujet</label> <label xml:lang="nl">Onderwerp</label> <subPropertyOf rdf:resource="http://purl.org/dc/elements/1.1/subject" /> <range rdf:resource="http://www.w3.org/2000/PhotoRDF/content-1-0#Keywords"/> </rdf:Property> <rdf:Property rdf:ID="description"> <label xml:lang="en">Description</label> <label xml:lang="fr">Description</label> <label xml:lang="nl">Beschrijving</label> <subPropertyOf rdf:resource="http://purl.org/dc/elements/1.1/description" /> </rdf:Property> <rdf:Property rdf:ID="publisher"> <label xml:lang="en">Publisher</label> <label xml:lang="fr">Éditeur</label> <label xml:lang="nl">Uitgever</label> <subPropertyOf rdf:resource="http://purl.org/dc/elements/1.1/publisher" /> </rdf:Property> <rdf:Property rdf:ID="contributor"> <label xml:lang="en">Contributor</label> <label xml:lang="fr">Contributeur</label> <label xml:lang="nl">Medewerker</label> <subPropertyOf rdf:resource="http://purl.org/dc/elements/1.1/contributor" /> </rdf:Property> <rdf:Property rdf:ID="date"> <label xml:lang="en">Date</label> <label xml:lang="fr">Date</label> <label xml:lang="nl">Date</label> <subPropertyOf rdf:resource="http://purl.org/dc/elements/1.1/date" /> <!-- use http://www.w3.org/TR/NOTE-datetime format: YYYY[-MM[-DD[Thh:mm[:ss[.sTZD]]]]] example: 1999-10-01T17:53 if TZD is omitted the timezone is UTC --> </rdf:Property> <rdf:Property rdf:ID="type"> <label xml:lang="en">Resource type</label> <label xml:lang="fr">Type de ressource</label> <label xml:lang="en">Categorie</label> <subPropertyOf rdf:resource="http://purl.org/dc/elements/1.1/type" /> <!-- siempre "image" en PhotoRDF --> </rdf:Property> <rdf:Property rdf:ID="format"> <label xml:lang="en">Format</label> <label xml:lang="fr">Format</label> <label xml:lang="nl">Formaat</label> <subPropertyOf rdf:resource="http://purl.org/dc/elements/1.1/format" /> <!-- always "image/jpeg" in PhotoRDF --> </rdf:Property> <rdf:Property rdf:ID="identifier"> <label xml:lang="en">Number</label> <label xml:lang="fr">Numéro</label> <label xml:lang="nl">Nummer</label> <subPropertyOf rdf:resource="http://purl.org/dc/elements/1.1/identifier" /> </rdf:Property> <rdf:Property rdf:ID="source"> <subPropertyOf rdf:resource="http://purl.org/dc/elements/1.1/source" /> <!-- not used in PhotoRDF --> </rdf:Property> <rdf:Property rdf:ID="language"> <subPropertyOf rdf:resource="http://purl.org/dc/elements/1.1/language" /> <!-- not used in PhotoRDF --> </rdf:Property> <rdf:Property rdf:ID="relation"> <label xml:lang="en">Series</label> <label xml:lang="fr">Série</label> <label xml:lang="nl">Serie</label> <subPropertyOf rdf:resource="http://purl.org/dc/elements/1.1/relation" /> </rdf:Property> <rdf:Property rdf:ID="coverage"> <label xml:lang="en">Location</label> <label xml:lang="fr">Endroit</label> <label xml:lang="nl">Plaats</label> <subPropertyOf rdf:resource="http://purl.org/dc/elements/1.1/coverage" /> <!-- restricted to spatial coverage in PhotoRDF --> </rdf:Property> <rdf:Property rdf:ID="rights"> <label xml:lang="en">Rights</label> <label xml:lang="fr">Droits</label> <label xml:lang="nl">Rechten</label> <subPropertyOf rdf:resource="http://purl.org/dc/elements/1.1/rights" /> </rdf:Property> </rdf:RDF>
Ver la descripción abajo para tener una explicación detallada de cada una de las propiedades. El nombre de este esquema es http://www.w3.org/2000/PhotoRDF/technical-1-0#
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/01/rdf-schema#"> <Class rdf:ID="Technical-data"> <comment xml:lang="en">A class that represents technical data about a photo</comment> <comment xml:lang="fr">Une classe qui réprésente les données techniques sur une photo</comment> <comment xml:lang="nl">Een class die de technische gegevens van een foto representeert.</comment> </Class> <rdf:Property rdf:ID="camera"> <label xml:lang="en">Camera</label> <label xml:lang="fr">Appareil photo</label> <label xml:lang="nl">Camera</label> <comment xml:lang="en">Brand and type of camera</comment> <comment xml:lang="fr">Marque et type de appareil photo</comment> <comment xml:lang="nl">Cameramerk en -type</comment> <domain rdf:resource="#Technical-data"/> </rdf:Property> <rdf:Property rdf:ID="film"> <label xml:lang="en">Film</label> <label xml:lang="fr">Pellicule</label> <label xml:lang="nl">Film</label> <comment xml:lang="en">Brand and type of film</comment> <comment xml:lang="fr">Marque et type de pellicule</comment> <comment xml:lang="nl">Filmmerk en -type</comment> <domain rdf:resource="#Technical-data"/> </rdf:Property> <rdf:Property rdf:ID="lens"> <label xml:lang="en">Lens</label> <label xml:lang="fr">Objectif</label> <label xml:lang="nl">Lens</label> <comment xml:lang="en">Brand and type of lens.</comment> <comment xml:lang="fr">Marque et type d'objectif.</comment> <comment xml:lang="nl">Merk en type van de lens.</comment> <domain rdf:resource="#Technical-data"/> </rdf:Property> <rdf:Property rdf:ID="devel-date"> <label xml:lang="en">Development date</label> <label xml:lang="fr">Date de développement</label> <label xml:lang="nl">Ontwikkeldatum</label> <comment xml:lang="en">Date on which the film was developed.</comment> <comment xml:lang="fr">Date à laquelle la pellicule a été developpée.</comment> <comment xml:lang="nl">Datum waarop de film is ontwikkeld.</comment> <domain rdf:resource="#Technical-data"/> <!-- use http://www.w3.org/TR/NOTE-datetime format: YYYY[-MM[-DD[Thh:mm[:ss[.sTZD]]]]] example: 1999-10-01T17:53 if TZD is omitted the timezone is UTC --> </rdf:Property> <!-- [más?] --> </rdf:RDF>
Hemos dejado fuera los comentarios legibles por la máquina; ver la descripción de las palabras clave arriba. El nombre de este esquema es:
http://www.w3.org/2000/PhotoRDF/content-1-0#
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/01/rdf-schema#" xmlns:content=""> <!-- "" es la misma que "http://www.w3.org/2000/PhotoRDF/content-1-0#" --> <Class rdf:ID="Keywords"> <comment xml:lang="en">An enumeration of keywords to describe the subject of photos.</comment> <comment xml:lang="fr">Une énumération de mots-clef pour décrire le sujet d'une photo.</comment> <comment xml:lang="nl">Een opsomming van sleutelwoorden om het onderwerp van foto's te beschrijven.</comment> </Class> <content:Keywords rdf:ID="Portrait"> <label xml:lang="en">Portrait</label> <label xml:lang="fr">Portrait</label> <label xml:lang="nl">Portret</label> </content:Keywords> <content:Keywords rdf:ID="Group-portrait"> <label xml:lang="en">Group portrait</label> <label xml:lang="fr">Portrait de groupe</label> <label xml:lang="nl">Groepsportret</label> </content:Keywords> <content:Keywords rdf:ID="Landscape"> <label xml:lang="en">Landscape</label> <label xml:lang="fr">Paysage</label> <label xml:lang="nl">Landschap</label> </content:Keywords> <content:Keywords rdf:ID="Baby"> <label xml:lang="en">Baby</label> <label xml:lang="fr">Bébé</label> <label xml:lang="nl">Baby</label> </content:Keywords> <content:Keywords rdf:ID="Architecture"> <label xml:lang="en">Architecture</label> <label xml:lang="fr">Architecture</label> <label xml:lang="nl">Architectuur</label> </content:Keywords> <content:Keywords rdf:ID="Wedding"> <label xml:lang="en">Wedding</label> <label xml:lang="fr">Mariage</label> <label xml:lang="nl">Trouwerij</label> </content:Keywords> <content:Keywords rdf:ID="Macro"> <label xml:lang="en">Macro</label> <label xml:lang="fr">Macro</label> <label xml:lang="nl">Macro</label> </content:Keywords> <content:Keywords rdf:ID="Graphic"> <label xml:lang="en">Graphic</label> <label xml:lang="fr">Graphique[?]</label> <label xml:lang="nl">Grafisch</label> </content:Keywords> <content:Keywords rdf:ID="Panorama"> <label xml:lang="en">Panorama</label> <label xml:lang="fr">Panorama</label> <label xml:lang="nl">Panorama</label> </content:Keywords> <content:Keywords rdf:ID="Animal"> <label xml:lang="en">Animal</label> <label xml:lang="fr">Animal</label> <label xml:lang="nl">Dier</label> </content:Keywords> </rdf:RDF>
Este es un ejemplo de los metadatos en formato RDF generados por rdfpic, y subsecuentemente servidos por Jigsaw.
<?xml version='1.0' encoding='ISO-8859-1'?> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:rdfs="http://www.w3.org/TR/1999/PR-rdf-schema-19990303#" xmlns:s0="http://www.w3.org/2000/PhotoRDF/dc-1-0#" xmlns:s1="http://www.w3.org/2000/PhotoRDF/technical-1-0#" xmlns:s2="http://sophia.inria.fr/~enerbonn/rdfpiclang#"> <rdf:Description rdf:about=""> <s0:creator>Bert Bos</s0:creator> <s0:relation>Marian in the Tarn</s0:relation> <s0:rights>Bert Bos</s0:rights> <s0:type>image</s0:type> <s0:identifier>990621</s0:identifier> <s0:coverage>Montredon-Labessonié (Tarn)</s0:coverage> <s0:date>1999-06-26</s0:date> <s1:camera>Canon Eos 5</s1:camera> <s2:xmllang>en</s2:xmllang> <s0:title>Marian with sheep</s0:title> <s0:subject>Landscape, Animal</s0:subject> <s0:publisher>Bert Bos</s0:publisher> <s0:description>Marian brings the sheep to the field in the morning. The lamb she carries was born that night.</s0:description> <s0:format>image/jpeg</s0:format> </rdf:Description> </rdf:RDF>