Calendaring Extensions | R. Tse |
Internet-Draft | P. Tam |
Updates: | Ribose |
5545,6321,6350,6351,7953,7265,7 | C. Daboo |
095 (if approved) | Apple Inc. |
Intended status: Informational | K. Murchison |
Expires: October 21, 2018 | FastMail Pty Ltd |
April 19, 2018 |
The vObject Model and vFormat Syntax
draft-calconnect-vobject-vformat-01
This document specifies the vObject data model and its corresponding syntax vFormat.
vObject represents the generalized data model, and vFormat the generalized data format, of the following specifications and fully covers them:
This work is produced by the CalConnect TC-VCARD and TC-CALENDAR committees.
This Internet-Draft is submitted in full conformance with the provisions of BCP 78 and BCP 79.
Internet-Drafts are working documents of the Internet Engineering Task Force (IETF). Note that other groups may also distribute working documents as Internet-Drafts. The list of current Internet-Drafts is at https://datatracker.ietf.org/drafts/current/.
Internet-Drafts are draft documents valid for a maximum of six months and may be updated, replaced, or obsoleted by other documents at any time. It is inappropriate to use Internet-Drafts as reference material or to cite them other than as "work in progress."
This Internet-Draft will expire on October 21, 2018.
Copyright (c) 2018 IETF Trust and the persons identified as the document authors. All rights reserved.
This document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents (https://trustee.ietf.org/license-info) in effect on the date of publication of this document. Please review these documents carefully, as they describe your rights and restrictions with respect to this document. Code Components extracted from this document must include Simplified BSD License text as described in Section 4.e of the Trust Legal Provisions and are provided without warranty as described in the Simplified BSD License.
The ubiquitous vCard [RFC6350] and iCalendar [RFC5545] standards are known as the "vObject" or "VCOMPONENT" family of standards. Named by the convention where the component type identifiers usually start with the letter "v", all of them use very similar, if not identical, syntax.
Yet due to diverged implementations of these "vObject" standards, different implementations often generate different output even when given identical content, causing interoperability concerns and the general inability to determine equivalence of vObjects for integrity concerns (2.1.2).
This document defines the "vObject" data model that is a generalized model that fully covers the needs of these standards, and the "vFormat" serialization syntax that is the generalized syntax of all vObject-compliant serialization formats.
This document also describes the normalized form of the vObject data model and the normalization process for vFormat syntax.
The normalized forms and normalization methods described in this document are fully compatible with the vCard 4.0 [RFC6350] and iCalendar [RFC5545] specifications.
This work is produced by the CalConnect TC-VCARD [CALCONNECT-VCARD] and TC-CALENDAR [CALCONNECT-CALENDAR] committees.
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all capitals, as shown here.
The key words "Private Use", "Experimental Use", "Hierarchical Allocation", "First Come First Served", "Expert Review", "Specification Required", "RFC Required", "IETF Review", "Standards Action" and "IESG Approval" in this document are to be interpreted as described in Section 4 of [RFC8126].
Notation in this document is described in ABNF [RFC5234] as used by [RFC6350].
Definitions from [RFC6350] apply to this specification except when explicitly overridden.
All names of properties, property parameters, enumerated property values, and property parameter values are case-insensitive. However, all property values are case-sensitive, unless otherwise stated.
The vObject data model is the generalized data model from the implied data models of vCard [RFC6350] and iCalendar [RFC5545].
While both vCard [RFC6350] and iCalendar [RFC5545] specify data formats for different purposes, the data model behind them follow an identical logical structure (using components, properties and parameters) with similar requirements.
By creating a generalized data model ("vObject") that is compatible with both, we are able to ensure that newly developed data modification techniques for vObject would be interoperable on all other vObject-compliant models.
The implied data models behind these formats are compliant to the vObject data model:
Data within a vObject is arranged through a logical hierarchy composed of the following elements:
Two vObjects are considered identical in content if their normalized forms are textually equivalent.
A vObject is based on the representation of the "component" element. All vObjects are composed of at least one component element.
A component:
A component type is identified by the component name, and every component instance is distinguished by the value of its uniqueness identifier property.
A component is often used to model an object in the object-oriented sense, such as a vCard or an iCalendar object.
The order of components MAY represent order of the objects, which is important for example in a VPATCH component [VPATCH], representing the patching order, which is not a commutative process.
As a vObject component can contain inner components, it is important that those inner components can be distinguished from each other.
A vObject component’s uniqueness identifier property is a property whose value can uniquely identify the immediate component that contains it.
Every vObject component MUST contain a single, component uniqueness identifier property. The uniqueness identifier property can be different according to component types, and the uniqueness scope of that property MAY be different. At a minimum, the uniqueness identifier property value MUST be unique within the immediate component that contains the uniqueness identifier property.
For example:
The list of uniqueness identifier properties for every vObject component that complies with this document can be found in the IANA registry described in Section 12.1.2.
New vObject components defined according to this document MUST define a uniqueness identifier property for that component, and it MUST be registered in the said IANA registry.
Properties MUST be first normalized and before sorted, meaning that the property’s values, and its parameters and its values, have been normalized.
The sorting of component properties MUST be performed according to the following order:
Inner components within a vObject must be placed in a sorted order.
The sorting between components MUST be performed according to the following order:
An inner component MUST itself be normalized, meaning that its properties and inner components MUST be normalized.
Properties represent attributes of the vObject itself.
A property:
vObject property value types are listed in Section 4.4.4.
A normalized property MUST have normalized values.
A normalized property MUST have normalized property parameters.
Property parameters within the same property MUST each be normalized, and then sorted by parameter name alphabetically.
Property parameters of the same property MUST have unique names.
A vObject property MAY have one or more values, depending on the value type.
vObject property values are strongly typed, just like in [RFC5545] and [RFC6350]. Basic value types accepted in vObject properties are defined in Section 6.
vObject compliant formats MAY define additional value types that are not provided in this document, and MAY require separate validation rules, such as the "RECUR" property value type from iCalendar [RFC5545].
Each property MUST define a default value type, and MAY accept alternative, defined, value types.
The property value generally does not require any normalization. Please consult individual normalization instructions in each value type’s definition.
A property parameter is an attribute that applies on a property.
A property parameter contains:
A property parameter MAY represent:
A property MAY have multiple property parameters, for example, the "TYPE" of the value or a category that applies to this value.
Certain property parameters allow multiple values. There is no defined order among property parameters in a property parameter list.
In normalized form, values in a value list MUST be sorted alphabetically.
Property parameters are allowed to have a default value.
For example, in vObject formats including [RFC5545] and [RFC6350], each property value has a specified data type specified as the VALUE property parameter.
A property parameter value *MAY contain none, one or several property parameter values.
There is generally no order enforced among the list property parameter value list.
vObject property parameter values are strongly typed, just like vObject properties, [RFC5545] and [RFC6350]. Basic value types accepted in vObject property parameter values are defined in Section 6.
vObject compliant formats MAY define additional value types that are not provided in this document, and MAY require separate validation rules, such as the values accepted by the FBTYPE property parameter in iCalendar [RFC5545].
Each property parameter MUST define its accepted value type. While a property MAY accept multiple alternative value types, a property parameter value MUST only accept one value type.
Property parameter values within a property parameter MUST be sorted by value.
A property group (or just "group") is used to group a set of properties, useful to represent cases where a group of properties are closely related to each other.
In the vCard [RFC6350], the group is used to tie multiple properties into being displayed together.
Each property MUST only have a maximum of one group.
Groups are not ordered and group names are case-insensitive.
The "vFormat" format is the generalized syntax from the vCard [RFC6350] and iCalendar [RFC5545] formats, and is the native format for vObject serialization ("vObject native format").
vFormat is called the "native" format for vObjects to distinguish it from alternative representations of vObject data, such as their XML (xCal, xCard) or JSON (jCal, jCard) representations.
Its syntax originated from the textual representation of the iCalendar and vCard formats, and is mostly traceable back to the original vCard and iCalendar specifications [vCard21].
Both of these formats are considered "instances" (or "downstream formats") of vFormat, and fully adhere to vFormat requirements.
Parsing and modification operations that work on vFormat SHOULD work on all its instances, including iCalendar [RFC5545] and vCard [RFC6350].
The following ABNF notation defines the vFormat syntax, in accordance with [RFC5234], which also defines CRLF, WSP, DQUOTE, VCHAR, ALPHA, and DIGIT.
A vObject is defined by the following notation:
vobjects = 1*vobject vobject = "BEGIN:" comp-name CRLF *contentline *vobject "END:" comp-name CRLF comp-name = name prop-name = name prop-values = prop-value / prop-list / prop-structured prop-value = VALUE-CHAR prop-list = prop-value *("," prop-value) ; An unordered list containing multiple property values prop-structured = prop-value *(";" prop-value) ; A structured list that consist of multiple property fields ; for multiple property values contentline = [group "."] prop-name params ":" prop-values CRLF ; Folding and unfolding procedures described in Section 3.2 of ; [RFC6350] applies: ; * When parsing a content line, folded lines *MUST* first be ; unfolded accordingly. ; * When generating a content line, lines longer than 75 ; characters *SHOULD* be folded accordingly. ; * When normalizing a content line, the content line *MUST* ; be folded when the line is longer than 75 characters. group = name params = *(";" param) param = name "=" param-value *("," param-value) ; Allowed parameters depend on property name. name = 1*(ALPHA / DIGIT / "-") param-value = *SAFE-CHAR / DQUOTE *QSAFE-CHAR DQUOTE param-values = param-value *("," param-single-value) NON-ASCII = UTF8-2 / UTF8-3 / UTF8-4 ; UTF8-{2,3,4} are defined in <<RFC3629>> ; TODO: generalize this to UTF-32 QSAFE-CHAR = WSP / "!" / %x23-7E / NON-ASCII ; Any character except CTLs, DQUOTE SAFE-CHAR = WSP / "!" / %x23-39 / %x3C-7E / NON-ASCII ; Any character except CTLs, DQUOTE, ";", ":" VALUE-CHAR = WSP / VCHAR / NON-ASCII ; Any textual character
A component:
The vCard [RFC6350] and iCalendar [RFC5545] data formats both conform to vFormat, and their syntaxes are considered to be restricted instances of the vObject syntax.
The component name of a vObject MUST be uppercased, for both the BEGIN: and END: content lines.
Example (even though this is not technically allowed by [RFC6350]):
BEGIN:vCard
Should be normalized to:
BEGIN:VCARD
Properties MUST be placed before inner components are listed.
Certain vObject formats places certain restrictions or requirements on property line locations. Normalization procedures MUST NOT affect the validity of the normalized vObject.
For example, in the VCARD component [RFC6350], the "VERSION" property line is REQUIRED to be placed immediately below the "BEGIN" line.
In this case, when normalizing the VCARD component, the common normalization procedure MUST be first applied, and the "VERSION" property line MUST be restored to the valid location as required by its specifications [RFC6350].
A property can be represented by one content line (a line that ends with a line break), but can also be "folded" (3.1) to use multiple lines.
A property begins with the property name (e.g., TEL), followed by a COLON delimiter and the property’s value.
The property name MUST be normalized to uppercase letters.
The last property parameter of a property MUST NOT have a trailing SEMICOLON.
When exporting a normalized property content line, it MUST be folded at the character limit when it exceeds 75 characters. Each folded line MUST be delimited by the character sequence of a line break and a single white space (CRLF, SPACE (U+0020)). This rule only applies to normalized output.
For example, the original form:
NOTE:This is a very long description on a long line that exceeds 75 characters.
When exported to normalized output MUST give out:
NOTE:This is a very long description on a long line that exceeds 75 charac ters.
The property’s values are defined as the content after the property name and COLON delimiter, until the end of the unfolded content line.
If a property accepts multiple values, the definition of delimitation is defined in Section 6.
vObject compliant formats that defines additional value types MAY require separate validation rules on top of vFormat syntax.
If the property value type of a property value is not the default value type, the VALUE parameter MUST be present to specify the type of the property value.
vFormat representation of different value types are provided in Section 6.
The property value generally does not require any normalization.
Property parameters exist between the property name and the COLON delimiter in a property line.
Each property parameter in a list of property parameters MUST be separated by a SEMICOLON character.
The property parameter name and the property parameter value is separated with an equal sign ("=").
If the property accepts multiple property parameters values, they MUST be separated by a SEMICOLON character as a list.
When there are multiple instances of a property parameter on the same property, such as in "TYPE=home;TYPE=work", it is considered equivalent to "TYPE=home\,work".
The property parameter name MUST be normalized into uppercase letters in form of a Unicode string (7).
Property parameter names (together with their values) MUST be sorted alphabetically.
Example:
TEL;VALUE=uri;type=home:tel:+1-888-888-8888
The normalized form is:
TEL;TYPE="home";VALUE="uri":tel:+1-888-888-8888
If a property parameter occurs more than once within a property, the property parameter is considered to contain a list of property parameter values joined by the parameter separator.
Such instances of property parameters with identical names MUST be joined into one instance with its value a sorted list of the property parameter values.
For example, the vCard TEL property’s TYPE parameter [RFC6350] describes that TYPE=home,work and TYPE=work;TYPE=home are considered equivalent.
Example:
TEL;TYPE=home;Type=work;VALUE=uri:tel:+1-888-888-8888
The normalized form is:
TEL;TYPE="home","work";VALUE=uri:tel:+1-888-888-8888
In vObject formats including [RFC5545] and [RFC6350], each property value has a specified data type either as specified by property definition or optionally assigned.
When normalizing a property, the property data value type MUST always be specified. If the value type is not explicitly specified, it MUST be filled in according to the vObject format.
Example:
TEL:+1-888-888-8888
The normalized form is:
TEL;VALUE="text":+1-888-888-8888
If a property parameter accepts multiple values, these value elements MUST be separated by a COMMA (U+002C).
Property parameter value elements that contain the COLON (U+003A), SEMICOLON (U+003B), or COMMA (U+002C) character separators MUST be specified as quoted-string text values. Property parameter values MUST NOT contain the DQUOTE (U+0022) character. The DQUOTE character is used as a delimiter for parameter values that contain restricted characters or URI text.
Property parameter values MUST be individually wrapped with the DQUOTE characters. In [RFC6350], the DQUOTE character is used to delimit values within a list that contain restricted characters or URI text and is optional.
Example:
TEL;TYPE=home,work;VALUE=uri:tel:+1-888-888-8888
The normalized vFormat output is:
TEL;TYPE="home","work";VALUE="uri":tel:+1-888-888-8888
The syntax of a property group is defined in Section 5.
Property groups MUST NOT be removed during normalization. This is contrary to [RFC6350] that allows stripping off groups.
Some properties and parameters require values defined in terms of multiple parts.
This construct of multiple structured values is called a "FIELDSET". These structured property values MUST have their value parts separated by a SEMICOLON character. Each value in FIELDSET MUST have the same value type as defined.
In vFormat syntax, an element within any FIELDSET field MUST NOT contain an unescaped the SEMICOLON character to prevent breaking of the FIELDSET syntax.
When used to describe a value type, the FIELDSET(field-1-value-type, …) function is defined as a structure of fields separated by the SEMICOLON character, where each of its fields is of value type field-i-value-type, where i represents the index of the specific field.
The "CLIENTPIDMAP" property of [RFC6350] takes a tuple of "INTEGER" and "URI" separated by a SEMICOLON.
The notation in vObject given for its value type would be this indicating that the first value is an INTEGER, while the latter value is a URI:
FIELDSET(INTEGER, URI)
The "N" property of [RFC6350] defines its value of having 5 values at once, and each of these values are a LIST of TEXT.
The notation in vObject given for its value type would be this indicating that there are 5 fields in this FIELDSET, and each value element of it MUST be a LIST of TEXT elements:
FIELDSET(5\*LIST(TEXT))
When normalizing a FIELDSET, each value MUST have been normalized, but the order of FIELDSET elements MUST NOT be rearranged.
Properties and parameters MAY specify its value to be an unordered list of values. There is no significance to the order of values in a list.
This construct is called the "LIST". Each value in the LIST MUST have the same value type.
In vFormat syntax, values in a list of values MUST be separated by a delimiting character. The default delimiter character is the COMMA character. An element within any LIST element MUST NOT contain an unescaped delimiter character to prevent breaking of the LIST syntax.
A property MAY specify that its LIST elements are delimited by another character other than the COMMA, for example, the RECUR property of [RFC5545] uses the SEMICOLON character as a delimiter. This is allowed when explicitly specified in the defining syntax, given the restriction that any element within does not contain an unescaped delimiter character (i.e., in this case, the SEMICOLON).
When used to describe a value type, the LIST(value-type) function is defined as a list of elements separated by the COMMA character, where each of its elements is of value type value-type.
When used to describe a value type, the LIST(value-type) function is defined as a list of elements separated by the COMMA character, where each of its elements is of value type value-type.
In the case where a delimiter character for the LIST is not a COMMA, the LIST(value-type, delimiter) syntax is used to define the delimiter, where each of its elements is of value type value-type, and the delimiting character is specified to be delimiter.
The "NICKNAME" property of [RFC6350] defines its value to be an unordered list of TEXT.
In vObject notation its value type is defined to be:
LIST(TEXT)
The "RECUR" property of [RFC5545] defines its value to be an unordered list of ASSIGN, separated by the SEMICOLON character.
In vObject notation its value type is defined to be:
LIST(KEYVALUE, ";")
When normalizing a LIST, each value of it MUST be normalized, and the values MUST be sorted alphabetically.
For example, values of [RFC5545] RESOURCES, FREEBUSY, EXDATE, RDATE, CATEGORIES, MUST be sorted alphabetically when normalized.
A MAP serves the function of a key-value table. It is realized using the LIST value type with values of the value type KEYVALUE.
Each value in the MAP MUST use the KEYVALUE value type.
There is no inherent order of the values within a MAP. Values within its key value pairs MAY be of different value types as defined.
In vFormat syntax, as with LIST, values in a list of values MUST be separated by a delimiting character. The default delimiter character is the SEMICOLON character. An element within any MAP element MUST NOT contain an unescaped delimiter character to prevent breaking of the MAP syntax.
This value type is described using the MAP(kv_1, kv_2, …) function, where each kv_i represents a property of the value type KEYVALUE.
In the case where a delimiter character for the MAP is not a SEMICOLON, the MAP(delimiter, kv_1, kv_2) syntax is used to define the delimiter, where each of its elements is of value type KEYVALUE, and the delimiting character is specified to be delimiter.
The "RECUR" property of [RFC5545] defines its value to be a MAP, separated by the SEMICOLON character.
In vObject notation its value type is defined to be:
MAP( KEYVALUE(FREQ, TEXT), KEYVALUE(UNTIL, ISO-DATE-COMPLETE / ISO-DATE-TIME-BASIC), KEYVALUE(COUNT, INTEGER), KEYVALUE(INTERVAL, INTEGER), KEYVALUE(BYSECOND, LIST(INTEGER)), KEYVALUE(BYMINUTE, LIST(INTEGER)), KEYVALUE(BYHOUR, LIST(INTEGER)), KEYVALUE(BYDAY, LIST(INTEGER)), KEYVALUE(BYMONTHDAY, LIST(INTEGER)), KEYVALUE(BYYEARDAY, LIST(INTEGER)), KEYVALUE(BYWEEKNO, LIST(INTEGER)), KEYVALUE(BYMONTH, LIST(INTEGER)), KEYVALUE(BYSETPOS, INTEGER), KEYVALUE(WKST, TEXT) )
When normalizing a MAP, each value of it MUST be normalized, and the values MUST be sorted alphabetically according to its key.
This corresponds to the TEXT value type in 4.1 and 3.3.11.
TEXT
This value type defines values that contain free-form, human-readable text.
text = *(TSAFE-CHAR / ":" / DQUOTE / ESCAPED-CHAR) ; Folded according to description above ESCAPED-CHAR = ("\\" / "\;" / "\," / "\N" / "\n") ; \\ encodes \, \N or \n encodes newline ; \; encodes ;, \, encodes , TSAFE-CHAR = WSP / %x21 / %x23-2B / %x2D-39 / %x3C-5B / %x5D-7E / NON-US-ASCII ; Any character except CONTROLs not needed by the current ; character set, DQUOTE, ";", ":", "\", ","
For historic reasons, the COMMA and SEMICOLON characters MUST be escaped with a preceding BACKSLASH character (U+005C). The historic usage of the "text" value type accepting multiple values MUST NOT be used unless the multiple values are provided through a LIST.
An intentional line break MUST be represented by the sequence of "\n" or "\N" (BACKSLASH followed by a LATIN SMALL LETTER N (U+006E) or a LATIN CAPITAL LETTER N (U+004E)).
This multiple line value for the NOTE value of vCard:
TC VCARD The Calendaring And Scheduling Consortium July 20, 2017
requires application of the following formatting rules:
and therefore SHOULD be represented as:
NOTE:TC VCARD\nThe Calendaring And Scheduling Consortium\nJuly 20\, 2017
Values of the TEXT data type MUST convert all line breaks ("\n" or "\N") into the character sequence "\n" (BACKSLASH followed by a LATIN SMALL LETTER N (U+006E)).
This corresponds to the URI value type in 4.2 and 3.3.13.
URI
This value type defines values that are represented by data referenced by a uniform resource identifier (URI), the value is what the URI points to, not the URI itself.
uri = <As defined in Section 3 of [RFC3986]>
When a property parameter value is a URI value type, the URI MUST be specified as a quoted-string value.
This value for the PHOTO property of vCard:
PHOTO:http://www.example.com/pub/photos/jqpublic.gif PHOTO:data:image/jpeg;base64,MIICajCCAdOgAwIBAgICBEUwDQYJKoZIhv AQEEBQAwdzELMAkGA1UEBhMCVVMxLDAqBgNVBAoTI05ldHNjYXBlIENvbW11bm ljYXRpb25zIENvcnBvcmF0aW9uMRwwGgYDVQQLExNJbmZvcm1hdGlvbiBTeXN0 <...remainder of base64-encoded data...>
No normalization procedures are needed.
This corresponds to the BOOLEAN value types in 4.4 and 3.3.2.
BOOLEAN
This value type is used to identify properties that contain either a "TRUE" or "FALSE" Boolean value.
boolean = "TRUE" / "FALSE"
Parsing of "TRUE" and "FALSE" values SHOULD be case-insensitive, but a writer of such value MUST only output of this value type in uppercase.
Values of the BOOLEAN data type MUST be normalized to uppercase, i.e., the values "TRUE" and "FALSE".
The INTEGER-64 and INTEGER-32 value types corresponds to the INTEGER value types in 4.5 and in 3.3.8 respectively.
INTEGER
(INTEGER-32 for storing 32-bit integer, INTEGER-64 for storing 64-bit integer)
Representation of a signed integer value.
integer = (["+"] / "-") 1*DIGIT
If a preceding sign is not specified, the value is assumed positive "". While the format accepts the optional "" PLUS sign, a writer that conforms to this document SHOULD not write the "+" sign for clarity reasons.
The valid ranges for INTEGER-32 and INTEGER-64 are:
A positive integer when normalized MUST not have the optional "+" sign.
This corresponds to the FLOAT value types in 3.3.7 and 4.6.
FLOAT
Representation of a real-number value.
float = (["+"] / "-") 1*DIGIT ["." 1*DIGIT]
If a preceding sign is not specified, the value is assumed positive "+".
Implementations MUST support a precision equal or better than that of the IEEE "binary64" format [IEEE.754.2008].
Scientific notation is disallowed.
No normalization procedures are needed.
Trailing zeros, such as 100.10000 MUST be kept as it indicates accuracy of the number.
This corresponds to the LANGUAGE-TAG value type in 4.8.
LANGUAGE-TAG
Representing a language tag, as defined in [RFC5646].
Defined in [RFC5646].
A single language tag
The normalization procedure of the LANGUAGE-TAG data type follows the procedure described in 2.1.1.
As the language tag is comprised of a mixture of these components, [RFC5646] provides a rule that applies this procedure across all language tags:
This corresponds to the BINARY value type in 3.3.1.
BINARY
This value type defines values that contain inline binary data encoded in characters. For example, an inline "ATTACH" property of an iCalendar object or an inline "PHOTO" property image inside a vCard object.
binary = *(4b-char) [b-end] ; A "BASE64" encoded character string, as defined by [RFC4648]. b-end = (2b-char "==") / (3b-char "=") b-char = ALPHA / DIGIT / "+" / "/"
[CREF2]The "BASE64" encoded character string is defined in .
Property values with this value type MUST specify the parameter "ENCODING" with parameter value "BASE64", and the inline binary data MUST be character encoded using the "BASE64" encoding method defined in [RFC2045].
This value for the NOTE value of vCard:
The following is an example of a "BASE64" encoded binary value data:
ATTACH;FMTTYPE=image/vnd.microsoft.icon;ENCODING=BASE64;VALUE =BINARY:AAABAAEAEBAQAAEABAAoAQAAFgAAACgAAAAQAAAAIAAAAAEABAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAgIAAAICAgADAwMAA////AAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAMwAAAAAAABNEMQAAAAAAAkQgAAAAAAJEREQgAA ACECQ0QgEgAAQxQzM0E0AABERCRCREQAADRDJEJEQwAAAhA0QwEQAAAAAERE AAAAAAAAREQAAAAAAAAkQgAAAAAAAAMgAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAA
KEYVALUE(key, value-type)
Representation of a key-value pair: a key key linked to a value of value type value-type.
assign-key = *(TSAFE-CHAR) assign-value = prop-values assign = assign-key "=" assign-value
The separation delimiter between the key and value is the EQUAL sign character, =. The value of KEYVALUE MUST NOT contain the unescaped EQUAL sign character for the avoidance of doubt.
If the KEYVALUE value is accepted within a list, the key value must be unique amongst the list.
This value type is also a core component of the MAP value type.
Its value MUST be normalized according to the value-type of that value.
These date and time related value types are based on [ISO.8601.2004] and [ISO.8601.2000].
Multiple of such values can be specified using the comma-separated notation.
This corresponds to the DATE value type in 3.3.4.
ISO-DATE-COMPLETE
Representation of a complete calendar date defined in [ISO.8601.2004].
iso-date = iso-date-value iso-date-value = iso-date-fullyear iso-date-month iso-date-mday iso-date-fullyear = 4DIGIT iso-date-month = 2DIGIT ;01-12 iso-date-mday = 2DIGIT ;01-28, 01-29, 01-30, 01-31 ;based on month/year
This value format is based on the "basic format" calendar date (specified in 4.1.2.2 "Complete representations").
The value MUST be represented textually as "YYYYMMDD", with its components "YYYY" a four-digit year, "MM" a two-digit month, and "DD" a two-digit day of the month as described in the definition.
The following represents July 1, 1997:
No normalization procedures are needed.
Representation of a calendar date [ISO.8601.2004] that does not require complete representation.
This corresponds to the DATE value type in 4.3.1.
ISO-DATE-FLEX
This value type defines a calendar date format that allows entry of a complete calendar date [ISO.8601.2004], a reduced accuracy date [ISO.8601.2004] and a truncated date [ISO.8601.2004].
iso-date-flex = iso-date / iso-date-reduced / iso-date-truncated iso-date-reduced = iso-date-fullyear / iso-date-year-month iso-date-year-month = iso-date-fullyear "-" iso-date-month iso-date-truncated = iso-date-truncated-month-day / iso-date-truncated-month-only / iso-date-truncated-day-only iso-date-truncated-month-day = "--" iso-date-month iso-date-mday iso-date-truncated-month-only = "--" iso-date-month iso-date-truncated-day-only = "---" iso-date-mday
This value format accepts:
The value can be represented in these ways:
Example:
No normalization procedures are needed.
This corresponds to the "time" portion of the TIMESTAMP value type in 4.3.5.
ISO-TIME-COMPLETE
Representation of a complete time of day with a UTC offset [ISO.8601.2004].
iso-time = time-hour time-minute time-second [iso-time-utc / iso-utc-offset] iso-time-hour = 2DIGIT ;00-23 iso-time-minute = 2DIGIT ;00-59 iso-time-second = 2DIGIT ;00-60 ;The "60" value is used to account for positive "leap" seconds. iso-time-utc = "Z"
This value format accepts a time of day value specified as:
The components mean: "hh" a two-digit, 24-hour of the day (00-23), "mm" a two-digit minute in the hour (00-59), and "ss" a two-digit second in the minute (00-60).
The seconds value of 60 MUST only be used to account for positive "leap" seconds. Fractions of a second are not supported by this format.
This value indicates "local time" as specified in 2.1.16. To indicate UTC time, a "Z" character MUST be appended to the basic format as described in 4.2.4 "UTC of day". To indicate a UTC offset, the "utc-offset" section MUST be specified in accordance with 4.2.5.2.
The value of "hhmmssZ" MUST be used instead of the equivalent "hhmmss+0000" or "hhmmss-0000".
Example:
No normalization procedures are needed.
This corresponds to the TIME value type in 3.3.12.
ISO-TIME-BASIC
Representation of a complete time of day disallowing a UTC offset [ISO.8601.2004].
iso-time-basic = iso-time-hour iso-time-minute iso-time-second [iso-time-utc]
This value format is similar to "TIME" except it disallows the additional UTC offset, (the basic formats of 4.2.5.2 "Local time and the difference from UTC").
This value format accepts a time of day value specified as:
The seconds value of 60 MUST only be used to account for positive "leap" seconds. Fractions of a second are not supported by this format.
This value indicates "local time" as specified in 2.1.16. To indicate UTC time, a "Z" character MUST be appended to the basic format as described in 4.2.4 "UTC of day".
Example:
No normalization procedures are needed.
This corresponds to the TIME value type in 4.3.2.
ISO-TIME-FLEX
This value type defines a time of day format that allows a entry of a complete time of day [ISO.8601.2004], a reduced accuracy date [ISO.8601.2004] and a truncated date representation [ISO.8601.2000].
iso-time-flex = iso-time / iso-time-reduced / iso-time-truncated iso-time-zone = iso-time-utc / iso-time-utc-offset iso-time-reduced = iso-time-reduced-hour-minute / iso-time-hour iso-time-reduced-hour-minute = iso-time-hour iso-time-minute iso-time-truncated = iso-time-truncated-minute-second / iso-time-truncated-minute-only / iso-time-truncated-second-only iso-time-truncated-minute-second = "-" iso-time-minute iso-time-second iso-time-truncated-minute-only = "-" iso-time-minute iso-time-truncated-second-only = "--" iso-time-second
This value format accepts:
The value can be represented in these ways:
The seconds value of 60 MUST only be used to account for positive "leap" seconds. Fractions of a second are not supported by this format.
This value indicates "local time" as specified in 2.1.16. To indicate UTC time, a "Z" character MUST be appended to the basic format as described in 4.2.4 "UTC of day".
This format requires the midnight hour to be represented by "00" (4.2.3 a)), not "24" (4.2.3 b)).
This format supports the specificiation of UTC offsets for the complete representation basic format (defined in 4.2.5.2 basic format), in the form of "hhmmss±HHMM". "HHMM" is the hour and minute of UTC offset, defined in 4.2.5.1 basic format.
Example:
No normalization procedures are needed.
This corresponds to the UTC-OFFSET value type in 4.7.
ISO-UTC-OFFSET
Representation of a UTC offset as described in [ISO.8601.2004].
sign = "+" / "-" iso-utc-offset = sign iso-time-hour [iso-time-minute]
Description:
The value can be represented in two ways:
The PLUS SIGN character MUST be specified for positive UTC offsets (i.e., ahead of UTC). The HYPHEN-MINUS character MUST be specified for negative UTC offsets (i.e., behind of UTC).
The value of "-00" and "-0000" are not allowed. The time-minute, if present, MUST NOT be 60; if absent, it defaults to zero.
The following UTC offsets are given for standard time for New York (five hours behind UTC) and Geneva (one hour ahead of UTC):
No normalization procedures are needed.
This corresponds to the UTC-OFFSET value type in 3.3.14.
CAL-UTC-OFFSET
Representation of a UTC offset as described in [RFC5545].
cal-utc-offset = sign iso-time-hour iso-time-minute [iso-time-second]
The value can be represented in two ways:
The PLUS SIGN character MUST be specified for positive UTC offsets (i.e., ahead of UTC). The HYPHEN-MINUS character MUST be specified for negative UTC offsets (i.e., behind of UTC).
The value of "-0000" and "-000000" are not allowed. The time-second, if present, MUST NOT be 60; if absent, it defaults to zero.
The following UTC offsets are given for standard time for New York (five hours behind UTC) and Geneva (one hour ahead of UTC):
No normalization procedures are needed.
This corresponds to the TIMESTAMP value type in 4.3.5.
ISO-DATE-TIME-COMPLETE
A complete date and time of day combination as specified in 4.3.2
iso-date-time = iso-date "T" iso-time
This value format accepts a complete date and time of day representation, specified in 4.3.2 "Complete representations".
The value can be represented in these ways:
No normalization procedures are needed.
This corresponds to the DATE-TIME value type in 3.3.5.
ISO-DATE-TIME-BASIC
A date and time of day combination without non-UTC timezone as specified in 4.3.2
iso-date-time-no-zone = iso-date "T" iso-time-basic
This value format accepts a complete date and time of day representation, specified in 4.3.2 "Complete representations", identical with ISO-DATE-TIME-COMPLETE, except that the "utc-offset" portion is disallowed.
The value can be represented in these ways:
Due to the lack of "utc-offset", properties that use this value type SHOULD handle time zone information with other methods such as in property parameters, such as using the "TZID" property parameter defined in [RFC5545].
No normalization procedures are needed.
This corresponds to the DATE-TIME value type in 4.3.3.
DATE-TIME-FLEX
This value type defines a date and time of day combination as specified in 4.3 and 5.4.2 c).
iso-date-time-flex = iso-date-time-flex-date "T" iso-date-time-flex-time iso-date-time-flex-date = iso-date / iso-date-truncated iso-date-time-flex-time = iso-time / iso-time-reduced
This value format allows for the:
No normalization procedures are needed.
This corresponds to the DATE-AND-OR-TIME value type in 4.3.4.
ISO-DATE-AND-OR-TIME
Representation of a ISO-DATE-FLEX, ISO-TIME-FLEX or an ISO-DATE-TIME-FLEX value.
iso-date-and-or-time = iso-date-flex / "T" iso-time-flex / iso-date-time-flex
This value format accepts values of ISO-DATE-FLEX, ISO-TIME-FLEX and ISO-DATE-TIME-FLEX.
A stand-alone ISO-TIME value MUST be preceded by a "T" for unambiguous interpretation.
No normalization procedures are needed.
This corresponds to the values accepted by "duration" as specified in [ISO.8601.2004].
ISO-DURATION-COMPLETE
Representing a duration of time specified by 4.4.3.2 complete representation basic format.
iso-duration-sign = ["+"] / "-" iso-duration = ( iso-duration-sign ) "P" iso-duration-value iso-duration-value = iso-duration-date / iso-duration-week iso-duration-date = iso-duration-day "T" iso-duration-time iso-duration-week = 1*DIGIT "W" iso-duration-year = 1*DIGIT "Y" iso-duration-month = 1*DIGIT "M" iso-duration-day = 1*DIGIT "D" iso-duration-time = iso-duration-hour iso-duration-minute iso-duration-second iso-duration-hour = 1*DIGIT "H" iso-duration-minute = 1*DIGIT "M" iso-duration-second = 1*DIGIT "S"
The value format is based on the complete representation basic format specified in 4.4.3.2.
It accepts the following formats ("nn" represents):
This format differs from the specification of 4.4.3.2 in the following areas:
In the case of discontinuities in the time scale, such as the change from standard time to daylight time and back, the computation of the exact duration requires the subtraction or addition of the change of duration of the discontinuity. Leap seconds MUST NOT be considered when computing an exact duration.
A duration of 15 days, 5 hours, and 20 seconds MAY be represented as
A duration of 7 weeks MAY be represented as:
No normalization procedures are needed.
This corresponds to the DURATION value type in 3.3.6.
CAL-DURATION
Representing a duration of time specified by 4.4.3.2 complete representation basic format, similar to ISO-DURATION, but with syntax tailored to calendaring.
cal-duration = cal-duration-sign cal-duration-no-sign cal-duration-sign = (["+"] / "-") cal-duration-no-sign = "P" cal-duration-value cal-duration-value = ( cal-duration-date / cal-duration-time / cal-duration-week ) cal-duration-date = cal-duration-day [cal-duration-time] cal-duration-time = "T" ( cal-duration-hour / cal-duration-minute / cal-duration-second ) cal-duration-week = 1*DIGIT "W" cal-duration-hour = 1*DIGIT "H" [cal-duration-minute] cal-duration-minute = 1*DIGIT "M" [cal-duration-second] cal-duration-second = 1*DIGIT "S" cal-duration-day = 1*DIGIT "D"
The value format is similar to ISO-DURATION and based on the complete representation basic format specified in 4.4.3.2, but given extra flexibility to calendaring usage.
It accepts the following formats ("nn" represents):
This format differs from the specification of 4.4.3.2 in the following areas:
In the case of discontinuities in the time scale, such as the change from standard time to daylight time and back, the computation of the exact duration requires the subtraction or addition of the change of duration of the discontinuity. Leap seconds MUST NOT be considered when computing an exact duration.
When computing an exact duration, the greatest order time components MUST be added first, that is, the number of days MUST be added first, followed by the number of hours, number of minutes, and number of seconds.
A duration of 0 days, 0 hours, and 20 seconds SHOULD be represented as
P0DT0H0M20S
A duration of 15 days, 5 hours, and 3 hours SHOULD be represented as
P15DT5H3M
A duration of 15 days, 5 hours SHOULD be represented as
P15DT5H
A duration of 15 days SHOULD be represented as
P15D
A duration of 7 weeks SHOULD be represented as:
P7W
No normalization procedures are needed.
This corresponds to the values accepted by "time interval" as specified in [ISO.8601.2004].
ISO-INTERVAL-COMPLETE
Representation of a time interval.
iso-interval = iso-interval-explicit / iso-interval-start iso-interval-explicit = iso-date-time "/" iso-date-time iso-interval-start = iso-date-time "/" iso-duration-no-sign
This value format accepts a time interval representation, specified in 4.4 "Time Interval".
The value can be represented by:
a) a start and an end;
c) a start and a duration;
d) a duration and an end.
In accordance with 4.4.4.5:
In accordance with 4.4.5:
No normalization procedures are needed.
This corresponds to the PERIOD value type in 3.3.9.
CAL-INTERVAL
Representation of a time interval for calendaring.
cal-interval = cal-interval-explicit / cal-interval-start cal-interval-explicit = iso-date-time-no-zone "/" iso-date-time-no-zone cal-interval-start = iso-date-time-no-zone "/" cal-duration-no-sign
This value format accepts a time interval representation, specified in 4.4. "Time Interval" tailored for calendaring purposes.
The value can be represented in two ways.
As an interval with start and end:
As an interval with start and duration (positive duration only):
In accordance with 4.4.5, representations for UTC included with the component preceding the solidus shall be assumed to apply to the component following the solidus, unless a corresponding alternative is included.
No normalization procedures are needed.
TODO: vFormat URI in parameter values should be wrapped with DQUOTES.
PARAM-VALUE
This parameter value type is the basic value type for parameter values.
param-value = paramtext / quoted-string paramtext = *SAFE-CHAR quoted-string = DQUOTE *QSAFE-CHAR DQUOTE QSAFE-CHAR = WSP / %x21 / %x23-7E / NON-US-ASCII ; Any character except CONTROL and DQUOTE SAFE-CHAR = WSP / %x21 / %x23-2B / %x2D-39 / %x3C-7E / NON-US-ASCII ; Any character except CONTROL, DQUOTE, ";", ":", "," NON-US-ASCII = UTF8-2 / UTF8-3 / UTF8-4 ; UTF8-2, UTF8-3, and UTF8-4 are defined in [RFC3629] CONTROL = %x00-08 / %x0A-1F / %x7F ; All the controls except HTAB
Values that contain the COLON, SEMICOLON, or COMMA character separators MUST be specified as quoted-string text values.
Property parameter values that contain the DQUOTE character MUST be escaped and specified as quoted-string text values.
Property parameter values that are not in quoted-strings are case-insensitive.
An intentional line break MUST be represented by the sequence of "\n" or "\N" (BACKSLASH followed by a LATIN SMALL LETTER N (U+006E) or a LATIN CAPITAL LETTER N (U+004E)).
The value cid:part1.0001@example.org in the parameter ALTREP within a DESCRIPTION property in iCalendar can be specified like this:
DESCRIPTION;ALTREP="cid:part1.0001@example.org":The Fall'98 Wild Wizards Conference - - Las Vegas\, NV\, USA
Values of the PARAM-VALUE parameter data type MUST convert all line breaks ("\n" or "\N") into the character sequence "\n" (BACKSLASH followed by a LATIN SMALL LETTER N (U+006E)).
If a value of the PARAM-VALUE type is specified as paramtext (i.e., not inside a quoted-string), the value should be down-cased.
All vObject property value types are allowed in parameter values.
Two primitives are defined to convert property value types into an acceptable parameter value type within vFormat:
A normalization procedure can be applied to vObjects (in its various representations) to make them compatible prior to comparison, allowing for consistent results. The result of normalization processing of a vObject, is an equivalent vObject described according to vFormat representation.
The normalization method has the following properties:
There are two levels of normalization.
The goals of the normalization procedure are:
In order to serialize a vObject into normalized vFormat syntax, one would directly serialize the vObject data model into vFormat syntax.
The steps are generally described below.
The normalization procedure applies to alternative vObject representations as well, including:
To normalize a vObject provided in these representations, the vObject data should be first normalized in data model form according to Section 4, and then serialized into these representations.
A CUA SHOULD normalize the vObject upon modification of it.
This specification creates an additional precondition and postcondition for the PUT, COPY, and MOVE methods when:
Certain servers perform silent changes or cleanups of client provided vCard data when stored as address object resources, such as the order of property parameters or scrubbed values.
The resulting vCard data stored on the server (and when returned back to the client) MAY end up different than that of the client without its knowledge. It is therefore necessary for the client to be reported on such modifications.
Additional Postcondition:
(CARDDAV:resource-normalized): Convert to normalized format.
TODO.
Security considerations around vObject formats in the following documents MUST be adhered to:
New vObject and vFormat specifications produced MUST adhere to the requirements, including the normalization process, described in this document, and any exceptions or further instructions for normalization MUST be described.
This section defines the process to register new or modified uniqueness properties for vObject components with IANA.
The IETF will create a mailing list, vobject@ietf.org, which can be used for public discussion of vObject elements prior to registration.
The registry policy is Specification Required; any newly proposed specification MUST be reviewed by the designated expert.
The registry SHOULD contain the following note:
Note: Experts are to verify that the proposed registration *SHOULD* provide benefits for the wider vObject community, and provides a publicly-available standard that can be implemented in an interoperable way. References to IETF-published documents are preferred. The "Reference" value should point to a document that details the implementation of this property.
The registration procedure begins when a completed registration template, defined in the sections below, is sent to vobject@ietf.org and iana@iana.org.
The designated expert is expected to tell IANA and the submitter of the registration within two weeks whether the registration is approved, approved with minor changes, or rejected with cause. When a registration is rejected with cause, it can be re-submitted if the concerns listed in the cause are addressed. Decisions made by the designated expert can be appealed to the IESG Applications Area Director, then to the IESG. They follow the normal appeals procedure for IESG decisions.
A registration for a vObject Component Uniqueness Property is defined by completing the following template.
The IANA created and maintains this registry for vObject Component Uniqueness Identifiers with pointers to appropriate reference documents.
The following table has been used to initialize the registry.
Component | Property | Scope | Reference |
---|---|---|---|
VCALENDAR | UID | Global | 5.3 |
VCARD | UID | Global | 6.7.6 |
VEVENT | UID | Global | 3.6.1 |
VTODO | UID | Global | 3.6.2 |
VJOURNAL | UID | Global | 3.6.3 |
VFREEBUSY | UID | Global | 3.6.4 |
VTIMEZONE | TZID | Global | 3.6.5 |
STANDARD | DTSTART | Parent | 3.6.5 |
DAYLIGHT | DTSTART | Parent | 3.6.5 |
VALARM | UID | Global | 4 |
VAVAILABILITY | UID | Global | 3.1 |
AVAILABLE | UID | Global | 3.1 |
VPOLL | UID | Parent | 4.5.1 |
VVOTER | VOTER | Parent | 4.5.2 |
VOTE | POLL-ITEM-ID | Parent | 4.5.3 |
Data Type | Original Data Type |
---|---|
BOOLEAN | BOOLEAN |
ISO-DATE-FLEX | DATE |
ISO-DATE-AND-OR-TIME | DATE-AND-OR-TIME |
ISO-DATE-TIME-FLEX | DATE-TIME |
FLOAT | FLOAT |
INTEGER-64 | INTEGER |
LANGUAGE-TAG | LANGUAGE-TAG |
TEXT | TEXT |
ISO-TIME-FLEX | TIME |
ISO-TIME-COMPLETE | TIMESTAMP |
URI | URI |
ISO-UTC-OFFSET | UTC-OFFSET |
Data Type | Original Data Type |
---|---|
BINARY | BINARY |
BOOLEAN | BOOLEAN |
URI | CAL-ADDRESS |
ISO-DATE-COMPLETE | DATE |
ISO-DATE-TIME-BASIC | DATE-TIME |
CAL-DURATION | DURATION |
FLOAT | FLOAT |
INTEGER-32 | INTEGER |
CAL-DURATION | PERIOD |
TEXT | TEXT |
ISO-TIME-BASIC | TIME |
URI | URI |
CAL-UTC-OFFSET | UTC-OFFSET |
RECURMAP Section 13.2.1 | RECUR |
RECURMAP is shown here instead of within the tables due to space constraints.
It is defined to be:
RECURMAP = MAP( KEYVALUE(FREQ, TEXT), KEYVALUE(UNTIL, ISO-DATE-COMPLETE / ISO-DATE-TIME-BASIC), KEYVALUE(COUNT, INTEGER), KEYVALUE(INTERVAL, INTEGER), KEYVALUE(BYSECOND, LIST(INTEGER)), KEYVALUE(BYMINUTE, LIST(INTEGER)), KEYVALUE(BYHOUR, LIST(INTEGER)), KEYVALUE(BYDAY, LIST(INTEGER)), KEYVALUE(BYMONTHDAY, LIST(INTEGER)), KEYVALUE(BYYEARDAY, LIST(INTEGER)), KEYVALUE(BYWEEKNO, LIST(INTEGER)), KEYVALUE(BYMONTH, LIST(INTEGER)), KEYVALUE(BYSETPOS, INTEGER), KEYVALUE(WKST, TEXT) )
Properties with the default data type as TEXT.
Property | Default Data Type | Alt. Data Types | Original Data Type |
---|---|---|---|
BEGIN | TEXT | 1\*TEXT | |
END | TEXT | 1\*TEXT | |
KIND | TEXT | 1\*TEXT | |
XML | TEXT | 1\*TEXT | |
FN | TEXT | 1\*TEXT | |
BDAY | ISO-DATE-AND-OR-TIME | TEXT | 1\*date-and-or-time, 1\*text |
ANNIVERSARY | ISO-DATE-AND-OR-TIME | TEXT | 1\*date-and-or-time, 1\*text |
TEXT | 1\*TEXT, | ||
TZ | TEXT | URI, ISO-UTC-OFFSET | 1\*TEXT, URI, UTC-OFFSET |
TITLE | TEXT | 1\*TEXT | |
ROLE | TEXT | 1\*TEXT | |
NOTE | TEXT | 1\*TEXT | |
PRODID | TEXT | 1\*TEXT | |
VERSION | TEXT | 1\*TEXT |
Properties with the default data type as URI.
Property | Default Data Type | Alt. Data Types | Original Data Type |
---|---|---|---|
TEL | URI | TEXT | 1\*text, URI |
SOURCE | URI | URI | |
PHOTO | URI | URI | |
IMPP | URI | URI | |
GEO | URI | URI | |
LOGO | URI | URI | |
MEMBER | URI | URI | |
RELATED | URI | TEXT | URI, 1\*text |
UID | URI | URI, 1\*text | |
KEY | URI | URI, 1\*text | |
SOUND | URI | URI | |
URL | URI | URI | |
FBURL | URI | URI | |
CALADRURI | URI | URI | |
CALURI | URI | URI |
Properties with FIELDSET.
Property | Default Data Type | Alt. Data Types | Original Data Type |
---|---|---|---|
N | FIELDSET(5\*LIST(TEXT)) | TEXT | |
GENDER | FIELDSET(2\*TEXT) | TEXT | |
ADR | FIELDSET(7\*LIST(TEXT)) | TEXT | |
ORG | FIELDSET(1\*TEXT) | TEXT | |
CLIENTPIDMAP | FIELDSET(INTEGER-64, URI) | TEXT |
Properties with LIST.
Property | Default Data Type | Alt. Data Types | Original Data Type |
---|---|---|---|
NICKNAME | LIST(TEXT) | TEXT | |
CATEGORIES | LIST(TEXT) | TEXT |
Properties with ISO-DATE-AND-OR-TIME.
Property | Default Data Type | Alt. Data Types | Original Data Type |
---|---|---|---|
BDAY | ISO-DATE-AND-OR-TIME | TEXT | date-and-or-time, text |
ANNIVERSARY | ISO-DATE-AND-OR-TIME | TEXT | date-and-or-time, text |
Properties with ISO-DATE-TIME-COMPLETE.
Property | Default Data Type | Alt. Data Types | Original Data Type |
---|---|---|---|
REV | ISO-DATE-TIME-COMPLETE | timestamp |
Properties with LANGUAGE-TAG.
Property | Default Data Type | Alt. Data Types | Original Data Type |
---|---|---|---|
LANG | LANGUAGE-TAG | language-tag |
Property | Default Data Type | Alt. Data Types | Original Data Type |
---|---|---|---|
PRODID | TEXT | 1\*TEXT | |
VERSION | TEXT | 1\*TEXT | |
CALSCALE | TEXT | 1\*TEXT | |
METHOD | TEXT | 1\*TEXT | |
IANA-REGed/X- | TEXT | 1\*TEXT |
Property | Default Data Type | Alt. Data Types | Original Data Type |
---|---|---|---|
DTSTAMP | ISO-DATE-TIME-BASIC | DATE-TIME | |
UID | TEXT | 1\*TEXT | |
DTSTART | ISO-DATE-TIME-BASIC | ISO-DATE-COMPLETE | DATE-TIME, DATE |
CLASS | TEXT | 1\*TEXT | |
CREATED | ISO-DATE-TIME-BASIC | DATE-TIME | |
DESCRIPTION | TEXT | 1\*TEXT | |
GEO | FIELDSET(2\*FLOAT) | FLOAT ";" FLOAT | |
LAST-MODIFIED | ISO-DATE-TIME-BASIC | DATE-TIME | |
LOCATION | TEXT | 1\*TEXT | |
ORGANIZER | URI | cal-address | |
PRIORITY | INTEGER-32 | INTEGER | |
SEQUENCE | INTEGER-32 | INTEGER | |
STATUS | TEXT | 1\*TEXT | |
SUMMARY | TEXT | 1\*TEXT | |
TRANSP | TEXT | 1\*TEXT | |
URL | URI | URI | |
RECURRENCE-ID | ISO-DATE-TIME-BASIC | ISO-DATE-COMPLETE | DATE-TIME, DATE |
RRULE | RECURMAP Section 13.2.1 | RECUR | |
DTEND | ISO-DATE-TIME-BASIC | ISO-DATE-COMPLETE | DATE-TIME, DATE |
DURATION | DURATION | DURATION | |
ATTACH | URI | BINARY | URI, BINARY |
ATTENDEE | URI | cal-address | |
CATEGORIES | LIST(TEXT) | TEXT | |
COMMENT | TEXT | 1\*TEXT | |
CONTACT | TEXT | 1\*TEXT | |
EXDATE | LIST( ISO-DATE-TIME-BASIC / ISO-DATE-COMPLETE ) | DATE-TIME, DATE | |
RELATED-TO | TEXT | 1\*TEXT | |
RESOURCES | LIST(TEXT) | TEXT | |
RDATE | LIST( ISO-DATE-TIME-BASIC / ISO-DATE-COMPLETE / CAL-INTERVAL) | DATE-TIME, DATE, PERIOD | |
IANA-REGed/X- | TEXT | 1\*TEXT |
Property | Default Data Type | Alt. Data Types | Original Data Type |
---|---|---|---|
DTSTAMP | ISO-DATE-TIME-BASIC | DATE-TIME | |
UID | TEXT | 1\*TEXT | |
CLASS | TEXT | 1\*TEXT | |
CREATED | ISO-DATE-TIME-BASIC | DATE-TIME | |
COMPLETED | ISO-DATE-TIME-BASIC | DATE-TIME | |
DESCRIPTION | TEXT | 1\*TEXT | |
DTSTART | ISO-DATE-TIME-BASIC | ISO-DATE-COMPLETE | DATE-TIME, DATE |
GEO | FIELDSET(2\*FLOAT) | FLOAT ";" FLOAT | |
LAST-MODIFIED | ISO-DATE-TIME-BASIC | DATE-TIME | |
LOCATION | TEXT | 1\*TEXT | |
ORGANIZER | URI | cal-address | |
PRIORITY | INTEGER-32 | INTEGER | |
SEQUENCE | INTEGER-32 | INTEGER | |
STATUS | TEXT | 1\*TEXT | |
SUMMARY | TEXT | 1\*TEXT | |
URL | URI | URI | |
RRULE | RECURMAP Section 13.2.1 | RECUR | |
DUE | ISO-DATE-TIME-BASIC | ISO-DATE-COMPLETE | DATE-TIME, DATE |
DURATION | DURATION | DURATION | |
ATTACH | URI | BINARY | URI, BINARY |
ATTENDEE | URI | cal-address | |
CATEGORIES | LIST(TEXT) | TEXT | |
COMMENT | TEXT | 1\*TEXT | |
CONTACT | TEXT | 1\*TEXT | |
EXDATE | LIST( ISO-DATE-TIME-BASIC / ISO-DATE-COMPLETE ) | DATE-TIME, DATE | |
REQUEST-STATUS | TEXT | 1\*TEXT | |
RELATED-TO | TEXT | 1\*TEXT | |
RESOURCES | LIST(TEXT) | TEXT | |
RDATE | LIST( ISO-DATE-TIME-BASIC / ISO-DATE-COMPLETE / CAL-INTERVAL) | DATE-TIME, DATE, PERIOD | |
IANA-REGed/X- | TEXT | 1\*TEXT |
Property | Default Data Type | Alt. Data Types | Original Data Type |
---|---|---|---|
DTSTAMP | ISO-DATE-TIME-BASIC | DATE-TIME | |
UID | TEXT | 1\*TEXT | |
CLASS | TEXT | 1\*TEXT | |
CREATED | ISO-DATE-TIME-BASIC | DATE-TIME | |
DTSTART | ISO-DATE-TIME-BASIC | ISO-DATE-COMPLETE | DATE-TIME, DATE |
LAST-MODIFIED | ISO-DATE-TIME-BASIC | DATE-TIME | |
ORGANIZER | URI | cal-address | |
SEQUENCE | INTEGER-32 | INTEGER | |
STATUS | TEXT | 1\*TEXT | |
SUMMARY | TEXT | 1\*TEXT | |
URL | URI | URI | |
RRULE | RECURMAP Section 13.2.1 | RECUR | |
ATTACH | URI | BINARY | URI, BINARY |
ATTENDEE | URI | cal-address | |
CATEGORIES | LIST(TEXT) | TEXT | |
COMMENT | TEXT | 1\*TEXT | |
CONTACT | TEXT | 1\*TEXT | |
DESCRIPTION | TEXT | 1\*TEXT | |
EXDATE | LIST( ISO-DATE-TIME-BASIC / ISO-DATE-COMPLETE ) | DATE-TIME, DATE | |
RELATED-TO | TEXT | 1\*TEXT | |
RDATE | LIST( ISO-DATE-TIME-BASIC / ISO-DATE-COMPLETE / CAL-INTERVAL) | DATE-TIME, DATE, PERIOD | |
REQUEST-STATUS | TEXT | 1\*TEXT | |
IANA-REGed/X- | TEXT | 1\*TEXT |
Property | Default Data Type | Alt. Data Types | Original Data Type |
---|---|---|---|
DTSTAMP | ISO-DATE-TIME-BASIC | DATE-TIME | |
UID | TEXT | 1\*TEXT | |
CONTACT | TEXT | 1\*TEXT | |
DTSTART | ISO-DATE-TIME-BASIC | ISO-DATE-COMPLETE | DATE-TIME, DATE |
DTEND | ISO-DATE-TIME-BASIC | ISO-DATE-COMPLETE | DATE-TIME, DATE |
ORGANIZER | URI | cal-address | |
URL | URI | URI | |
ATTENDEE | URI | cal-address | |
COMMENT | TEXT | 1\*TEXT | |
FREEBUSY | LIST(CAL-INTERVAL) | LIST(PERIOD) | |
REQUEST-STATUS | TEXT | 1\*TEXT | |
IANA-REGed/X- | TEXT | 1\*TEXT |
Property | Default Data Type | Alt. Data Types | Original Data Type |
---|---|---|---|
TZID | TEXT | 1\*TEXT | |
LAST-MODIFIED | ISO-DATE-TIME-BASIC | DATE-TIME | |
TZURL | URI | URI | |
IANA-REGed/X- | TEXT | 1\*TEXT |
Property | Default Data Type | Alt. Data Types | Original Data Type |
---|---|---|---|
DTSTART | ISO-DATE-TIME-BASIC | ISO-DATE-COMPLETE | DATE-TIME, DATE |
TZOFFSETFROM | CAL-UTC-OFFSET | UTC-OFFSET | |
TZOFFSETTO | CAL-UTC-OFFSET | UTC-OFFSET | |
RRULE | RECURMAP Section 13.2.1 | RECUR | |
COMMENT | TEXT | 1\*TEXT | |
RDATE | LIST( ISO-DATE-TIME-BASIC / ISO-DATE-COMPLETE / CAL-INTERVAL) | DATE-TIME, DATE, PERIOD | |
TZNAME | TEXT | 1\*TEXT | |
IANA-REGed/X- | TEXT | 1\*TEXT |
Property | Default Data Type | Alt. Data Types | Original Data Type |
---|---|---|---|
ACTION | TEXT | 1\*TEXT | |
DESCRIPTION | TEXT | 1\*TEXT | |
SUMMARY | TEXT | 1\*TEXT | |
TRIGGER | DURATION | ISO-DATE-TIME-BASIC | DURATION, DATE-TIME |
DURATION | DURATION | DURATION | |
REPEAT | INTEGER-32 | INTEGER | |
ATTACH | URI | BINARY | URI, BINARY |
ATTENDEE | URI | cal-address | |
IANA-REGed/X- | TEXT | 1\*TEXT |
Parameter | Data Type |
---|---|
LANGUAGE | LANGUAGE-TAG |
VALUE | TEXT |
PREF | INTEGER-64 |
ALTID | TEXT |
PID | TEXT |
TYPE | LIST(TEXT) |
MEDIATYPE | TEXT |
CALSCALE | TEXT |
SORT-AS | LIST(TEXT) |
GEO | URI |
TZ | TEXT |
Parameter | Data Type |
---|---|
ALTREP | URI |
CN | TEXT |
CUTYPE | TEXT |
DELEGATED-FROM | URI |
DELEGATED-TO | URI |
DIR | URI |
ENCODING | TEXT |
FMTTYPE | TEXT |
FBTYPE | TEXT |
LANGUAGE | LANGUAGE-TAG |
MEMBER | LIST(URI) |
PARTSTAT | TEXT |
RANGE | TEXT |
RELATED | TEXT |
RELTYPE | TEXT |
ROLE | TEXT |
RSVP | BOOLEAN |
SENT-BY | URI |
TZID | TEXT |
VALUE | TEXT |
[RFC2119] | Bradner, S., "Key words for use in RFCs to Indicate Requirement Levels", BCP 14, RFC 2119, DOI 10.17487/RFC2119, March 1997. |
[RFC3986] | Berners-Lee, T., Fielding, R. and L. Masinter, "Uniform Resource Identifier (URI): Generic Syntax", STD 66, RFC 3986, DOI 10.17487/RFC3986, January 2005. |
[RFC5545] | Desruisseaux, B., "Internet Calendaring and Scheduling Core Object Specification (iCalendar)", RFC 5545, DOI 10.17487/RFC5545, September 2009. |
[RFC5646] | Phillips, A. and M. Davis, "Tags for Identifying Languages", BCP 47, RFC 5646, DOI 10.17487/RFC5646, September 2009. |
[RFC6350] | Perreault, S., "vCard Format Specification", RFC 6350, DOI 10.17487/RFC6350, August 2011. |
[RFC8126] | Cotton, M., Leiba, B. and T. Narten, "Guidelines for Writing an IANA Considerations Section in RFCs", BCP 26, RFC 8126, DOI 10.17487/RFC8126, June 2017. |
[RFC8174] | Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, May 2017. |
Original:
BEGIN:VOBJECT PROPERTY1:10 PROPERTY2:20 END:VOBJECT
Normalized:
BEGIN:VOBJECT PROPERTY1:10 PROPERTY2:20 END:VOBJECT
Original:
BEGIN:VCARD VERSION:4.0 KIND:individual FN:Martin Van Buren N:Van Buren;Martin;;;Hon. TEL;VALUE=uri;PREF=1;TYPE="voice";TYPE="home":tel:+1-888-888-8888;ext=8888 END:VCARD
Normalized:
BEGIN:VCARD VERSION:4.0 KIND:individual FN:Martin Van Buren N:Van Buren;Martin;;;Hon. TEL;VALUE=uri;PREF=1;TYPE="voice,home":tel:+1-888-888-8888;ext=8888 END:VCARD
The authors wish to thank their families and the following parties who helped this materialize and for their support of a better and vObject-enabled world:
This specification was developed by the CalConnect TC-VCARD committee.