| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388 |
- # RELAX NG Schema for vCard in XML
- # Extract from RFC6351.
- # Erratum 2994 applied.
- # Erratum 3047 applied.
- # Erratum 3008 applied.
- # Erratum 4247 applied.
- default namespace = "urn:ietf:params:xml:ns:vcard-4.0"
- ### Section 3.3: vCard Format Specification
- #
- # 3.3
- iana-token = xsd:string { pattern = "[a-zA-Z0-9\-]+" }
- x-name = xsd:string { pattern = "x-[a-zA-Z0-9\-]+" }
- ### Section 4: Value types
- #
- # 4.1
- value-text = element text { text }
- value-text-list = value-text+
- # 4.2
- value-uri = element uri { xsd:anyURI }
- # 4.3.1
- value-date = element date {
- xsd:string { pattern = "\d{8}|\d{4}-\d\d|--\d\d(\d\d)?|---\d\d" }
- }
- # 4.3.2
- value-time = element time {
- xsd:string { pattern = "(\d\d(\d\d(\d\d)?)?|-\d\d(\d\d)?|--\d\d)"
- ~ "(Z|[+\-]\d\d(\d\d)?)?" }
- }
- # 4.3.3
- value-date-time = element date-time {
- xsd:string { pattern = "(\d{8}|--\d{4}|---\d\d)T\d\d(\d\d(\d\d)?)?"
- ~ "(Z|[+\-]\d\d(\d\d)?)?" }
- }
- # 4.3.4
- value-date-and-or-time = value-date | value-date-time | value-time
- # 4.3.5
- value-timestamp = element timestamp {
- xsd:string { pattern = "\d{8}T\d{6}(Z|[+\-]\d\d(\d\d)?)?" }
- }
- # 4.4
- value-boolean = element boolean { xsd:boolean }
- # 4.5
- value-integer = element integer { xsd:integer }
- # 4.6
- value-float = element float { xsd:float }
- # 4.7
- value-utc-offset = element utc-offset {
- xsd:string { pattern = "[+\-]\d\d(\d\d)?" }
- }
- # 4.8
- value-language-tag = element language-tag {
- xsd:string { pattern = "([a-z]{2,3}((-[a-z]{3}){0,3})?|[a-z]{4,8})"
- ~ "(-[a-z]{4})?(-([a-z]{2}|\d{3}))?"
- ~ "(-([0-9a-z]{5,8}|\d[0-9a-z]{3}))*"
- ~ "(-[0-9a-wyz](-[0-9a-z]{2,8})+)*"
- ~ "(-x(-[0-9a-z]{1,8})+)?|x(-[0-9a-z]{1,8})+|"
- ~ "[a-z]{1,3}(-[0-9a-z]{2,8}){1,2}" }
- }
- ### Section 5: Parameters
- #
- # 5.1
- param-language = element language { value-language-tag }?
- # 5.2
- param-pref = element pref {
- element integer {
- xsd:integer { minInclusive = "1" maxInclusive = "100" }
- }
- }?
- # 5.4
- param-altid = element altid { value-text }?
- # 5.5
- param-pid = element pid {
- element text { xsd:string { pattern = "\d+(\.\d+)?" } }+
- }?
- # 5.6
- param-type = element type { element text { "work" | "home" }+ }?
- # 5.7
- param-mediatype = element mediatype { value-text }?
- # 5.8
- param-calscale = element calscale { element text { "gregorian" } }?
- # 5.9
- param-sort-as = element sort-as { value-text+ }?
- # 5.10
- param-geo = element geo { value-uri }?
- # 5.11
- param-tz = element tz { value-text | value-uri }?
- ### Section 6: Properties
- #
- # 6.1.3
- property-source = element source {
- element parameters { param-altid, param-pid, param-pref,
- param-mediatype }?,
- value-uri
- }
- # 6.1.4
- property-kind = element kind {
- element text { "individual" | "group" | "org" | "location" |
- x-name | iana-token }*
- }
- # 6.2.1
- property-fn = element fn {
- element parameters { param-language, param-altid, param-pid,
- param-pref, param-type }?,
- value-text
- }
- # 6.2.2
- property-n = element n {
- element parameters { param-language, param-sort-as, param-altid }?,
- element surname { text }+,
- element given { text }+,
- element additional { text }+,
- element prefix { text }+,
- element suffix { text }+
- }
- # 6.2.3
- property-nickname = element nickname {
- element parameters { param-language, param-altid, param-pid,
- param-pref, param-type }?,
- value-text-list
- }
- # 6.2.4
- property-photo = element photo {
- element parameters { param-altid, param-pid, param-pref, param-type,
- param-mediatype }?,
- value-uri
- }
- # 6.2.5
- property-bday = element bday {
- element parameters { param-altid, param-calscale }?,
- (value-date-and-or-time | value-text)
- }
- # 6.2.6
- property-anniversary = element anniversary {
- element parameters { param-altid, param-calscale }?,
- (value-date-and-or-time | value-text)
- }
- # 6.2.7
- property-gender = element gender {
- element sex { "" | "M" | "F" | "O" | "N" | "U" },
- element identity { text }?
- }
- # 6.3.1
- param-label = element label { value-text }?
- property-adr = element adr {
- element parameters { param-language, param-altid, param-pid,
- param-pref, param-type, param-geo, param-tz,
- param-label }?,
- element pobox { text }+,
- element ext { text }+,
- element street { text }+,
- element locality { text }+,
- element region { text }+,
- element code { text }+,
- element country { text }+
- }
- # 6.4.1
- property-tel = element tel {
- element parameters {
- param-altid,
- param-pid,
- param-pref,
- element type {
- element text { "work" | "home" | "text" | "voice"
- | "fax" | "cell" | "video" | "pager"
- | "textphone" | x-name | iana-token }+
- }?,
- param-mediatype
- }?,
- (value-text | value-uri)
- }
- # 6.4.2
- property-email = element email {
- element parameters { param-altid, param-pid, param-pref,
- param-type }?,
- value-text
- }
- # 6.4.3
- property-impp = element impp {
- element parameters { param-altid, param-pid, param-pref,
- param-type, param-mediatype }?,
- value-uri
- }
- # 6.4.4
- property-lang = element lang {
- element parameters { param-altid, param-pid, param-pref,
- param-type }?,
- value-language-tag
- }
- # 6.5.1
- property-tz = element tz {
- element parameters { param-altid, param-pid, param-pref,
- param-type, param-mediatype }?,
- (value-text | value-uri | value-utc-offset)
- }
- # 6.5.2
- property-geo = element geo {
- element parameters { param-altid, param-pid, param-pref,
- param-type, param-mediatype }?,
- value-uri
- }
- # 6.6.1
- property-title = element title {
- element parameters { param-language, param-altid, param-pid,
- param-pref, param-type }?,
- value-text
- }
- # 6.6.2
- property-role = element role {
- element parameters { param-language, param-altid, param-pid,
- param-pref, param-type }?,
- value-text
- }
- # 6.6.3
- property-logo = element logo {
- element parameters { param-language, param-altid, param-pid,
- param-pref, param-type, param-mediatype }?,
- value-uri
- }
- # 6.6.4
- property-org = element org {
- element parameters { param-language, param-altid, param-pid,
- param-pref, param-type, param-sort-as }?,
- value-text-list
- }
- # 6.6.5
- property-member = element member {
- element parameters { param-altid, param-pid, param-pref,
- param-mediatype }?,
- value-uri
- }
- # 6.6.6
- property-related = element related {
- element parameters {
- param-altid,
- param-pid,
- param-pref,
- element type {
- element text {
- "work" | "home" | "contact" | "acquaintance" |
- "friend" | "met" | "co-worker" | "colleague" | "co-resident" |
- "neighbor" | "child" | "parent" | "sibling" | "spouse" |
- "kin" | "muse" | "crush" | "date" | "sweetheart" | "me" |
- "agent" | "emergency"
- }+
- }?,
- param-mediatype
- }?,
- (value-uri | value-text)
- }
- # 6.7.1
- property-categories = element categories {
- element parameters { param-altid, param-pid, param-pref,
- param-type }?,
- value-text-list
- }
- # 6.7.2
- property-note = element note {
- element parameters { param-language, param-altid, param-pid,
- param-pref, param-type }?,
- value-text
- }
- # 6.7.3
- property-prodid = element prodid { value-text }
- # 6.7.4
- property-rev = element rev { value-timestamp }
- # 6.7.5
- property-sound = element sound {
- element parameters { param-language, param-altid, param-pid,
- param-pref, param-type, param-mediatype }?,
- value-uri
- }
- # 6.7.6
- property-uid = element uid { value-uri }
- # 6.7.7
- property-clientpidmap = element clientpidmap {
- element sourceid { xsd:positiveInteger },
- value-uri
- }
- # 6.7.8
- property-url = element url {
- element parameters { param-altid, param-pid, param-pref,
- param-type, param-mediatype }?,
- value-uri
- }
- # 6.8.1
- property-key = element key {
- element parameters { param-altid, param-pid, param-pref,
- param-type, param-mediatype }?,
- (value-uri | value-text)
- }
- # 6.9.1
- property-fburl = element fburl {
- element parameters { param-altid, param-pid, param-pref,
- param-type, param-mediatype }?,
- value-uri
- }
- # 6.9.2
- property-caladruri = element caladruri {
- element parameters { param-altid, param-pid, param-pref,
- param-type, param-mediatype }?,
- value-uri
- }
- # 6.9.3
- property-caluri = element caluri {
- element parameters { param-altid, param-pid, param-pref,
- param-type, param-mediatype }?,
- value-uri
- }
- # Top-level grammar
- property = property-adr | property-anniversary | property-bday
- | property-caladruri | property-caluri | property-categories
- | property-clientpidmap | property-email | property-fburl
- | property-fn | property-geo | property-impp | property-key
- | property-kind | property-lang | property-logo
- | property-member | property-n | property-nickname
- | property-note | property-org | property-photo
- | property-prodid | property-related | property-rev
- | property-role | property-gender | property-sound
- | property-source | property-tel | property-title
- | property-tz | property-uid | property-url
- start = element vcards {
- element vcard {
- (property
- | element group {
- attribute name { text },
- property*
- })+
- }+
- }
|