- From: Norman Walsh <ndw@nwalsh.com>
- Date: Tue, 11 Nov 2008 08:09:49 -0500
- To: XProc Dev <xproc-dev@w3.org>
- Message-ID: <m2myg6wgrm.fsf@nwalsh.com>
"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