--- /dev/null
+ default namespace = "urn:ietf:params:xml:ns:icalendar-2.0"
+
+ # 3.2 Property Parameters
+
+ # 3.2.1 Alternate Text Representation
+
+ altrepparam = element altrep {
+ value-uri
+ }
+
+ # 3.2.2 Common Name
+
+ cnparam = element cn {
+ value-text
+ }
+
+ # 3.2.3 Calendar User Type
+
+ cutypeparam = element cutype {
+ element text {
+ "INDIVIDUAL" |
+ "GROUP" |
+ "RESOURCE" |
+ "ROOM" |
+ "UNKNOWN"
+ }
+ }
+
+ # 3.2.4 Delegators
+
+ delfromparam = element delegated-from {
+ value-cal-address+
+ }
+
+ # 3.2.5 Delegatees
+
+ deltoparam = element delegated-to {
+ value-cal-address+
+ }
+
+ # 3.2.6 Directory Entry Reference
+
+ dirparam = element dir {
+ value-uri
+ }
+
+ # 3.2.7 Inline Encoding
+
+ encodingparam = element encoding {
+ element text {
+ "8BIT" |
+ "BASE64"
+ }
+ }
+
+ # 3.2.8 Format Type
+
+ fmttypeparam = element fmttype {
+ value-text
+ }
+
+ # 3.2.9 Free/Busy Time Type
+
+ fbtypeparam = element fbtype {
+ element text {
+ "FREE" |
+ "BUSY" |
+ "BUSY-UNAVAILABLE" |
+ "BUSY-TENTATIVE"
+ }
+ }
+
+ # 3.2.10 Language
+
+ languageparam = element language {
+ value-text
+ }
+
+ # 3.2.11 Group or List Membership
+
+ memberparam = element member {
+ value-cal-address+
+ }
+
+ # 3.2.12 Participation Status
+
+ partstatparam = element partstat {
+ type-partstat-event |
+ type-partstat-todo |
+ type-partstat-jour
+ }
+
+ type-partstat-event = (
+ element text {
+ "NEEDS-ACTION" |
+ "ACCEPTED" |
+ "DECLINED" |
+ "TENTATIVE" |
+ "DELEGATED"
+ }
+ )
+
+ type-partstat-todo = (
+ element text {
+ "NEEDS-ACTION" |
+ "ACCEPTED" |
+ "DECLINED" |
+ "TENTATIVE" |
+ "DELEGATED" |
+ "COMPLETED" |
+ "IN-PROCESS"
+ }
+ )
+
+ type-partstat-jour = (
+ element text {
+ "NEEDS-ACTION" |
+ "ACCEPTED" |
+ "DECLINED"
+ }
+ )
+
+ # 3.2.13 Recurrence Identifier Range
+
+ rangeparam = element range {
+ element text {
+ "THISANDFUTURE"
+ }
+ }
+
+ # 3.2.14 Alarm Trigger Relationship
+
+ trigrelparam = element related {
+ element text {
+ "START" |
+ "END"
+ }
+ }
+
+ # 3.2.15 Relationship Type
+
+ reltypeparam = element reltype {
+ element text {
+ "PARENT" |
+ "CHILD" |
+ "SIBLING"
+ }
+ }
+
+ # 3.2.16 Participation Role
+
+ roleparam = element role {
+ element text {
+ "CHAIR" |
+ "REQ-PARTICIPANT" |
+ "OPT-PARTICIPANT" |
+ "NON-PARTICIPANT"
+ }
+ }
+
+ # 3.2.17 RSVP Expectation
+
+ rsvpparam = element rsvp {
+ value-boolean
+ }
+
+ # 3.2.18 Sent By
+
+ sentbyparam = element sent-by {
+ value-cal-address
+ }
+
+ # 3.2.19 Time Zone Identifier
+
+ tzidparam = element tzid {
+ value-text
+ }
+
+ # 3.3 Property Value Data Types
+
+ # 3.3.1 BINARY
+
+ value-binary = element binary {
+ xsd:string
+ }
+
+ # 3.3.2 BOOLEAN
+
+ value-boolean = element boolean {
+ xsd:boolean
+ }
+
+ # 3.3.3 CAL-ADDRESS
+
+ value-cal-address = element cal-address {
+ xsd:anyURI
+ }
+
+ # 3.3.4 DATE
+
+ pattern-date = xsd:string {
+ pattern = "\d\d\d\d-\d\d-\d\d"
+ }
+
+ value-date = element date {
+ pattern-date
+ }
+
+ # 3.3.5 DATE-TIME
+
+ pattern-date-time = xsd:string {
+ pattern = "\d\d\d\d-\d\d-\d\dT\d\d:\d\d:\d\dZ?"
+ }
+
+ value-date-time = element date-time {
+ pattern-date-time
+ }
+
+ # 3.3.6 DURATION
+
+ pattern-duration = xsd:string {
+ pattern = "(+|-)?P(\d+W)|(\d+D)?"
+ ~ "(T(\d+H(\d+M)?(\d+S)?)|"
+ ~ "(\d+M(\d+S)?)|"
+ ~ "(\d+S))?"
+ }
+
+ value-duration = element duration {
+ pattern-duration
+ }
+
+ # 3.3.7 FLOAT
+
+ value-float = element float {
+ xsd:float
+ }
+
+ # 3.3.8 INTEGER
+
+ value-integer = element integer {
+ xsd:integer
+ }
+
+ # 3.3.9 PERIOD
+
+ value-period = element period {
+ element start {
+ pattern-date-time
+ },
+ (
+ element end {
+ pattern-date-time
+ } |
+ element duration {
+ pattern-duration
+ }
+ )
+ }
+
+ # 3.3.10 RECUR
+
+ value-recur = element recur {
+ type-freq,
+ (type-until | type-count)?,
+ element interval {
+ xsd:positiveInteger
+ }?,
+ type-bysecond*,
+ type-byminute*,
+ type-byhour*,
+ type-byday*,
+ type-bymonthday*,
+ type-byyearday*,
+ type-byweekno*,
+ type-bymonth*,
+ type-bysetpos*,
+ element wkst { type-weekday }?
+ }
+
+ type-freq = element freq {
+ "SECONDLY" |
+ "MINUTELY" |
+ "HOURLY" |
+ "DAILY" |
+ "WEEKLY" |
+ "MONTHLY" |
+ "YEARLY"
+ }
+
+ type-until = element until {
+ type-date |
+ type-date-time
+ }
+
+ type-count = element count {
+ xsd:positiveInteger
+ }
+
+ type-bysecond = element bysecond {
+ xsd:positiveInteger
+ }
+
+ type-byminute = element byminute {
+ xsd:positiveInteger
+ }
+
+ type-byhour = element byhour {
+ xsd:positiveInteger
+ }
+
+ type-weekday = (
+ "SU" |
+ "MO" |
+ "TU" |
+ "WE" |
+ "TH" |
+ "FR" |
+ "SA"
+ )
+
+ type-byday = element byday {
+ xsd:integer?,
+ type-weekday
+ }
+
+ type-bymonthday = element bymonthday {
+ xsd:integer
+ }
+
+ type-byyearday = element byyearday {
+ xsd:integer
+ }
+
+ type-byweekno = element byweekno {
+ xsd:integer
+ }
+
+ type-bymonth = element bymonth {
+ xsd:positiveInteger
+ }
+
+ type-bysetpos = element bysetpos {
+ xsd:integer
+ }
+
+ # 3.3.11 TEXT
+
+ value-text = element text {
+ xsd:string
+ }
+
+ # 3.3.12 TIME
+
+ pattern-time = xsd:string {
+ pattern = "\d\d:\d\d:\d\dZ?"
+ }
+
+ value-time = element time {
+ pattern-time
+ }
+
+ # 3.3.13 URI
+
+ value-uri = element uri {
+ xsd:anyURI
+ }
+
+ # 3.3.14 UTC-OFFSET
+
+ value-utc-offset = element utc-offset {
+ xsd:string { pattern = "(+|-)\d\d:\d\d(:\d\d)?" }
+ }
+
+ # UNKNOWN
+
+ value-unknown = element unknown {
+ xsd:string
+ }
+
+ # 3.4 iCalendar Stream
+
+ start = element icalendar {
+ vcalendar+
+ }
+
+ # 3.6 Calendar Components
+
+ vcalendar = element vcalendar {
+ type-calprops,
+ type-component
+ }
+
+ type-calprops = element properties {
+ property-prodid &
+ property-version &
+ property-calscale? &
+ property-method?
+ }
+
+ type-component = element components {
+ (
+ component-vevent |
+ component-vtodo |
+ component-vjournal |
+ component-vfreebusy |
+ component-vtimezone
+ )*
+ }
+
+ # 3.6.1 Event Component
+
+ component-vevent = element vevent {
+ type-eventprop,
+ element components {
+ component-valarm+
+ }?
+ }
+
+ type-eventprop = element properties {
+ property-dtstamp &
+ property-dtstart &
+ property-uid &
+
+ property-class? &
+ property-created? &
+ property-description? &
+ property-geo? &
+ property-last-mod? &
+ property-location? &
+ property-organizer? &
+ property-priority? &
+ property-seq? &
+ property-status-event? &
+
+ property-summary? &
+ property-transp? &
+ property-url? &
+ property-recurid? &
+
+ property-rrule? &
+
+ (property-dtend | property-duration)? &
+
+ property-attach* &
+ property-attendee* &
+ property-categories* &
+ property-comment* &
+ property-contact* &
+ property-exdate* &
+ property-rstatus* &
+ property-related* &
+ property-resources* &
+ property-rdate*
+ }
+
+ # 3.6.2 To-do Component
+
+ component-vtodo = element vtodo {
+ type-todoprop,
+ element components {
+ component-valarm+
+ }?
+ }
+
+ type-todoprop = element properties {
+ property-dtstamp &
+ property-uid &
+
+ property-class? &
+ property-completed? &
+ property-created? &
+ property-description? &
+ property-geo? &
+ property-last-mod? &
+ property-location? &
+ property-organizer? &
+ property-percent? &
+ property-priority? &
+ property-recurid? &
+ property-seq? &
+ property-status-todo? &
+ property-summary? &
+
+ property-url? &
+
+ property-rrule? &
+
+ (
+ (property-dtstart?, property-dtend? ) |
+ (property-dtstart, property-duration)?
+ ) &
+
+ property-attach* &
+ property-attendee* &
+ property-categories* &
+ property-comment* &
+ property-contact* &
+ property-exdate* &
+ property-rstatus* &
+ property-related* &
+ property-resources* &
+ property-rdate*
+ }
+
+ # 3.6.3 Journal Component
+
+ component-vjournal = element vjournal {
+ type-jourprop
+ }
+
+ type-jourprop = element properties {
+ property-dtstamp &
+ property-uid &
+
+ property-class? &
+ property-created? &
+ property-dtstart? &
+ property-last-mod? &
+ property-organizer? &
+ property-recurid? &
+ property-seq? &
+ property-status-jour? &
+ property-summary? &
+ property-url? &
+
+ property-rrule? &
+
+ property-attach* &
+ property-attendee* &
+ property-categories* &
+ property-comment* &
+ property-contact* &
+ property-description? &
+ property-exdate* &
+ property-related* &
+ property-rdate* &
+ property-rstatus*
+ }
+
+ # 3.6.4 Free/Busy Component
+
+ component-vfreebusy = element vfreebusy {
+ type-fbprop
+ }
+
+ type-fbprop = element properties {
+ property-dtstamp &
+ property-uid &
+
+ property-contact? &
+ property-dtstart? &
+ property-dtend? &
+ property-duration? &
+ property-organizer? &
+ property-url? &
+
+ property-attendee* &
+ property-comment* &
+ property-freebusy* &
+ property-rstatus*
+ }
+
+ # 3.6.5 Time Zone Component
+
+ component-vtimezone = element vtimezone {
+ element properties {
+ property-tzid &
+
+ property-last-mod? &
+ property-tzuurl?
+ },
+ element components {
+ (component-standard | component-daylight) &
+ component-standard* &
+ component-daylight*
+ }
+ }
+
+ component-standard = element standard {
+ type-tzprop
+ }
+
+ component-daylight = element daylight {
+ type-tzprop
+ }
+
+ type-tzprop = element properties {
+ property-dtstart &
+ property-tzoffsetto &
+ property-tzoffsetfrom &
+
+ property-rrule? &
+
+ property-comment* &
+ property-rdate* &
+ property-tzname*
+ }
+
+ # 3.6.6 Alarm Component
+
+ component-valarm = element valarm {
+ audioprop | dispprop | emailprop
+ }
+
+ type-audioprop = element properties {
+ property-action &
+
+ property-trigger &
+
+ (property-duration, property-repeat)? &
+
+ property-attach?
+ }
+
+ type-dispprop = element properties {
+ property-action &
+ property-description &
+ property-trigger &
+ property-summary &
+
+ property-attendee+ &
+
+ (property-duration, property-repeat)? &
+
+ property-attach*
+ }
+
+ type-emailprop = element properties {
+ property-action &
+ property-description &
+ property-trigger &
+
+ (property-duration, property-repeat)?
+ }
+
+ # 3.7 Calendar Properties
+
+ # 3.7.1 Calendar Scale
+
+ property-calscale = element calscale {
+
+ element parameters { empty }?,
+
+ element text { "GREGORIAN" }
+ }
+
+ # 3.7.2 Method
+
+ property-method = element method {
+
+ element parameters { empty }?,
+
+ value-text
+ }
+
+ # 3.7.3 Product Identifier
+
+ property-prodid = element prodid {
+
+ element parameters { empty }?,
+
+ value-text
+ }
+
+ # 3.7.4 Version
+
+ property-version = element version {
+
+ element parameters { empty }?,
+
+ element text { "2.0" }
+ }
+
+ # 3.8 Component Properties
+
+ # 3.8.1 Descriptive Component Properties
+
+ # 3.8.1.1 Attachment
+
+ property-attach = element attach {
+
+ element parameters {
+ fmttypeparam? &
+ encodingparam?
+ }?,
+
+ value-uri | value-binary
+ }
+
+ # 3.8.1.2 Categories
+
+ property-categories = element categories {
+
+ element parameters {
+ languageparam? &
+ }?,
+
+ value-text+
+ }
+
+ # 3.8.1.3 Classification
+
+ property-class = element class {
+
+ element parameters { empty }?,
+
+ element text {
+ "PUBLIC" |
+ "PRIVATE" |
+ "CONFIDENTIAL"
+ }
+ }
+
+ # 3.8.1.4 Comment
+
+ property-comment = element comment {
+
+ element parameters {
+ altrepparam? &
+ languageparam?
+ }?,
+
+ value-text
+ }
+
+ # 3.8.1.5 Description
+
+ property-description = element description {
+
+ element parameters {
+ altrepparam? &
+ languageparam?
+ }?,
+
+ value-text
+ }
+
+ # 3.8.1.6 Geographic Position
+
+ property-geo = element geo {
+
+ element parameters { empty }?,
+
+ element latitude { xsd:float },
+ element longitude { xsd:float }
+ }
+
+ # 3.8.1.7 Location
+
+ property-location = element location {
+
+ element parameters {
+
+ altrepparam? &
+ languageparam?
+ }?,
+
+ value-text
+ }
+
+ # 3.8.1.8 Percent Complete
+
+ property-percent = element percent-complete {
+
+ element parameters { empty }?,
+
+ value-integer
+ }
+
+
+ # 3.8.1.9 Priority
+
+ property-priority = element priority {
+
+ element parameters { empty }?,
+
+ value-integer
+ }
+
+ # 3.8.1.10 Resources
+
+ property-resources = element resources {
+
+ element parameters {
+ altrepparam? &
+ languageparam?
+ }?,
+
+ value-text+
+ }
+
+ # 3.8.1.11 Status
+
+ property-status-event = element status {
+
+ element parameters { empty }?,
+
+ element text {
+ "TENTATIVE" |
+ "CONFIRMED" |
+ "CANCELLED"
+ }
+ }
+
+ property-status-todo = element status {
+
+ element parameters { empty }?,
+
+ element text {
+ "NEEDS-ACTION" |
+ "COMPLETED" |
+ "IN-PROCESS" |
+ "CANCELLED"
+ }
+ }
+
+ property-status-jour = element status {
+
+ element parameters { empty }?,
+
+ element text {
+ "DRAFT" |
+ "FINAL" |
+ "CANCELLED"
+ }
+ }
+
+ # 3.8.1.12 Summary
+
+ property-summary = element summary {
+
+ element parameters {
+ altrepparam? &
+ languageparam?
+ }?,
+
+ value-text
+ }
+
+ # 3.8.2 Date and Time Component Properties
+
+ # 3.8.2.1 Date/Time Completed
+
+ property-completed = element completed {
+
+ element parameters { empty }?,
+
+ value-date-time
+ }
+
+ # 3.8.2.2 Date/Time End
+
+ property-dtend = element dtend {
+
+ element parameters {
+ tzidparam?
+ }?,
+
+ value-date-time |
+ value-date
+ }
+
+ # 3.8.2.3 Date/Time Due
+
+ property-due = element due {
+
+ element parameters {
+ tzidparam?
+ }?,
+
+ value-date-time |
+ value-date
+ }
+
+ # 3.8.2.4 Date/Time Start
+
+ property-dtstart = element dtstart {
+
+ element parameters {
+ tzidparam?
+ }?,
+
+ value-date-time |
+ value-date
+ }
+
+ # 3.8.2.5 Duration
+
+ property-duration = element duration {
+
+ element parameters { empty }?,
+
+ value-duration
+ }
+
+ # 3.8.2.6 Free/Busy Time
+
+ property-freebusy = element freebusy {
+
+ element parameters {
+ fbtypeparam?
+ }?,
+
+
+ value-period+
+ }
+
+ # 3.8.2.7 Time Transparency
+
+ property-transp = element transp {
+
+
+ element parameters { empty }?,
+
+ element text {
+ "OPAQUE" |
+ "TRANSPARENT"
+ }
+ }
+
+ # 3.8.3 Time Zone Component Properties
+
+ # 3.8.3.1 Time Zone Identifier
+
+ property-tzid = element tzid {
+
+ element parameters { empty }?,
+
+ value-text
+ }
+
+ # 3.8.3.2 Time Zone Name
+
+ property-tzname = element tzname {
+
+ element parameters {
+ languageparam?
+ }?,
+
+ value-text
+ }
+
+ # 3.8.3.3 Time Zone Offset From
+
+ property-tzoffsetfrom = element tzoffsetfrom {
+
+ element parameters { empty }?,
+
+ value-utc-offset
+ }
+
+ # 3.8.3.4 Time Zone Offset To
+
+ property-tzoffsetto = element tzoffsetto {
+
+ element parameters { empty }?,
+
+ value-utc-offset
+ }
+
+ # 3.8.3.5 Time Zone URL
+
+ property-tzurl = element tzurl {
+
+ element parameters { empty }?,
+
+ value-uri
+ }
+
+ # 3.8.4 Relationship Component Properties
+
+ # 3.8.4.1 Attendee
+
+ property-attendee = element attendee {
+
+ element parameters {
+ cutypeparam? &
+ memberparam? &
+ roleparam? &
+ partstatparam? &
+ rsvpparam? &
+ deltoparam? &
+ delfromparam? &
+ sentbyparam? &
+ cnparam? &
+ dirparam? &
+ languageparam?
+ }?,
+
+ value-cal-address
+ }
+
+ # 3.8.4.2 Contact
+
+ property-contact = element contact {
+
+ element parameters {
+ altrepparam? &
+ languageparam?
+ }?,
+
+ value-text
+ }
+
+ # 3.8.4.3 Organizer
+
+ property-organizer = element organizer {
+
+ element parameters {
+ cnparam? &
+ dirparam? &
+ sentbyparam? &
+ languageparam?
+ }?,
+
+ value-cal-address
+ }
+
+ # 3.8.4.4 Recurrence ID
+
+ property-recurid = element recurrence-id {
+
+ element parameters {
+ tzidparam? &
+ rangeparam?
+ }?,
+
+ value-date-time |
+ value-date
+ }
+
+ # 3.8.4.5 Related-To
+
+ property-related = element related-to {
+
+ element parameters {
+ reltypeparam?
+ }?,
+
+ value-text
+ }
+
+ # 3.8.4.6 Uniform Resource Locator
+
+ property-url = element url {
+
+ element parameters { empty }?,
+
+ value-uri
+ }
+
+ # 3.8.4.7 Unique Identifier
+
+ property-uid = element uid {
+
+ element parameters { empty }?,
+ value-text
+ }
+
+ # 3.8.5 Recurrence Component Properties
+
+ # 3.8.5.1 Exception Date/Times
+
+ property-exdate = element exdate {
+
+ element parameters {
+ tzidparam?
+ }?,
+
+ value-date-time+ |
+ value-date+
+ }
+
+ # 3.8.5.2 Recurrence Date/Times
+
+ property-rdate = element rdate {
+
+ element parameters {
+ tzidparam?
+ }?,
+
+ value-date-time+ |
+ value-date+ |
+ value-period+
+ }
+
+ # 3.8.5.3 Recurrence Rule
+
+ property-rrule = element rrule {
+
+ element parameters { empty }?,
+
+ value-recur
+ }
+
+ # 3.8.6 Alarm Component Properties
+
+ # 3.8.6.1 Action
+
+ property-action = element action {
+
+ element parameters { empty }?,
+ element text {
+ "AUDIO" |
+ "DISPLAY" |
+ "EMAIL"
+ }
+ }
+
+ # 3.8.6.2 Repeat Count
+
+ property-repeat = element repeat {
+
+ element parameters { empty }?,
+
+ value-integer
+ }
+
+ # 3.8.6.3 Trigger
+
+ property-trigger = element trigger {
+
+ (
+ element parameters {
+ trigrelparam?
+ }?,
+
+ value-duration
+ ) |
+ (
+ element parameters { empty }?,
+
+ value-date-time
+ )
+ }
+
+ # 3.8.7 Change Management Component Properties
+
+ # 3.8.7.1 Date/Time Created
+
+ property-created = element created {
+
+ element parameters { empty }?,
+
+ value-date-time
+ }
+
+ # 3.8.7.2 Date/Time Stamp
+
+ property-dtstamp = element dtstamp {
+ element parameters { empty }?,
+
+ value-date-time
+ }
+
+ # 3.8.7.3 Last Modified
+
+ property-last-mod = element last-modified {
+
+ element parameters { empty }?,
+
+ value-date-time
+ }
+
+ # 3.8.7.4 Sequence Number
+
+ property-seq = element sequence {
+
+ element parameters { empty }?,
+
+ value-integer
+ }
+
+ # 3.8.8 Miscellaneous Component Properties
+
+ # 3.8.8.3 Request Status
+
+ property-rstatus = element request-status {
+
+ element parameters {
+ languageparam?
+ }?,
+
+ element code { xsd:string },
+ element description { xsd:string },
+ element data { xsd:string }?
+ }
+
+
+
+
+