An XML Encoding of Simple Dublin Core™ Metadata

Title:

An XML Encoding of Simple Dublin Core™ Metadata

Creator: Dave Beckett
Creator: Eric Miller
Creator: Dan Brickley
Date Issued: 2000-12-01
Identifier: http://dublincore.org/specifications/dublin-core/dcmes-xml/2000-12-01/
Replaces: http://dublincore.org/specifications/dublin-core/dcmes-xml/2000-07-14/
Is Replaced By: Not Applicable
Latest version: http://dublincore.org/specifications/dublin-core/dcmes-xml/
Status of document: This is a Dublin Core™ Metadata Initiative Proposed Recommendation.
Description of document: The Dublin Core™ Metadata Element Set V1.1 (DCMES) can be represented in many syntax formats. This document explains how to encode the DCMES in XML, provides a DTD to validate the documents and describes a method to link them from web pages.

1. Introduction and Goals

The Dublin Core™ Metadata Element Set V1.1 (DCMES) [DCMES] can be represented in many syntax formats. This document gives an encoding for the DCMES in XML[XML-SPEC], provides a DTD to validate the documents and describes a method to link them from web pages.

This document describes an encoding for the DCMES in XML subject to these restrictions:

  • The Dublin Core™ elements described in the DCMES V1.1 reference can be used
  • No other elements can be used
  • No element qualifiers can be used
  • The resulting XML cannot be embedded in web pages

The primary goal for this document is to provide a simple encoding, where there are no extra elements, qualifiers, optional or varying parts allowed. This allows the resulting data to be validated against a DTD and guaranteed usable by XML parsers. A secondary goal was to make the encoding also be valid RDF[RDFMS] which allows the document to be manipulated using the RDF model. We have tried to limit the RDF constructs to the minimum, and the result is a mostly standard header and footer for every document.

We acknowledge that there will be further documents describing other encodings for DC without these restrictions however this one is for the simplest possible form. One result of the restrictions is that the encoding does not create documents that can be embedded in HTML pages. Please refer to other Dublin Core™ documents that can describe how to do that.

This document is based on previous work such as [EM-DTD], [BATHP], [CIMI-XML-TB] and [CIMI-DC-DTD].

2. An Encoding of Dublin Core™ in XML

This section describes step by step, this method of how to create a document for the DCMES in XML.

2.1. XML declaration

Any well-formed XML document should include a statement of the version of XML used (and content encoding). At present, the only valid version of XML, as defined in the W3C Recommendation, is 1.0. It is therefore strongly recommended to include the statement

<?xml version="1.0"?>

on the first line.

2.2. Referencing the XML DTD

<!DOCTYPE rdf:RDF SYSTEM "http://dublincore.org/specifications/dublin-core/dcmes-xml/2000-12-01/dcmes-xml-dtd.dtd">

2.3. Declaring the use of RDF

It is necessary to declare that RDF[RDFMS] is being used, as this makes it easier for programs to interpret the meaning of the document. This is done by including

<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
         xmlns:dc="http://purl.org/dc/elements/1.1/">
as the next line in the document, following the XML DTD reference.

2.4. Describing the resources

For each resource described by Dublin Core™ elements, they must be enclosed in a container element - a pair of rdf:Description tags - with one container for each resource. Resources may have no, one or several identifiers and these can be URIs. If a resource has at least one URI, the most appropriate one should be used in the about attribute of the rdf:Description element like this:

<rdf:Description about="http://..../">
...
</rdf:Description>
(see below for what to do about other _Identifier_ elements)

Inside the rdf:Description container, put each of the Dublin Core™ elements with the dc: namespace prefix before them, so for example the Title element becomes dc:title (all lowercase) and used inside the rdf:Description container like this:

<rdf:Description about="http://..../">
  <dc:title>My Home Page</dc:title>
</rdf:Description>

This can be repeated for all other DCMES elements that are needed with the standard Dublin Core™ guidelines - all elements are repeatable and optional. Note that there is no requirement on applications consuming this document to preserve the order of elements in the container and therefore you should not expect this to be preserved.

If the value of the Dublin Core™ element is not plain text, but another resource with a URI, that should be recorded using the rdf:resource attribute on the element. The element must have no content which is done by starting and closing the element at the same time like this:

<rdf:Description about="http://..../">
  <dc:subject rdf:resource="http://.../"/>
</rdf:Description>

There may be more than one Identifier element for the resource containing URIs or other identifiers. If a URI identifier is available and appropriate to use, it should be made the value of the about attribute of the rdf:Description element as described above. The remaining values of the Identifier elements should be encoded in the same manner as the other elements. Here is a fragment of a description of a book which has a non-URI identifier:

<rdf:Description>
  <dc:title>Internet Ethics</dc:title>
  <dc:creator>Duncan Langford</dc:creator>
  <dc:format>Book</dc:format>
  <dc:identifier>ISBN 0333776267</dc:identifier>
</rdf:Description>

It may be that there is no identifier for the resource, in which case neither of the above methods should be used and both the about attribute and Identifier element left out. This is used something like this:

<rdf:Description>
  <dc:title>The Mona Lisa</dc:title>
  <dc:description>A painting by ...</dc:description>
</rdf:Description>

2.5. Language and character encoding

XML provides an xml:lang attribute that can be used on any element. This provides a way to describe the language used for the content of the element. The DCMES provides a Language element which is used to describe the language of the resource.

The values of the elements and attributes will need to be encoded using the rules of XML when there are special characters in the value. The special characters that need to be encoded, and when they need to be are summarised here for reference:

        <th>XML Encoding</th>

        <th>Required in</th>
      </tr>

      <tr>
        <td>&amp;</td>

        <td>&amp;amp;</td>

        <td>Element and attribute values</td>
      </tr>

      <tr>
        <td>&lt;</td>

        <td>&amp;lt;</td>

        <td>Element and attribute values</td>
      </tr>

      <tr>
        <td>&gt;</td>

        <td>&amp;gt;</td>

        <td>Element and attribute values</td>
      </tr>

      <tr>
        <td>' (apostrophe / single quote)</td>

        <td>&amp;apos;</td>

        <td>Attribute values</td>
      </tr>

      <tr>
        <td>" (double quote)</td>

        <td>&amp;quot;</td>

        <td>Attribute values</td>
      </tr>
    </tbody>
  </table>

</center>

Note that the ' and " only need to be used for those character inside attribute values, which are only needed for the rdf:resource attribute (see Section 2.4) and the xml:lang attribute (see Section 2.5).

All other characters outside the core US-ASCII range of 32-126 should not be encoded with the HTML entities such as é since these are not defined in XML. Numeric entities for the characters should be used which are written as &#ddd; in decimal or ઼ in hexadecimal. Alternatively they can be encoded as Unicode in one of the formats such as UTF-8 which is widely supported.

2.6. Finishing off the document

The final thing that needs to be done is to close the rdf:RDF element opened at the top of the document by adding the following line:

</rdf:RDF>

3. Examples

Plain text
      <tr>
        <td>
<?xml version="1.0"?>
<!DOCTYPE rdf:RDF SYSTEM "http://dublincore.org/2000/12/01-dcmes-xml-dtd.dtd">
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
         xmlns:dc="http://purl.org/dc/elements/1.1/">
  <rdf:Description rdf:about="http://www.ilrt.bristol.ac.uk/people/cmdjb/">
    <dc:title>Dave Beckett's Home Page</dc:title>
    <dc:creator>Dave Beckett</dc:creator>
    <dc:publisher>ILRT, University of Bristol</dc:publisher>
    <dc:date>2000-06-06</dc:date>
  </rdf:Description>
</rdf:RDF>

        </td>
      </tr>
    </tbody>
  </table>

</center><center>
  <table summary="A table showing examples." align="center" bgcolor="#ffffff" border="1" cellpadding="10">
    <tbody>
      <tr>
        <td align="center"><a id="example2" name="example2"><strong>Example 2</strong></a></td>
      </tr>

      <tr>
        <td>
<?xml version="1.0"?>
<!DOCTYPE rdf:RDF SYSTEM "http://dublincore.org/2000/12/01-dcmes-xml-dtd.dtd">
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
         xmlns:dc ="http://purl.org/dc/elements/1.1/">
 <rdf:Description rdf:about="http://dublincore.org/">
   <dc:title>Dublin Core™ Metadata Initiative - Home Page</dc:title>
   <dc:description>The Dublin Core™ Metadata Initiative Web site.</dc:description>
   <dc:date>1998-10-10</dc:date>
   <dc:format>text/html</dc:format>
   <dc:language>en</dc:language>
   <dc:contributor>The Dublin Core™ Metadata Initiative</dc:contributor>
   <!-- My guess at the French for the above Dave -->
   <dc:contributor xml:lang="fr">L'Initiative de métadonnées du Dublin Core</dc:contributor>
   <dc:contributor xml:lang="de">der Dublin-Core Metadata-Diskussionen</dc:contributor>
 </rdf:Description>
</rdf:RDF>

        </td>
      </tr>
    </tbody>
  </table>

</center>

4. Linking to Dublin Core™ metadata in XML from HTML

Dublin Core™ encoded in the method described here can be refered to from an HTML document and associated with it by means of the HTML element. The recommended relation type for this purpose is REL="meta", used like this:

      <LINK REL="meta" HREF="mydoc.dcxml">
where mydoc.dcxml is the URI of the XML document being refered to.

5. Validating the XML with the DTD

The DTD and example documents have to be validated with an XML parser that can handle URIs for the DTDs. Unfortunately, this isn't very widely supported at present. One online validator that seems to handle this is the service at http://www.stg.brown.edu/service/xmlvalid/

All validating XML parsers support using local files for DTDs in the SYSTEM parameter. This can be used to validate with the DTD by saving it from the URL given in section 2.2 to a local file and amending the DC/XML documents to have, for example:
<!DOCTYPE rdf:RDF SYSTEM "dcmes-xml.dtd">
at the start and then validating with the XML parser. However DO NOT publish documents with this local URL!

The examples in this document have been validated (using the trick described in the previous paragraph) with James Clarks' SP validating SGML parser V1.3.4 used with XML encoding and XML catalog (xml.soc) as described in his XML support page.

The configuration used on unix was as follows:

SGML_CATALOG_FILES=/usr/local/lib/sgml/xml.soc nsgmls -wxml document.dcxml

Appendix A - DTD for Dublin Core™ Metadata Element Set 1.1 in XML

The URI for this DTD is http://dublincore.org/specifications/dublin-core/dcmes-xml/2000-12-01/dcmes-xml-dtd.dtd

<!--

  XML DTD 2000-12-01 for Dublin Core™ Metadata Element Set version 1.1
  http://dublincore.org/specifications/dublin-core/2000/11/dcmes-xml/dcmes-xml-dtd.dtd

  See 
    An XML Encoding of Simple Dublin Core™ Metadata - 2000-12-01
    http://dublincore.org/specifications/dublin-core/2000/11/dcmes-xml/

  Authors:
    Dave Beckett <[email protected]>
    Eric Miller <[email protected]>
    Dan Brickley <[email protected]>

  Based on
    Dublin Core™ Metadata Element Set, Version 1.1: Reference Description
    http://dublincore.org/specifications/dublin-core/rec/dces-19990702.shtml

-->

<!-- The namespaces for RDF and DCMES 1.1 respectively -->
<!ENTITY rdfns 'http://www.w3.org/1999/02/22-rdf-syntax-ns#' >
<!ENTITY dcns 'http://purl.org/dc/elements/1.1/' >

<!-- Declare convenience entities for XML namespace declarations -->
<!ENTITY % rdfnsdecl 'xmlns:rdf CDATA # fixed "&rdfns;"' >
<!ENTITY % dcnsdecl 'xmlns:dc CDATA # fixed "&dcns;"' >

<!-- The wrapper element -->
<!ELEMENT rdf:RDF (rdf:Description)* >

<!ATTLIST rdf:RDF %rdfnsdecl; %dcnsdecl; >

<!ENTITY % dcmes "dc:title | dc:creator | dc:subject | dc:description |
dc:publisher | dc:contributor | dc:date | dc:type | dc:format |
dc:identifier | dc:source | dc:language | dc:relation | dc:coverage |
dc:rights" >

<!-- The resource description container element -->
<!ELEMENT rdf:Description (%dcmes;)* >

<!ATTLIST rdf:Description rdf:about CDATA #IMPLIED>

<!-- The elements from DCMES 1.1 -->

<!-- The name given to the resource. -->
<!ELEMENT dc:title (#PCDATA)>
<!ATTLIST dc:title xml:lang CDATA #IMPLIED>

<!-- An entity primarily responsible for making the content of the
resource. -->
<!ELEMENT dc:creator (#PCDATA)>
<!ATTLIST dc:creator xml:lang CDATA #IMPLIED>

<!-- The topic of the content of the resource. -->
<!ELEMENT dc:subject (#PCDATA)>
<!ATTLIST dc:subject xml:lang CDATA #IMPLIED>

<!-- An account of the content of the resource. -->
<!ELEMENT dc:description (#PCDATA)>
<!ATTLIST dc:description xml:lang CDATA #IMPLIED>

<!-- The entity responsible for making the resource available. -->
<!ELEMENT dc:publisher (#PCDATA)>
<!ATTLIST dc:publisher xml:lang CDATA #IMPLIED>

<!-- An entity responsible for making contributions to the content of
the resource. -->
<!ELEMENT dc:contributor (#PCDATA)>
<!ATTLIST dc:contributor xml:lang CDATA #IMPLIED>

<!-- A date associated with an event in the life cycle of the resource. -->
<!ELEMENT dc:date (#PCDATA)>
<!ATTLIST dc:date xml:lang CDATA #IMPLIED>

<!-- The nature or genre of the content of the resource. -->
<!ELEMENT dc:type (#PCDATA)>
<!ATTLIST dc:type xml:lang CDATA #IMPLIED>

<!-- The physical or digital manifestation of the resource. -->
<!ELEMENT dc:format (#PCDATA)>
<!ATTLIST dc:format xml:lang CDATA #IMPLIED>

<!-- An unambiguous reference to the resource within a given context. -->
<!ELEMENT dc:identifier (#PCDATA)>
<!ATTLIST dc:identifier xml:lang CDATA #IMPLIED>
<!ATTLIST dc:identifier rdf:resource CDATA #IMPLIED>

<!-- A Reference to a resource from which the present resource is derived. -->
<!ELEMENT dc:source (#PCDATA)>
<!ATTLIST dc:source xml:lang CDATA #IMPLIED>
<!ATTLIST dc:source rdf:resource CDATA #IMPLIED>

<!-- A language of the intellectual content of the resource. -->
<!ELEMENT dc:language (#PCDATA)>
<!ATTLIST dc:language xml:lang CDATA #IMPLIED>

<!-- A reference to a related resource. -->
<!ELEMENT dc:relation (#PCDATA)>
<!ATTLIST dc:relation xml:lang CDATA #IMPLIED>
<!ATTLIST dc:relation rdf:resource CDATA #IMPLIED>

<!-- The extent or scope of the content of the resource. -->
<!ELEMENT dc:coverage (#PCDATA)>
<!ATTLIST dc:coverage xml:lang CDATA #IMPLIED>

<!-- Information about rights held in and over the resource. -->
<!ELEMENT dc:rights (#PCDATA)>
<!ATTLIST dc:rights xml:lang CDATA #IMPLIED>

Appendix B - Informational XML Schema for Dublin Core™ Metadata Element Set 1.1 in XML

Note this section is informational and not part of the standard. This schema has been tested and passed the validator for XML Schema 20000922 version as of 2001-03-14.

The URI for this XML Schema is http://dublincore.org/specifications/dublin-core/dcmes-xml/2000-12-01/dcmes-xml-xsd.xsd

<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE schema PUBLIC '-//W3C//DTD XMLSCHEMA 200010//EN'
                        'http://www.w3.org/2000/10/XMLSchema.dtd'>
<schema xmlns='http://www.w3.org/2000/10/XMLSchema'
        targetNamespace='http://dublincore.org/specifications/dublin-core/2000/11/dcmes-xml/'
        xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#'
        xmlns:t='http://dublincore.org/specifications/dublin-core/2000/11/dcmes-xml/'>

  <annotation>
    <documentation xml:lang='en' 
                   source='http://dublincore.org/specifications/dublin-core/2000/11/dcmes-xml/'>

  XML Schema 2000-12-01 for Dublin Core™ Metadata Element Set version 1.1
  http://dublincore.org/specifications/dublin-core/2000/11/dcmes-xml/dcmes-xml-xsd.xsd
  by Dave Beckett [email protected]

  See 
    An XML Encoding of Simple Dublin Core™ Metadata - 2000-12-01
    http://dublincore.org/specifications/dublin-core/2000/11/dcmes-xml/

  Based on
    Dublin Core™ Metadata Element Set, Version 1.1: Reference Description
    http://dublincore.org/specifications/dublin-core/rec/dces-19990702.shtml

  This schema is INFORMATIVE and not part of the standard.
  It has passed the http://www.w3.org/2000/09/webdata/xsv
  validator for XML Schema 20000922 version as of 2001-03-14

  Converted using the dtd2xsd.pl script posted to xml-dev
  http://lists.xml.org/archives/xml-dev/200101/msg00481.html

    </documentation>
  </annotation>

  <import namespace='http://www.w3.org/XML/1998/namespace'
          schemaLocation='http://www.w3.org/2000/10/xml.xsd'>
    <annotation>
      <documentation xml:lang='en'>
    	 Get access to the xml: attribute groups for xml:lang
    	 as declared on various elements below
      </documentation>
    </annotation>
  </import>

  <import namespace='http://www.w3.org/2000/10/XMLSchema'
          schemaLocation='http://www.w3.org/2000/10/XMLSchema.xsd'>
    <annotation>
      <documentation xml:lang='en'>
    	 Get access to the XML Schema 2000-10-24 draft definitions
      </documentation>
    </annotation>
  </import>

  <import namespace='http://www.w3.org/1999/02/22-rdf-syntax-ns#'
          schemaLocation='http://www.w3.org/2000/07/rdf.xsd'
    <annotation>
      <documentation xml:lang='en'>
	Get access to the RDF Model and Syntax 1999-02-22 definitions
      </documentation>
    </annotation>
  </import>

 <element name='rdf:RDF'>
   <complexType>
     <sequence>
       <element ref='t:rdf'/>
     </sequence>     
     <attribute name='xmlns:rdf' type='string' value='http://www.w3.org/1999/02/22-rdf-syntax-ns#' use='fixed' />
     <attribute name='xmlns:dc' type='string' value='http://purl.org/dc/elements/1.1/' use='fixed' />
   </complexType>
 </element>

 <element name='rdf:Description'>
   <complexType>
     <sequence>
       <element ref='t:dc'/>
     </sequence>     
     <attribute name='rdf:about' type='string' use='optional'/>
   </complexType>
 </element>

 <element name='dc:title'>
   <complexType mixed='true'>
     <attribute name='xml:lang' type='string' use='optional'/>
   </complexType>
 </element>

 <element name='dc:creator'>
   <complexType mixed='true'>
     <attribute name='xml:lang' type='string' use='optional'/>
   </complexType>
 </element>

 <element name='dc:subject'>
   <complexType mixed='true'>
     <attribute name='xml:lang' type='string' use='optional'/>
   </complexType>
 </element>

 <element name='dc:description'>
   <complexType mixed='true'>
     <attribute name='xml:lang' type='string' use='optional'/>
   </complexType>
 </element>

 <element name='dc:publisher'>
   <complexType mixed='true'>
     <attribute name='xml:lang' type='string' use='optional'/>
   </complexType>
 </element>

 <element name='dc:contributor'>
   <complexType mixed='true'>
     <attribute name='xml:lang' type='string' use='optional'/>
   </complexType>
 </element>

 <element name='dc:date'>
   <complexType mixed='true'>
     <attribute name='xml:lang' type='string' use='optional'/>
   </complexType>
 </element>

 <element name='dc:type'>
   <complexType mixed='true'>
     <attribute name='xml:lang' type='string' use='optional'/>
   </complexType>
 </element>

 <element name='dc:format'>
   <complexType mixed='true'>
     <attribute name='xml:lang' type='string' use='optional'/>
   </complexType>
 </element>

 <element name='dc:identifier'>
   <complexType mixed='true'>
     <attribute name='rdf:resource' type='string' use='optional'/>
   </complexType>
 </element>

 <element name='dc:source'>
   <complexType mixed='true'>
     <attribute name='rdf:resource' type='string' use='optional'/>
    </complexType>
 </element>

 <element name='dc:language'>
   <complexType mixed='true'>
     <attribute name='xml:lang' type='string' use='optional'/>
   </complexType>
 </element>

 <element name='dc:relation'>
   <complexType mixed='true'>
     <attribute name='rdf:resource' type='string' use='optional'/>
   </complexType>
 </element>

 <element name='dc:coverage'>
   <complexType mixed='true'>
     <attribute name='xml:lang' type='string' use='optional'/>
   </complexType>
 </element>

 <element name='dc:rights'>
   <complexType mixed='true'>
     <attribute name='xml:lang' type='string' use='optional'/>
   </complexType>
 </element>

</schema>

References

[DCMES] Dublin Core™ Metadata Element Set, Version 1.1: Reference Description
http://dublincore.org/specifications/dublin-core/dces/

[XML-SPEC] Extensible Markup Language (XML) 1.0, W3C Recommendation, 10 February 1998
http://www.w3.org/TR/REC-xml

[EM-DTD] DTD's for the Dublin Core™ Element Set, Eric Miller
http://rdf.dev.oclc.org/dc/xml/dtd.html

[BATHP] Bath Profile Appendix D - eXtensible Markup Language (XML) Document Type Definition for Dublin Core™ Simple
http://www.ukoln.ac.uk/interop-focus/activities/z3950/int_profile/bath/draft/Appendix_D__XML_DTD.htm

[CIMI-XML-TB] The use of XML as a transfer syntax for museum records during the CIMI Dublin Core™ test bed : some practical experiences, Bert Degenhart Drenth
MS Word (no non-proprietary format available): http://www.cimi.org/specifications/dublin-core/XML_for_DC_testbed_rev.doc

[CIMI-DC-DTD]CIMI Dublin Core™ DTD
MS Word (no non-proprietary format available): http://www.cimi.org/specifications/dublin-core/CIMI-DC-DTD_210400.doc

[RDFMS] Resource Description Framework (RDF) Model and Syntax Specification, W3C Recommendation, 22 February 1999 http://www.w3.org/TR/REC-rdf-syntax

Example 1