<?xml version="1.0" encoding="UTF-8"?>

   <!-- ******************* -->
   <!-- Entity declarations -->
   <!-- ******************* -->

   <!ENTITY % attr.altrep "
   altrep ENTITY #IMPLIED
   ">

   <!ENTITY % attr.cn "
   cn CDATA ''
   ">

   <!ENTITY % attr.cutype "
   cutype NMTOKEN 'INDIVIDUAL'
   ">
   <!-- Valid name tokens are "INDIVIDUAL", "GROUP", "RESOURCE" -->
   <!-- "ROOM", "UNKNOWN", a non-standard "X-" name or another -->
   <!-- IANA registered name. -->

   <!ENTITY % attr.delegated-from "
   delegated-from CDATA #IMPLIED
   ">
   <!-- delegated-from value is a calendar user address -->

   <!ENTITY % attr.delegated-to "
   delegated-to CDATA #IMPLIED
   ">
   <!-- delegated-to value is one or more calendar user addresses -->

   <!ENTITY % attr.dir "
   dir ENTITY #IMPLIED
   ">
   <!-- dir value is a URI to a directory entry -->

   <!ENTITY % attr.fmttype "
   fmttype CDATA #REQUIRED
   ">
   <!-- fmttype value is any IANA registered content type -->

   <!ENTITY % attr.fbtype "
   fbtype NMTOKEN 'BUSY'
   ">

   <!-- Valid token values are "FREE", "BUSY", "BUSY-UNAVAILABLE", -->
   <!-- "BUSY-TENTATIVE", a non-standard "X-" name or another -->
   <!-- IANA registered name. -->

   <!ENTITY % attr.language "
   language CDATA #IMPLIED
   ">
   <!-- language value is a valid RFC 1766 language string -->

   <!ENTITY % attr.member "
   member CDATA #IMPLIED
   ">
   <!-- member value is one or more calendar user addresses -->

   <!ENTITY % attr.partstat "
   partstat NMTOKEN 'NEEDS-ACTION'
   ">
   <!-- Valid token value for VEVENT: "NEEDS-ACTION", "ACCEPTED", -->
   <!-- "DECLINED", "TENTATIVE", "DELEGATED", a non-standard "X- -->
   <!-- name or another IANA registered name. -->

   <!-- Valid token value for VTODO: "NEEDS-ACTION", "ACCEPTED", -->
   <!-- "DECLINED", "TENTATIVE", "DELEGATED", "COMPLETED", -->
   <!-- "IN-PROGRESS, a non-standard "X- name or another IANA -->
   <!-- registered name. -->
   <!-- Valid token value for VJOURNAL: "NEEDS-ACTION", "ACCEPTED", -->
   <!-- "DECLINED", a non-standard "X- name or another IANA -->
   <!-- registered name. -->

   <!ENTITY % attr.range "
   range NMTOKEN 'THISONLY'
   ">
   <!-- Valid token values are "THISONLY" or "THISANDPRIOR" or -->
   <!-- "THISANDFUTURE" -->

   <!ENTITY % attr.related "
   related NMTOKEN 'START'
   ">
   <!-- Valid token values are "START" or "END" -->

   <!ENTITY % attr.reltype "
   reltype NMTOKEN 'PARENT'
   ">
   <!-- Valid token values are "PARENT", "CHILD", SIBLING", -->
   <!-- a non-standard "X-" name or any IANA registered name. -->

   <!ENTITY % attr.role "
   role NMTOKEN 'REQ-PARTICIPANT'
   ">
   <!-- Valid token values are "CHAIR", "REQ-PARTICIPANT", -->
   <!-- "OPT-PARTICIPANT", "NON-PARTICIPANT", a non-standard "X-" -->
   <!-- name or any IANA registered name. -->

   <!ENTITY % attr.rsvp "
   rsvp NMTOKEN 'FALSE'
   ">
   <!-- Valid token values are "TRUE" or "FALSE", -->

   <!ENTITY % attr.sent-by "
   sent-by CDATA #IMPLIED
   ">
   <!-- sent-by value is a calendar user address -->

   <!ENTITY % attr.tzid "
   tzid CDATA #IMPLIED
   ">
   <!-- tzid value is a time zone identifier -->

   <!ENTITY % cal.comp "
   vevent | vtodo | vjournal | vfreebusy | vtimezone
   ">

   <!ENTITY % vevent.opt1 "
   class | created | description | dtstamp | dtstart | geo |
   last-modified | location | organizer | priority | recurrence-id |
   sequence | status | summary | transp | uid | url |
   (dtend | duration)
   ">
   <!-- These properties may only appear once in a VEVENT -->
   <!ENTITY % vevent.optm "
   attach | attendee | categories | comment | contact |
   exdate | exrule | rdate | related-to | resources | request-status |
   rrule
   ">
   <!-- These properties may appear one or more times in a VEVENT -->

   <!ENTITY % vtodo.opt1 "
   class | completed | created | description | dtstamp | dtstart |
   geo | last-modified | location | organizer | percent | priority |
   recurrence-id | sequence | status | summary | uid | url |
   (due | duration)
   ">
   <!-- These properties may only appear once in a VTODO -->

   <!ENTITY % vtodo.optm "
   attach | attendee | categories | comment | contact |
   exdate | exrule | request-status | related-to | resources |
   rdate | rrule
   ">
   <!-- These properties may appear one or more times in a VTODO -->

   <!ENTITY % vjournal.opt1 "
   class | created | description | dtstart | dtstamp | last-modified |
   organizer | recurrence-id | sequence | status | summary | uid | url
   ">
   <!-- These properties may only appear once in a VJOURNAL -->

   <!ENTITY % vjournal.optm "
   attach | attendee | categories | comment | contact |
   exdate | exrule | related-to | rdate | rrule | request-status
   ">
   <!-- These properties may appear one or more times in a VJOURNAL -->

   <!ENTITY % vfreebusy.opt1 "
   contact | dtstamp | dtstart | dtend | duration |
   organizer | uid | url
   ">
   <!-- These properties may only appear once in a VFREEBUSY -->

   <!ENTITY % vfreebusy.optm "
   attendee | comment | freebusy | request-status
   ">
   <!-- These properties may appear one or more times in a -->
   <!-- VFREEBUSY -->

   <!ENTITY % vtimezone.man "
   tzid
   ">
   <!-- These properties must appear in a VTIMEZONE -->

   <!ENTITY % vtimezone.opt1 "
   last-modified | tzurl
   ">
   <!-- These properties may only appear once in a VTIMEZONE -->

   <!ENTITY % vtimezone.mann "
   (standard | daylight), (standard | daylight)*
   ">
   <!-- These properties must appear in a VTIMEZONE and may -->
   <!-- appear multiple times -->

   <!ENTITY % standard.man "
   dtstart | tzoffsetto | tzoffsetfrom
   ">

   <!-- These properties must appear in a STANDARD, but only once -->

   <!ENTITY % standard.optm "
   comment | rdate | rrule | tzname
   ">
   <!-- These properties may appear one or more times in a STANDARD -->

   <!ENTITY % daylight.man "
   dtstart | tzoffsetto | tzoffsetfrom
   ">
   <!-- These properties must appear in a DAYLIGHT, but only once -->

   <!ENTITY % daylight.optm "
   comment | rdate | rrule | tzname
   ">
   <!-- These properties may appear one or more times in a DAYLIGHT -->

   <!ENTITY % audio.man "
   action, trigger
   ">
   <!-- These properties must appear in an audio VALARM. -->

   <!ENTITY % audio.optx "
   duration | repeat
   ">
   <!-- These properties may appear once in an audio VALARM. If one -->
   <!-- appears, then both must appear. -->

   <!ENTITY % audio.opt1 "
   attach
   ">
   <!-- These properties may appear once in an audio VALARM. -->

   <!ENTITY % valarm.audio "
   (%audio.man;), (%audio.optx;)*, (%audio.opt1;)
   ">

   <!ENTITY % display.man "
   action, description, trigger
   ">
   <!-- These properties must appear in a display VALARM. -->
   <!ENTITY % display.optx "
   duration | repeat
   ">
   <!-- These properties may appear once in a display VALARM. If -->
   <!-- one appears, then both must appear. -->

   <!ENTITY % valarm.display "
   (%display.man;), (%display.optx;)*
   ">

   <!ENTITY % email.man "
   action, description, summary, trigger
   ">
   <!-- These properties must appear in an email VALARM. -->

   <!ENTITY % email.optx "
   duration | repeat
   ">
   <!-- These properties may appear once in an email VALARM. If one -->
   <!-- appears, then both must appear. -->

   <!ENTITY % email.optm "
   attach
   ">
   <!-- These properties may appear one or more times in an email -->
   <!-- VALARM. -->

   <!ENTITY % email.mann "
   attendee
   ">
   <!-- These properties must appear in an email VALARM. The may -->
   <!-- appear more than once. -->

   <!ENTITY % valarm.email "
   (%email.man;), (%email.optx;)*, (%email.optm;)*,
   (%email.mann;)*
   ">

   <!ENTITY % procedure.man "
   action, attach, trigger
   ">
   <!-- These properties must appear in an audio VALARM. -->

   <!ENTITY % procedure.optx "
   duration | repeat
   ">
   <!-- These properties may appear once in an procedure VALARM. -->
   <!-- If one appears, then both must appear. -->

   <!ENTITY % procedure.opt1 "
   description
   ">
   <!-- These properties may appear once in a procedure VALARM -->
   <!ENTITY % valarm.procedure "
   (%procedure.man;), (%procedure.optx;)*, (%procedure.opt1;)?
   ">

   <!-- ******************************************** -->
   <!-- iCalendar value type notation declarations   -->
   <!-- ******************************************** -->

   <!-- NOTE: The "XCAL" text in the following NOTATION values
   will be replaced with the text "RFC xxxx", where "xxxx" is the RFC
   number, when this memo is published as a RFC. -->

   <!NOTATION BINARY PUBLIC "-//IETF//NOTATION XCAL/Value Type/Binary//EN">

   <!NOTATION BOOLEAN PUBLIC "-//IETF//NOTATION XCAL/Value Type/Boolean//EN">

   <!NOTATION CALADR PUBLIC "-//IETF//NOTATION XCAL/Value Type/Calendar
   User Address//EN">

   <!NOTATION DATE PUBLIC "-//IETF//NOTATION XCAL/Value Type/Date//EN">

   <!NOTATION DATE-TIME PUBLIC "-//IETF//NOTATION XCAL/Value
   Type/Date-Time//EN">

   <!NOTATION DURATION PUBLIC "-//IETF//NOTATION XCAL/Value
   Type/Duration//EN">

   <!NOTATION FLOAT PUBLIC "-//IETF//NOTATION XCAL/Value Type/Float//EN">

   <!NOTATION INTEGER PUBLIC "-//IETF//NOTATION XCAL/Value Type/Integer//EN">

   <!NOTATION PERIOD PUBLIC "-//IETF//NOTATION XCAL/Value
   Type/Period of Time//EN">

   <!NOTATION RECUR PUBLIC "-//IETF//NOTATION XCAL/Value
   Type/Recurrence Rule//EN">

   <!NOTATION TEXT PUBLIC "-//IETF//NOTATION XCAL/Value Type/Text//EN">

   <!NOTATION TIME PUBLIC "-//IETF//NOTATION XCAL/Value Type/Time//EN">

   <!NOTATION URI PUBLIC "-//IETF//NOTATION XCAL/Value Type/URI//EN">

   <!NOTATION UTC-OFFSET PUBLIC "-//IETF//NOTATION XCAL/Value
   Type/UTC-Offset//EN">

   <!NOTATION X-NAME PUBLIC "-//IETF//NOTATION XCAL/Value Type/X-Name//EN">

   <!-- ************************************************* -->
   <!-- iCalendar property element/attribute declarations -->
   <!-- ************************************************* -->

   <!ELEMENT br EMPTY>
   <!-- Signifies a new line in the TEXT value content information -->

   <!-- Description component properties element type declarations -->

   <!ELEMENT attach (extref | b64bin)>
   <!-- extref holds a reference to an external entity that -->
   <!-- has the attachment. b64bin holds the inline BASE64 encoded -->
   <!-- binary data for the attachment as defined in RFC 2045. -->

   <!ELEMENT extref EMPTY>
   <!ATTLIST extref
   uri ENTITY #REQUIRED>

   <!ELEMENT b64bin (#PCDATA)>
   <!ATTLIST b64bin
   %attr.fmttype;
   value NOTATION (BINARY) #IMPLIED>

   <!ELEMENT categories (item)*>

   <!ELEMENT item (#PCDATA)>
   <!ATTLIST item
   %attr.language;
   value NOTATION (TEXT) #IMPLIED>

   <!ELEMENT class (#PCDATA)>
   <!ATTLIST class
   %attr.language;
   value NOTATION (TEXT) #IMPLIED>

   <!ELEMENT comment (#PCDATA)*>
   <!ATTLIST comment
   %attr.language;
   %attr.altrep;
   value NOTATION (TEXT) #IMPLIED>

   <!ELEMENT description (#PCDATA)*>
   <!ATTLIST description
   %attr.language;
   %attr.altrep;
   value NOTATION (TEXT) #IMPLIED>

   <!ELEMENT geo (lat, lon)>

   <!ELEMENT lat (#PCDATA)>

   <!ATTLIST lat value NOTATION (FLOAT) #IMPLIED>
   <!-- A decimal degree float number to 6 decimal places -->

   <!ELEMENT lon (#PCDATA)>
   <!ATTLIST lon value NOTATION (FLOAT) #IMPLIED>
   <!-- A decimal degree float number to 6 decimal places -->

   <!ELEMENT location (#PCDATA)>
   <!ATTLIST location
   %attr.language;
   %attr.altrep;
   value NOTATION (TEXT) #IMPLIED>

   <!ELEMENT percent (#PCDATA)>
   <!ATTLIST percent
   value NOTATION (INTEGER) #IMPLIED>

   <!ELEMENT priority (#PCDATA)>
   <!ATTLIST priority
   value NOTATION (INTEGER) #IMPLIED>

   <!ELEMENT resources (#PCDATA)>
   <!ATTLIST resources
   %attr.language;
   %attr.altrep;
   value NOTATION (TEXT) #IMPLIED>

   <!ELEMENT status (#PCDATA)>
   <!ATTLIST status
   %attr.language;
   %attr.altrep;
   value NOTATION (TEXT) #IMPLIED>
   <!-- Text value must match the valid values for the particular -->
   <!-- calendar component. -->

   <!ELEMENT summary (#PCDATA)>
   <!ATTLIST summary
   %attr.language;
   %attr.altrep;
   value NOTATION (TEXT) #IMPLIED >

   <!-- Data and time component property element type declarations -->

   <!ELEMENT dtstart (#PCDATA)>
   <!ATTLIST dtstart
   %attr.tzid;
   value NOTATION (DATE-TIME | DATE) "DATE-TIME">

   <!ELEMENT dtend (#PCDATA)>
   <!ATTLIST dtend
   %attr.tzid;
   value NOTATION (DATE-TIME | DATE) "DATE-TIME">

   <!ELEMENT due (#PCDATA)>
   <!ATTLIST due
   %attr.tzid;
   value NOTATION (DATE-TIME | DATE) "DATE-TIME">

   <!ELEMENT completed (#PCDATA)>
   <!ATTLIST completed
   value NOTATION (DATE-TIME) #IMPLIED>

   <!ELEMENT duration (#PCDATA)>
   <!ATTLIST duration
   value NOTATION (DURATION) #IMPLIED>

   <!ELEMENT freebusy (#PCDATA)>
   <!ATTLIST freebusy
   %attr.fbtype;
   value NOTATION (PERIOD) #IMPLIED>

   <!ELEMENT transp (#PCDATA)>
   <!ATTLIST transp
   value NOTATION (TEXT) #IMPLIED>
   <!-- Text value must be one of the valid enumerations. -->

   <!-- Time zone component property element type declarations -->

   <!ELEMENT tzid (#PCDATA)>
   <!ATTLIST tzid
   value NOTATION (TEXT) #IMPLIED>

   <!ELEMENT tzname (#PCDATA)>
   <!ATTLIST tzname
   %attr.language;
   value NOTATION (TEXT) #IMPLIED>

   <!ELEMENT tzoffsetfrom (#PCDATA)>
   <!ATTLIST tzoffsetfrom
   value NOTATION (UTC-OFFSET) #IMPLIED>

   <!ELEMENT tzoffsetto (#PCDATA)>
   <!ATTLIST tzoffsetto
   value NOTATION (UTC-OFFSET) #IMPLIED>

   <!ELEMENT tzurl EMPTY>

   <!ATTLIST tzurl
   uri ENTITY #REQUIRED>

   <!-- Relationship component property element type declarations -->

   <!ELEMENT attendee (#PCDATA)>
   <!ATTLIST attendee
   %attr.language;
   %attr.cn;
   %attr.role;
   %attr.partstat;
   %attr.rsvp;
   %attr.cutype;
   %attr.member;
   %attr.delegated-to;
   %attr.delegated-from;
   %attr.sent-by;
   %attr.dir;
   value NOTATION (CALADR) #IMPLIED>

   <!ELEMENT contact (#PCDATA)*>
   <!ATTLIST contact
   %attr.language;
   %attr.altrep;
   value NOTATION (TEXT) #IMPLIED>

   <!ELEMENT organizer (#PCDATA)>
   <!ATTLIST organizer
   %attr.language;
   %attr.cn;
   %attr.sent-by;
   %attr.dir;
   value NOTATION (CALADR) #IMPLIED>

   <!ELEMENT recurrence-id (#PCDATA)>
   <!ATTLIST recurrence-id
   %attr.tzid;
   %attr.range;
   value NOTATION (DATE-TIME | DATE) "DATE-TIME">

   <!ELEMENT related-to (#PCDATA)>
   <!ATTLIST related-to
   %attr.reltype;
   value NOTATION (TEXT) #IMPLIED>

   <!ELEMENT url EMPTY>
   <!ATTLIST url
   uri ENTITY #REQUIRED>
   
   <!ELEMENT uid (#PCDATA)>
   <!ATTLIST uid
   value NOTATION (TEXT) #IMPLIED>

   <!-- Recurrence component property element type declarations -->

   <!ELEMENT exdate (#PCDATA)>
   <!ATTLIST exdate
   %attr.tzid;
   value NOTATION (DATE-TIME | DATE) "DATE-TIME">

   <!ELEMENT exrule (#PCDATA)>
   <!ATTLIST exrule
   value NOTATION (RECUR) #IMPLIED>

   <!ELEMENT rdate (#PCDATA)>
   <!ATTLIST rdate
   %attr.tzid;
   value NOTATION (DATE-TIME | DATE) "DATE-TIME">

   <!ELEMENT rrule (#PCDATA)>
   <!ATTLIST rrule
   value NOTATION (RECUR) #IMPLIED>

   <!-- Alarm component property element type declarations -->

   <!ELEMENT action (#PCDATA)>
   <!ATTLIST action
   value NOTATION (TEXT) #IMPLIED>
   <!-- Text value must be a valid enumeration -->

   <!ELEMENT repeat (#PCDATA)>
   <!ATTLIST repeat
   value NOTATION (INTEGER) #IMPLIED>

   <!ELEMENT trigger (#PCDATA)>
   <!ATTLIST trigger
   %attr.related-to;
   value NOTATION (DURATION | DATE-TIME) "DURATION">

   <!-- Change management component property element type -->
   <!-- declarations -->

   <!ELEMENT created (#PCDATA)>
   <!ATTLIST created
   value NOTATION (DATE-TIME) #IMPLIED>

   <!ELEMENT dtstamp (#PCDATA)>

   <!ATTLIST dtstamp
   value NOTATION (DATE-TIME) #IMPLIED>

   <!ELEMENT last-modified (#PCDATA)>
   <!ATTLIST last-modified
   value NOTATION (DATE-TIME) #IMPLIED>

   <!ELEMENT sequence (#PCDATA)>
   <!ATTLIST sequence
   value NOTATION (INTEGER) #IMPLIED>

   <!-- Miscellaneous component property element type declarations -->

   <!ELEMENT request-status (#PCDATA)>
   <!ATTLIST request-status
   %attr.language;
   value NOTATION (TEXT) #IMPLIED>

   <!-- iCalendar object element type declarations -->

   <!ELEMENT iCalendar (vcalendar+)>

   <!ELEMENT vcalendar (%cal.comp;)*>
   <!ATTLIST vcalendar
   %attr.language;
   xmlns CDATA #FIXED 'http://www.ietf.org/internet-drafts/draft-
   ietf-calsch-many-xcal-01.txt'
   calscale CDATA "GREGORIAN"
   method CDATA "PUBLISH"
   version CDATA #REQUIRED
   prodid CDATA #IMPLIED>
   <!-- version - Must be "2.0" if document conforms to this spec. -->
   <!-- calscale - Calendar scale. Default is GREGORIAN. -->
   <!-- method - C&S method. Default is iTIP PUBLISH. -->
   <!-- prodid - ISO 9070 FPI for product that generated iCalendar. -->

   <!-- "vevent" element type declaration -->
   <!ELEMENT vevent ((%vevent.opt1;)*, (%vevent.optm;)*, valarm*)>

   <!-- "vtodo" element type declaration -->
   <!ELEMENT vtodo ((%vtodo.opt1;)*, (%vtodo.optm;)*, valarm*)>

   <!-- "vjournal" element type declaration -->
   <!ELEMENT vjournal ((%vjournal.opt1;)*, (%vjournal.optm;)*)>

   <!-- "vfreebusy" element type declaration -->
   <!ELEMENT vfreebusy ((%vfreebusy.opt1;)*, (%vfreebusy.optm;)*)>


   <!-- "vtimezone" element type declaration -->
   <!ELEMENT vtimezone (%vtimezone.man;, (%vtimezone.opt1;)*,
   (%vtimezone.mann;)*)>

   <!ELEMENT standard (((%standard.man;)*), (%standard.optm;)*)>

   <!ELEMENT daylight (((%daylight.man;)*), (%daylight.optm;)*)>

   <!ELEMENT valarm ((%valarm.audio;) | (%valarm.display;) |
   (%valarm.email;) | (%valarm.procedure;))>
















