index.html
41.6 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Describing and retrieving photos using RDF and HTTP</title>
<style type="text/css">
.figure { margin: 1em 0}
.caption { font-style: italic; margin: 0.5em 1em }
.warning { text-decoration: underline}
.warning { color: #FF0000}
.warning { font-weight: bold}
.exclude { border: solid thin; padding: 0.5em }
BODY .exclude { color: #417F00}</style>
<link rel="stylesheet" type="text/css" href="http://www.w3.org/StyleSheets/TR/W3C-NOTE">
</head>
<body lang="en">
<div class="head">
<a href="http://www.w3.org/"><img height="48" width="72" alt="W3C" src="http://www.w3.org/Icons/w3c_home"></a>
<h1 id="describing">Describing and retrieving photos using RDF and HTTP</h1>
<h2 class="no-num no-toc" id="w3c-note">W3C Note 19 April 2002</h2>
<dl>
<dt>This version:</dt>
<dd><a href="http://www.w3.org/TR/2002/NOTE-photo-rdf-20020419">http://www.w3.org/TR/2002/NOTE-photo-rdf-20020419</a></dd>
<dt>Latest version:</dt>
<dd><a href="http://www.w3.org/TR/photo-rdf">http://www.w3.org/TR/photo-rdf</a></dd>
<dt>Previous version:</dt>
<dd><a href="http://www.w3.org/TR/2000/NOTE-photo-rdf-20000928/">http://www.w3.org/TR/2000/NOTE-photo-rdf-20000928</a></dd>
<dt>Authors:</dt>
<dd><a href="http://www.w3.org/People/Lafon">Yves Lafon</a>, <a href="http://www.w3.org/">W3C</a>, <a href="mailto:ylafon@w3.org">ylafon@w3.org</a><br>
<a href="http://www.w3.org/People/Bos">Bert Bos</a>, <a href="http://www.w3.org/">W3C</a>, <a href="mailto:bert@w3.org">bert@w3.org</a></dd>
</dl>
<p class="copyright"><a href="http://www.w3.org/Consortium/Legal/ipr-notice-20000612#Copyright">Copyright</a>
© 2002 <a href="http://www.w3.org/"><abbr title="World Wide Web Consortium">W3C</abbr></a><sup>®</sup> (<a href="http://www.lcs.mit.edu/"><abbr title="Massachusetts Institute of Technology">MIT</abbr></a>, <a href="http://www.inria.fr/"><acronym lang="fr" title="Institut National de Recherche en Informatique et Automatique">INRIA</acronym></a>,
<a href="http://www.keio.ac.jp/">Keio</a>), All Rights Reserved. W3C <a href="http://www.w3.org/Consortium/Legal/ipr-notice-20000612#Legal_Disclaimer">liability</a>,
<a href="http://www.w3.org/Consortium/Legal/ipr-notice-20000612#W3C_Trademarks">trademark</a>,
<a href="http://www.w3.org/Consortium/Legal/copyright-documents-19990405">document
use</a> and <a href="http://www.w3.org/Consortium/Legal/copyright-software-19980720">software
licensing</a> rules apply.</p>
<hr title="Separator for header">
</div>
<h2 class="no-num" id="abstract">Abstract</h2>
<p>This note describes a project for describing & retrieving (digitized)
photos with (RDF) metadata. It describes the RDF schemas, a data-entry
program for quickly entering metadata for large numbers of photos, a way to
serve the photos and the metadata over HTTP, and some suggestions for search
methods to retrieve photos based on their descriptions.</p>
<p>The data-entry program has been implemented in Java, a specific Jigsaw
frame has been done to retrieve the RDF from the image through HTTP. The RDF
schema uses the Dublin Core schema as well as additional schemas for
technical data.</p>
<p>We already have a demo site and there is sample source code available for
<a href="#dlsoft">download</a>.</p>
<p>The system can be useful for collections of holiday snapshots as well as
for more ambitious photo collections.</p>
<h2 class="no-num" id="status">Status of this document</h2>
<p>This document is a NOTE made available by the W3C for discussion only.
Publication of this Note by W3C indicates no endorsement by W3C or the W3C
Team, or any W3C Members. Please send comments to the authors.</p>
<p>We plan to update this note after some more experience has been gained
with the system and the schemas.</p>
<p>A list of current W3C technical reports and publications, including
Working Drafts and Notes, can be found at <a href="http://www.w3.org/TR/">http://www.w3.org/TR/</a>.</p>
<h2 class="no-num" id="table">Table of contents</h2>
<div>
<!--begin-toc-->
<ul class="toc">
<li><a href="#abstract">Abstract</a>
<li><a href="#status">Status of this document</a>
<li><a href="#table">Table of contents</a>
<li><a href="#goals"><span class="secno">1. </span>Goals of the project</a>
<li><a href="#overview"><span class="secno">2. </span>Overview of the system</a>
<li><a href="#the-data-entry"><span class="secno">3. </span>The data-entry program "rdfpic"</a>
<li><a href="#Jigsaw1"><span class="secno">4. </span>The Jigsaw extension</a>
<li><a href="#the-rdf"><span class="secno">5. </span>The RDF schemas</a>
<ul class="toc">
<li><a href="#the-dublin"><span class="secno">5.1. </span>The Dublin Core Schema</a>
<li><a href="#the-technical"><span class="secno">5.2. </span>The Technical Schema</a>
<li><a href="#the-content"><span class="secno">5.3. </span>The content schema</a>
</ul>
<li><a href="#suggestions"><span class="secno">6. </span>Suggestions for extensions</a>
<li><a href="#the-online"><span class="secno">7. </span>The online demo</a>
<li><a href="#downloading"><span class="secno">8. </span>Downloading the code</a>
<li><a href="#related"><span class="secno">9. </span>Related research and projects</a>
<li><a href="#acknowledgments"><span class="secno">10. </span>Acknowledgments</a>
<li><a href="#references"><span class="secno">11. </span>References</a>
<li><a href="#AppendixA">Appendix A: The RDF schemas</a>
<ul class="toc">
<li><a href="#the-modified">The (modified) Dublin Core schema</a>
<li><a href="#the-technical0">The technical schema</a>
<li><a href="#the-content0">The content schema</a>
</ul>
<li><a href="#AppendixB">Appendix B: example of metadata</a></ul>
<!--end-toc-->
</div>
<hr>
<h2 id="goals"><span class="secno">1. </span>Goals of the project</h2>
<p>The goals of the project are partially personal, partially to promote W3C
technology. The personal reasons are that we, the authors, have large numbers
of photos but always have difficulty finding the exact ones that we want to
show to somebody. Digitizing them and describing them in RDF should make it
quicker to find the ones we are looking for at any moment.</p>
<p>We also think that a concrete example of an RDF schema and a working
system around it can help explain the potential of metadata on the Web,
especially since traditional, text-based search engines as they are used for
HTML document will clearly not work for photos. Also, using metadata will
automatically provide a non-visual description of the photos, hence
contributing to accessibility.</p>
<p>The project, then, is to take the existing pieces of technology (RDF
<a href="#RDF" rel="biblioentry">[RDF]</a>, HTTP <a href="#HTTP" rel="biblioentry">[HTTP]</a> and Jigsaw <a href="#Jigsaw" rel="biblioentry">[Jigsaw]</a> from W3C; JPEG <a href="#JPEG" rel="biblioentry">[JPEG]</a>, Java
<a href="#Java" rel="biblioentry">[Java]</a> from elsewhere) and provide some glue between them to produce an
interesting as well as useful application.</p>
<h2 id="overview"><span class="secno">2. </span>Overview of the system</h2>
<div class="figure">
<p><img src="photordfsystem" alt="Diagram of data entry system"></p>
<p class="caption">Diagram of the parts of the photo-RDF system. Top left:
the pictures are digitized and stored as JPEG images. Bottom left: metadata
is written into the pictures with the data-entry program (and can also be
edited if corrections are necessary). Right: requests from the Web are served
by Jigsaw, by sending either the picture or the metadata, depending on the
form of the request.</p>
</div>
<p>The system comprises the following, largely independent, pieces:</p>
<ol>
<li>Scanning the photos and storing them in JPEG format. We scan from
negatives, for best quality, but any process that yields JPEG could be
used, including digital cameras. We will not deal with this part
below.</li>
<li>A data-entry program that allows easy entry/editing of the metadata for
each photo and stores the data in RDF form inside the JPEG file. This
program is described below.</li>
<li>A module for the Jigsaw server that can serve either the JPEG image
data or the RDF description that is stored in it, using HTTP content
negotiation to determine which of the two a client wants. Described
below.</li>
</ol>
<p>Some digital cameras are already producing information about the picture,
which may be read and reformatted in RDF by scripts. We will not deal with
that in this version of the metadata editor.</p>
<p>The RDF data is expressed in three separate schemas, one of which is the
Dublin Core schema. The other two deal with technical data of the photo and
with subject categories. The reason for using three schemas is solely to
allow each of them to be used in other projects; to the users of the
data-entry program the actual RDF is completely hidden.</p>
<h2 id="the-data-entry"><span class="secno">3. </span>The data-entry program "rdfpic"</h2>
<div class="figure">
<p><a href="screendump-tech-2-1.png"><img src="screendump-tech-2-1-small" alt="Screendump of the metadata edit"></a></p>
<p style="font-style: italic" class="caption">Screen dump of
<strong>rdfpic</strong>, the metadata editor, showing the screen to enter
technical data. (The screen dump has been reduced by 50%)</p>
</div>
<p>The data-entry program is very simple. It has been designed to enable
quick entry of metadata for lots of photos, under the assumption that the
photos will usually be from one or a few series. Most fields therefore show
by default the value that was entered for the previous photo, and give quick
access to the values entered for the last few photos. Typically, only very
few fields will have to be changed from one photo to the next and the amount
of typing will be minimized.</p>
<p>The program is written in Java, but the user interface is in fact
generated at run-time directly from a machine-readable version of the schemas
(currently not the RDF syntax, but a transformation of it, with equivalent
information). This means that the program does not need to be changed when we
change the RDF schemas.</p>
<p>The RDF data is stored in the JPEG file in comment blocks (blocks of type
"COM", as defined by ISO DIS 10918-1). According to the JPEG standard, a
comment block can contain arbitrary text. There is no way to assign a type to
the text. We simply rely on the fact that RDF can easily be distinguished
from plain text by heuristics. JPEG limits each comment block to 64K, but
there can be as many blocks as necessary, so arbitrary amounts of text can be
added. In practice, the descriptions generated by the rdfpic program are
typically only a few hundred bytes long.</p>
<h2 id="Jigsaw1"><span class="secno">4. </span>The Jigsaw extension</h2>
<p>To serve either the RDF version or the complete image using existing
browsers and tools, the best way was to use Content Negotiation. Of course,
that doesn't exclude the use of other techniques, such as HTTP extensions, to
be able to retrieve and store metadata in a better way.</p>
<p>Using Content Negotiation has two benefits: it will work right away with
all text-based browsers (lynx, emacs with emacsspeak, etc.) and the output
can be rendered directly by selecting, e.g., the title or the description
from the RDF. Also, an RDF crawler will be able to get all the descriptions
of a collection of photos to create a knowledge database, just by asking for
the right MIME type.</p>
<p>In Jigsaw <a href="#Jigsaw" rel="biblioentry">[Jigsaw]</a>, a frame has been created, to simulate two different
resources under the same URI, the one of the image itself. Those two
resources have their own set of HTTP values, such as ETags, Content-Length
and others and the result is sent out using the classic Content Negotiation
of HTTP.</p>
<p>The RDF can be also be fetched directly without doing Content Negotiation,
by just adding the wanted MIME type after a semicoln (;) e.g.:
foo.jpg;application%2Frdf+xml ("%2F" is "/", escaped for occurrence in a
URL.)</p>
<p>Note that it is also possible to modify the RDF description using the PUT
method, provided the ETag of the description is in the HTTP header of the
request.</p>
<h2 id="the-rdf"><span class="secno">5. </span>The RDF schemas</h2>
<p>The metadata is separated into three different schemas:</p>
<ol>
<li><em>Dublin Core schema.</em> The Dublin Core <a href="#DC" rel="biblioentry">[DC]</a> schema is a general
schema for identifying original works, typically books and articles, but
also films, paintings or photos. It contains such properties as creator,
editor, title, date of publishing and publisher. It is being developed by
the Dublin Core Metadata Initiative and the version we use is the
RDF-format of version 1.1.</li>
<li><em>Technical schema.</em> This schema captures technical data about
the photo and the camera, such as the type of camera, the type of film,
the date the film was developed and the scanner and software used for
digitizing.</li>
<li><em>Content schema.</em> This schema is used to categorize the subject
of the photo by means of a controlled vocabulary. This schema allows
photos to be retrieved based on such characteristics as portrait, group
portrait, landscape, architecture, sport, animals, etc.</li>
</ol>
<p>All the properties are optional. The more properties are given values, the
better the photo will be described and the easier it will be to find it, but
leaving properties undefined doesn't make the metadata invalid.</p>
<p>There are no dependencies between the properties: each property can be
given a value independent of whether any other property has a value. The
values are also independent, except for restrictions of common sense: a photo
cannot have been taken after the date on which the film was developed...</p>
<h3 id="the-dublin"><span class="secno">5.1. </span>The Dublin Core Schema</h3>
<p>We don't use all properties defined by the Dublin Core (that is to say:
the others can be added, but are ignored by our metadata editor). Here is an
interpretation of the Dublin Core properties, applied to photo material. A
machine-readable schema is included in <a href="#AppendixB">appendix B</a>.
In parentheses the label that is shown in the user interface of rdfpic, if it
is different from the property name.</p>
<dl>
<dt>title</dt>
<dd>a short description of the photo. Example: <em>Marian climbs on the
"elephant"</em></dd>
<dt>subject</dt>
<dd>a set of keywords to describe the photo. See the <a href="#content">content schema</a> below for the list of keywords.
Example: <em>portrait, landscape</em></dd>
<dt>description</dt>
<dd>a longer description of the photo. Example: <em>Marian attempts to
climb on the granite rock that is nicknamed "the elephant"</em></dd>
<dt>creator ("author/creator")</dt>
<dd>the photographer, as a URL that can be further described with other
schemas. Example: <em>http://www.example.org/People/Bos</em></dd>
<dt>publisher</dt>
<dd>the person or institution making the photo available, often the same
as the creator. Example: <em>http://www.example.org/People/Bos</em></dd>
<dt>contributor</dt>
<dd>a person who contributed in some way, e.g., the person who digitized
the photo; may be a URL or a name.</dd>
<dt id="date">date</dt>
<dd>the date and time the photo was taken, conforming to ISO format
<a href="#ISOdate" rel="biblioentry">[ISOdate]</a>. The year is required, everything else can be omitted:
yyyy[-mm[-dd[Thh:mm[:ss[.sTZD]]]]]. The default time zone is UTC.
Example: <em>1999-10-01</em></dd>
<dt>type</dt>
<dd>always "image" (see the Dublin Core's <a href="http://dublincore.org/documents/2000/07/11/dcmi-type-vocabulary/">List
of Resource Types</a>)</dd>
<dt>format</dt>
<dd>always "image/jpeg"</dd>
<dt>identifier ("number")</dt>
<dd>a number for the photo that is meaningful to the publisher. This is
not the URL of the photo and it does not have to be globally unique.
Example: <em>312</em></dd>
<dt>source</dt>
<dd>not used.</dd>
<dt>language</dt>
<dd>not used.</dd>
<dt>relation</dt>
<dd>identifies a series: the event or topic for a series of photographs.
Can be a URL or a string. Example: <em>Marian in Le Sidobre.</em></dd>
<dt>coverage ("location")</dt>
<dd>the location shown on the photo. (Note that we only use the "spatial
coverage," not the "temporal coverage," since we assume that a photo is
instantaneous and thus the date field is enough.). Example: <em>Le
Sidobre (Tarn)</em></dd>
<dt>rights</dt>
<dd>copyright statement, or the URL for one. Example:
<em>http://www.example.org/People/Lafon/Copyright?1998</em></dd>
</dl>
<h3 id="the-technical"><span class="secno">5.2. </span>The Technical Schema</h3>
<p>The <em>technical schema</em> is defined by this RDF schema (for the
formal definition, see <a href="#AppendixB">appendix B)</a>:</p>
<dl>
<dt>camera</dt>
<dd>the brand and type of the camera, or a URL for the camera. If the
latter, the URL identifies one actual camera, not all cameras of that
type. Example:
<em>http://www.example.org/People/Lafon/FooCamera8000i</em></dd>
<dt>film</dt>
<dd>the brand and type of film. In contrast to the camera property, this
is not an individual roll of film, but identifies all films of the same
type. (We assume films of the same type are sufficiently similar;
except for fabrication errors, they are interchangeable.) The value may
be a string or a URL that is further described elsewhere. As a
convention, digital cameras should be considered as "digital" film.
Example: <em>Ilfoo HP5</em></dd>
<dt>lens</dt>
<dd>a definition of the lens used, maybe a URI describing it, a URI
pointing to the camera for compact cameras, or just plain text
description. Example: <em>FooLens AF:70-210</em></dd>
<dt>devel-date</dt>
<dd>date on which the film was developed. The date must be in the same
form as the <a href="#date">date</a> property. Example:
<em>1998-08-04</em></dd>
</dl>
<h3 id="the-content"><span class="secno">5.3. </span>The content schema</h3>
<p>The <a name="content"><em>content schema</em></a> contains the keywords we
use in the "subject" property of the Dublin Core schema. That property should
contain as many of the following keywords as are applicable. The keywords
have the following meaning:</p>
<dl>
<dt>Portrait</dt>
<dd>The photo contains a portrait of one person.</dd>
<dt>Group-portrait</dt>
<dd>The photo contains a portrait of a group of people.</dd>
<dt>Landscape</dt>
<dd>The photo contains a landscape or skyline.</dd>
<dt>Baby</dt>
<dd>The photo contains a baby.</dd>
<dt>Architecture</dt>
<dd>The photo contains interesting buildings.</dd>
<dt>Wedding</dt>
<dd>The photo contains scenes from a wedding.</dd>
<dt>Macro</dt>
<dd>The photo contains an extreme close-up and would, when viewed under
normal circumstances, be larger than life-size.</dd>
<dt>Graphic</dt>
<dd>The photo contains a pattern, texture or design, that is interesting
for its abstract, graphic quality.</dd>
<dt>Panorama</dt>
<dd>The photo contains a wide-angle view of a landscape or skyline.</dd>
<dt>Animal</dt>
<dd>The photo contains an animal.</dd>
</dl>
<h2 id="suggestions"><span class="secno">6. </span>Suggestions for extensions</h2>
<p>Here are some ideas for extensions to the system that we are still
studying. In no particular order:</p>
<ul>
<li>Some digital cameras already include technical data that is similar to
our technical schema in the pictures they produce. A simple script could
convert that data to RDF.</li>
<li>Another Jigsaw extension could automatically generate HTML pages with
thumbnails and descriptions.</li>
<li>Our system currently doesn't include a search engine. A client (or
proxy) that collects RDF of photos on the Web into a database and allows
queries over it could be a follow-on project.</li>
<li>A very limited search system could be provided by the server itself: a
query to the parent resource of a set of photos (i.e., the URL minus the
last path segment) could be handled by a server module that searches in
the set of photos.</li>
<li>Our current list of keywords to describe the contents of a photo is
very limited. There exist categorization systems that are much more
extensive. We are looking for something in between: fairly descriptive,
but still easy to use.</li>
<li>There could be an additional schema for further describing portrait and
group photos, that would allow listing the people in the picture. Similar
topic-specific schemas could exist for other kinds of photos.</li>
<li>Sometimes a detail of a photo is interesting as a picture on its own.
There could be a system to address a region of a photo and attach
metadata to it.</li>
<li>The rdfpic program could support the Adobe XMP format <a href="#XMP" rel="biblioentry">[XMP]</a>.</li>
<li>The rdfpic editor should read & write metadata using HTTP GET &
PUT in addition to read & write from the local file system. The <a href="#Jigsaw1">Jigsaw extension</a> in fact already supports that.</li>
</ul>
<h2 id="the-online"><span class="secno">7. </span>The online demo</h2>
<p>A sample server has been set up, and <a href="http://jigsaw.w3.org/Yves/Australia/1998/04/">some pictures</a> are
available. Any request to text version of those pictures will give you the
RDF description of the picture. I.e., an HTTP request for MIME type
<code>image/jpeg</code> or <code>image/*</code> returns the photo, a request
for <code>application/rdf+xml</code> or <code>application/*</code> returns
the metadata. Or you can just view the metadata by adding
";application%2Frdf+xml" at the end of the pictures URI. Note that the index
page has been created by a script using the RDF embedded in the pictures for
the captions and alt text.</p>
<p>We plan to steadily increase the number of photos that are online.</p>
<h2 id="downloading"><span class="secno">8. </span><a name="dlsoft"></a>Downloading the code</h2>
<p>The Jigsaw extension and the JPEG related classes are a available in the
<a href="/Jigsaw/">Jigsaw</a> 2.0.4 distribution, the metadata editor <em><a href="http://jigsaw.w3.org/rdfpic/">rdfpic</a></em> is available from the <a href="http://jigsaw.w3.org/">Jigsaw demo site</a>.</p>
<h2 id="related"><span class="secno">9. </span>Related research and projects</h2>
<p>An apparently very similar system to ours was developed by Jane Hunter and
Zhimin Zhan <a href="#HunterZhan" rel="biblioentry">[HunterZhan]</a>, but for the PNG image format and with PNG's
built-in keyword/value format rather than RDF to express the metadata,
although they use RDF to specify the metadata schemas.</p>
<p>The <a href="http://www.iptc.org/">IPTC</a> has a list of keywords for
describing photo-journalistic images. <a href="http://www.adobe.com/">Adobe</a> Photoshop supports a subset of
them.</p>
<p>The proposed DIG2000 <a href="#DIG2000" rel="biblioentry">[DIG2000]</a> file format for the JPEG2000 <a href="#JPEG2000" rel="biblioentry">[JPEG2000]</a>
image compression algorithm contains an XML-based metadata block with entries
for people, places, events, GPS location, camera type, etc. It allows
extensions with additional entries. The draft of October 1998 doesn't use
RDF.</p>
<p>Since we first published this note and released the rdfpic program (in
March 2000), Adobe has developed a similar technology, called "Extensible
Metadata Platform" <a href="#XMP" rel="biblioentry">[XMP]</a>. XMP was first published around September 2001. It
stores the RDF in the APP1 chunk of JPEG, rather than the COM (comment) chunk
and it adds a magic string ("W5M0MpCehiHzreSzNTczkc9d") at the start of the
RDF to help distinguish XMP from other things that might be present in the
JPEG file. XMP embedding is also defined for other formats than JPEG, such as
TIFF and PDF. Like us, Adobe recommends the Dublin Core schema and offers
additional schemas for recording version history, image manipulations,
etc.</p>
<h2 id="acknowledgments"><span class="secno">10. </span>Acknowledgments</h2>
<p>The first version of the rdfpic metadata editor has been written by <a href="http://koala.ilog.fr/thierry/">Thierry Kormann</a> (formerly of <a href="http://www.bull.fr/">Bull</a>, France). The second version is the work
of Eamon Nerbonne. <a href="http://koala.ilog.fr/colas/">Colas Nahaboo</a>
(also formerly of <a href="http://www.bull.fr/">Bull</a>) has given valuable
advise.</p>
<p>Janne Saarela (of Pro-Solution, now <a href="http://www.profium.com/">Profium</a>, Finland) has written the original
RDF schema from which the current schemas descend and has helped with
checking and reviewing the schemas. His program <a href="http://www.w3.org/RDF/Validator/">SiRPAC</a> has been a great help in
checking and visualizing the schemas as well as the actual metadata generated
by the metadata editor.</p>
<h2 id="references"><span class="secno">11. </span>References</h2>
<!-- Sorted by label -->
<dl>
<!---->
<dt id="DC">[DC]</dt>
<dd>Dublin Core metadata initiative. <cite>Dublin Core metadata element set, version 1.1.</cite> July 1999.
Dublin Core recommendation. URL: <a href="http://dublincore.org/documents/1999/07/02/dces/">http://dublincore.org/documents/1999/07/02/dces/</a>
</dd>
<!---->
<dt id="DIG2000">[DIG2000]</dt>
<dd>Digital Imaging Group. <cite>DIG2000 file format proposal.</cite> Oct 1998.
Report (draft) ISO/IEC JTC1/SG29/WG1 N1017. URL: <a href="http://www.i3a.org/pdf/wg1n1017.pdf">http://www.i3a.org/pdf/wg1n1017.pdf</a>
</dd>
<!---->
<dt id="HTTP">[HTTP]</dt>
<dd>Fielding, Roy,; et. al. <cite>Hypertext Transfer Protocol - HTTP/1.1.</cite> June 1999.
Internet RFC 2616. URL: <a href="ftp://ftp.isi.edu/in-notes/rfc2616.txt">ftp://ftp.isi.edu/in-notes/rfc2616.txt</a>
</dd>
<!---->
<dt id="HunterZhan">[HunterZhan]</dt>
<dd>Hunter, Jane; Zhan, Zhimin. "An Indexing and Querying System for Online Images Based on the PNG Format and Embedded Metadata" in: <cite>ARLIS/ANZ Conference.</cite> Sep 1999.
Brisbane, Australia. URL: <a href="http://archive.dstc.edu.au/RDU/staff/jane-hunter/PNG/paper.html">http://archive.dstc.edu.au/RDU/staff/jane-hunter/PNG/paper.html</a>
</dd>
<!---->
<dt id="ISOdate">[ISOdate]</dt>
<dd>Wolf, Misha; Wicksteed, Charles. <cite>Date and time formats.</cite> Sep 1997.
Submission to W3C. URL: <a href="http://www.w3.org/TR/1998/NOTE-datetime-19980827">http://www.w3.org/TR/1998/NOTE-datetime-19980827</a>
</dd>
<!---->
<dt id="JPEG">[JPEG]</dt>
<dd>Hamilton, Eric. <cite>JPEG File Interchange Format.</cite> C-Cube Microsystems. Sep 1992.
Milpitas, CA, USA. URL: <a href="http://www.w3.org/Graphics/JPEG/jfif3.pdf">http://www.w3.org/Graphics/JPEG/jfif3.pdf</a>
</dd>
<!---->
<dt id="JPEG2000">[JPEG2000]</dt>
<dd>Joint Photographers Expert Group (JPEG). <cite>Jpeg 2000 image coding system.</cite> 9 Dec 1999.
Report (final committee draft) ISO/IEC CD15444-1:1999. URL: <a href="http://www.jpeg.org/fcd15444-1.zip">http://www.jpeg.org/fcd15444-1.zip</a>
</dd>
<!---->
<dt id="Java">[Java]</dt>
<dd>Gosling, James; Joy, Bill; Steele, Guy. <cite>The Java language specification.</cite> Addison-Wesley. 1998.
URL: <a href="http://java.sun.com/docs/books/jls/index.html">http://java.sun.com/docs/books/jls/index.html</a>
</dd>
<!---->
<dt id="Jigsaw">[Jigsaw]</dt>
<dd>Jigsaw Team (Yves Lafon & Benoit Mahe). <cite>Jigsaw 2.0 internal design.</cite> July 1999.
URL: <a href="http://www.w3.org/Jigsaw/Doc/Programmer/design.html">http://www.w3.org/Jigsaw/Doc/Programmer/design.html</a>
</dd>
<!---->
<dt id="RDF">[RDF]</dt>
<dd>Lassila, Ora; Swick, Ralph R. (eds). <cite>Resource Description Framework (RDF) model and syntax specification.</cite> Feb 1999.
W3C Recommendation. URL: <a href="http://www.w3.org/TR/1999/REC-rdf-syntax-19990222/">http://www.w3.org/TR/1999/REC-rdf-syntax-19990222/</a>
</dd>
<!---->
<dt id="Schema">[Schema]</dt>
<dd>Brickley, Dan; Guha, R. V.. <cite>Resource Description Framework (RDF) Schema Specification.</cite> 1999.
W3C working draft. URL: <a href="http://www.w3.org/TR/1999/PR-rdf-schema-19990303/">http://www.w3.org/TR/1999/PR-rdf-schema-19990303/</a>
</dd>
<!---->
<dt id="XMP">[XMP]</dt>
<dd>Adobe Systems Incorporated. <cite>eXtensible Metadata Platform (XMP).</cite> 2002.
URL: <a href="http://www.adobe.com/products/xmp/main.html">http://www.adobe.com/products/xmp/main.html</a>
</dd>
<!---->
</dl>
<!--
<h2 class="no-num">Appendix A: the KUIL description</h2>
<p>[...]</p>
<p>The KUIL description.</p>
<p>The XSL transformation to generate KUIL from the RDF schemas.</p>
-->
<h2 id="AppendixA" class="no-num">Appendix A: The RDF schemas</h2>
<p>The three schemas below (Dublin Core, technical and content) are
machine-readable schemas in the syntax proposed by the RDF schemas draft
<a href="#Schema" rel="biblioentry">[Schema]</a>.</p>
<h3 class="no-num" id="the-modified">The (modified) Dublin Core schema</h3>
<p>The schema below is a minimal RDF schema for the Dublin Core. The name of
the schema is <code>http://www.w3.org/2000/PhotoRDF/dc-1-0</code>, but as the
schema shows, each property is in fact a restriction of the DC property of
the same name, as found in <code>http://purl.org/dc/elements/1.1/</code> The
French translations of the labels are based on <a href="http://www-rocq.inria.fr/~vercoust/METADATA/DC-fr.1.1.html">those by
Anne-Marie Vercoustre</a>.</p>
<pre id="Technical2" class="no-num"><!--begin-include "dc.html"--><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" />
<!-- always "image in 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>
<!--end-include-->
</pre>
<h3 class="no-num" id="the-technical0">The technical schema</h3>
<p>See <a href="#Technical2">the description above</a> for detailed
explanations of each of the properties. The name of this schema is
<code>http://www.w3.org/2000/PhotoRDF/technical-1-0#</code></p>
<pre><!--begin-include "tech.html"--><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>
<!-- [more?] -->
</rdf:RDF>
<!--end-include-->
</pre>
<h3 class="no-num" id="the-content0">The content schema</h3>
<p>We left out the human-readable comments; see <a href="#content">the
descriptions of the keywords</a> above. The name of this schema is:
<code>http://www.w3.org/2000/PhotoRDF/content-1-0#</code></p>
<pre><!--begin-include "content.html"--><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="">
<!-- "" is the same as "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>
<!--end-include-->
</pre>
<h2 id="AppendixB" class="no-num">Appendix B: example of metadata</h2>
<p>This is an example of the metadata in RDF format that is generated by
rdfpic, and subsequently served by Jigsaw.</p>
<pre><!--begin-include "sample.html"--><?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><!--end-include-->
</pre>
</body>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-declaration:"~/SGML/HTML4.decl"
sgml-default-doctype-name:"html"
sgml-minimize-attributes:t
sgml-nofill-elements:("pre" "style" "br")
sgml-live-element-indicator:t
End:
-->
</html>