Mercurial > emacs
annotate etc/schema/locate.rnc @ 101096:1060b95add8a
Comment (add Author:, based on authors.el).
author | Glenn Morris <rgm@gnu.org> |
---|---|
date | Sat, 10 Jan 2009 23:00:48 +0000 |
parents | c90853557b90 |
children | 1d1d5d9bd884 |
rev | line source |
---|---|
100972 | 1 # Copyright (C) 2003, 2004, 2007, 2008, 2009 Free Software Foundation, Inc. |
99431
fe571ea62851
Add copyright notice.
Chong Yidong <cyd@stupidchicken.com>
parents:
86361
diff
changeset
|
2 |
fe571ea62851
Add copyright notice.
Chong Yidong <cyd@stupidchicken.com>
parents:
86361
diff
changeset
|
3 # This file is part of GNU Emacs. |
fe571ea62851
Add copyright notice.
Chong Yidong <cyd@stupidchicken.com>
parents:
86361
diff
changeset
|
4 |
fe571ea62851
Add copyright notice.
Chong Yidong <cyd@stupidchicken.com>
parents:
86361
diff
changeset
|
5 # GNU Emacs is free software: you can redistribute it and/or modify |
fe571ea62851
Add copyright notice.
Chong Yidong <cyd@stupidchicken.com>
parents:
86361
diff
changeset
|
6 # it under the terms of the GNU General Public License as published by |
fe571ea62851
Add copyright notice.
Chong Yidong <cyd@stupidchicken.com>
parents:
86361
diff
changeset
|
7 # the Free Software Foundation, either version 3 of the License, or |
fe571ea62851
Add copyright notice.
Chong Yidong <cyd@stupidchicken.com>
parents:
86361
diff
changeset
|
8 # (at your option) any later version. |
fe571ea62851
Add copyright notice.
Chong Yidong <cyd@stupidchicken.com>
parents:
86361
diff
changeset
|
9 |
fe571ea62851
Add copyright notice.
Chong Yidong <cyd@stupidchicken.com>
parents:
86361
diff
changeset
|
10 # GNU Emacs is distributed in the hope that it will be useful, |
fe571ea62851
Add copyright notice.
Chong Yidong <cyd@stupidchicken.com>
parents:
86361
diff
changeset
|
11 # but WITHOUT ANY WARRANTY; without even the implied warranty of |
fe571ea62851
Add copyright notice.
Chong Yidong <cyd@stupidchicken.com>
parents:
86361
diff
changeset
|
12 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
fe571ea62851
Add copyright notice.
Chong Yidong <cyd@stupidchicken.com>
parents:
86361
diff
changeset
|
13 # GNU General Public License for more details. |
fe571ea62851
Add copyright notice.
Chong Yidong <cyd@stupidchicken.com>
parents:
86361
diff
changeset
|
14 |
fe571ea62851
Add copyright notice.
Chong Yidong <cyd@stupidchicken.com>
parents:
86361
diff
changeset
|
15 # You should have received a copy of the GNU General Public License |
fe571ea62851
Add copyright notice.
Chong Yidong <cyd@stupidchicken.com>
parents:
86361
diff
changeset
|
16 # along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. |
fe571ea62851
Add copyright notice.
Chong Yidong <cyd@stupidchicken.com>
parents:
86361
diff
changeset
|
17 |
86361 | 18 default namespace this = "http://thaiopensource.com/ns/locating-rules/1.0" |
19 namespace local = "" | |
20 | |
21 start = locatingRules | |
22 | |
23 locatingRules = element locatingRules { common, rule* } | |
24 | |
25 rule = | |
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. | |
41 group = element group { common, rule* } | |
42 | |
43 \include = | |
44 element include { | |
45 common, | |
46 attribute rules { xsd:anyURI } | |
47 } | |
48 | |
49 applyFollowingRules = | |
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 | |
63 documentElement = | |
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. | |
74 nameAtts = (prefixAtt, localNameAtt?) | localNameAtt | |
75 | |
76 ## prefix="" matches if the document element has no prefix. | |
77 prefixAtt = attribute prefix { (xsd:NCName - "xmlns") | "" } | |
78 localNameAtt = attribute localName { xsd:NCName - "xmlns" } | |
79 | |
80 doctypePublicId = | |
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 | |
90 publicIdValue = | |
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 | |
109 uri = | |
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. | |
121 resourceAtt = 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. | |
130 patternAtt = 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. | |
134 uriPattern = xsd:anyURI | |
135 | |
136 transformURI = | |
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. | |
161 targetAtt = uriAtt | typeIdAtt | |
162 | |
163 ## Specifies the URI of the related resource. | |
164 ## xml:base is used if it's relative. | |
165 uriAtt = 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. | |
169 typeIdAtt = 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. | |
175 typeIdValue = xsd:token | |
176 | |
177 typeIdProcessingInstruction = | |
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 | |
188 typeId = | |
189 ## Maps a typeId onto a URI. | |
190 element typeId { | |
191 common, | |
192 attribute id { typeIdValue }, | |
193 targetAtt | |
194 } | |
195 | |
196 typeIdBase = | |
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 | |
208 extensionRule = | |
209 element * - this:* { | |
210 attribute * { text }*, (text|anyElement)* | |
211 } | |
212 | |
213 anyElement = element * { attribute * { text }*, (text|anyElement)* } | |
214 | |
215 common = | |
216 # attribute xml:base { xsd:anyURI }?, | |
217 attribute * - (xml:base|this:*|local:*) { text }* |