OASIS Mailing List ArchivesView the OASIS mailing list archive below
or browse/search using MarkMail.


Help: OASIS Mailing Lists Help | MarkMail Help

office-metadata message

[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [List Home]

Subject: proof-of-concept in RELAX NG

My time is about to get really limited, so am just going to post this 
so people can look at it at their leisure. I realize we do need to 
start with requirements, but it's also helpful to know what technical 
constraints we do (or don't) have.

I'd argue this could cover most or all of the use cases, though there'd 
need to be separate work on the linking of content to these 
descriptions. This simply shows how we would say in RELAX NG "we allow 
arbitrary metadata content based on a particular profile of the RDF 
model, according to these constaints."

Note that the schema is a generic schema, but includes an example at 
the end of an extension module (in this case, DC).

It's documented, such that a spec can be extracted from it (if and when 
it's done, which it is not now certainly).

Anyway, this document validates against it:

<?xml version="1.0" encoding="UTF-8"?>
<?oxygen RNGSchema="meta-proposal.rnc" type="compact"?>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#";
   xmlns:dc="http://purl.org/dc/elements/1.1/"; xmlns:x="http://ex.net/x";>
   <rdf:Description rdf:about="http://x.com";>
     <x:test>arbitrary content test</x:test>
   <x:Foo rdf:about="tag:arbitrary-resource">

namespace a = "http://relaxng.org/ns/compatibility/annotations/1.0";
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 rdf = "http://www.w3.org/1999/02/22-rdf-syntax-ns#";

dc:creator [ "Bruce D’Arcus" ]
dc:description [
    "This schema illustrates one possible way to support flexible but 
integrated metadata in OpenDocument."

## OpenDocument metadata support is designed to be flexible and 
extensible, but
## also to provide a simple and consistent common model based on RDF.
## Metadata thus consists of a handful of generic concepts: properties, 
## collections, and modules. Groups of domain-specific properties can 
be defined
## as "modules." As in RSS 1.0, modules are properties that share a 
## namespace. ODF includes default modules to describe documents and 
## Dublin Core, Extended Dublin Core, and vCard. Extension modules can 
be defined
## independent of the ODF TC process, but can be submitted to the TC 
for formal
## inclusion in the specification where appropriate.
start |= meta-collection

## Metadata "collections" are lists of descriptions. In XML, they are 
wrapped in
## an rdf:RDF element, without any attributes. Collections should be 
single files
## that are focused on a particular functionality (document 
descriptions, bibliographies,
## captions, and so forth), registered with the ODF manifest.xml file, 
using a mime-type
## of "text/xml+rdf".
meta-collection = element rdf:RDF { meta-resource+ }

## Metadata descriptions are "resources", represented in XML as 
namespaced child
## elements of a collection root, with an "rdf:about" attribute whose 
value is a URI.
div {

   ## Resources may be typed either with a specific namespaced URI, or 
by using a
   ## generic "rdf:Description" element with a "rdf:type" child element.
   meta-resource = element * - (local:* | dc:*) { meta-about, 
meta-properties }

   ## "Blank" nodes are unidentified resources that provide rich 
descriptions for properties.
   meta-resource.blank = element * - (local:* | dc:*) { meta-properties }
div {

   ## Resources are described by lists of "properties", elements which 
can be of two kinds:
   meta-properties = meta-property.simple | meta-property.rich

   ## "simple" properties have content, but no child elements; may have 
an xml:lang attribute
   meta-property.simple =
     element * - (local:* | dc:*) {
       attribute xml:lang { xsd:language }?,

   ## "rich" properties have either child resource descriptions, or a 
link to other
   ## descriptions using an rdf:resource attribute
   meta-property.rich = element * - (local:* | dc:*) { 
meta-resource.blank | meta-link }*

## The content model is assumed to be unordered. However, one may 
indicate order in one of two ways:
## 1. use an rdf:Seq element as a child of a property
## 2. use a meta:position element as a property of a resource
meta-sequence =
   element rdf:Seq {
     element rdf:li { meta-resource.blank | meta-link }
meta-position = element meta:position { xsd:integer }

## generic metadata attributes
div {
   meta-link = attribute rdf:resource { xsd:anyURI }
   meta-about = attribute rdf:about { xsd:anyURI }

## a demonstration of module inclusion using RELAX NG
div {
   meta-properties &= meta-module.dc?
   meta-module.dc = element dc:title { text }? & element dc:date { 
xsd:date }?

[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [List Home]