Introduce XSD support
[gpl/argeo-suite.git] / org.argeo.app.core / src / org / argeo / app / core / schemas / xCal-2.0-RFC6321.rnc
diff --git a/org.argeo.app.core/src/org/argeo/app/core/schemas/xCal-2.0-RFC6321.rnc b/org.argeo.app.core/src/org/argeo/app/core/schemas/xCal-2.0-RFC6321.rnc
new file mode 100644 (file)
index 0000000..d18211d
--- /dev/null
@@ -0,0 +1,1192 @@
+   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 }?
+   }
+
+
+
+
+