Re: Configuration options

"James Fuller" <james.fuller.2007@gmail.com> writes:
> so now all we have to do is figure out who does the schema... nudge
> nudge, hint ;)

Heh. Here's a first stab. I'm thinking of implementing this with the
following semantics:

1. It's a configuration file if the local-name of the root element is
"xproc-config". This way, users can choose an
implementation-appropriate default namespace if they want, but my
implementation will still look inside it.

2. My implementation will attempt to process any element in either
no-namespace or my namespace. If several implementations agree on the
name of a particular configuration property, then we can share the
same definition if it's in no-namespace. If it's in a namespace, but
not in my namespace, I just ignore it.

Here's a first pass at the schema:

default namespace local = ""
namespace cc = "http://com.xmlcalabash/ns/configuration"

xmlid.attr = attribute xml:id { xsd:ID }
xmlbase.attr = attribute xml:base { xsd:anyURI }

common.attributes = xmlid.attr?, xmlbase.attr?, extension.attr*

# ============================================================

start = XProcConfiguration

# ============================================================

XProcConfiguration =
   element xproc-config {
      common.attributes,
      (NotCC|CCConfig)*
   }

NotCC =
   element (* - cc:*) {
      (_any.attr | text | Any)*
   }

CCConfig =
   CCSchema | CCBinding | CCDebug | CCEntityResolver
 | CCInput | CCLogLevel | CCLibrary | CCOutput | CCWithParam
 | CCSafe | SSStepName | CCURIResolver | CCImplementation

CCSchema =
   element cc:schema-aware {
      common.attributes,
      xsd:boolean
   }
   
CCBinding =
   element cc:namespace-binding {
      common.attributes,
      attribute prefix { text },
      attribute uri { xsd:anyURI },
      empty
   }

CCDebug =
   element cc:debug {
      common.attributes,
      xsd:boolean
   }

CCEntityResolver =
   element cc:entity-resolver {
      common.attributes,
      attribute class-name { xsd:NMTOKEN },
      empty
   }

CCInput =
   element cc:input {
      common.attributes,
      attribute port { xsd:NMTOKEN },
      attribute href { xsd:anyURI }?,
      Any?
   }

CCLogLevel =
   element cc:log-level {
      common.attributes,
      attribute logger { xsd:NMTOKEN }?,
      attribute level {
         "finest" | "finer" | "fine" | "info"
       | "warning" | "error" | "severe"
      },
      empty
   }

CCLibrary =
   element cc:library {
      common.attributes,
      attribute href { xsd:anyURI }?,
      Any?
   }

CCOutput =
   element cc:output {
      common.attributes,
      attribute port { xsd:NMTOKEN },
      attribute href { xsd:anyURI },
      empty
   }

CCWithParam =
   element cc:with-param {
      common.attributes,
      attribute name { xsd:QName },
      attribute value { text }?
   }

CCSafe =
   element cc:safe-mode {
      common.attributes,
      xsd:boolean
   }

SSStepName =
   element cc:step-name {
      common.attributes,
      xsd:NMTOKEN
   }

CCURIResolver =
   element cc:uri-resolver {
      common.attributes,
      attribute class-name { xsd:NMTOKEN },
      empty
   }

CCImplementation =
   element cc:implementation {
      common.attributes,
      attribute step-name { xsd:QName },
      attribute class-name { xsd:NMTOKEN },
      empty
   }

# ============================================================

_any.attr =
   attribute * { text }

extension.attr =
   attribute (* - (local:*|xml:*)) { text }

Any =
   element * {
      (_any.attr | text | Any)*
   }


                                        Be seeing you,
                                          norm

-- 
Norman Walsh <ndw@nwalsh.com> | No man's knowledge here can go beyond
http://nwalsh.com/            | his experience.--John Locke

Received on Tuesday, 11 November 2008 13:10:31 UTC