<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet type="text/xsl" href="../rfc2629.xslt"?><!DOCTYPE rfc SYSTEM "rfc2629.dtd" [<!ENTITY I-D.cheshire-dnsext-dns-sd SYSTEM "http://xml.resource.org/public/rfc/bibxml3/reference.I-D.cheshire-dnsext-dns-sd.xml"><!ENTITY RFC2046 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.2046.xml"><!ENTITY RFC2119 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.2119.xml"><!ENTITY RFC2616 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.2616.xml"><!ENTITY RFC2782 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.2782.xml"><!ENTITY RFC2818 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.2818.xml"><!ENTITY RFC5246 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.5246.xml"><!ENTITY RFC5545 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.5545.xml"><!ENTITY RFC5785 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.5785.xml"><!ENTITY W3C.REC-xml-20081126 SYSTEM     'http://xml.resource.org/public/rfc/bibxml4/reference.W3C.REC-xml-20081126.xml'><!ENTITY idXMLCalendar SYSTEM    'http://xml.resource.org/public/rfc/bibxml3/reference.I-D.daboo-et-al-icalendar-in-xml.xml'><!ENTITY I-D.saintandre-tls-server-id-check SYSTEM   'http://xml.resource.org/public/rfc/bibxml3/reference.I-D.saintandre-tls-server-id-check.xml'><!ENTITY I-D.lear-iana-timezone-database SYSTEM   'http://xml.resource.org/public/rfc/bibxml3/reference.I-D.draft-lear-iana-timezone-database-02.xml'>]><?xml-stylesheet type='text/xsl' href='rfc2629.xslt' ?><?rfc strict="yes" ?><?rfc toc="yes"?><?rfc tocdepth="5"?><?rfc symrefs="yes"?><?rfc sortrefs="yes" ?><?rfc compact="yes" ?><?rfc subcompact="no" ?><rfc category="std" docName="draft-douglass-timezone-service-01" ipr="trust200902">  <front>    <title abbrev="Timezone Service Protocol">Timezone Service Protocol</title>    <author initials="M." surname="Douglass" fullname="Michael Douglass">      <organization abbrev="RPI">Rensselaer Polytechnic Institute</organization>      <address>        <postal>          <street>110 8th Street</street>          <city>Troy</city>          <region>NY</region>          <code>12180</code>          <country>USA</country>        </postal>        <email>douglm@rpi.edu</email>        <uri>http://www.rpi.edu/</uri>      </address>    </author>    <author initials="C." surname="Daboo" fullname="Cyrus Daboo">      <organization abbrev="Apple">Apple Inc.</organization>      <address>        <postal>          <street>1 Infinite Loop</street>          <city>Cupertino</city>          <region>CA</region>          <code>95014</code>          <country>USA</country>        </postal>        <email>cyrus@daboo.name</email>        <uri>http://www.apple.com/</uri>      </address>    </author>    <date />    <area>Applications</area>    <keyword>timezones</keyword>    <keyword>calendaring</keyword>    <keyword>scheduling</keyword>    <abstract>      <t>        This document defines a timezone service protocol that allows reliable,        secure and fast delivery of timezone information to client systems such        as calendaring and scheduling applications or operating systems.      </t>    </abstract>  </front>  <middle>    <section title="Introduction">        <t>          Timezone information, in general, combines a Universal Coordinated Time (UTC) offset with daylight          saving time (DST) rules. Timezones are typically tied to specific          geographic and geopolitical regions. Whilst the UTC offset for          particular regions changes infrequently, DST rules can change          frequently and sometimes with very little notice           (sometimes hours before a change comes into effect).        </t>        <t>          Calendaring and scheduling systems, such as those that use          <xref target='RFC5545'>iCalendar</xref>, as well as operating systems,          critically rely on timezone information to determine the correct local          time. As such they need to be kept up to date with changes to timezone          information. To date there has been no fast and easy way to do that.          Timezone data is often supplied in the form of a set of data          files that have to be "compiled" into a suitable database format for          use by the client application or operating system. In the case of          operating systems, those changes often only get propagated out to          client machines when there is an operating system update and those          may not be frequent enough to ensure accurate timezone data is always           in place.        </t>        <t>          This specification defines a timezone service protocol that allows          for fast, reliable and accurate delivery of timezone information to          client systems. This protocol is based on          <xref target='RFC2616'>HTTP</xref> using a REST style API.        </t>        <t>          This specification does not specify the source of the timezone           information. It is assumed that a reliable and accurate source is          available. One such source is the Olson database - see           <xref target='I-D.lear-iana-timezone-database'/> for a proposal          to host the data in IANA.        </t>        <t>          This specification does not address the need for global timezone           identifiers for timezone data.        </t>        <section title="Conventions" anchor="conventions">          <t>            The key words "MUST", "MUST NOT", "REQUIRED", "SHALL",            "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and            "OPTIONAL" in this document are to be interpreted as described            in <xref target="RFC2119" />.          </t>          <t>            This document uses XML DTD fragments            (<xref target="W3C.REC-xml-20081126" />, Section 3.2) as a purely            notational convention.          </t>          <t>            The namespace "urn:ietf:params:xml:ns:timezone-service" is reserved for            the XML elements defined in this specification, its revisions,            and related specifications. XML elements defined by individual            implementations MUST NOT use the "urn:ietf:params:xml:ns:timezone-service"            namespace, and instead should use a namespace that they control.          </t>          <t>            When XML element types in the "urn:ietf:params:xml:ns:timezone-service"            namespace are referenced in this document outside of the context            of an XML fragment, the string "TZ:" will be prefixed to the            element types.          </t>        </section>        <section anchor="glossary of terms" title="Glossary of terms">          <t>The following terms with the given meanings are used throughout this            document.            <list style='hanging'>              <t hangText="Timezone Server:">                A server implementing the Timezone Service Protocol defined by                this specification;              </t>              <t hangText="Timezone Identifier:">                A globally unique name which identifies timezone information.               </t>            </list>          </t>        </section>    </section>    <section anchor="architectural_overview" title="Architectural Overview">        <t>            The overall process for the delivery of timezone information can be            visualized via the diagram shown below.            <figure anchor='architecture' title='Timezone Service Architecture'>                <artwork><![CDATA[            ====================  ====================(a)         |   Contributors   |  |   Contributors   |            ====================  ====================                      |                    |            ====================  ==================== (b)         |   Publisher A    |  |   Publisher B    |             ====================  ====================                                  |                      ====================(c)                   |     Provider     |                      ====================                     /            |       \                    /             |        \         ====================     |     ====================(d)      |     Provider     |     |     |     Provider     |         ====================     |     ====================           |           |          |              |           |           |          |              |     ==========  ==========  ==========      ==========(e)  | Client |  | Client |  | Client |      | Client |     ==========  ==========  ==========      ==========]]></artwork>            </figure>        </t>      <t>        The overall service is made up of several layers:        <list style='hanging'>          <t hangText="(a) Contributors:">            Individuals, governments or organizations which provide information            about timezone definitions to the publishing process. There can be            many contributors.          </t>          <t hangText="(b) Publishers:">            Publishers aggregate information from contributors, determine the            reliability of the information and, based on that, generate timezone            definitions. There can            be many publishers, each getting data from many different contributors.            In some cases a publisher may choose to "re-publish" data from another             publisher.          </t>          <t hangText=" (c) Root Providers:">            Servers which obtain and then provide the timezone data from             publishers and make that available to other servers or clients.             There can be            many root providers. Root providers can choose to supply timezone            data from one or more (or all) publishers.          </t>          <t hangText="(d) Local Providers:">            Servers which handle the bulk of the requests and reduce the load            on root servers. These will typically be simple caches of the root            server, located closer to clients. For example a large Internet            Service Provider (ISP) may choose to setup their own local provider            to allow clients within their network to make requests of that server            rather than making requests of servers outside their network. Local            servers will cache and periodically refresh data from the root servers.          </t>          <t hangText="(e) Clients:">            Applications, operating systems etc., that make use of timezone data            and retrieve that from either root or local providers.          </t>        </list>      </t>      <t>        Some of those layers may be coalesced by implementors. For example, a        vendor may choose to implement the entire service as a single monolithic         virtual server with the address embedded in distributed systems. Others         may choose to provide a service consisting of multiple layers of         providers, many local servers and a small number of root servers.      </t>      <t>        This specification is only concerned with the protocol used to exchange        data between providers and from provider to client. This specification        does not specify how contributors pass their information to publishers,        nor how those publishers vet that information to obtain the level of trust        required of the final result.      </t>    </section>    <section anchor="timezone_service" title="Timezones Service Protocol">      <section anchor="service_details" title="General Considerations">        <section anchor="timezone_formats" title="Timezone Formats">          <t>            The default format for returning timezone definitions is the             <xref target='RFC5545'>iCalendar</xref> data format. In addition,             the <xref target='I-D.daboo-et-al-icalendar-in-xml'>iCalendar-in-XML</xref>             representation is also available.           </t>        </section>        <section anchor="timezone_aliases" title="Timezone Identitifier Aliases">          <t>            Timezone identifier aliases map one timezone identifier onto another.             Aliases allow the timezone service to map old timezone specifications             onto a  new specification.          </t>          <t>            A timezone alias can be provided in the timezone data and should be            mapped on to the target timezone specification. This can be done by             the client or by the server.          </t>          <t>            The client can request that aliases be returned along with summary             information when listing timezones provided by the timezone service.             Clients can then map received timezone identifiers on to the target             perhaps avoiding a fetch of the target specification.          </t>          <t>            Alternatively, the client can just fetch the timezone specification             by supplying the timezone identifier alias. The service will return             the target timezone specification and it is the clients'             responsibility to notice that the returned data has a different             timezone identifier to that requested. The client SHOULD store the             mapping so that future requests for that aliased identifier do not             result in an unnecessary fetch.          </t>        </section>        <section anchor="inactive_timezone" title="Inactive Timezones">          <t>            Over time zone timezone definitions are replaced by others, but are             maintained for historical purposes. Often times clients are only             concerned with timezone whose definitions are valid for current and             future dates and times. When listing timezones provided by a timezone             service, the server will by default only provide the list of "active"             timezones. However, clients can use a request parameter to have the             server also return details for "inactive" timezones.          </t>        </section>        <section anchor="localized_timezone" title="Localized Timezone Names">          <t>            When presenting timezones to users, clients will typically want to             display a "presentation" name for the timezone, rather than the             timezone identifier. In that case, clients would want a             "presentation" name localized for the current user. The timezone             service can be requested to return localized names for timezones by             the addition of request parameters. Names in multiple lanaguages can             be returned in a single request.          </t>        </section>        <section anchor="conditional_timezone" title="Conditional Timezone Requests">        <t>          Timezone information is generally slow moving. However, changes need           to be distributed in a timely manner. The list of timezones that change           from even year-to-year will typically be relatively small.        </t>          <t>            When listing timezones, a global timestamp is returned by the server,             and that can be used later by clients to determine if any             "substantive" change has occurred in the timezone data. Clients can             use a conditional list request, supplying a previous global timestamp             value, to limit the results to timezones which have changed in a             "substantive" manner since that previous global timestamp. This             allows clients to cache the last global timestamp and to periodically             poll the server for possible changes. Clients SHOULD limit automatic             polling to no more than once a week.          </t>          <t>            A "substantive" change is one which affects the calculated            onsets for a timezone or a change to the region it covers.            Changes to properties such as description are not treated as a             "substantive" change.          </t>        </section>          <section anchor="timezone_onset_delivery"                   title="Expanded Timezone Data">            <t>              Determining timezone offsets at a particular point in time is               often a complicated process as the rules for daylight saving time               can be complex. To help with this, the timezone service provides an               operation that allows clients to request the server to expand a               timezone definition into a set of "observances" over a fixed period               of time. Each of these observances describes a local onset time               and UTC offsets for the prior time and the observance time.               Together, these provide a quick way for "thin" clients to               determine an appropriate UTF offset for an arbitrary date without               having to do full timezone expansion themselves.            </t>          </section>              <section anchor="server_requirements" title="Server Requirements">            <t>              All servers MUST deliver timezone information for all timezones. This              means that any client API implementation can go to a single server to              get all timezone information. In turn, any server can refresh any of              the data from any other server - though the root servers may provide              the most up-to-date copy of the data.            </t>            <t>              All service providers MUST deliver functionally equivalent data for              all timezones. This ensures that all parties in a contract              agree on the UTC time. Service providers (or publishers) may choose to              map a particular region on to a different timezone identifier to              correct a deficiency in the original timezone specification.            </t>            <t>              With opaque timezone identifiers this remapping may be short lived and              the mapping can revert to the original identifier once the deficiency              has been addressed by the publisher.            </t>          </section>        <section anchor="timezone_selection" title="Extensions">          <t>            This protocol is designed to be extensible through a standards based             registration mechanism (see <xref target='iana_considerations'/>).             It is anticipated, that other useful timezone operations will be             added in the future (e.g., mapping a geographical location to             timezone identifiers, getting change history for timezones). To that             end, servers MUST return a description of their capabilities. This             will allow clients to determine if new features have been installed             and, if not, fall back on earlier features or disable some client             capabilities.          </t>        </section>      </section>      <section anchor="server_protocol" title="Server Protocol">        <t>          The interactions are simple <xref target="RFC2616">HTTP</xref> requests.           Most security considerations are already handled adequately by HTTP.          However, given the nature of the data being transferred and the          requirement it be correct all interactions between client and server           SHOULD use an HTTP connection protected with           <xref target='RFC5246'>TLS</xref>  as defined           in <xref target='RFC2818'/>.        </t>        <t>          The HTTP GET request method is used, with information passed          in request parameters. The "action" request parameter specifies which          operation is to take place, other request parameters act as arguments          to that operation.        </t>      </section>      <section anchor="discovery" title="Discovery">        <t>          Client implementations need to either know where the timezone service          is located or discover it through some mechanism. To use a timezone           service, a client needs an FQDN, port and HTTP request-URI path.        </t>        <section title='Timezone Service SRV Service Labels'>          <t>            <xref target="RFC2782"/> defines a DNS-based service discovery protocol            that has been widely adopted as a means of locating particular services            within a local area network and beyond, using SRV RR records.            This can be used to discover a service's FQDN and port.          </t>          <t>            This specification adds two service types for use with SRV records:            <list style="hanging">              <t hangText="timezone:">                Identifies a Timezone server that uses HTTP without transport                layer security (<xref target="RFC2818"/>).              </t>              <t hangText="timezones:">                Identifies a Timezone server that uses HTTP with transport                layer security (<xref target="RFC2818"/>).              </t>            </list>          </t>          <t>            Clients MUST honor "TTL", "Priority" and "Weight" values in the SRV            records, as described by <xref target="RFC2782"/>.          </t>          <figure>            <preamble>              Example: service record for server without transport layer security            </preamble>            <artwork>    _timezone._tcp     SRV 0 1 80 tz.example.com.            </artwork>          </figure>          <figure>            <preamble>                Example: service record for server with transport layer security            </preamble>            <artwork>    _timezones._tcp    SRV 0 1 443 tz.example.com.            </artwork>          </figure>        </section>                <section title='Timezone Service TXT records'>          <t>           When SRV RRs are used to advertise a timezone service, it is           also convenient to be able to specify a "context path" in the DNS to           be retrieved at the same time.  To enable that, this specification           uses a TXT RR that follows the syntax defined in Section 6 of           <xref target="I-D.cheshire-dnsext-dns-sd"/> and defines a "path" key for use in that           record.  The value of the key MUST be the actual "context path" to           the corresponding service on the server.          </t>                  <t>           A site might provide TXT records in addition to SRV records for each           service.  When present, clients MUST use the "path" value as the           "context path" for the service in HTTP requests.  When not present,           clients use the ".well-known" URI approach described next.          </t>          <figure>            <preamble>              Example: text record for service with transport layer security            </preamble>            <artwork>       _timezones._tcp    TXT path=/timezones            </artwork>          </figure>        </section>        <section title='Timezone Service Well-Known URI'>          <t>            A <xref target='RFC5785'>"well-known" URI</xref> is registered by             this specification for the Timezone service, "timezone"             (see <xref target='iana_considerations'/>). This URI points to a             resource that the client can use as the initial "context path" for             the service they are trying to connect to.              The server MUST redirect HTTP requests for that resource            to the actual "context path" using one of the available mechanisms            provided by HTTP (e.g., using a 301, 303, 307 response).  Clients            MUST handle HTTP redirects on the ".well-known" URI.  Servers MUST            NOT locate the actual timezone service endpoint at the            ".well-known" URI as per Section 1.1 of <xref target='RFC5785'/>.          </t>          <t>            Servers SHOULD set an appropriate Cache-Control header value (as per            Section 14.9 of <xref target='RFC2616'/>) in the redirect response to ensure caching            occurs or does not occur as needed, or as required by the type of            response generated.  For example, if it is anticipated that the            location of the redirect might change over time, then a "no-cache"            value would be used.          </t>          <t>            To facilitate "context path's" that might differ from user to user,            the server MAY require authentication when a client tries to access            the ".well-known" URI (i.e., the server would return a 401 status            response to the unauthenticated request from the client, then return            the redirect response only after a successful authentication by the            client).          </t>                    <section title='Example: well-known URI redirects to actual context path'>            <t>              A Timezone server has a "context path" that is "/servlet/timezone".               The client will use "/.well-known/timezone" as the path for the               service process after it has first found the FQDN and port number               via an SRV lookup or via manual entry of information by the              user from which the client can parse suitable information.               When the client makes its initial HTTP request               against "/.well-known/timezone", the server would issue an               HTTP 301 redirect response with a Location response header using               the path "/servlet/timezone". The client would then "follow" this               redirect to the new resource and continue making HTTP requests               there.            </t>          </section>        </section>      </section>    </section>    <section anchor="server_request_parameters" title="Operation Parameters">      <t>        All requests require the "action" request parameter to define what         action is required of the server.       </t>            <t>        Servers MUST support the following request parameters.      </t>      <section anchor="parameter_action" title='"action" Parameter'>        <t>          <list style='hanging'>            <t hangText="Name:">              action            </t>                <t hangText="Description:">              Specify the action to be carried out.            </t>                <t hangText="Value:">              Any IANA registered operation name.            </t>          </list>        </t>      </section>      <section anchor="parameter_format" title='"format" Parameter'>        <t>          <list style='hanging'>            <t hangText="Name:">              format            </t>                <t hangText="Description:">              Specify the format for the timezone data returned by the server as a               standard <xref target='RFC2046'>MIME</xref> media-type. If absent the               <xref target='RFC5545'>iCalendar</xref> format will be returned with               the timezones contained within a "VCALENDAR" object (i.e., a default               media-type of "text/calendar").            </t>                <t hangText="Value:">              A <xref target='RFC2046'>MIME</xref> media-type. The server MUST               support the following values:              <list style='hanging'>                <t hangText="text/calendar:">                  Return data as "VTIMEZONE" components embedded in a "VCALENDAR" object as per <xref target='RFC5545'/>.                </t>                    <t hangText="application/calendar+xml:">                  Return data using the XML representation of iCalendar data as per <xref target='I-D.daboo-et-al-icalendar-in-xml'>XML-Calendar</xref>.                </t>              </list>            </t>          </list>        </t>      </section>      <section anchor="parameter_changedsince"               title='"changesince" Parameter'>        <t>          <list style='hanging'>            <t hangText="Name:">              changesince            </t>                <t hangText="Description:">              Specify the timestamp for a conditional timezone list request in               order to restrict the result to timezones changed since the given               timestamp (see <xref target='operation_list_timezone_identifiers'/>).            </t>                <t hangText="Value:">              An <xref target='RFC5545'>iCalendar</xref> "DATE" or "DATE-TIME"               value. Typically a value returned in a previous request's "dtstamp"               XML element.            </t>          </list>        </t>      </section>      <section anchor="parameter_start" title='"start" Parameter'>        <t>          <list style='hanging'>            <t hangText="Name:">              start            </t>                <t hangText="Description:">              Specify the inclusive start of a period.            </t>                <t hangText="Value:">              An <xref target='RFC5545'>iCalendar</xref> "DATE" or "DATE-TIME" value.               If an 'end' request parameter is also present, then both the 'start'               and 'end' values MUST be of the same "DATE" or "DATE-TIME" value types.            </t>          </list>        </t>      </section>      <section anchor="parameter_end" title='"end" Parameter'>        <t>          <list style='hanging'>            <t hangText="Name:">              end            </t>                <t hangText="Description:">              Specify the exclusive end of a period.            </t>                <t hangText="Value:">              An <xref target='RFC5545'>iCalendar</xref> "DATE" or "DATE-TIME" value.               If a 'start' request parameter is also present, then both the 'start'               and 'end' values MUST be of the same "DATE" or "DATE-TIME" value types.            </t>          </list>        </t>      </section>      <section anchor="parameter_lang" title='"lang" Parameter'>        <t>          <list style='hanging'>            <t hangText="Name:">              lang            </t>                <t hangText="Description:">              Specify the language in which locale specific values are to be              returned. e.g., when fetching aliases, if a language is              specified, only aliases for that language will be returned.            </t>                <t hangText="Value:">              The value is a standard ISO3036 letter code + country code.            </t>          </list>        </t>      </section>      <section anchor="parameter_returnaliases"               title='"returnaliases" Parameter'>        <t>          <list style='hanging'>            <t hangText="Name:">              returnaliases            </t>                <t hangText="Description:">              If present, indicates that timezone identifier aliases should be               returned in the timezone list. When fetching the list of timezones               the default action is to omit aliases. The inclusion of this parameter               causes timezone aliases to be returned in the list               (see <xref target='operation_list_timezone_identifiers'/>).            </t>                <t hangText="Value:">              This parameter takes no value.            </t>          </list>        </t>      </section>      <section anchor="parameter_returnall"               title='"returnall" Parameter'>        <t>          <list style='hanging'>            <t hangText="Name:">              returnall            </t>                <t hangText="Description:">              If present indicates that all timezones should be returned. When               fetching the list of timezones the default action is to omit               inactive timezones. The inclusion of this parameter causes inactive               timezones to be returned in the list               (see <xref target='operation_list_timezone_identifiers'/>).            </t>                <t hangText="Value:">              This parameter takes no value.            </t>          </list>        </t>      </section>      <section anchor="parameter_tzid" title='"tzid" Parameter'>        <t>          <list style='hanging'>            <t hangText="Name:">              tzid            </t>                <t hangText="Description:">              This parameter is used to identify a timezone to be targeted by an operation.            </t>                <t hangText="Value:">              A timezone identifier name. In some cases the special value "*" is               used to indicate that all timezones should be matched.            </t>          </list>        </t>      </section>    </section>    <section anchor="server_operations" title="Operations">      <t>        Servers MUST support the following operations.      </t>      <section anchor="operation_get_capabilities"               title='"capabilities" Operation'>        <t>          <list style='hanging'>            <t hangText="Name:">              capabilities            </t>            <t hangText="Description:">              This operation returns the capabilities of the server, allowing              clients to determine if a specific feature has been deployed              and/or enabled.            </t>            <t hangText="Parameters:">                <list style="hanging">                    <t hangText="action">REQUIRED, value MUST be "capabilities"</t>                </list>            </t>            <t hangText="Response">              An XML document containing a               <xref target='capabilities_element'>"capabilities"</xref> element              as the root element.            </t>          </list>        </t>        <section anchor="example_get_capabilities"                 title="Example: Get Capabilities">          <figure>            <preamble>              In this example the client requests the server capabilities.            </preamble>            <artwork><![CDATA[   >> Request <<   GET /?action=capabilities HTTP/1.1   Host: tz.example.com   >> Response <<   HTTP/1.1 200 OK   Date: Wed, 4 Jun 2008 09:32:12 GMT   Content-Type: application/xml; charset="utf-8"   Content-Length: xxxx   <?xml version="1.0" encoding="utf-8" ?>   <capabilities xmlns="urn:ietf:params:xml:ns:timezone-service">     <operation>       <action>list</action>       <description>List timezone identifiers and localized forms       </description>       <accept-parameter>         <name>lang</name>         <required>false</required>         <multi>true</multi>         <description>Specify desired localized form(s)</description>       </accept-parameter>       <accept-parameter>         <name>changedsince</name>         <required>false</required>         <multi>false</multi>         <description>Limit result to timezones changed since the           given date         </description>       </accept-parameter>       <accept-parameter>         <name>returnall</name>         <required>false</required>         <multi>false</multi>         <description>If present inactive timezones will be returned.         </description>       </accept-parameter>     </operation>     <operation>       <action>get</action>       <description>         Returns one or more timeszones as specified by the         tzid parameter.       </description>       <accept-parameter>         <name>format</name>         <required>false</required>         <multi>false</multi>         <value>text/calendar</value>         <value>application/calendar+xml</value>         <description>Specify required format for timezone.         </description>       </accept-parameter>       <accept-parameter>         <name>lang</name>         <required>false</required>         <multi>true</multi>         <description>Specify desired localized form(s)</description>       </accept-parameter>       <accept-parameter>         <name>tzid</name>         <required>true</required>         <multi>true</multi>         <description>Specify desired timezone identifiers         </description>       </accept-parameter>     </operation>     <operation>       <action>expand</action>       <description>         Expands the specified timezone(s) into local onset and UTC         offsets       </description>       <accept-parameter>         <name>tzid</name>         <required>true</required>         <multi>true</multi>         <description>Specify desired timezone identifiers</description>       </accept-parameter>       <accept-parameter>         <name>start</name>         <required>false</required>         <multi>false</multi>         <description>           Specify start of the period of interest. If omitted the           current year is assumed.         </description>       </accept-parameter>       <accept-parameter>         <name>end</name>         <required>false</required>         <multi>false</multi>         <description>           Specify end of the period of interest.           If omitted the current year + 10 is assumed.         </description>       </accept-parameter>     </operation>     <operation>       <action>capabilities</action>       <description>Gets the capabilities of the server</description>     </operation>   </capabilities>          ]]></artwork>          </figure>        </section>      </section>      <section anchor="operation_list_timezone_identifiers"               title='"list" Operation'>        <t>          <list style='hanging'>            <t hangText="Name:">              list            </t>            <t hangText="Description:">              This operation lists all timezone              identifiers, in summary format, with optional localized data. In              addition, it returns a timestamp which is the current server              global last modification value.            </t>            <t hangText="Parameters:">              <list style='hanging'>                <t hangText="action">REQUIRED, value MUST be "list"</t>                <t hangText="lang=&lt;lang-code&gt;">                  OPTIONAL, but MAY occur multiple times. Specifies the language                   or languages for localized information.                </t>                <t hangText="returnaliases">                  OPTIONAL, but MUST occur only once. If present, indicates that                   timezone aliases should be returned in the list.                </t>                <t hangText="returnall">                  OPTIONAL, but MUST occur only once. If present, indicates that                   all, including inactive, timezones should be returned in the                   response. The TZ:inactive XML element will flag those timezones                   no longer in use.                </t>                <t hangText="changedsince">                  OPTIONAL, but MUST occur only once. If present, limits the                   response to timezones changed since the given timestamp.                </t>              </list>            </t>            <t hangText="Response:">              An XML document containing a               <xref target='timezone_list_element'>"timezone-list"</xref> element               as the root element.            </t>          </list>        </t>        <section anchor="example_server_list_timezone_identifiers"                 title="Example: List timezone identifiers">          <figure>            <preamble>              In this example the client requests the timezone identifiers and               in addition requests that the US-English local names be returned.            </preamble>            <artwork><![CDATA[   >> Request <<   GET /?action=list&lang=en_US HTTP/1.1   Host: tz.example.com   >> Response <<   HTTP/1.1 200 OK   Date: Wed, 4 Jun 2008 09:32:12 GMT   Content-Type: application/xml; charset="utf-8"   Content-Length: xxxx   <?xml version="1.0" encoding="utf-8" ?>   <timezone-list xmlns="urn:ietf:params:xml:ns:timezone-service">     <dtstamp>20091011T093211Z</dtstamp>     <summary>       <tzid>America/New_York</tzid>       <last-modified>20090917T013934Z</last-modified>       <local-name lang="en_US">America/New_York</local-name>     <summary>     ...   </timezone-list>          ]]></artwork>          </figure>        </section>      </section>      <section anchor="operation_get_timezone" title='"get" Operation'>        <t>          <list style='hanging'>            <t hangText="Name:">              get            </t>                        <t hangText="Description:">              This operation returns a timezone. Clients must be prepared to               accept a timezone with a different identifier if the requested               identifier is an alias.            </t>            <t hangText="Parameters:">              <list style='hanging'>                <t hangText="action">REQUIRED, value MUST be "get"</t>                <t hangText="format=&lt;media-type&gt;">                  OPTIONAL, but MUST occur only once. Return information using                   the specified media-type. In the absence of this parameter,                   the value "text/calendar" MUST be assumed.                </t>                <t hangText="lang=&lt;lang-code&gt;">                  OPTIONAL, but MAY occur                   multiple times. If present, specifies the language or languages for localized information.                </t>                <t hangText="tzid=&lt;identifier&gt;">                  REQUIRED, but MAY occur multiple times. Identifies the                   timezone for which information is returned. Alternatively, if                   a single value of "*" is given, returns information for all                   timezones. The "*" option will typically be used by servers                   that wish to retrieve the entire set of timezones supported by                   another server to re-synchronize their entire data cache.                   Clients will typically only retrieve individual timezone data                   on a case-by-case basis.                </t>              </list>            </t>            <t hangText="Response:">              A document containing all the requested timezone data in the format               specified.            </t>          </list>        </t>        <section title="Example: Get timezone">          <figure>            <preamble>              In this example the client requests the timezone with a specific              timezone identifier to be returned            </preamble>            <artwork><![CDATA[   >> Request <<   GET /?action=get&tzid=America/New_York                     &format=text/calendar HTTP/1.1   Host: tz.example.com   >> Response <<   HTTP/1.1 200 OK   Date: Wed, 4 Jun 2008 09:32:12 GMT   Content-Type: text/calendar; charset="utf-8"   Content-Length: xxxx   BEGIN:VCALENDAR   ...   BEGIN:VTIMEZONE   ...   END:VTIMEZONE   END:VCALENDAR          ]]></artwork>          </figure>        </section>      </section>      <section anchor="operation_expand_timezones"             title='"expand" Operation'>        <t>          <list style='hanging'>            <t hangText="Name:">              expand            </t>            <t hangText="Description:">              This operation expands the specified              timezone(s) into a list of onset start date/time and offset.            </t>            <t hangText="Parameters:">              <list style='hanging'>                <t hangText="action">                  REQUIRED, value MUST be "expand"                </t>                <t hangText="tzid=&lt;identifier&gt;">                  REQUIRED, but MAY occur multiple times. Identifies the                   timezones for which information is returned. The value "*",                   which has a special meaning in the "get" operation, is not                   supported by this operation.                </t>                <t hangText="lang=&lt;lang-code&gt;">                  OPTIONAL, but MAY occur multiple times. If present, specifies                   the language or languages for localized information.                </t>                <t hangText="start=date or date-time:">                  OPTIONAL, but MUST occur only once. If present, specifies the                   start of the period of interest. If omitted, the current year                   is assumed.                </t>                <t hangText="end=date or date-time:">                  OPTIONAL, but MUST occur only once. If present, specifies the                   end of the period of interest. If omitted, the current                   year + 10 is assumed.                </t>              </list>            </t>            <t hangText="Response:">              An XML document containing a               <xref target='timezones_element'>"timezones"</xref> element as the               root element.            </t>          </list>        </t>        <section anchor="example_expanded_xml_data_format"                 title="Example: Expanded XML Data Format">          <figure>            <preamble>              In this example the client requests a timezone in the expanded              form.            </preamble>            <artwork><![CDATA[   >> Request <<   GET /?action=expand&tzid=America/New_York HTTP/1.1   Host: tz.example.com   >> Response <<   HTTP/1.1 200 OK   Date: Wed, 4 Jun 2008 09:32:12 GMT   Content-Type: application/xml; charset="utf-8"   Content-Length: xxxx   <?xml version="1.0" encoding="utf-8" ?>   <timezones xmlns="urn:ietf:params:xml:ns:timezone-service">     <dtstamp>20091011T093211Z</dtstamp>     <tzdata>       <tzid>America/New_York</tzid>       <calscale>Gregorian</calscale>       <observance>         <name>Daylight</name>         <onset>20080309T070000Z</onset>         <utc-offset-from>-0500</utc-offset-from>         <utc-offset-to>-0400</utc-offset-to>       </observance>       <observance>         <name>Standard</name>         <onset>20081102T070000Z</onset>         <utc-offset-from>-0400</utc-offset-from>         <utc-offset-to>-0500</utc-offset-to>       </observance>       <observance>         <name>Daylight</name>         <onset>20090308T070000Z</onset>         <utc-offset-from>-0500</utc-offset-from>         <utc-offset-to>-0400</utc-offset-to>       </observance>       ...     </tzdata>   </timezones>          ]]></artwork>          </figure>        </section>      </section>    </section>    <section anchor="service_XML_definitions"             title="XML Definitions">      <t>        XML elements used by this specification are defined here.      </t>      <section anchor='capabilities_element' title="TZ:capabilities XML element">        <t>          <list style='hanging'>            <t hangText="Name:">              capabilities            </t>            <t hangText="Namespace:">              urn:ietf:params:xml:ns:timezone-service            </t>            <t hangText="Purpose:">              Root element encapsulating timezone service capabilities              information.            </t>            <t hangText="Description:">              This defines the root (top-level) element used as the container              for capabilities information.            </t>            <t hangText="Definition:">              <figure>                <artwork><![CDATA[<!ELEMENT capabilities (operation*)>]]></artwork>              </figure>            </t>          </list>        </t>      </section>      <section title="TZ:operation XML element">        <t>          <list style='hanging'>            <t hangText="Name:">              operation            </t>            <t hangText="Namespace:">              urn:ietf:params:xml:ns:timezone-service            </t>            <t hangText="Purpose:">              Element encapsulating timezone operation description            </t>            <t hangText="Description:">              This defines the element used as the container              for information defining an operation and its parameters.            </t>            <t hangText="Definition:">              <figure>                <artwork><![CDATA[<!ELEMENT operation (action, description?, accept-parameter*)>]]></artwork>              </figure>            </t>          </list>        </t>      </section>      <section title="TZ:action XML element">        <t>          <list style='hanging'>            <t hangText="Name:">              action            </t>            <t hangText="Namespace:">              urn:ietf:params:xml:ns:timezone-service            </t>            <t hangText="Purpose:">              Define name of an action            </t>            <t hangText="Description:">              Specify name of an operation's action.            </t>            <t hangText="Definition:">              <figure>                <artwork><![CDATA[<!ELEMENT action  (#PCDATA)><!-- A legal action value -->]]></artwork>              </figure>            </t>          </list>        </t>      </section>      <section title="TZ:description XML element">        <t>          <list style='hanging'>            <t hangText="Name:">              description            </t>            <t hangText="Namespace:">              urn:ietf:params:xml:ns:timezone-service            </t>            <t hangText="Purpose:">              A description.            </t>            <t hangText="Description:">                This element specifies a description that refers to the enclosing element.            </t>            <t hangText="Definition:">              <figure>                <artwork><![CDATA[<!ELEMENT description  (#PCDATA)>]]></artwork>              </figure>            </t>          </list>        </t>      </section>      <section title="TZ:accept-parameter XML element">        <t>          <list style='hanging'>            <t hangText="Name:">              accept-parameter            </t>            <t hangText="Namespace:">              urn:ietf:params:xml:ns:timezone-service            </t>            <t hangText="Purpose:">              Element defining a timezone operation parameter            </t>            <t hangText="Description:">              This defines the name, type and characteristics of an              operation parameter.            </t>            <t hangText="Definition:">              <figure>                <artwork><![CDATA[<!ELEMENT accept-parameter (name, required, multi,                            value*, description?)>]]></artwork>              </figure>            </t>          </list>        </t>      </section>      <section title="TZ:required XML element">        <t>          <list style='hanging'>            <t hangText="Name:">              required            </t>            <t hangText="Namespace:">              urn:ietf:params:xml:ns:timezone-service            </t>            <t hangText="Purpose:">              Specify if timezone method parameter is required            </t>            <t hangText="Description:">              Specify if timezone method parameter is required.               Values of "true" or "false" are used.            </t>            <t hangText="Definition:">              <figure>                <artwork><![CDATA[<!ELEMENT required  (#PCDATA)><!-- "true" or "false" -->]]></artwork>              </figure>            </t>          </list>        </t>      </section>      <section title="TZ:multi XML element">        <t>          <list style='hanging'>            <t hangText="Name:">              multi            </t>            <t hangText="Namespace:">              urn:ietf:params:xml:ns:timezone-service            </t>            <t hangText="Purpose:">              Specify if timezone method parameter is multi-valued            </t>            <t hangText="Description:">              Specify if timezone method parameter is multi-valued.               Values of "true" or "false" are used.            </t>            <t hangText="Definition:">              <figure>                <artwork><![CDATA[<!ELEMENT multi  (#PCDATA)><!-- "true" or "false" -->]]></artwork>              </figure>            </t>          </list>        </t>      </section>      <section title="TZ:value XML element">        <t>          <list style='hanging'>            <t hangText="Name:">              value            </t>            <t hangText="Namespace:">              urn:ietf:params:xml:ns:timezone-service            </t>            <t hangText="Purpose:">              Allowed values for a parameter.            </t>            <t hangText="Description:">                This element specifies the allowed values for a parameter.                 If present, only the set of valus specified will be allowed by the server.            </t>            <t hangText="Definition:">              <figure>                <artwork><![CDATA[<!ELEMENT value  (#PCDATA)>]]></artwork>              </figure>            </t>          </list>        </t>      </section>      <section anchor='timezone_list_element' title="TZ:timezone-list XML element">        <t>          <list style='hanging'>            <t hangText="Name:">              timezone-list            </t>            <t hangText="Namespace:">              urn:ietf:params:xml:ns:timezone-service            </t>            <t hangText="Purpose:">              Root element encapsulating timezone list information.            </t>            <t hangText="Description:">              This defines the root (top-level) element used as the container              for timezone listing.            </t>            <t hangText="Definition:">              <figure>                <artwork><![CDATA[<!ELEMENT timezone-list (dtstamp, summary*)>]]></artwork>              </figure>            </t>          </list>        </t>      </section>      <section title="TZ:dtstamp XML element">        <t>          <list style='hanging'>            <t hangText="Name:">              dtstamp            </t>            <t hangText="Namespace:">              urn:ietf:params:xml:ns:timezone-service            </t>            <t hangText="Purpose:">              Provide a timestamp value.            </t>            <t hangText="Description:">              Provides the UTC date and time when a substantive change was made               to the timezone data.            </t>            <t hangText="Definition:">              <figure>                <artwork><![CDATA[<!ELEMENT version (#PCDATA)><!-- RFC5545 UTC DATE-TIME value -->]]></artwork>              </figure>            </t>          </list>        </t>      </section>      <section title="TZ:summary XML element">        <t>          <list style='hanging'>            <t hangText="Name:">              summary            </t>            <t hangText="Namespace:">              urn:ietf:params:xml:ns:timezone-service            </t>            <t hangText="Purpose:">              Defines a timezone summary.            </t>            <t hangText="Description:">              This defines the element that provides summary information for a              timezone in the timezones list.            </t>            <t hangText="Definition:">              <figure>                <artwork><![CDATA[<!ELEMENT summary (tzid, last-modified,                   local-name*, alias*)>]]></artwork>              </figure>            </t>          </list>        </t>      </section>      <section title="TZ:tzid XML element">        <t>          <list style='hanging'>            <t hangText="Name:">              tzid            </t>            <t hangText="Namespace:">              urn:ietf:params:xml:ns:timezone-service            </t>            <t hangText="Purpose:">              The identifier for the timezone.            </t>            <t hangText="Description:">              The text value is the identifier of the timezone being referred to.            </t>            <t hangText="Definition:">              <figure>                <artwork><![CDATA[<!ELEMENT tzid  (#PCDATA)>]]></artwork>              </figure>            </t>          </list>        </t>      </section>      <section title="TZ:last-modified XML element">        <t>          <list style='hanging'>            <t hangText="Name:">              last-modified            </t>            <t hangText="Namespace:">              urn:ietf:params:xml:ns:timezone-service            </t>            <t hangText="Purpose:">              Provide a timestamp value.            </t>            <t hangText="Description:">              Provides the UTC date and time that the timezone data was last modified.            </t>            <t hangText="Definition:">              <figure>                <artwork><![CDATA[<!ELEMENT last-modified (#PCDATA)><!-- RFC5545 UTC DATE-TIME value -->]]></artwork>              </figure>            </t>          </list>        </t>      </section>      <section title="TZ:local-name XML element">        <t>          <list style='hanging'>            <t hangText="Name:">              local-name            </t>            <t hangText="Namespace:">              urn:ietf:params:xml:ns:timezone-service            </t>            <t hangText="Purpose:">              A localized name for the timezone.            </t>            <t hangText="Description:">              Defines one or more localized names that are used when a timezone              identifier needs to be presented to a user. The xml:lang attribute              is used to indicate the language associated with each value.              If multiple names are provided for the same locale the preferred               name should be flagged with the "PREF=true" attribute. In the absence of               any indication the client is free to choose.            </t>            <t hangText="Definition:">              <figure>                <artwork><![CDATA[<!ELEMENT local-name  (#PCDATA)><!ATTLIST local-name          xml:lang CDATA #REQUIRED         pref ("true"|"false") #IMPLIED >]]></artwork>              </figure>            </t>          </list>        </t>      </section>      <section title="TZ:alias XML element">        <t>          <list style='hanging'>            <t hangText="Name:">              alias            </t>            <t hangText="Namespace:">              urn:ietf:params:xml:ns:timezone-service            </t>            <t hangText="Purpose:">              An alternative identifier for the timezone.            </t>            <t hangText="Description:">              Defines alternative identifiers that can be used for the              timezone. This feature allows mapping of old identifiers onto              new.            </t>            <t hangText="Definition:">              <figure>                <artwork><![CDATA[<!ELEMENT alias  (#PCDATA)><!ATTLIST alias xml:lang CDATA #REQUIRED>]]></artwork>              </figure>            </t>          </list>        </t>      </section>      <section anchor='timezones_element' title="TZ:timezones XML element">        <t>          <list style='hanging'>            <t hangText="Name:">              timezones            </t>            <t hangText="Namespace:">              urn:ietf:params:xml:ns:timezone-service            </t>            <t hangText="Purpose:">              Root element encapsulating expanded timezone information.            </t>            <t hangText="Description:">              This defines the root (top-level) element used as the container              for expanded timezone data.            </t>            <t hangText="Definition:">              <figure>                <artwork><![CDATA[<!ELEMENT timezones (dtstamp, tzdata*)>]]></artwork>              </figure>            </t>          </list>        </t>      </section>      <section title="TZ:tzdata XML element">        <t>          <list style='hanging'>            <t hangText="Name:">              tzdata            </t>            <t hangText="Namespace:">              urn:ietf:params:xml:ns:timezone-service            </t>            <t hangText="Purpose:">              Encapsulates expanded timezone information.            </t>            <t hangText="Description:">              This element specifies expanded timezone data for the range               specified in a request.            </t>            <t hangText="Definition:">              <figure>                <artwork><![CDATA[<!ELEMENT tzdata (tzid, calscale?, observance*)>]]></artwork>              </figure>            </t>          </list>        </t>      </section>      <section title="TZ:calscale XML element">        <t>          <list style='hanging'>            <t hangText="Name:">              calscale            </t>            <t hangText="Namespace:">              urn:ietf:params:xml:ns:timezone-service            </t>            <t hangText="Purpose:">              Identifies the calendar system for the timezone data.            </t>            <t hangText="Description:">              The calendar system defines how rules, dates and times are to be              interpreted. Currently only the value "Gregorian" is supported,              referring to the Gregorian calendar scale. If this element is not               present in its normal context, then the value "Gregorian" MUST be assumed.            </t>            <t hangText="Definition:">              <figure>                <artwork><![CDATA[<!ELEMENT calscale (#PCDATA)><!-- allowed PCDATA value is "Gregorian" -->]]></artwork>              </figure>            </t>          </list>        </t>      </section>      <section title="TZ:observance XML element">        <t>          <list style='hanging'>            <t hangText="Name:">              observance            </t>            <t hangText="Namespace:">              urn:ietf:params:xml:ns:timezone-service            </t>            <t hangText="Purpose:">              Provides data for a single observance period for a timezone.            </t>            <t hangText="Description:">                In an expanded timezone, the observance element specifies a                 single timezone observance.            </t>            <t hangText="Definition:">              <figure>                <artwork><![CDATA[<!ELEMENT observance (name, local-name*,                          onset, utc-offset-from, utc-offset-to)>]]></artwork>              </figure>            </t>          </list>        </t>      </section>      <section title="TZ:name XML element">        <t>          <list style='hanging'>            <t hangText="Name:">              name            </t>            <t hangText="Namespace:">              urn:ietf:params:xml:ns:timezone-service            </t>            <t hangText="Purpose:">              Name for the observance.            </t>            <t hangText="Description:">                This element specifies which timezone observance is                being referred to. Typically this will be either "Standard" or                 "Daylight".            </t>            <t hangText="Definition:">              <figure>                <artwork><![CDATA[<!ELEMENT name  (#PCDATA)><!-- Typically one of either "Standard" or "Daylight" -->]]></artwork>              </figure>            </t>          </list>        </t>      </section>      <section title="TZ:onset XML element">        <t>          <list style='hanging'>            <t hangText="Name:">              onset            </t>            <t hangText="Namespace:">              urn:ietf:params:xml:ns:timezone-service            </t>            <t hangText="Purpose:">              Local time onset of the observance.            </t>            <t hangText="Description:">                The onset element defines the local time at which the                observance takes effect.            </t>            <t hangText="Definition:">              <figure>                <artwork><![CDATA[<!ELEMENT onset  (#PCDATA)><!-- A local DATE-TIME value -->]]></artwork>              </figure>            </t>          </list>        </t>      </section>      <section title="TZ:utc-offset-from XML element">        <t>          <list style='hanging'>            <t hangText="Name:">              utc-offset-from            </t>            <t hangText="Namespace:">              urn:ietf:params:xml:ns:timezone-service            </t>            <t hangText="Purpose:">              UTC offset before the start of the observance.            </t>            <t hangText="Description:">                The utc-offset-from element defines the UTC offset in hours and                minutes before the start of this observance.            </t>            <t hangText="Definition:">              <figure>                <artwork><![CDATA[<!ELEMENT utc-offset-from  (#PCDATA)><!-- Positive or negative hours and minutes -->]]></artwork>              </figure>            </t>          </list>        </t>      </section>      <section title="TZ:utc-offset-to XML element">        <t>          <list style='hanging'>            <t hangText="Name:">              utc-offset-to            </t>            <t hangText="Namespace:">              urn:ietf:params:xml:ns:timezone-service            </t>            <t hangText="Purpose:">              UTC offset after the start of the observance.            </t>            <t hangText="Description:">                The utc-offset-to element defines the UTC offset in hours and                minutes at and after the start of this observance.            </t>            <t hangText="Definition:">              <figure>                <artwork><![CDATA[<!ELEMENT utc-offset-to  (#PCDATA)><!-- Positive or negative hours and minutes -->]]></artwork>              </figure>            </t>          </list>        </t>      </section>    </section>    <section anchor="service_XML_schema"             title="XML Schema">      <t>        Following is the XML schema for the timezone service responses.      </t>      <figure>        <artwork><![CDATA[<?xml version="1.0" encoding="UTF-8"?><schema xmlns="http://www.w3.org/2001/XMLSchema"         xmlns:tns="urn:ietf:params:xml:ns:timezone-service"         xmlns:xcal="urn:ietf:params:xml:ns:icalendar-2.0"        targetNamespace="urn:ietf:params:xml:ns:timezone-service"         elementFormDefault="qualified">  <!-- =============================================================       Timezones service XML schema        ============================================================= -->          <import schemaLocation="../xml.xsd"           namespace="http://www.w3.org/XML/1998/namespace" />          <import schemaLocation="../icalendar/iCalendar.xsd"           namespace="urn:ietf:params:xml:ns:icalendar-2.0" />    <!-- *************************************************************                             basic types       ************************************************************* -->            <simpleType name="CalscaleType">    <annotation>      <documentation xml:lang="en">        The calendar system defines how rules, dates and times are to be         interpreted. Currently only the value "Gregorian" is supported,         referring to the Gregorian calendar scale. If this element is         not present in its normal context, then the value "Gregorian"         MUST be assumed.       </documentation>    </annotation>    <restriction base="string"/>  </simpleType>  <simpleType name="DtstampType">    <annotation>      <documentation xml:lang="en">        Provides the UTC date and time when a substantive change was         made to the timezone data.        </documentation>    </annotation>    <restriction base="string"/>  </simpleType>  <simpleType name="LastmodifiedType">    <annotation>      <documentation xml:lang="en">        Provides the UTC date and time that the timezone data was last         modified.       </documentation>    </annotation>    <restriction base="string"/>  </simpleType>    <complexType name="LocalNameType">    <annotation>      <documentation xml:lang="en">        Defines one or more localized names that are used when a         timezone identifier needs to be presented to a user.         The xml:lang attribute is used to indicate the language         associated with each value.          If multiple names are provided for the same locale the first is         considered the preferred name.      </documentation>    </annotation>    <simpleContent>      <extension base="string">        <attribute ref="xml:lang" />        <attribute name="pref" type="boolean" />      </extension>    </simpleContent>  </complexType>                <simpleType name="OnsetType">    <annotation>      <documentation xml:lang="en">        The onset element defines the local time at which the         observance takes effect.         </documentation>    </annotation>    <restriction base="string"/>  </simpleType>                <simpleType name="TzidType">    <annotation>      <documentation xml:lang="en">        The text value is the identifier of the timezone being         referred to.        </documentation>    </annotation>    <restriction base="string"/>  </simpleType>                <simpleType name="UtcOffsetFromType">    <annotation>      <documentation xml:lang="en">        The utc-offset-from element defines the UTC offset in hours         and minutes before the start of this observance.         </documentation>    </annotation>    <restriction base="string"/>  </simpleType>                <simpleType name="UtcOffsetToType">    <annotation>      <documentation xml:lang="en">        The utc-offset-to element defines the UTC offset in hours and         minutes at and after the start of this observance.         </documentation>    </annotation>    <restriction base="string"/>  </simpleType>    <complexType name="AliasType">    <annotation>      <documentation xml:lang="en">        Defines alternative identifiers that can be used for the         timezone. This feature allows mapping of old identifiers         onto new.       </documentation>    </annotation>    <simpleContent>      <extension base="string">        <attribute ref="xml:lang" />      </extension>    </simpleContent>  </complexType>    <complexType name="BaseResultType" abstract="true" />    <!-- *************************************************************                             capabilities response       ************************************************************* -->    <complexType name="CapabilitiesAcceptParameterType">    <annotation>      <documentation xml:lang="en">        This defines the name, type and characteristics of an operation         parameter.       </documentation>    </annotation>    <sequence>       <element name="name" type="string" />      <element name="required" type="boolean" />      <element name="multi" type="boolean" />      <element name="value" type="string" />      <element name="description" type="string" />    </sequence>  </complexType>    <complexType name="CapabilitiesOperationType">    <annotation>      <documentation xml:lang="en">        The element used as the container for information defining an         operation and its parameters. .      </documentation>    </annotation>    <sequence>       <element name="action" type="string" />      <element name="description" type="string" />      <element name="accept-parameter"                type="tns:CapabilitiesAcceptParameterType"                maxOccurs="unbounded" />    </sequence>  </complexType>    <complexType name="CapabilitiesType">    <annotation>      <documentation xml:lang="en">           The root (top-level) element used as the container for            capabilities information.      </documentation>    </annotation>    <complexContent mixed="false">      <extension base="tns:BaseResultType">        <sequence>           <element name="operation"                     type="tns:CapabilitiesOperationType"                    maxOccurs="unbounded" />        </sequence>      </extension>    </complexContent>  </complexType>    <element name="capabilities" type="tns:CapabilitiesType" />    <!-- *************************************************************                             list response       ************************************************************* -->    <complexType name="SummaryType">    <annotation>      <documentation xml:lang="en">        This defines the element that provides summary information for a         timezone in the timezones list.       </documentation>    </annotation>    <sequence >      <element name="tzid" type="tns:TzidType" minOccurs="1" />      <element name="last-modified" type="tns:LastmodifiedType" />      <element name="local-name" type="tns:LocalNameType"               maxOccurs="unbounded" />      <element name="alias" type="tns:AliasType"               maxOccurs="unbounded" />    </sequence>  </complexType>    <complexType name="TimezoneListType">    <annotation>      <documentation xml:lang="en">        This defines the root (top-level) element used as the container         for a timezone listing.        </documentation>    </annotation>    <complexContent mixed="false">      <extension base="tns:BaseResultType">        <sequence >          <element name="dtstamp"                    type="tns:DtstampType" minOccurs="1" />          <element name="summary"                    type="tns:SummaryType"                   maxOccurs="unbounded"  />        </sequence>      </extension>    </complexContent>  </complexType>    <element name="timezone-list" type="tns:TimezoneListType" />    <!-- ************************************************************                            expand response       ************************************************************* -->    <complexType name="ObservanceType">    <annotation>      <documentation xml:lang="en">        In an expanded timezone, the observance element specifies a         single timezone observance.        </documentation>    </annotation>    <sequence>       <element name="name" type="string" />      <element name="local-name" type="tns:LocalNameType"               maxOccurs="unbounded" />      <element name="onset" type="tns:OnsetType" minOccurs="1" />      <element name="utc-offset-from"                type="tns:UtcOffsetFromType" minOccurs="1" />      <element name="utc-offset-to" type="tns:UtcOffsetToType"                minOccurs="1" />    </sequence>  </complexType>    <complexType name="TzdataType">    <annotation>      <documentation xml:lang="en">        This element specifies expanded timezone data for the range         specified in a request.       </documentation>    </annotation>    <sequence>       <element name="tzid" type="tns:TzidType" minOccurs="1" />      <element name="calscale" type="tns:CalscaleType" />      <element name="observance" type="tns:ObservanceType"                maxOccurs="unbounded" />    </sequence>  </complexType>    <complexType name="TimezonesType">    <annotation>      <documentation xml:lang="en">        This defines the root (top-level) element used as the container         for expanded timezone data.        </documentation>    </annotation>    <complexContent mixed="false">      <extension base="tns:BaseResultType">        <sequence >          <element name="dtstamp"                    type="tns:DtstampType" minOccurs="1" />          <element name="tzdata" type="tns:TzdataType"                   maxOccurs="unbounded"  />        </sequence>      </extension>    </complexContent>  </complexType>    <element name="timezones" type="tns:TimezonesType" /></schema>]]></artwork>      </figure>    </section>    <section title='Security Considerations'>      <t>        Timezone data is critical in determining local or UTC time for devices         and in calendaring and scheduling operations. As such, it is vital that         a reliable source of timezone data is used. Servers providing a timezone         service MUST support HTTP over Transport Layer Security (TLS) (as defined         by <xref target="RFC2818"/>) with a valid certificate. Clients and         servers making use of a timezone service SHOULD use HTTP over TLS and         verify the authenticity of the service being used before accepting and         using any timezone data from that source.      </t>            <t>        Clients that support transport layer security as defined by         <xref target="RFC2818"/> SHOULD try the "_timezones" service first         before trying the "_timezone" service.  Clients MUST follow the        certificate verification process specified in        <xref target="I-D.saintandre-tls-server-id-check" />.      </t>            <t>        A malicious attacker with access to the DNS server data, or able to        get spoofed answers cached in a recursive resolver, can potentially        cause clients to connect to any server chosen by the attacker.  In        the absence of a secure DNS option, clients SHOULD check that the        target FQDN returned in the SRV record matches the original service        domain that was queried.  If the target FQDN is not in the queried        domain, clients SHOULD verify with the user that the SRV target FQDN        is suitable for use before executing any connections to the host.      </t>    </section>    <section anchor="iana_considerations" title='IANA Considerations'>      <t>        This document uses one new URN to identify a new XML namespace for the         response data used in this specification, and defines a new registry of         "actions" for the timezone service protocol, and defines a "well-known"         URI using the registration procedure and template from Section 5.1 of         <xref target='RFC5785'/>, and creates two new SRV service label aliases.      </t>      <section anchor="new_xml_namespace"               title="XML namespace">        <t>          Registration request for the timezone service namespace:        </t>        <t>          URI: urn:ietf:params:xml:ns:timezone-service        </t>        <t>          Registrant Contact: See the "Authors' Addresses" section of this          document.        </t>        <t>         XML: None.  Namespace URIs do not represent an XML specification.        </t>      </section>      <section anchor="new_service_operations_registration"               title="Service Operations Registration">        <t>          This section defines the process to register new or modified          timezone service operations with IANA.        </t>        <section anchor="service_operations_registration_procedure"                 title="Service Operations Registration Procedure">          <t>            The IETF will create a mailing list, timezone-service@ietf.org,             which can be used for public discussion of timezone service operations             proposals prior to registration. Use of the mailing list is strongly             encouraged. The IESG will appoint a designated expert who will             monitor the timezone-service@ietf.org mailing list and review registrations.          </t>          <t>            Registration of new timezone service operations MUST be reviewed by             the designated expert and published in an RFC. A Standard Tracks RFC             is REQUIRED for the registration of new timezone service operations.             A Standard Tracks RFC is also REQUIRED for changes to operations             previously documented in a Standard Tracks RFC.          </t>          <t>            The registration procedure begins when a completed registration             template, defined in the sections below, is sent to             timezone-service@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.          </t>        </section>        <section anchor="registration_template_for_operations"                 title="Registration Template for Operations" >          <t>            An operation is defined by completing the following template.            <list style="hanging">              <t hangText="Name:">                The name of the operation. This is also the value of the "action"                 parameter used in timezone service requests.              </t>              <t hangText="Description:">                A general description of the operation, its purpose, etc.              </t>              <t hangText="Parameters:">                A list of allowed request parameters, indicating whether they                 are "REQUIRED" or "OPTIONAL" and whether they can occur only                 once or multiple times.              </t>              <t hangText="Response">                The nature of the response to the HTTP request, e.g., what                 format the response data is in.              </t>            </list>          </t>        </section>        <section anchor="registration_template_for_operation_parameterss"                 title="Registration Template for Operation Parameters" >          <t>            An operation parameter is defined by completing the following template.            <list style="hanging">              <t hangText="Name:">                The name of the parameter.              </t>              <t hangText="Description:">                A general description of the parameter, its purpose, etc.              </t>              <t hangText="Value:">                The format of the parameter value, or an indication that the parameter has no value.              </t>            </list>          </t>        </section>      </section>      <section anchor="initial_timezone_service_registries"               title="Initial Timezone Service Registries" >        <t>          The IANA is requested to create and maintain the following          registries for timezone service operations with pointers to          appropriate reference documents.        </t>        <section anchor="operations_registry"                 title="Operations Registry">          <t>            The following table is to be used to initialize the            operations registry.          </t>          <texttable>            <ttcol align="left">Operation Name</ttcol>            <ttcol align="left">Status</ttcol>            <ttcol align="left">Reference</ttcol>            <c>capabilities</c>            <c>Current</c>            <c>RFCXXXX, <xref target="operation_get_capabilities"/></c>            <c>list</c>            <c>Current</c>            <c>RFCXXXX, <xref target="operation_list_timezone_identifiers"/></c>            <c>get</c>            <c>Current</c>            <c>RFCXXXX, <xref target="operation_get_timezone"/></c>            <c>expand</c>            <c>Current</c>            <c>RFCXXXX, <xref target="operation_expand_timezones"/></c>          </texttable>        </section>        <section anchor="parameters_registry"                 title="Operation Parameters Registry">          <t>            The following table is to be used to initialize the            parameters registry.          </t>          <texttable>            <ttcol align="left">Parameter</ttcol>            <ttcol align="left">Status</ttcol>            <ttcol align="left">Reference</ttcol>            <c>action</c>            <c>Current</c>            <c>RFCXXXX, <xref target="parameter_action"/></c>            <c>changedsince</c>            <c>Current</c>            <c>RFCXXXX, <xref target="parameter_changedsince"/></c>            <c>end</c>            <c>Current</c>            <c>RFCXXXX, <xref target="parameter_end"/></c>            <c>format</c>            <c>Current</c>            <c>RFCXXXX, <xref target="parameter_format"/></c>            <c>lang</c>            <c>Current</c>            <c>RFCXXXX, <xref target="parameter_lang"/></c>            <c>returnaliases</c>            <c>Current</c>            <c>RFCXXXX, <xref target="parameter_returnaliases"/></c>            <c>returnall</c>            <c>Current</c>            <c>RFCXXXX, <xref target="parameter_returnall"/></c>            <c>start</c>            <c>Current</c>            <c>RFCXXXX, <xref target="parameter_start"/></c>            <c>tzid</c>            <c>Current</c>            <c>RFCXXXX, <xref target="parameter_tzid"/></c>          </texttable>        </section>      </section>        <section title='timezone Well-Known URI Registration'>          <t>            <list style='hanging'>               <t hangText="URI suffix:">timezone</t>                   <t hangText="Change controller:">IETF.</t>                   <t hangText="Specification document(s):">This RFC.</t>                   <t hangText="Related information:"></t>            </list>          </t>        </section>        <section title='SRV Service Label Registration'>          <t>            IANA is requested to add "timezone" and  "timezones" service labels             as aliases for "http" and "https" respectively.          </t>        </section>    </section>    <section title="Acknowledgements">      <t>        The authors would like to thank the members of the Calendaring and        Scheduling Consortium's Timezone Technical Committee and the following        individuals for contributing their ideas and support: Bryan Keller,         Ciny Joy, Arnaud Quillaud, Jose Edvaldo Saraiva.      </t>      <t>        The authors would also like to thank the Calendaring and        Scheduling Consortium for advice with this specification.      </t>    </section>  </middle>  <!--  *****BACK MATTER ***** -->  <back>    <references title="Normative References">      &I-D.cheshire-dnsext-dns-sd;      &RFC2046;      &RFC2119;      &RFC2616;      &RFC2782;      &RFC2818;      &RFC5246;      &RFC5545;      &RFC5785;      &W3C.REC-xml-20081126;      &idXMLCalendar;      &I-D.saintandre-tls-server-id-check;      &I-D.lear-iana-timezone-database;    </references>    <!-- Change Logv00 2007-10-19  MD    Initial version                      -->  </back></rfc>
