1 default namespace = "urn:ietf:params:xml:ns:vcard-4.0"
3 ### Section 3.3: vCard Format Specification
6 iana-token = xsd:string { pattern = "[a-zA-Z0-9-]+" }
7 x-name = xsd:string { pattern = "x-[a-zA-Z0-9-]+" }
9 ### Section 4: Value types
12 value-text = element text { text }
13 value-text-list = value-text+
16 value-uri = element uri { xsd:anyURI }
19 value-date = element date {
20 xsd:string { pattern = "\d{8}|\d{4}-\d\d|--\d\d(\d\d)?|---\d\d" }
24 value-time = element time {
25 xsd:string { pattern = "(\d\d(\d\d(\d\d)?)?|-\d\d(\d\d?)|--\d\d)"
26 ~ "(Z|[+\-]\d\d(\d\d)?)?" }
30 value-date-time = element date-time {
31 xsd:string { pattern = "(\d{8}|--\d{4}|---\d\d)T\d\d(\d\d(\d\d)?)?"
32 ~ "(Z|[+\-]\d\d(\d\d)?)?" }
36 value-date-and-or-time = value-date | value-date-time | value-time
39 value-timestamp = element timestamp {
40 xsd:string { pattern = "\d{8}T\d{6}(Z|[+\-]\d\d(\d\d)?)?" }
44 value-boolean = element boolean { xsd:boolean }
47 value-integer = element integer { xsd:integer }
50 value-float = element float { xsd:float }
53 value-utc-offset = element utc-offset {
54 xsd:string { pattern = "[+\-]\d\d(\d\d)?" }
58 value-language-tag = element language-tag {
59 xsd:string { pattern = "([a-z]{2,3}((-[a-z]{3}){0,3})?|[a-z]{4,8})"
60 ~ "(-[a-z]{4})?(-([a-z]{2}|\d{3}))?"
61 ~ "(-([0-9a-z]{5,8}|\d[0-9a-z]{3}))*"
62 ~ "(-[0-9a-wyz](-[0-9a-z]{2,8})+)*"
63 ~ "(-x(-[0-9a-z]{1,8})+)?|x(-[0-9a-z]{1,8})+|"
64 ~ "[a-z]{1,3}(-[0-9a-z]{2,8}){1,2}" }
67 ### Section 5: Parameters
70 param-language = element language { value-language-tag }?
73 param-pref = element pref {
75 xsd:integer { minInclusive = "1" maxInclusive = "100" }
80 param-altid = element altid { value-text }?
83 param-pid = element pid {
84 element text { xsd:string { pattern = "\d+(\.\d+)?" } }+
88 param-type = element type { element text { "work" | "home" }+ }?
91 param-mediatype = element mediatype { value-text }?
94 param-calscale = element calscale { element text { "gregorian" } }?
97 param-sort-as = element sort-as { value-text+ }?
100 param-geo = element geo { value-uri }?
103 param-tz = element tz { value-text | value-uri }?
105 ### Section 6: Properties
108 property-source = element source {
109 element parameters { param-altid, param-pid, param-pref,
115 property-kind = element kind {
116 element text { "individual" | "group" | "org" | "location" |
117 x-name | iana-token }*
121 property-fn = element fn {
122 element parameters { param-language, param-altid, param-pid,
123 param-pref, param-type }?,
128 property-n = element n {
129 element parameters { param-language, param-sort-as, param-altid }?,
130 element surname { text }+,
131 element given { text }+,
132 element additional { text }+,
133 element prefix { text }+,
134 element suffix { text }+
138 property-nickname = element nickname {
139 element parameters { param-language, param-altid, param-pid,
140 param-pref, param-type }?,
145 property-photo = element photo {
146 element parameters { param-altid, param-pid, param-pref, param-type,
152 property-bday = element bday {
153 element parameters { param-altid, param-calscale }?,
154 (value-date-and-or-time | value-text)
158 property-anniversary = element anniversary {
159 element parameters { param-altid, param-calscale }?,
160 (value-date-and-or-time | value-text)
164 property-gender = element gender {
165 element sex { "" | "M" | "F" | "O" | "N" | "U" },
166 element identity { text }?
170 param-label = element label { value-text }?
171 property-adr = element adr {
172 element parameters { param-language, param-altid, param-pid,
173 param-pref, param-type, param-geo, param-tz,
175 element pobox { text }+,
176 element ext { text }+,
177 element street { text }+,
178 element locality { text }+,
179 element region { text }+,
180 element code { text }+,
181 element country { text }+
185 property-tel = element tel {
191 element text { "work" | "home" | "text" | "voice"
192 | "fax" | "cell" | "video" | "pager"
197 (value-text | value-uri)
201 property-email = element email {
202 element parameters { param-altid, param-pid, param-pref,
208 property-impp = element impp {
209 element parameters { param-altid, param-pid, param-pref,
210 param-type, param-mediatype }?,
215 property-lang = element lang {
216 element parameters { param-altid, param-pid, param-pref,
222 property-tz = element tz {
223 element parameters { param-altid, param-pid, param-pref,
224 param-type, param-mediatype }?,
225 (value-text | value-uri | value-utc-offset)
229 property-geo = element geo {
230 element parameters { param-altid, param-pid, param-pref,
231 param-type, param-mediatype }?,
236 property-title = element title {
237 element parameters { param-language, param-altid, param-pid,
238 param-pref, param-type }?,
243 property-role = element role {
244 element parameters { param-language, param-altid, param-pid,
245 param-pref, param-type }?,
250 property-logo = element logo {
251 element parameters { param-language, param-altid, param-pid,
252 param-pref, param-type, param-mediatype }?,
257 property-org = element org {
258 element parameters { param-language, param-altid, param-pid,
259 param-pref, param-type, param-sort-as }?,
264 property-member = element member {
265 element parameters { param-altid, param-pid, param-pref,
271 property-related = element related {
278 "work" | "home" | "contact" | "acquaintance" |
279 "friend" | "met" | "co-worker" | "colleague" | "co-resident" |
280 "neighbor" | "child" | "parent" | "sibling" | "spouse" |
281 "kin" | "muse" | "crush" | "date" | "sweetheart" | "me" |
282 "agent" | "emergency"
287 (value-uri | value-text)
291 property-categories = element categories {
292 element parameters { param-altid, param-pid, param-pref,
298 property-note = element note {
299 element parameters { param-language, param-altid, param-pid,
300 param-pref, param-type }?,
305 property-prodid = element prodid { value-text }
308 property-rev = element rev { value-timestamp }
311 property-sound = element sound {
312 element parameters { param-language, param-altid, param-pid,
313 param-pref, param-type, param-mediatype }?,
318 property-uid = element uid { value-uri }
321 property-clientpidmap = element clientpidmap {
322 element sourceid { xsd:positiveInteger },
327 property-url = element url {
328 element parameters { param-altid, param-pid, param-pref,
329 param-type, param-mediatype }?,
334 property-key = element key {
335 element parameters { param-altid, param-pid, param-pref,
336 param-type, param-mediatype }?,
337 (value-uri | value-text)
341 property-fburl = element fburl {
342 element parameters { param-altid, param-pid, param-pref,
343 param-type, param-mediatype }?,
348 property-caladruri = element caladruri {
349 element parameters { param-altid, param-pid, param-pref,
350 param-type, param-mediatype }?,
355 property-caluri = element caluri {
356 element parameters { param-altid, param-pid, param-pref,
357 param-type, param-mediatype }?,
362 property = property-adr | property-anniversary | property-bday
363 | property-caladruri | property-caluri | property-categories
364 | property-clientpidmap | property-email | property-fburl
365 | property-fn | property-geo | property-impp | property-key
366 | property-kind | property-lang | property-logo
367 | property-member | property-n | property-nickname
368 | property-note | property-org | property-photo
369 | property-prodid | property-related | property-rev
370 | property-role | property-gender | property-sound
371 | property-source | property-tel | property-title
372 | property-tz | property-uid | property-url
373 start = element vcards {
377 attribute name { text },