HI All,

Long story short:

The OpenDocument OASIS TC has been talking a lot about metadata in the
format for the past couple of months.  They seem to be having some
trouble settling on a way forward, however, in part because of lack of
RDF expertise on the committee. While Adobe has been promoting XMP, I
really don't think that's adequate.

Since I have some very specific ideas on what this new metadata
support should look like (I am co-project lead for the OpenOffice
bibliographic project, and so want to see it fit our needs), I have
been asked to put together a proposal.

To do that, I need both technical help (the subject of this message)
and to get as many "experts" as possible to sign on in support of the
proposal.

Anyway, I outlined what I want to do here:

<http://netapps.muohio.edu/blogs/darcusb/darcusb/archives/2005/10/01/opendocument-mixing-metadata>

... and here:

<http://netapps.muohio.edu/blogs/darcusb/darcusb/archives/2005/10/30/opendocument-and-rdf-storing-what-metadata-where>

I'd really love feedback on how I've done this technically.  I have
two schemas; the first is a generic constrained validator:

===
namespace dc = "http://purl.org/dc/elements/1.1/";
namespace local = ""
namespace meta = "urn:oasis:names:tc:opendocument:xmlns:meta:1.0"
namespace rdf = "http://www.w3.org/1999/02/22-rdf-syntax-ns#";

dc:creator [ "Bruce D'Arcus" ]
dc:description [ "This schema is a demo of generic constrained rdf
validation." ]

start = rdf.RDF
rdf.RDF = element rdf:RDF { rdf.resource+ }

## attributes
div {
  rdf.id = attribute rdf:about { xsd:anyURI }
  xml.language = attribute xml:lang { xsd:language }
}

## basic triple patterns
div {
  # exclude non-namespaced content, as well as base OpenDocument
metadata properties
  rdf.resource =
    element * - (local:* | dc:* | meta:*) {
      (rdf.property | rdf.resource_property | rdf.collection)+, rdf.id?
    }
  rdf.property = element * - (local:* | dc:* | meta:*) { rdf.literals
| rdf.URI | rdf.sequence }
  rdf.sequence =
    element rdf:Seq {
      element rdf:li { rdf.URI | rdf.resource }+
    }
  # use of "collection" can replace previous rdf:Alt and rdf:Bag containers
  rdf.collection =
    element * - (local:* | dc:* | meta:*) {
      rdf.property+,
      attribute rdf:parseType { "Collection" }
    }
  rdf.URI = attribute rdf:resource { xsd:anyURI }
  rdf.resource_property = element * - (local:* | dc:* | meta:*) {
rdf.resource | rdf.URI }
}

## literals
div {
  rdf.literals = rdf.string_literal | rdf.xml_literal
  rdf.string_literal = text, xml.language?
  rdf.xml_literal =
    any,
    attribute rdf:parseType { "Literal" }
}
any =
  mixed {
    element * - (local:* | dc:* | meta:*) {
      attribute * { text }*,
      any
    }*
  }
===

The second is a base ODF metadata schema. I'll be extending it, but
this shows what I want to do.

===
namespace dc = "http://purl.org/dc/elements/1.1/";
namespace dcterms = "http://purl.org/dc/terms/";
namespace local = ""
namespace meta = "urn:oasis:names:tc:opendocument:xmlns:meta:1.0"
namespace odbib = "http://www.example.net/odbib#";
namespace rdf = "http://www.w3.org/1999/02/22-rdf-syntax-ns#";

include "rdf-tight.rnc" {
rdf.RDF = element rdf:RDF { od.meta+ & rdf.resource* }
}
od.meta = element meta:Document { (dc.properties+ & (rdf.property |
rdf.resource_property | rdf.collection)*), rdf.id }

## Dublin Core properties
div {
  dc.properties =
    dc.title+
    & dc.creator*
    & dc.subject*
    & dc.publisher?
    & dc.description*
    & dc.identifier*
    & dc.language?
    & dc.type*
    & dc.rights?
    & dc.format*
  dc.title = element dc:title { rdf.string_literal | rdf.xml_literal }
  dc.creator = element dc:creator { rdf.string_literal | rdf.URI }
  dc.subject = element dc:subject { rdf.string_literal | rdf.URI }
  dc.publisher = element dc:publisher { rdf.string_literal | rdf.URI }
  dc.language = element dc:language { rdf.string_literal | rdf.URI }
  dc.description = element dc:description { rdf.string_literal |
rdf.xml_literal }
  dc.format = element dc:format { rdf.string_literal | rdf.URI }
  dc.identifier = element dc:identifier { rdf.string_literal | rdf.URI }
  dc.rights = element dc:rights { rdf.string_literal | rdf.URI }
  dc.type = element dc:type { rdf.string_literal | rdf.URI }
}
===

I would then have a third, for demonstration, for bib metadata that
would import the above and redefine pieces of it.

Thoughts or suggstions?

Bruce


------------------------ Yahoo! Groups Sponsor --------------------~--> 
Get Bzzzy! (real tools to help you find a job). Welcome to the Sweet Life.
http://us.click.yahoo.com/A77XvD/vlQLAA/TtwFAA/2U_rlB/TM
--------------------------------------------------------------------~-> 

 
Yahoo! Groups Links

<*> To visit your group on the web, go to:
    http://groups.yahoo.com/group/rng-users/

<*> To unsubscribe from this group, send an email to:
    [EMAIL PROTECTED]

<*> Your use of Yahoo! Groups is subject to:
    http://docs.yahoo.com/info/terms/
 


Reply via email to