1 default namespace = "urn:ietf:params:xml:ns:vcard-4.0"
3 ### Section 3.3: vCard Format Specification
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]+" }
12 ### Section 4: Value types
15 value-text = element text { text }
16 value-text-list = value-text+
19 value-uri = element uri { xsd:anyURI }
22 value-date = element date {
23 xsd:string { pattern = "\d{8}|\d{4}-\d\d|--\d\d(\d\d)?|---\d\d" }
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)?)?" }
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)?)?" }
39 value-date-and-or-time = value-date | value-date-time | value-time
42 value-timestamp = element timestamp {
43 xsd:string { pattern = "\d{8}T\d{6}(Z|[+\-]\d\d(\d\d)?)?" }
47 value-boolean = element boolean { xsd:boolean }
50 value-integer = element integer { xsd:integer }
53 value-float = element float { xsd:float }
56 value-utc-offset = element utc-offset {
57 xsd:string { pattern = "[+\-]\d\d(\d\d)?" }
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}" }
70 ### Section 5: Parameters
73 param-language = element language { value-language-tag }?
76 param-pref = element pref {
78 xsd:integer { minInclusive = "1" maxInclusive = "100" }
83 param-altid = element altid { value-text }?
86 param-pid = element pid {
87 element text { xsd:string { pattern = "\d+(\.\d+)?" } }+
91 param-type = element type { element text { "work" | "home" }+ }?
94 param-mediatype = element mediatype { value-text }?
97 param-calscale = element calscale { element text { "gregorian" } }?
100 param-sort-as = element sort-as { value-text+ }?
103 param-geo = element geo { value-uri }?
106 param-tz = element tz { value-text | value-uri }?
108 ### Section 6: Properties
111 property-source = element source {
112 element parameters { param-altid, param-pid, param-pref,
118 property-kind = element kind {
119 element text { "individual" | "group" | "org" | "location" |
120 x-name | iana-token }*
124 property-fn = element fn {
125 element parameters { param-language, param-altid, param-pid,
126 param-pref, param-type }?,
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 }+
141 property-nickname = element nickname {
142 element parameters { param-language, param-altid, param-pid,
143 param-pref, param-type }?,
148 property-photo = element photo {
149 element parameters { param-altid, param-pid, param-pref, param-type,
155 property-bday = element bday {
156 element parameters { param-altid, param-calscale }?,
157 (value-date-and-or-time | value-text)
161 property-anniversary = element anniversary {
162 element parameters { param-altid, param-calscale }?,
163 (value-date-and-or-time | value-text)
167 property-gender = element gender {
168 element sex { "" | "M" | "F" | "O" | "N" | "U" },
169 element identity { text }?
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,
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 }+
188 property-tel = element tel {
194 element text { "work" | "home" | "text" | "voice"
195 | "fax" | "cell" | "video" | "pager"
200 (value-text | value-uri)
204 property-email = element email {
205 element parameters { param-altid, param-pid, param-pref,
211 property-impp = element impp {
212 element parameters { param-altid, param-pid, param-pref,
213 param-type, param-mediatype }?,
218 property-lang = element lang {
219 element parameters { param-altid, param-pid, param-pref,
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)
232 property-geo = element geo {
233 element parameters { param-altid, param-pid, param-pref,
234 param-type, param-mediatype }?,
239 property-title = element title {
240 element parameters { param-language, param-altid, param-pid,
241 param-pref, param-type }?,
246 property-role = element role {
247 element parameters { param-language, param-altid, param-pid,
248 param-pref, param-type }?,
253 property-logo = element logo {
254 element parameters { param-language, param-altid, param-pid,
255 param-pref, param-type, param-mediatype }?,
260 property-org = element org {
261 element parameters { param-language, param-altid, param-pid,
262 param-pref, param-type, param-sort-as }?,
267 property-member = element member {
268 element parameters { param-altid, param-pid, param-pref,
274 property-related = element related {
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"
290 (value-uri | value-text)
294 property-categories = element categories {
295 element parameters { param-altid, param-pid, param-pref,
301 property-note = element note {
302 element parameters { param-language, param-altid, param-pid,
303 param-pref, param-type }?,
308 property-prodid = element prodid { value-text }
311 property-rev = element rev { value-timestamp }
314 property-sound = element sound {
315 element parameters { param-language, param-altid, param-pid,
316 param-pref, param-type, param-mediatype }?,
321 property-uid = element uid { value-uri }
324 property-clientpidmap = element clientpidmap {
325 element sourceid { xsd:positiveInteger },
330 property-url = element url {
331 element parameters { param-altid, param-pid, param-pref,
332 param-type, param-mediatype }?,
337 property-key = element key {
338 element parameters { param-altid, param-pid, param-pref,
339 param-type, param-mediatype }?,
340 (value-uri | value-text)
344 property-fburl = element fburl {
345 element parameters { param-altid, param-pid, param-pref,
346 param-type, param-mediatype }?,
351 property-caladruri = element caladruri {
352 element parameters { param-altid, param-pid, param-pref,
353 param-type, param-mediatype }?,
358 property-caluri = element caluri {
359 element parameters { param-altid, param-pid, param-pref,
360 param-type, param-mediatype }?,
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 {
380 attribute name { text },