]> git.argeo.org Git - gpl/argeo-suite.git/blob - org.argeo.app.core/src/org/argeo/app/core/schemas/xCard-4.0.rnc
Add cn to person entity
[gpl/argeo-suite.git] / org.argeo.app.core / src / org / argeo / app / core / schemas / xCard-4.0.rnc
1 default namespace = "urn:ietf:params:xml:ns:vcard-4.0"
2
3 ### Section 3.3: vCard Format Specification
4 #
5 # 3.3
6
7 # mbaudier - 2022-05-31 : corrected regexp from RFC 6351
8 iana-token = xsd:string { pattern = "[a-zA-Z0-9]+" }
9 # mbaudier - 2022-05-31 : corrected regexp from RFC 6351
10 x-name = xsd:string { pattern = "x-[a-zA-Z0-9]+" }
11
12 ### Section 4: Value types
13 #
14 # 4.1
15 value-text = element text { text }
16 value-text-list = value-text+
17
18 # 4.2
19 value-uri = element uri { xsd:anyURI }
20
21 # 4.3.1
22 value-date = element date {
23 xsd:string { pattern = "\d{8}|\d{4}-\d\d|--\d\d(\d\d)?|---\d\d" }
24 }
25
26 # 4.3.2
27 value-time = element time {
28 xsd:string { pattern = "(\d\d(\d\d(\d\d)?)?|-\d\d(\d\d?)|--\d\d)"
29 ~ "(Z|[+\-]\d\d(\d\d)?)?" }
30 }
31
32 # 4.3.3
33 value-date-time = element date-time {
34 xsd:string { pattern = "(\d{8}|--\d{4}|---\d\d)T\d\d(\d\d(\d\d)?)?"
35 ~ "(Z|[+\-]\d\d(\d\d)?)?" }
36 }
37
38 # 4.3.4
39 value-date-and-or-time = value-date | value-date-time | value-time
40
41 # 4.3.5
42 value-timestamp = element timestamp {
43 xsd:string { pattern = "\d{8}T\d{6}(Z|[+\-]\d\d(\d\d)?)?" }
44 }
45
46 # 4.4
47 value-boolean = element boolean { xsd:boolean }
48
49 # 4.5
50 value-integer = element integer { xsd:integer }
51
52 # 4.6
53 value-float = element float { xsd:float }
54
55 # 4.7
56 value-utc-offset = element utc-offset {
57 xsd:string { pattern = "[+\-]\d\d(\d\d)?" }
58 }
59
60 # 4.8
61 value-language-tag = element language-tag {
62 xsd:string { pattern = "([a-z]{2,3}((-[a-z]{3}){0,3})?|[a-z]{4,8})"
63 ~ "(-[a-z]{4})?(-([a-z]{2}|\d{3}))?"
64 ~ "(-([0-9a-z]{5,8}|\d[0-9a-z]{3}))*"
65 ~ "(-[0-9a-wyz](-[0-9a-z]{2,8})+)*"
66 ~ "(-x(-[0-9a-z]{1,8})+)?|x(-[0-9a-z]{1,8})+|"
67 ~ "[a-z]{1,3}(-[0-9a-z]{2,8}){1,2}" }
68 }
69
70 ### Section 5: Parameters
71 #
72 # 5.1
73 param-language = element language { value-language-tag }?
74
75 # 5.2
76 param-pref = element pref {
77 element integer {
78 xsd:integer { minInclusive = "1" maxInclusive = "100" }
79 }
80 }?
81
82 # 5.4
83 param-altid = element altid { value-text }?
84
85 # 5.5
86 param-pid = element pid {
87 element text { xsd:string { pattern = "\d+(\.\d+)?" } }+
88 }?
89
90 # 5.6
91 param-type = element type { element text { "work" | "home" }+ }?
92
93 # 5.7
94 param-mediatype = element mediatype { value-text }?
95
96 # 5.8
97 param-calscale = element calscale { element text { "gregorian" } }?
98
99 # 5.9
100 param-sort-as = element sort-as { value-text+ }?
101
102 # 5.10
103 param-geo = element geo { value-uri }?
104
105 # 5.11
106 param-tz = element tz { value-text | value-uri }?
107
108 ### Section 6: Properties
109 #
110 # 6.1.3
111 property-source = element source {
112 element parameters { param-altid, param-pid, param-pref,
113 param-mediatype },
114 value-uri
115 }
116
117 # 6.1.4
118 property-kind = element kind {
119 element text { "individual" | "group" | "org" | "location" |
120 x-name | iana-token }*
121 }
122
123 # 6.2.1
124 property-fn = element fn {
125 element parameters { param-language, param-altid, param-pid,
126 param-pref, param-type }?,
127 value-text
128 }
129
130 # 6.2.2
131 property-n = element n {
132 element parameters { param-language, param-sort-as, param-altid }?,
133 element surname { text }+,
134 element given { text }+,
135 element additional { text }+,
136 element prefix { text }+,
137 element suffix { text }+
138 }
139
140 # 6.2.3
141 property-nickname = element nickname {
142 element parameters { param-language, param-altid, param-pid,
143 param-pref, param-type }?,
144 value-text-list
145 }
146
147 # 6.2.4
148 property-photo = element photo {
149 element parameters { param-altid, param-pid, param-pref, param-type,
150 param-mediatype }?,
151 value-uri
152 }
153
154 # 6.2.5
155 property-bday = element bday {
156 element parameters { param-altid, param-calscale }?,
157 (value-date-and-or-time | value-text)
158 }
159
160 # 6.2.6
161 property-anniversary = element anniversary {
162 element parameters { param-altid, param-calscale }?,
163 (value-date-and-or-time | value-text)
164 }
165
166 # 6.2.7
167 property-gender = element gender {
168 element sex { "" | "M" | "F" | "O" | "N" | "U" },
169 element identity { text }?
170 }
171
172 # 6.3.1
173 param-label = element label { value-text }?
174 property-adr = element adr {
175 element parameters { param-language, param-altid, param-pid,
176 param-pref, param-type, param-geo, param-tz,
177 param-label }?,
178 element pobox { text }+,
179 element ext { text }+,
180 element street { text }+,
181 element locality { text }+,
182 element region { text }+,
183 element code { text }+,
184 element country { text }+
185 }
186
187 # 6.4.1
188 property-tel = element tel {
189 element parameters {
190 param-altid,
191 param-pid,
192 param-pref,
193 element type {
194 element text { "work" | "home" | "text" | "voice"
195 | "fax" | "cell" | "video" | "pager"
196 | "textphone" }+
197 }?,
198 param-mediatype
199 }?,
200 (value-text | value-uri)
201 }
202
203 # 6.4.2
204 property-email = element email {
205 element parameters { param-altid, param-pid, param-pref,
206 param-type }?,
207 value-text
208 }
209
210 # 6.4.3
211 property-impp = element impp {
212 element parameters { param-altid, param-pid, param-pref,
213 param-type, param-mediatype }?,
214 value-uri
215 }
216
217 # 6.4.4
218 property-lang = element lang {
219 element parameters { param-altid, param-pid, param-pref,
220 param-type }?,
221 value-language-tag
222 }
223
224 # 6.5.1
225 property-tz = element tz {
226 element parameters { param-altid, param-pid, param-pref,
227 param-type, param-mediatype }?,
228 (value-text | value-uri | value-utc-offset)
229 }
230
231 # 6.5.2
232 property-geo = element geo {
233 element parameters { param-altid, param-pid, param-pref,
234 param-type, param-mediatype }?,
235 value-uri
236 }
237
238 # 6.6.1
239 property-title = element title {
240 element parameters { param-language, param-altid, param-pid,
241 param-pref, param-type }?,
242 value-text
243 }
244
245 # 6.6.2
246 property-role = element role {
247 element parameters { param-language, param-altid, param-pid,
248 param-pref, param-type }?,
249 value-text
250 }
251
252 # 6.6.3
253 property-logo = element logo {
254 element parameters { param-language, param-altid, param-pid,
255 param-pref, param-type, param-mediatype }?,
256 value-uri
257 }
258
259 # 6.6.4
260 property-org = element org {
261 element parameters { param-language, param-altid, param-pid,
262 param-pref, param-type, param-sort-as }?,
263 value-text-list
264 }
265
266 # 6.6.5
267 property-member = element member {
268 element parameters { param-altid, param-pid, param-pref,
269 param-mediatype }?,
270 value-uri
271 }
272
273 # 6.6.6
274 property-related = element related {
275 element parameters {
276 param-altid,
277 param-pid,
278 param-pref,
279 element type {
280 element text {
281 "work" | "home" | "contact" | "acquaintance" |
282 "friend" | "met" | "co-worker" | "colleague" | "co-resident" |
283 "neighbor" | "child" | "parent" | "sibling" | "spouse" |
284 "kin" | "muse" | "crush" | "date" | "sweetheart" | "me" |
285 "agent" | "emergency"
286 }+
287 }?,
288 param-mediatype
289 }?,
290 (value-uri | value-text)
291 }
292
293 # 6.7.1
294 property-categories = element categories {
295 element parameters { param-altid, param-pid, param-pref,
296 param-type }?,
297 value-text-list
298 }
299
300 # 6.7.2
301 property-note = element note {
302 element parameters { param-language, param-altid, param-pid,
303 param-pref, param-type }?,
304 value-text
305 }
306
307 # 6.7.3
308 property-prodid = element prodid { value-text }
309
310 # 6.7.4
311 property-rev = element rev { value-timestamp }
312
313 # 6.7.5
314 property-sound = element sound {
315 element parameters { param-language, param-altid, param-pid,
316 param-pref, param-type, param-mediatype }?,
317 value-uri
318 }
319
320 # 6.7.6
321 property-uid = element uid { value-uri }
322
323 # 6.7.7
324 property-clientpidmap = element clientpidmap {
325 element sourceid { xsd:positiveInteger },
326 value-uri
327 }
328
329 # 6.7.8
330 property-url = element url {
331 element parameters { param-altid, param-pid, param-pref,
332 param-type, param-mediatype }?,
333 value-uri
334 }
335
336 # 6.8.1
337 property-key = element key {
338 element parameters { param-altid, param-pid, param-pref,
339 param-type, param-mediatype }?,
340 (value-uri | value-text)
341 }
342
343 # 6.9.1
344 property-fburl = element fburl {
345 element parameters { param-altid, param-pid, param-pref,
346 param-type, param-mediatype }?,
347 value-uri
348 }
349
350 # 6.9.2
351 property-caladruri = element caladruri {
352 element parameters { param-altid, param-pid, param-pref,
353 param-type, param-mediatype }?,
354 value-uri
355 }
356
357 # 6.9.3
358 property-caluri = element caluri {
359 element parameters { param-altid, param-pid, param-pref,
360 param-type, param-mediatype }?,
361 value-uri
362 }
363
364 # Top-level grammar
365 property = property-adr | property-anniversary | property-bday
366 | property-caladruri | property-caluri | property-categories
367 | property-clientpidmap | property-email | property-fburl
368 | property-fn | property-geo | property-impp | property-key
369 | property-kind | property-lang | property-logo
370 | property-member | property-n | property-nickname
371 | property-note | property-org | property-photo
372 | property-prodid | property-related | property-rev
373 | property-role | property-gender | property-sound
374 | property-source | property-tel | property-title
375 | property-tz | property-uid | property-url
376 start = element vcards {
377 element vcard {
378 (property
379 | element group {
380 attribute name { text },
381 property*
382 })+
383 }+
384 }
385