Update copyright notices for 2013.
[bpt/emacs.git] / etc / schema / locate.rnc
CommitLineData
ab422c4d 1# Copyright (C) 2003-2004, 2007-2013 Free Software Foundation, Inc.
14760e95
CY
2
3# This file is part of GNU Emacs.
4
5# GNU Emacs is free software: you can redistribute it and/or modify
6# it under the terms of the GNU General Public License as published by
7# the Free Software Foundation, either version 3 of the License, or
8# (at your option) any later version.
9
10# GNU Emacs is distributed in the hope that it will be useful,
11# but WITHOUT ANY WARRANTY; without even the implied warranty of
12# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13# GNU General Public License for more details.
14
15# You should have received a copy of the GNU General Public License
16# along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
17
8cd39fb3
MH
18default namespace this = "http://thaiopensource.com/ns/locating-rules/1.0"
19namespace local = ""
20
21start = locatingRules
22
23locatingRules = element locatingRules { common, rule* }
24
25rule =
26 \include
27 # | group
28 | applyFollowingRules
29 | documentElement
30 # | doctypePublicId
31 | \namespace
32 | uri
33 | transformURI
34 # | typeIdProcessingInstruction
35 | \default
36 | typeId
37 # | typeIdBase
38 | extensionRule
39
40## Group of rules. Useful with xml:base.
41group = element group { common, rule* }
42
43\include =
44 element include {
45 common,
46 attribute rules { xsd:anyURI }
47 }
48
49applyFollowingRules =
50 element applyFollowingRules {
51 common,
52 attribute ruleType {
53 "documentElement"
54 | "doctypePublicId"
55 | "namespace"
56 | "uri"
57 | "transformURI"
58 | "typeIdProcessingInstruction"
59 | "default"
60 }
61 }
62
63documentElement =
64 ## Matches if the prefix and/or local name of document element
65 ## match the values of the prefix and localName attributes.
66 element documentElement {
67 common,
68 nameAtts,
69 targetAtt
70 }
71
72## If there's no prefix attribute, then only the local name must match.
73## If there's no local name attribute, then only the prefix must match.
74nameAtts = (prefixAtt, localNameAtt?) | localNameAtt
75
76## prefix="" matches if the document element has no prefix.
77prefixAtt = attribute prefix { (xsd:NCName - "xmlns") | "" }
78localNameAtt = attribute localName { xsd:NCName - "xmlns" }
79
80doctypePublicId =
81 ## Matches if the document has a DOCTYPE declaration with a public
82 ## identifier that, after normalization, matches the value of the
83 ## publicId attribute.
84 element doctypePublicId {
85 common,
86 attribute publicId { publicIdValue },
87 targetAtt
88 }
89
90publicIdValue =
91 xsd:token {
92 ## Newline and tab are excluded, because pattern applies to
93 ## the post-normalization value.
94 pattern = "[\-'()+,./:=?;!*#@$_%a-zA-Z0-9 ]*"
95 }
96
97# This is separate from documentElement so it can be distinguished
98# by applyFollowingRules.
99\namespace =
100 ## Matches if the document element has a namespace URI equal to the value
101 ## of the ns attribute. A document element with no namespace matches if
102 ## the value of the ns attribute is the empty string.
103 element namespace {
104 common,
105 attribute ns { xsd:string },
106 targetAtt
107 }
108
109uri =
110 ## Matches based on the URI of the document.
111 element uri {
112 common,
113 (resourceAtt | patternAtt),
114 targetAtt
115 }
116
117## Matches if it can be determined that the document resource is
118## the same resource as that identified by the value of the resource
119## attribute. In determining this, the implementation should apply
120## the semantics of the URI scheme used by the URI.
121resourceAtt = attribute resource { xsd:anyURI }
122
123## Matches if the document's URI matches the pattern specified
124## by the pattern attribute. A * in the path component matches
125## zero or more characters other than / (after resolving escapes).
126## If the pattern is a relative URI, it means that there must
127## be some URI such that when the pattern is resolved relative
128## to that URI, it matches the document's URI. Thus an empty
129## pattern will always match.
130patternAtt = attribute pattern { uriPattern }
131
132## A pattern for a URI. Same syntax as a URI, except that a * in
133## the path component has a special meaning.
134uriPattern = xsd:anyURI
135
136transformURI =
137 ## Generates a URI for the related resource by transforming
138 ## the URI of the document. Matches if the transformation
139 ## yields a valid URI that identifies an existing resource.
140 element transformURI {
141 common,
142 ## Semantics are the same as the pattern attribute of the uri element.
143 attribute fromPattern { uriPattern },
144 ## The result of the transformation is produced from the toPattern
145 ## by replacing each * by the string that matched the corresponding
146 ## * in the toPattern. The toPattern is appended to the initial
147 ## part of the document's URI that was not explicitly matched
148 ## by fromPattern.
149 attribute toPattern { uriPattern }
150 }
151
152\default =
153 ## Always matches.
154 element default {
155 common,
156 targetAtt
157 }
158
159## A document can be mapped onto a URI either indirectly via a typeId
160## or directly.
161targetAtt = uriAtt | typeIdAtt
162
163## Specifies the URI of the related resource.
164## xml:base is used if it's relative.
165uriAtt = attribute uri { xsd:anyURI }
166
167## Specifies an identifier of the type of document. typeId and
168## typeIdBase rules will be used to map this to a URI.
169typeIdAtt = attribute typeId { typeIdValue }
170
171## A type identifier can be anything convenient (e.g. a public identifier,
172## a URL or just a string with no formal structure). Whitespace is
173## normalized like a public identifier before comparing type identifiers
174## for equality.
175typeIdValue = xsd:token
176
177typeIdProcessingInstruction =
178 ## Matches if there's a processing instruction in the prolog
179 ## before any DOCTYPE declaration whose target is the value of
180 ## the target attribute. The value of the processing instruction
181 ## is interpreted as a typeId, which will be mapped to a
182 ## URI as normal.
183 element typeIdProcessingInstruction {
184 common,
185 attribute target { xsd:NCName }
186 }
187
188typeId =
189 ## Maps a typeId onto a URI.
190 element typeId {
191 common,
192 attribute id { typeIdValue },
193 targetAtt
194 }
195
196typeIdBase =
197 ## Used to map a typeId onto a URI. First, any URI reserved characters
198 ## are URI encoded. If the append attribute is specified, it is appended.
199 ## This is then treated as a URI. If relative, it is resolved using
200 ## the applicable base URI as usual. If the resulting URI identifies
201 ## an existing resource, then the typeId is mapped to this resource.
202 ## This is intended to be useful with file URIs.
203 element typeIdBase {
204 common,
205 attribute append { xsd:string }?
206 }
207
208extensionRule =
209 element * - this:* {
210 attribute * { text }*, (text|anyElement)*
211 }
212
213anyElement = element * { attribute * { text }*, (text|anyElement)* }
214
215common =
216 # attribute xml:base { xsd:anyURI }?,
217 attribute * - (xml:base|this:*|local:*) { text }*