Branch 'c++/master' - 3 commits - c++/CMakeLists.txt c++/tests schemas/ical
Christian Mollekopf
mollekopf at kolabsys.com
Mon Nov 14 20:25:37 CET 2011
c++/CMakeLists.txt | 55 -
c++/tests/CMakeLists.txt | 12
c++/tests/bindingstest.cpp | 293 +++++
c++/tests/bindingstest.h | 23
c++/tests/kcalconversiontest.cpp | 2
c++/tests/testfiles/testevent.xml | 26
c++/tests/testfiles/testkolabevent.xml | 29
schemas/ical/iCalendar-availability-extension.xsd | 85 +
schemas/ical/iCalendar-bw-extensions.xsd | 59 +
schemas/ical/iCalendar-link-extension.xsd | 50
schemas/ical/iCalendar-ms-extensions.xsd | 48
schemas/ical/iCalendar-params.xsd | 376 ++++++
schemas/ical/iCalendar-props.xsd | 773 ++++++++++++++
schemas/ical/iCalendar-valtypes.xsd | 234 ++++
schemas/ical/iCalendar-wscal-extensions.xsd | 161 ++
schemas/ical/iCalendar.rng | 1184 ++++++++++++++++++++++
schemas/ical/iCalendar.xsd | 206 +++
schemas/ical/kolabformat.xsd | 39
18 files changed, 3636 insertions(+), 19 deletions(-)
New commits:
commit 35b3fbcb7383f432e01ee9e51f194b422018ed1a
Author: Christian Mollekopf <mollekopf at kolabsys.com>
Date: Mon Nov 14 20:22:33 2011 +0100
first xCal based reading/writing test
diff --git a/c++/CMakeLists.txt b/c++/CMakeLists.txt
index 77458cf..dc1b2a3 100644
--- a/c++/CMakeLists.txt
+++ b/c++/CMakeLists.txt
@@ -1,30 +1,59 @@
project(kolabxmlbindings)
-make_directory(bindings)
+cmake_minimum_required(VERSION 2.8)
+
+FIND_PACKAGE(Qt4 REQUIRED)
+include_directories(${QT_INCLUDES} ${QT_INCLUDE_DIR} QtCore)
+
+set(CMAKE_BUILD_TYPE Debug)
+
+file(MAKE_DIRECTORY bindings)
set( SCHEMA_DIR ${CMAKE_SOURCE_DIR}/../schemas )
-set( SCHEMAS
- ${SCHEMA_DIR}/base.xsd
- ${SCHEMA_DIR}/incidence.xsd
- ${SCHEMA_DIR}/event.xsd
- ${SCHEMA_DIR}/note.xsd )
-set( SCHEMA_SOURCEFILES
+set( XSDCXX /usr/bin/xsdcxx)
+
+file(GLOB KOLAB_SCHEMAS ${SCHEMA_DIR}/*.xsd)
+set( KOLAB_SCHEMA_SOURCEFILES
bindings/base.cxx
bindings/incidence.cxx
bindings/event.cxx
bindings/note.cxx )
-set( XSDCXX /usr/bin/xsdcxx)
-add_custom_command(OUTPUT ${SCHEMA_SOURCEFILES}
- COMMAND ${XSDCXX} cxx-tree --generate-serialization --namespace-map http://kolab.org=KolabXSD --output-dir bindings ${SCHEMAS}
- COMMENT "Generating XSD bindings"
+add_custom_command(OUTPUT ${KOLAB_SCHEMA_SOURCEFILES}
+ COMMAND ${XSDCXX} cxx-tree --generate-serialization --namespace-map http://kolab.org=KolabXSD --output-dir bindings ${KOLAB_SCHEMAS}
+ COMMENT "Generating Kolab XSD bindings"
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
VERBATIM
)
+file(GLOB XCAL_SCHEMAS ${SCHEMA_DIR}/ical/*.xsd)
+set( XCAL_SCHEMA_SOURCEFILES
+ bindings/kolabformat.cxx
+ bindings/iCalendar.cxx
+ bindings/iCalendar-params.cxx
+ bindings/iCalendar-props.cxx
+ bindings/iCalendar-valtypes.cxx
+ bindings/iCalendar-link-extension.cxx
+ bindings/iCalendar-bw-extensions.cxx
+ bindings/iCalendar-ms-extensions.cxx
+ bindings/iCalendar-availability-extension.cxx
+# bindings/iCalendar-wscal-extensions.cxx
+)
+# --cxx-suffix .cpp --hxx-suffix .h
+add_custom_command(OUTPUT ${XCAL_SCHEMA_SOURCEFILES}
+ COMMAND ${XSDCXX} cxx-tree --generate-polymorphic --generate-serialization --namespace-map http://icalnamespace.org=xcalns --namespace-map http://kolab.org=KolabXSD --root-element event --root-element todo --output-dir bindings ${XCAL_SCHEMAS}
+ COMMENT "Generating xCal XSD bindings"
+ WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
+ VERBATIM
+ )
+
+set( SCHEMA_SOURCEFILES ${XCAL_SCHEMA_SOURCEFILES} ${KOLAB_SCHEMA_SOURCEFILES})
+
+SET_SOURCE_FILES_PROPERTIES(${SCHEMA_SOURCEFILES} PROPERTIES GENERATED 1)
+
ADD_CUSTOM_TARGET(generate_bindings ALL DEPENDS ${SCHEMA_SOURCEFILES})
include_directories( ./ )
add_library(kolabxml lib/kolabkcalconversion.cpp ${SCHEMA_SOURCEFILES})
-
-add_subdirectory(tests)
\ No newline at end of file
+target_link_libraries(${kolabxml} xerces-c)
+add_subdirectory(tests)
diff --git a/c++/tests/bindingstest.cpp b/c++/tests/bindingstest.cpp
index f2536a7..1e741ea 100644
--- a/c++/tests/bindingstest.cpp
+++ b/c++/tests/bindingstest.cpp
@@ -1,4 +1,5 @@
#include "bindingstest.h"
+
#include <QObject>
#include <QtTest/QtTest>
@@ -6,12 +7,13 @@
#include "bindings/iCalendar.hxx"
#include "bindings/iCalendar-props.hxx"
#include "bindings/iCalendar-valtypes.hxx"
+#include "bindings/kolabformat.hxx"
-#include "iostream"
-#include <xercesc/dom/DOMException.hpp>
+#include <iostream>
+#include <xercesc/dom/DOMException.hpp>
#include <xercesc/dom/DOMImplementation.hpp>
-#include </home/chrigi/work/kolab/xmlformat/cxxtest/xsdcxx/xsd/libxsd/xsd/cxx/xml/string.hxx>
+
void BindingsTest::writeNoteTest()
{
@@ -59,7 +61,7 @@ void BindingsTest::writeReadNoteTest()
}
-void BindingsTest::writeXCalEvent()
+void BindingsTest::writeKolabXCalEvent()
{
try {
//Components
@@ -67,10 +69,111 @@ void BindingsTest::writeXCalEvent()
icalendar_2_0::ArrayOfEventTodoContainedComponents component;
component.valarm().push_back(alarm);
+
+ //Properties
+
+ //Recurrence
+ icalendar_2_0::RecurType recur(icalendar_2_0::RecurType::freq_type::DAILY);
+ recur.count(2);
+ recur.byhour().push_back("3");
+ icalendar_2_0::RrulePropType rrule(recur);
+
+ //Startdate
+ xml_schema::date_time dt(2011,8,12,2,12,15);
+ icalendar_2_0::DtstartPropType::date_time_type datetime(dt);
+ icalendar_2_0::DtstartPropType startdate;
+ startdate.date_time(datetime);
+ //Startdate timezone
+ ::icalendar_2_0::ArrayOfParameters parameters;
+ ::icalendar_2_0::TzidParamType tzid("US/Eastern");
+ parameters.baseParameter().push_back(tzid);
+ startdate.parameters(parameters);
- //Properties
+ //Custom value
+ KolabXSD::CustomType custom("cusotomtypeidentifier", "sldjfldfj");
+
+ //Assembling event properties
+ ::icalendar_2_0::ArrayOfProperties properties;
+ properties.baseProperty().push_back(startdate);
+ properties.baseProperty().push_back(rrule);
+ properties.baseProperty().push_back(custom);
+
+ //Assembling the complete event
+ icalendar_2_0::VeventType event(component);
+ event.properties(properties);
+ KolabXSD::Event kolabEvent(event);
+ xml_schema::namespace_infomap map;
+ map["kolab"].name = "http://kolab.org";
+ map[""].name = "urn:ietf:params:xml:ns:icalendar-2.0";
+ //map["xcal"].schema = "iCalendar.xsd";
+
+ KolabXSD::event (std::cout, kolabEvent, map);
+
+ } catch (const xml_schema::exception& e) {
+ std::cout << e << endl;
+ QVERIFY(false);
+ }
+}
+
+
+void BindingsTest::readKolabXCalEvent()
+{
+ try {
+// xml_schema::properties props;
+// props.no_namespace_schema_location ("../../../schemas/ical/kolabevent.xsd");
+// props.schema_location ("http://kolab.org", "../../../schemas/ical/kolabevent.xsd"); //Force schema
+// std::auto_ptr<KolabXSD::Event> event(KolabXSD::kolabevent("testfiles/testkolabevent.xml", 0, props));
+
+ std::auto_ptr<KolabXSD::Event> event(KolabXSD::event("testfiles/testkolabevent.xml", xml_schema::flags::dont_validate));
+
+ const icalendar_2_0::BaseComponentType::properties_type& properties = *event->vevent().properties();
+ const icalendar_2_0::ArrayOfProperties::baseProperty_sequence &propertyList = properties.baseProperty();
+
+ /*for(int i = 0; i < propertyList.size(); i++) {
+ const icalendar_2_0::ArrayOfProperties::baseProperty_type prop = propertyList.at(i);
+
+ }*/
+ std::cout << propertyList.size() << std::endl;
+ for (icalendar_2_0::ArrayOfProperties::baseProperty_sequence::const_iterator i (propertyList.begin ()); i != propertyList.end (); ++i) {
+ if (const icalendar_2_0::RrulePropType* d = dynamic_cast<const icalendar_2_0::RrulePropType*> (&(*i))) {
+ std::cout << "Rrule" << std::endl;
+ std::cout << d->recur().freq() << std::endl;
+ std::cout << d->recur().count() << std::endl;
+ //std::cout << d->recur().byhour() << std::endl;
+ } else {
+ std::cout << "other" << std::endl;
+ const icalendar_2_0::BasePropertyType &baseProperty = (*i);
+ }
+ }
+
+ xml_schema::namespace_infomap map;
+ map[""].name = "http://kolab.org";
+// map[""].schema = "kolabevent.xsd";
+ map["xcal"].name = "urn:ietf:params:xml:ns:icalendar-2.0";
+// map["xcal"].schema = "iCalendar.xsd";
+
+ KolabXSD::event (std::cout, *event, map);
+
+ } catch (const xml_schema::exception& e) {
+ std::cout << e << std::endl;
+ QVERIFY(false);
+ }
+}
+
+#if 0
+void BindingsTest::writeXCalEvent()
+{
+ try {
+ //Components
+ icalendar_2_0::EventTodoComponentType::components_type::valarm_type alarm;
+
+ icalendar_2_0::ArrayOfEventTodoContainedComponents component;
+ component.valarm().push_back(alarm);
+
+ //Properties
+
//Recurrence
icalendar_2_0::RecurType recur(icalendar_2_0::RecurType::freq_type::DAILY);
recur.count(2);
@@ -147,7 +250,7 @@ void BindingsTest::readXCalEvent()
}
-
+#endif
void BindingsTest::xercesException()
{
diff --git a/c++/tests/bindingstest.h b/c++/tests/bindingstest.h
index 9eb4f7a..4122321 100644
--- a/c++/tests/bindingstest.h
+++ b/c++/tests/bindingstest.h
@@ -9,8 +9,10 @@ class BindingsTest : public QObject
Q_OBJECT
private slots:
- void writeXCalEvent();
- void readXCalEvent();
+ void writeKolabXCalEvent();
+ void readKolabXCalEvent();
+ //void writeXCalEvent();
+ //void readXCalEvent();
void writeNoteTest();
void readNoteTest();
diff --git a/c++/tests/kcalconversiontest.cpp b/c++/tests/kcalconversiontest.cpp
index b88d835..0599471 100644
--- a/c++/tests/kcalconversiontest.cpp
+++ b/c++/tests/kcalconversiontest.cpp
@@ -223,4 +223,4 @@ class KCalConversionTest : public QObject
#endif
QTEST_MAIN( KCalConversionTest )
-#include "moc_kcalconversiontest.cxx"
+//#include "moc_kcalconversiontest.cxx"
diff --git a/c++/tests/testfiles/testevent.xml b/c++/tests/testfiles/testevent.xml
new file mode 100644
index 0000000..dd59990
--- /dev/null
+++ b/c++/tests/testfiles/testevent.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
+<vevent xmlns="urn:ietf:params:xml:ns:icalendar-2.0">
+
+ <properties>
+ <dtstart>
+ <date>2011-11-10+10:10</date>
+ </dtstart>
+ <rrule>
+ <recur>
+ <freq>DAILY</freq>
+ <count>2</count>
+ <byhour>3</byhour>
+ </recur>
+ </rrule>
+ <x-prop>
+ <parameters>
+ <pref><integer>1</integer></pref>
+ </parameters> <!-- Core vCard elements -->
+ <text>value goes here</text> <!-- are still accessible -->
+ </x-prop>
+
+ </properties>
+
+ <components/>
+
+</vevent>
diff --git a/c++/tests/testfiles/testkolabevent.xml b/c++/tests/testfiles/testkolabevent.xml
new file mode 100644
index 0000000..021f289
--- /dev/null
+++ b/c++/tests/testfiles/testkolabevent.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
+<event xmlns="http://kolab.org" xmlns:xcal="urn:ietf:params:xml:ns:icalendar-2.0">
+
+ <xcal:vevent>
+ <xcal:properties>
+ <xcal:dtstart>
+ <xcal:date>2011-11-10+10:10</xcal:date>
+ </xcal:dtstart>
+ <xcal:rrule>
+ <xcal:recur>
+ <xcal:count>2</xcal:count>
+ <xcal:byhour>3</xcal:byhour>
+ <xcal:freq>DAILY</xcal:freq>
+
+ </xcal:recur>
+ </xcal:rrule>
+ <x-custom-property>
+ <unknown>blabla</unknown>
+ </x-custom-property>
+ <x-unknown-property>
+ <unknown>blibla</unknown>
+ </x-unknown-property>
+ </xcal:properties>
+ <xcal:components>
+ <xcal:valarm/>
+ </xcal:components>
+ </xcal:vevent>
+
+</event>
diff --git a/schemas/ical/kolabformat.xsd b/schemas/ical/kolabformat.xsd
new file mode 100644
index 0000000..fff27e1
--- /dev/null
+++ b/schemas/ical/kolabformat.xsd
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
+ xmlns:xcal="urn:ietf:params:xml:ns:icalendar-2.0"
+ targetNamespace="http://kolab.org"
+ xmlns="http://kolab.org"
+ elementFormDefault="qualified">
+
+ <xs:import schemaLocation="iCalendar.xsd" namespace="urn:ietf:params:xml:ns:icalendar-2.0"/>
+
+ <xs:element name="event" type="Event"/>
+
+ <xs:complexType name="Event">
+ <xs:sequence>
+ <xs:element ref="xcal:vevent" minOccurs="1" maxOccurs="1"/>
+ </xs:sequence>
+ </xs:complexType>
+
+ <xs:element name="todo" type="Todo"/>
+
+ <xs:complexType name="Todo">
+ <xs:sequence>
+ <xs:element ref="xcal:vtodo" minOccurs="1" maxOccurs="1"/>
+ </xs:sequence>
+ </xs:complexType>
+
+ <xs:complexType name="CustomType" >
+ <xs:complexContent mixed="false">
+ <xs:extension base="xcal:BasePropertyType">
+ <xs:sequence>
+ <xs:element name="identifier" type="xs:string"/>
+ <xs:element name="value" type="xs:string"/>
+ </xs:sequence>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+
+ <xs:element name="x-kolab-customproperty" type="CustomType" substitutionGroup="xcal:baseProperty" />
+
+</xs:schema>
\ No newline at end of file
commit 2ce7b6accef55af731e1d99918e73ad4ce975697
Author: Christian Mollekopf <mollekopf at kolabsys.com>
Date: Thu Nov 10 15:54:33 2011 +0100
bindingstest, basic serialization
diff --git a/c++/tests/CMakeLists.txt b/c++/tests/CMakeLists.txt
index b816f7a..d59dc7c 100644
--- a/c++/tests/CMakeLists.txt
+++ b/c++/tests/CMakeLists.txt
@@ -1,10 +1,12 @@
include_directories( ${CMAKE_CURRENT_SOURCE_DIR}/.. )
-FIND_PACKAGE(Qt4 REQUIRED)
-
-QT4_WRAP_CPP(HEADERS_MOC kcalconversiontest.h)
+QT4_WRAP_CPP(kcalconversiontest_MOC kcalconversiontest.h)
#add_test("conversiontest" kcalconversiontest ${kolabproxy_shared_relative_SRCS} ${AKONADI_COLLECTIONATTRIBUTES_SHARED_SOURCES} kcalconversiontest.cpp)
-add_executable(kcalconversiontest kcalconversiontest.cpp )
-
+add_executable(kcalconversiontest kcalconversiontest.cpp ${kcalconversiontest_MOC})
target_link_libraries(kcalconversiontest ${KDEPIMLIBS_AKONADI_LIBS} ${QT_QTTEST_LIBRARY} ${KDEPIMLIBS_KCALCORE_LIBS} kolabxml)
+
+#QT4_WRAP_CPP(BINDINGSTEST_MOC bindingstest.cpp)
+QT4_AUTOMOC(bindingstest.cpp)
+add_executable(bindingstest bindingstest.cpp ${BINDINGSTEST_MOC})
+target_link_libraries(bindingstest ${QT_QTTEST_LIBRARY} kolabxml xerces-c)
diff --git a/c++/tests/bindingstest.cpp b/c++/tests/bindingstest.cpp
new file mode 100644
index 0000000..f2536a7
--- /dev/null
+++ b/c++/tests/bindingstest.cpp
@@ -0,0 +1,190 @@
+#include "bindingstest.h"
+#include <QObject>
+#include <QtTest/QtTest>
+
+#include "bindings/note.hxx"
+#include "bindings/iCalendar.hxx"
+#include "bindings/iCalendar-props.hxx"
+#include "bindings/iCalendar-valtypes.hxx"
+
+#include "iostream"
+#include <xercesc/dom/DOMException.hpp>
+
+#include <xercesc/dom/DOMImplementation.hpp>
+#include </home/chrigi/work/kolab/xmlformat/cxxtest/xsdcxx/xsd/libxsd/xsd/cxx/xml/string.hxx>
+
+void BindingsTest::writeNoteTest()
+{
+ xml_schema::date_time datetime(2011, 11, 23, 12, 12, 12);
+ KolabXSD::XMLBase::sensitivity_type sensitivity = KolabXSD::Sensitivity::public_;
+ KolabXSD::Note::background_color_type bg = KolabXSD::Note::background_color_default_value();
+ KolabXSD::Note::foreground_color_type fg = KolabXSD::Note::foreground_color_default_value();
+ KolabXSD::Note note("test", "test", datetime, datetime, sensitivity, "", bg, fg);
+
+ xml_schema::namespace_infomap map;
+ map[""].name = "http://kolab.org";
+ map[""].schema = "note.xsd";
+
+ KolabXSD::note (std::cout, note, map);
+
+
+ /* QFETCH(KCalCore::Recurrence, kcalrecurrence);
+
+ KolabXSD::Recurrence ret = Kolab::KCalConversion::fromKCal( &kcalrecurrence );
+ QCOMPARE(frequency(ret), kcalrecurrence.rRules().first()->frequency());
+ */
+}
+
+void BindingsTest::readNoteTest()
+{
+ try {
+ xml_schema::properties props;
+// props.no_namespace_schema_location ("../../schemas/note.xsd");
+// props.schema_location ("http://kolab.org", "../../schemas/note.xsd"); //Force schema
+ std::auto_ptr<KolabXSD::Note> note(KolabXSD::note("testfiles/testnote.xml", xml_schema::flags::keep_dom | xml_schema::flags::dont_validate, props));
+
+ xml_schema::namespace_infomap map;
+ map[""].name = "http://kolab.org";
+ map[""].schema = "note.xsd";
+
+ KolabXSD::note (std::cout, *note, map);
+ } catch (const xml_schema::exception& e) {
+ std::cout << e << endl;
+ QVERIFY(false);
+ }
+}
+
+void BindingsTest::writeReadNoteTest()
+{
+
+}
+
+void BindingsTest::writeXCalEvent()
+{
+ try {
+ //Components
+ icalendar_2_0::EventTodoComponentType::components_type::valarm_type alarm;
+
+ icalendar_2_0::ArrayOfEventTodoContainedComponents component;
+ component.valarm().push_back(alarm);
+
+
+ //Properties
+
+ //Recurrence
+ icalendar_2_0::RecurType recur(icalendar_2_0::RecurType::freq_type::DAILY);
+ recur.count(2);
+ recur.byhour().push_back("3");
+ icalendar_2_0::RrulePropType rrule(recur);
+
+ //Startdate
+ icalendar_2_0::DtstartPropType::date_type date(2011, 11, 10, 10, 10);
+ icalendar_2_0::DtstartPropType startdate;
+ startdate.date(date);
+
+ ::icalendar_2_0::ArrayOfProperties properties;
+ properties.baseProperty().push_back(startdate);
+ properties.baseProperty().push_back(rrule);
+
+
+ //Assembling the complete event
+ icalendar_2_0::VeventType event(component);
+ event.properties(properties);
+
+
+ icalendar_2_0::VcalendarType::components_type comp;
+ comp.vcalendarContainedComponent().push_back(event);
+
+ icalendar_2_0::VcalendarType vcalendar(comp);
+
+ icalendar_2_0::IcalendarType icalendar;
+ icalendar.vcalendar().push_back(vcalendar);
+
+ /*
+ * We need the namespacemap, otherwise we get elements with a prefix ns1:vevent:components
+ * and at least xerces doesn't like prefixes with a ":" inside (only a single prefix is allowed).
+ * No idea why this happens though.
+ */
+ xml_schema::namespace_infomap map;
+ map[""].name = "urn:ietf:params:xml:ns:icalendar-2.0";
+ //map[""].schema = "iCalendar.xsd";
+
+ icalendar_2_0::vevent (std::cout, event, map);
+
+ } catch (const xml_schema::exception& e) {
+ std::cout << e << endl;
+ QVERIFY(false);
+ }
+ #if 0
+ catch (const xercesc_3_1::DOMException &e) {
+ std::cout << "Xerces dom exception: " /*<< std::basic_string<XMLCh>(e.getMessage())*/ << " Code: " << e.code << std::endl;
+ return;
+ }
+#endif
+}
+
+
+void BindingsTest::readXCalEvent()
+{
+
+ try {
+ xml_schema::properties props;
+// props.no_namespace_schema_location ("../../schemas/ical/iCalendar.xsd");
+// props.schema_location ("urn:ietf:params:xml:ns:icalendar-2.0", "../../schemas/ical/iCalendar.xsd"); //Force schema
+
+ std::auto_ptr<icalendar_2_0::VeventType > event(icalendar_2_0::vevent("testfiles/testevent.xml", xml_schema::flags::dont_validate, props));
+
+ xml_schema::namespace_infomap map;
+ map[""].name = "urn:ietf:params:xml:ns:icalendar-2.0";
+ map[""].schema = "iCalendar.xsd";
+
+ icalendar_2_0::vevent (std::cout, *event, map);
+
+ } catch (const xml_schema::exception& e) {
+ std::cout << e << std::endl;
+ QVERIFY(false);
+ }
+
+}
+
+
+
+void BindingsTest::xercesException()
+{
+ xercesc::XMLPlatformUtils::Initialize();
+ XMLCh tempStr[100];
+
+ xercesc::DOMImplementation* impl = xercesc::DOMImplementation::getImplementation();
+
+ xercesc::XMLString::transcode("root", tempStr, 99);
+ xercesc::DOMDocument* doc = impl->createDocument(0, tempStr, 0);
+
+/* XMLCh n[100];
+ XMLCh ns[100];
+ xercesc::XMLString::transcode("components", n, 99);
+ xercesc::XMLString::transcode("urn:ietf:params:xml:ns:icalendar-2.0", ns, 99);*/
+ try {
+ xercesc::DOMElement* e = doc->createElementNS (xsd::cxx::xml::string("urn:ietf:params:xml:ns:icalendar-2.0").c_str(), xsd::cxx::xml::string("components").c_str());
+ QVERIFY(e);
+
+ /*
+ xercesc::DOMElement& s (
+ ::xsd::cxx::xml::dom::create_element (
+ "components",
+ "http://icalnamespace.org",
+ e));
+ */
+
+ } catch (const xercesc_3_1::DOMException &e) {
+ std::cout << "Xerces dom exception: " /*<< std::basic_string<XMLCh>(e.getMessage())*/ << " Code: " << e.code << std::endl;
+ return;
+ }
+
+ doc->release();
+}
+
+
+
+QTEST_MAIN( BindingsTest )
+
+#include "bindingstest.moc"
diff --git a/c++/tests/bindingstest.h b/c++/tests/bindingstest.h
new file mode 100644
index 0000000..9eb4f7a
--- /dev/null
+++ b/c++/tests/bindingstest.h
@@ -0,0 +1,21 @@
+#ifndef BINDINGSTEST_H
+#define BINDINGSTEST_H
+
+#include <QtCore/QObject>
+#include <QtTest/QtTest>
+
+class BindingsTest : public QObject
+{
+ Q_OBJECT
+ private slots:
+
+ void writeXCalEvent();
+ void readXCalEvent();
+
+ void writeNoteTest();
+ void readNoteTest();
+ void writeReadNoteTest();
+ void xercesException();
+};
+
+#endif
\ No newline at end of file
commit 04aba16b0dc2454163763d69e5860accf8e5fd9b
Author: Christian Mollekopf <mollekopf at kolabsys.com>
Date: Wed Nov 2 19:59:17 2011 +0100
xcal schemas
diff --git a/schemas/ical/iCalendar-availability-extension.xsd b/schemas/ical/iCalendar-availability-extension.xsd
new file mode 100644
index 0000000..f960a88
--- /dev/null
+++ b/schemas/ical/iCalendar-availability-extension.xsd
@@ -0,0 +1,85 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ WS-Calendar Version 1.0
+ Committee Specification Draft 04 / Public Review Draft 03
+ 17 June 2011
+ Source: http://docs.oasis-open.org/ws-calendar/ws-calendar-spec/v1.0/csprd03/xsd/
+ Copyright (c) The Calendaring and Scheduling Consortium 2010-2011. All Rights Reserved.
+ Copyright (c) OASIS Open 2010-2011. All Rights Reserved. -->
+
+<!-- iCalendar availability extension schema is
+ intended to work in conjunction with conformant
+ implementations of IETF RFC 5545
+ ( http://www.rfc-editor.org/rfc/rfc5545.txt ),
+ the normative specification of iCalendar. -->
+
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xcal="urn:ietf:params:xml:ns:icalendar-2.0" targetNamespace="urn:ietf:params:xml:ns:icalendar-2.0" elementFormDefault="qualified">
+ <!-- This schema extension defines properties and components for the availability
+ components defined in draft-daboo-calendar-availability -->
+ <!-- ===================== Value-types ================================ -->
+ <xs:include schemaLocation="iCalendar-valtypes.xsd"/>
+ <!-- ===================== Components ================================= -->
+ <xs:include schemaLocation="iCalendar.xsd"/>
+ <!-- ===================== Properties ================================= -->
+ <xs:include schemaLocation="iCalendar-props.xsd"/>
+ <!-- =====================================================================
+ Calendar Properties
+ ===================================================================== -->
+ <!-- The BUSYTYPE property is used to specify the default busy time
+ type. The values correspond to those used by the "FBTYPE"
+ parameter used on a "FREEBUSY" property, with the exception that
+ the "FREE" value is not used. If not specified on a component
+ that allows this property, the default is "BUSY-UNAVAILABLE".
+
+ busytypevalue = "BUSY" / "BUSY-UNAVAILABLE" /
+ "BUSY-TENTATIVE" / iana-token / x-name
+ ; Default is "BUSY-UNAVAILABLE"
+
+ -->
+ <xs:complexType name="BusytypePropType" mixed="false">
+ <xs:annotation>
+ <xs:documentation xml:lang="en">
+ encodingparam = "ENCODING" "="
+ ( "8BIT"
+ ; "8bit" text encoding is defined in [RFC2045]
+ / "BASE64"
+ ; "BASE64" binary encoding format is defined in [RFC4648]
+ )
+ busytypevalue = "BUSY"
+ / "BUSY-UNAVAILABLE"
+ / "BUSY-TENTATIVE"
+ / iana-token
+ / x-name
+
+ ; Default is "BUSY-UNAVAILABLE".
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexContent>
+ <xs:extension base="xcal:TextPropertyType"/>
+ </xs:complexContent>
+ </xs:complexType>
+ <!-- =====================================================================
+ Calendar Components
+ ===================================================================== -->
+ <xs:complexType name="VavailabilityType" mixed="false">
+ <xs:complexContent>
+ <xs:extension base="xcal:VcalendarContainedComponentType">
+ <xs:sequence>
+ <xs:element name="components" type="xcal:ArrayOfVavailabilityContainedComponents"/>
+ </xs:sequence>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ <xs:element name="vavailability" type="xcal:VavailabilityType" substitutionGroup="xcal:vcalendarContainedComponent"/>
+ <xs:complexType name="ArrayOfVavailabilityContainedComponents">
+ <xs:sequence>
+ <xs:element ref="xcal:available" minOccurs="0" maxOccurs="unbounded"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="AvailableType" mixed="false">
+ <xs:complexContent>
+ <xs:extension base="xcal:BaseComponentType"/>
+ </xs:complexContent>
+ </xs:complexType>
+ <xs:element name="available" type="xcal:AvailableType" substitutionGroup="xcal:baseComponent"/>
+</xs:schema>
diff --git a/schemas/ical/iCalendar-bw-extensions.xsd b/schemas/ical/iCalendar-bw-extensions.xsd
new file mode 100644
index 0000000..68b3b52
--- /dev/null
+++ b/schemas/ical/iCalendar-bw-extensions.xsd
@@ -0,0 +1,59 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ WS-Calendar Version 1.0
+ Committee Specification Draft 04 / Public Review Draft 03
+ 17 June 2011
+ Source: http://docs.oasis-open.org/ws-calendar/ws-calendar-spec/v1.0/csprd03/xsd/
+ Copyright (c) The Calendaring and Scheduling Consortium 2010-2011. All Rights Reserved.
+ Copyright (c) OASIS Open 2010-2011. All Rights Reserved. -->
+
+<!-- iCalendar Bedeworks server integration schema is
+ intended to work in conjunction with conformant
+ implementations of IETF RFC 5545
+ ( http://www.rfc-editor.org/rfc/rfc5545.txt ),
+ the normative specification of iCalendar. -->
+
+<!--Bedework extensions to icalendar -->
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xcal="urn:ietf:params:xml:ns:icalendar-2.0" targetNamespace="urn:ietf:params:xml:ns:icalendar-2.0" elementFormDefault="qualified">
+ <xs:include schemaLocation="iCalendar-valtypes.xsd"/>
+ <!-- ===================== Properties ================================= -->
+ <xs:include schemaLocation="iCalendar-props.xsd"/>
+ <!-- =====================================================================
+ 3.2 Property parameter definitions
+ ===================================================================== -->
+ <!-- Bedework x-parameters -->
+ <xs:element name="x-bedework-uid" type="xcal:XBedeworkUidParamType" substitutionGroup="xcal:baseParameter"/>
+ <xs:complexType name="XBedeworkUidParamType" mixed="false">
+ <xs:complexContent>
+ <xs:extension base="xcal:TextParameterType"/>
+ </xs:complexContent>
+ </xs:complexType>
+ <!-- =====================================================================
+ 3.7 Calendar Properties
+ ===================================================================== -->
+ <xs:element name="x-bedework-cost" type="xcal:XBedeworkCostPropType" substitutionGroup="xcal:baseProperty"/>
+ <xs:element name="x-bedework-exsynch-endtzid" type="xcal:XBedeworkExsynchEndtzidPropType" substitutionGroup="xcal:baseProperty"/>
+ <xs:element name="x-bedework-exsynch-lastmod" type="xcal:XBedeworkExsynchLastmodPropType" substitutionGroup="xcal:baseProperty"/>
+ <xs:element name="x-bedework-exsynch-organizer" type="xcal:OrganizerPropType" substitutionGroup="xcal:baseProperty"/>
+ <xs:element name="x-bedework-exsynch-starttzid" type="xcal:XBedeworkExsynchStarttzidPropType" substitutionGroup="xcal:baseProperty"/>
+ <xs:complexType name="XBedeworkCostPropType" mixed="false">
+ <xs:complexContent>
+ <xs:extension base="xcal:TextPropertyType"/>
+ </xs:complexContent>
+ </xs:complexType>
+ <xs:complexType name="XBedeworkExsynchEndtzidPropType" mixed="false">
+ <xs:complexContent>
+ <xs:extension base="xcal:TextPropertyType"/>
+ </xs:complexContent>
+ </xs:complexType>
+ <xs:complexType name="XBedeworkExsynchLastmodPropType" mixed="false">
+ <xs:complexContent>
+ <xs:extension base="xcal:TextPropertyType"/>
+ </xs:complexContent>
+ </xs:complexType>
+ <xs:complexType name="XBedeworkExsynchStarttzidPropType" mixed="false">
+ <xs:complexContent>
+ <xs:extension base="xcal:TextPropertyType"/>
+ </xs:complexContent>
+ </xs:complexType>
+</xs:schema>
diff --git a/schemas/ical/iCalendar-link-extension.xsd b/schemas/ical/iCalendar-link-extension.xsd
new file mode 100644
index 0000000..a12cd53
--- /dev/null
+++ b/schemas/ical/iCalendar-link-extension.xsd
@@ -0,0 +1,50 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ WS-Calendar Version 1.0
+ Committee Specification Draft 04 / Public Review Draft 03
+ 17 June 2011
+ Source: http://docs.oasis-open.org/ws-calendar/ws-calendar-spec/v1.0/csprd03/xsd/
+ Copyright (c) The Calendaring and Scheduling Consortium 2010-2011. All Rights Reserved.
+ Copyright (c) OASIS Open 2010-2011. All Rights Reserved. -->
+
+<!-- iCalendar link extensions schema is intended to work
+ in conjunction with conformant implementations of
+ IETF RFC 5545 ( http://www.rfc-editor.org/rfc/rfc5545.txt ),
+ the normative specification of iCalendar. -->
+
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xcal="urn:ietf:params:xml:ns:icalendar-2.0" targetNamespace="urn:ietf:params:xml:ns:icalendar-2.0" elementFormDefault="qualified">
+ <!--Definition for the LINK extension property for icalendar -->
+ <xs:include schemaLocation="iCalendar-valtypes.xsd"/>
+ <!-- ===================== Properties ================================= -->
+ <xs:include schemaLocation="iCalendar-params.xsd"/>
+ <!-- ===================== Properties ================================= -->
+ <xs:include schemaLocation="iCalendar-props.xsd"/>
+ <!-- =====================================================================
+ 3.2 Property parameter definitions
+ ===================================================================== -->
+ <!-- REL defines the type of relationship and may be a predefined value as
+ below or a URI which is globally unique and understood within the context
+ of its use.
+
+ The standard relation types are:
+ "PARENT" ; Parent relationship - Default
+ "CHILD" ; Child relationship
+ "SIBLING" ; Sibling relationship
+ -->
+ <xs:element name="rel" type="xcal:TextParameterType" substitutionGroup="xcal:baseParameter"/>
+ <!-- =====================================================================
+ 3.7 Calendar Properties
+ ===================================================================== -->
+ <xs:complexType name="LinkPropType" mixed="false">
+ <xs:complexContent>
+ <xs:extension base="xcal:BasePropertyType">
+ <xs:choice>
+ <xs:element ref="xcal:uri"/>
+ <xs:element name="uid" type="xs:string"/>
+ <xs:element name="reference" type="xs:string"/>
+ </xs:choice>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ <xs:element name="link" type="xcal:LinkPropType" substitutionGroup="xcal:baseProperty"/>
+</xs:schema>
diff --git a/schemas/ical/iCalendar-ms-extensions.xsd b/schemas/ical/iCalendar-ms-extensions.xsd
new file mode 100644
index 0000000..2539c99
--- /dev/null
+++ b/schemas/ical/iCalendar-ms-extensions.xsd
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ WS-Calendar Version 1.0
+ Committee Specification Draft 04 / Public Review Draft 03
+ 17 June 2011
+ Source: http://docs.oasis-open.org/ws-calendar/ws-calendar-spec/v1.0/csprd03/xsd/
+ Copyright (c) The Calendaring and Scheduling Consortium 2010-2011. All Rights Reserved.
+ Copyright (c) OASIS Open 2010-2011. All Rights Reserved. -->
+
+<!-- iCalendar MS Exchange Server integration schema is
+ intended to work in conjunction with conformant
+ implementations of IETF RFC 5545
+ ( http://www.rfc-editor.org/rfc/rfc5545.txt ),
+ the normative specification of iCalendar. -->
+
+<!--Bedework extensions to icalendar -->
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
+ xmlns:xcal="urn:ietf:params:xml:ns:icalendar-2.0"
+ targetNamespace="urn:ietf:params:xml:ns:icalendar-2.0"
+ elementFormDefault="qualified">
+
+ <!-- =====================================================================
+ 3.7 Calendar Properties
+ ===================================================================== -->
+
+ <!-- ===================== Properties ================================= -->
+ <xs:include schemaLocation="iCalendar-props.xsd" />
+
+ <xs:element name="x-microsoft-cdo-busystatus"
+ type="xcal:XMicrosoftCdoBusystatusPropType"
+ substitutionGroup="xcal:baseProperty" />
+
+ <xs:element name="x-microsoft-cdo-intendedstatus"
+ type="xcal:XMicrosoftCdoIntendedstatusPropType"
+ substitutionGroup="xcal:baseProperty" />
+
+ <xs:complexType name="XMicrosoftCdoBusystatusPropType">
+ <xs:complexContent mixed="false">
+ <xs:extension base="xcal:TextPropertyType"/>
+ </xs:complexContent>
+ </xs:complexType>
+
+ <xs:complexType name="XMicrosoftCdoIntendedstatusPropType">
+ <xs:complexContent mixed="false">
+ <xs:extension base="xcal:TextPropertyType"/>
+ </xs:complexContent>
+ </xs:complexType>
+</xs:schema>
diff --git a/schemas/ical/iCalendar-params.xsd b/schemas/ical/iCalendar-params.xsd
new file mode 100644
index 0000000..1392daa
--- /dev/null
+++ b/schemas/ical/iCalendar-params.xsd
@@ -0,0 +1,376 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ WS-Calendar Version 1.0
+ Committee Specification Draft 04 / Public Review Draft 03
+ 17 June 2011
+ Source: http://docs.oasis-open.org/ws-calendar/ws-calendar-spec/v1.0/csprd03/xsd/
+ Copyright (c) The Calendaring and Scheduling Consortium 2010-2011. All Rights Reserved.
+ Copyright (c) OASIS Open 2010-2011. All Rights Reserved. -->
+
+<!-- iCalendar object parameters schema is intended to work in
+ conjunction with conformant implementations of IETF RFC 5545
+ ( http://www.rfc-editor.org/rfc/rfc5545.txt ),
+ the normative specification of iCalendar. -->
+
+<!--non-normative, to support development of WS-Calendar - 2010/10/30. Refer to rfc5545 and xCal in the IETF for normative description-->
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xcal="urn:ietf:params:xml:ns:icalendar-2.0" targetNamespace="urn:ietf:params:xml:ns:icalendar-2.0" elementFormDefault="qualified">
+ <xs:include schemaLocation="iCalendar-valtypes.xsd"/>
+ <!-- =====================================================================
+ 3.2 Property parameter definitions
+ ===================================================================== -->
+ <xs:complexType name="BaseParameterType" abstract="true"/>
+ <xs:element name="baseParameter" type="xcal:BaseParameterType"/>
+ <xs:complexType name="ArrayOfParameters">
+ <xs:sequence>
+ <xs:element ref="xcal:baseParameter" minOccurs="0" maxOccurs="unbounded"/>
+ </xs:sequence>
+ </xs:complexType>
+ <!-- =====================================================================
+ Define all the standard properties. By using a substitutionGroup we
+ make it easy to extend the list of parameters. As an example see
+ the parameters defined in iCalendar-caldavsched-extensions.xsd
+ ===================================================================== -->
+ <xs:element name="altrep" type="xcal:AltrepParamType" substitutionGroup="xcal:baseParameter"/>
+ <xs:element name="cn" type="xcal:CnParamType" substitutionGroup="xcal:baseParameter"/>
+ <xs:element name="cutype" type="xcal:CutypeParamType" substitutionGroup="xcal:baseParameter"/>
+ <xs:element name="delegated-from" type="xcal:DelegatedFromParamType" substitutionGroup="xcal:baseParameter"/>
+ <xs:element name="delegated-to" type="xcal:DelegatedToParamType" substitutionGroup="xcal:baseParameter"/>
+ <xs:element name="dir" type="xcal:DirParamType" substitutionGroup="xcal:baseParameter"/>
+ <xs:element name="encoding" type="xcal:EncodingParamType" substitutionGroup="xcal:baseParameter"/>
+ <xs:element name="fmttype" type="xcal:FmttypeParamType" substitutionGroup="xcal:baseParameter"/>
+ <xs:element name="fbtype" type="xcal:FbtypeParamType" substitutionGroup="xcal:baseParameter"/>
+ <xs:element name="language" type="xcal:LanguageParamType" substitutionGroup="xcal:baseParameter"/>
+ <xs:element name="member" type="xcal:MemberParamType" substitutionGroup="xcal:baseParameter"/>
+ <xs:element name="partstat" type="xcal:PartstatParamType" substitutionGroup="xcal:baseParameter"/>
+ <xs:element name="range" type="xcal:RangeParamType" substitutionGroup="xcal:baseParameter"/>
+ <xs:element name="related" type="xcal:RelatedParamType" substitutionGroup="xcal:baseParameter"/>
+ <xs:element name="reltype" type="xcal:ReltypeParamType" substitutionGroup="xcal:baseParameter"/>
+ <xs:element name="role" type="xcal:RoleParamType" substitutionGroup="xcal:baseParameter"/>
+ <xs:element name="rsvp" type="xcal:RsvpParamType" substitutionGroup="xcal:baseParameter"/>
+ <xs:element name="sent-by" type="xcal:SentByParamType" substitutionGroup="xcal:baseParameter"/>
+ <xs:element name="tzid" type="xcal:TzidParamType" substitutionGroup="xcal:baseParameter"/>
+ <!-- Scheduling parameters for attendee or organizer -->
+ <xs:element name="schedule-agent" type="xcal:ScheduleAgentParamType" substitutionGroup="xcal:baseParameter"/>
+ <xs:element name="schedule-force-send" type="xcal:ScheduleForceSendParamType" substitutionGroup="xcal:baseParameter"/>
+ <xs:element name="schedule-status" type="xcal:ScheduleStatusParamType" substitutionGroup="xcal:baseParameter"/>
+ <!-- Parameters that take a simple boolean value -->
+ <xs:complexType name="BooleanParameterType" mixed="false">
+ <xs:complexContent>
+ <xs:extension base="xcal:BaseParameterType">
+ <xs:sequence>
+ <xs:element ref="xcal:boolean"/>
+ </xs:sequence>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ <!-- Parameters that take a simple text value -->
+ <xs:complexType name="TextParameterType" mixed="false">
+ <xs:complexContent>
+ <xs:extension base="xcal:BaseParameterType">
+ <xs:sequence>
+ <xs:element ref="xcal:text"/>
+ </xs:sequence>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ <!-- Parameters that take a uri value -->
+ <xs:complexType name="UriParameterType" mixed="false">
+ <xs:complexContent>
+ <xs:extension base="xcal:BaseParameterType">
+ <xs:sequence>
+ <xs:element ref="xcal:uri"/>
+ </xs:sequence>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ <xs:complexType name="CalAddressListParamType" mixed="false">
+ <xs:complexContent>
+ <xs:extension base="xcal:BaseParameterType">
+ <xs:sequence>
+ <xs:element ref="xcal:cal-address" maxOccurs="unbounded"/>
+ </xs:sequence>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ <xs:complexType name="CalAddressParamType" mixed="false">
+ <xs:complexContent>
+ <xs:extension base="xcal:BaseParameterType">
+ <xs:sequence>
+ <xs:element ref="xcal:cal-address"/>
+ </xs:sequence>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ <!-- 3.2.1 Alternate Text Representation -->
+ <xs:complexType name="AltrepParamType" mixed="false">
+ <xs:complexContent>
+ <xs:extension base="xcal:UriParameterType"/>
+ </xs:complexContent>
+ </xs:complexType>
+ <!-- 3.2.2 Common Name -->
+ <xs:complexType name="CnParamType" mixed="false">
+ <xs:complexContent>
+ <xs:extension base="xcal:TextParameterType"/>
+ </xs:complexContent>
+ </xs:complexType>
+ <!-- 3.2.3 Calendar User Type -->
+ <xs:complexType name="CutypeParamType" mixed="false">
+ <xs:annotation>
+ <xs:documentation xml:lang="en">
+ cutypeparam = "CUTYPE" "="
+ ("INDIVIDUAL" ; An individual
+ / "GROUP" ; A group of individuals
+ / "RESOURCE" ; A physical resource
+ / "ROOM" ; A room resource
+ / "UNKNOWN" ; Otherwise not known
+ / x-name ; Experimental type
+ / iana-token) ; Other IANA-registered
+ ; type
+ ; Default is INDIVIDUAL
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexContent>
+ <xs:extension base="xcal:TextParameterType"/>
+ </xs:complexContent>
+ </xs:complexType>
+ <!-- 3.2.4 Delegators -->
+ <xs:complexType name="DelegatedFromParamType" mixed="false">
+ <xs:complexContent>
+ <xs:extension base="xcal:CalAddressListParamType"/>
+ </xs:complexContent>
+ </xs:complexType>
+ <!-- 3.2.5 Delegatees -->
+ <xs:complexType name="DelegatedToParamType" mixed="false">
+ <xs:complexContent>
+ <xs:extension base="xcal:CalAddressListParamType"/>
+ </xs:complexContent>
+ </xs:complexType>
+ <!-- 3.2.6 Directory Entry Reference -->
+ <xs:complexType name="DirParamType" mixed="false">
+ <xs:complexContent>
+ <xs:extension base="xcal:UriParameterType"/>
+ </xs:complexContent>
+ </xs:complexType>
+ <!-- 3.2.7 Inline Encoding -->
+ <xs:complexType name="EncodingParamType" mixed="false">
+ <xs:annotation>
+ <xs:documentation xml:lang="en">
+ encodingparam = "ENCODING" "="
+ ( "8BIT"
+ ; "8bit" text encoding is defined in [RFC2045]
+ / "BASE64"
+ ; "BASE64" binary encoding format is defined in [RFC4648]
+ )
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexContent>
+ <xs:extension base="xcal:TextParameterType"/>
+ </xs:complexContent>
+ </xs:complexType>
+ <!-- 3.2.8 Format Type -->
+ <xs:complexType name="FmttypeParamType" mixed="false">
+ <xs:complexContent>
+ <xs:extension base="xcal:TextParameterType"/>
+ </xs:complexContent>
+ </xs:complexType>
+ <!-- 3.2.9 Free/Busy Time Type -->
+ <xs:complexType name="FbtypeParamType" mixed="false">
+ <xs:annotation>
+ <xs:documentation xml:lang="en">
+ fbtypeparam = "FBTYPE" "="
+ ("FREE"
+ / "BUSY"
+ / "BUSY-UNAVAILABLE"
+ / "BUSY-TENTATIVE"
+ / x-name ; Some experimental iCalendar free/busy type.
+ / iana-token)
+ ; Some other IANA-registered iCalendar free/busy type.
+ ; Default is BUSY
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexContent>
+ <xs:extension base="xcal:TextParameterType"/>
+ </xs:complexContent>
+ </xs:complexType>
+ <!-- 3.2.10 Language -->
+ <xs:complexType name="LanguageParamType" mixed="false">
+ <xs:complexContent>
+ <xs:extension base="xcal:TextParameterType"/>
+ </xs:complexContent>
+ </xs:complexType>
+ <!-- 3.2.11 Group or List Membership -->
+ <xs:complexType name="MemberParamType" mixed="false">
+ <xs:complexContent>
+ <xs:extension base="xcal:CalAddressListParamType"/>
+ </xs:complexContent>
+ </xs:complexType>
+ <!-- 3.2.12 Participation Status -->
+ <xs:complexType name="PartstatParamType" mixed="false">
+ <xs:annotation>
+ <xs:documentation xml:lang="en">
+ partstat-event = ("NEEDS-ACTION" ; Event needs action
+ / "ACCEPTED" ; Event accepted
+ / "DECLINED" ; Event declined
+ / "TENTATIVE" ; Event tentatively
+ ; accepted
+ / "DELEGATED" ; Event delegated
+ / x-name ; Experimental status
+ / iana-token) ; Other IANA-registered
+ ; status
+ ; These are the participation statuses for a "VEVENT".
+ ; Default is NEEDS-ACTION.
+
+ partstat-todo = ("NEEDS-ACTION" ; To-do needs action
+ / "ACCEPTED" ; To-do accepted
+ / "DECLINED" ; To-do declined
+ / "TENTATIVE" ; To-do tentatively
+ ; accepted
+ / "DELEGATED" ; To-do delegated
+ / "COMPLETED" ; To-do completed
+ ; COMPLETED property has
+ ; DATE-TIME completed
+ / "IN-PROCESS" ; To-do in process of
+ ; being completed
+ / x-name ; Experimental status
+ / iana-token) ; Other IANA-registered
+ ; status
+ ; These are the participation statuses for a "VTODO".
+ ; Default is NEEDS-ACTION.
+
+ partstat-jour = ("NEEDS-ACTION" ; Journal needs action
+ / "ACCEPTED" ; Journal accepted
+ / "DECLINED" ; Journal declined
+ / x-name ; Experimental status
+ / iana-token) ; Other IANA-registered
+ ; status
+ ; These are the participation statuses for a "VJOURNAL".
+ ; Default is NEEDS-ACTION.
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexContent>
+ <xs:extension base="xcal:TextParameterType"/>
+ </xs:complexContent>
+ </xs:complexType>
+ <!-- 3.2.13 Recurrence Identifier Range -->
+ <xs:simpleType name="RangeValueType">
+ <xs:restriction base="xs:token">
+ <xs:enumeration value="THISANDFUTURE"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:complexType name="RangeParamType" mixed="false">
+ <xs:complexContent>
+ <xs:extension base="xcal:BaseParameterType">
+ <xs:sequence>
+ <xs:element name="text" type="xcal:RangeValueType"/>
+ </xs:sequence>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ <!-- 3.2.14 Alarm Trigger Relationship -->
+ <xs:complexType name="RelatedParamType" mixed="false">
+ <xs:annotation>
+ <xs:documentation xml:lang="en">
+ trigrelparam = "RELATED" "="
+ ("START" ; Trigger off of start
+ / "END") ; Trigger off of end
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexContent>
+ <xs:extension base="xcal:TextParameterType"/>
+ </xs:complexContent>
+ </xs:complexType>
+ <!-- 3.2.15 Relationship Type -->
+ <xs:complexType name="ReltypeParamType" mixed="false">
+ <xs:annotation>
+ <xs:documentation xml:lang="en">
+ reltypeparam = "RELTYPE" "="
+ ("PARENT" ; Parent relationship - Default
+ / "CHILD" ; Child relationship
+ / "SIBLING" ; Sibling relationship
+ / iana-token ; Some other IANA-registered
+ ; iCalendar relationship type
+ / x-name) ; A non-standard, experimental
+ ; relationship type
+ Ws-Calendar adds the values
+ / "FINISHTOSTART"
+ / "FINISHTOFINISH"
+ / "STARTTOFINISH"
+ / "STARTTOSTART"
+
+ ; Default is PARENT
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexContent>
+ <xs:extension base="xcal:TextParameterType"/>
+ </xs:complexContent>
+ </xs:complexType>
+ <!-- 3.2.16 Participation Role -->
+ <xs:complexType name="RoleParamType" mixed="false">
+ <xs:annotation>
+ <xs:documentation xml:lang="en">
+ Standard values
+ "CHAIR"
+ "REQ-PARTICIPANT"
+ "OPT-PARTICIPANT"
+ "NON-PARTICIPANT"
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexContent>
+ <xs:extension base="xcal:TextParameterType"/>
+ </xs:complexContent>
+ </xs:complexType>
+ <!-- 3.2.17 RSVP Expectation -->
+ <xs:complexType name="RsvpParamType" mixed="false">
+ <xs:complexContent>
+ <xs:extension base="xcal:BooleanParameterType"/>
+ </xs:complexContent>
+ </xs:complexType>
+ <!-- 3.2.18 Sent By -->
+ <xs:complexType name="SentByParamType" mixed="false">
+ <xs:complexContent>
+ <xs:extension base="xcal:CalAddressParamType"/>
+ </xs:complexContent>
+ </xs:complexType>
+ <!-- 3.2.19 Time Zone Identifier -->
+ <xs:complexType name="TzidParamType" mixed="false">
+ <xs:complexContent>
+ <xs:extension base="xcal:TextParameterType"/>
+ </xs:complexContent>
+ </xs:complexType>
+ <!-- Scheduling parameters - Defined by CalDAV scheduling -->
+ <xs:complexType name="ScheduleAgentParamType" mixed="false">
+ <xs:annotation>
+ <xs:documentation xml:lang="en">
+ scheduleagentparam = "SCHEDULE-AGENT" "="
+ ("SERVER" ; The server handles scheduling
+ / "CLIENT" ; The client handles scheduling
+ / "NONE" ; No automatic scheduling
+ / x-name ; Experimental type
+ / iana-token) ; Other IANA registered type
+ ;
+ ; Default is SERVER
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexContent>
+ <xs:extension base="xcal:TextParameterType"/>
+ </xs:complexContent>
+ </xs:complexType>
+ <xs:complexType name="ScheduleForceSendParamType" mixed="false">
+ <xs:annotation>
+ <xs:documentation xml:lang="en">
+ scheduleforcesendparam = "SCHEDULE-FORCE-SEND" "="
+ ("REQUEST" ; Force a "REQUEST"
+ / "REPLY" ; Force a "REPLY"
+ / iana-token) ; IANA registered method
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexContent>
+ <xs:extension base="xcal:TextParameterType"/>
+ </xs:complexContent>
+ </xs:complexType>
+ <xs:complexType name="ScheduleStatusParamType" mixed="false">
+ <xs:complexContent>
+ <xs:extension base="xcal:TextParameterType"/>
+ </xs:complexContent>
+ </xs:complexType>
+</xs:schema>
diff --git a/schemas/ical/iCalendar-props.xsd b/schemas/ical/iCalendar-props.xsd
new file mode 100644
index 0000000..c4dfc92
--- /dev/null
+++ b/schemas/ical/iCalendar-props.xsd
@@ -0,0 +1,773 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ WS-Calendar Version 1.0
+ Committee Specification Draft 04 / Public Review Draft 03
+ 17 June 2011
+ Source: http://docs.oasis-open.org/ws-calendar/ws-calendar-spec/v1.0/csprd03/xsd/
+ Copyright (c) The Calendaring and Scheduling Consortium 2010-2011. All Rights Reserved.
+ Copyright (c) OASIS Open 2010-2011. All Rights Reserved. -->
+
+<!-- iCalendar object properties schema is intended to work in
+ conjunction with conformant implementations of IETF RFC 5545
+ ( http://www.rfc-editor.org/rfc/rfc5545.txt ),
+ the normative specification of iCalendar. -->
+
+<!--non-normative, to support development of WS-Calendar - 2010/10/30.
+ Refer to rfc5545 and xCal in the IETF for normative description -->
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
+ xmlns:xcal="urn:ietf:params:xml:ns:icalendar-2.0"
+ targetNamespace="urn:ietf:params:xml:ns:icalendar-2.0"
+ elementFormDefault="qualified">
+
+ <!-- =====================================================================
+ 3.7 Calendar Properties
+ ===================================================================== -->
+
+ <!-- ===================== Parameters ================================= -->
+ <xs:include schemaLocation="iCalendar-params.xsd" />
+
+ <!-- =====================================================================
+ BasePropertyType
+ All properties are based off this type which defines a property as
+ nothing more than a list of parameters.
+
+ We make no attempt to define valid parameters for each property as this
+ would complicate the schema significantly. Consumers can ignore
+ property parameters they do not understand or expect.
+ ===================================================================== -->
+ <xs:complexType name="BasePropertyType" abstract="true" >
+ <xs:sequence>
+ <xs:element ref="xcal:parameters"
+ minOccurs="0" />
+ </xs:sequence>
+ </xs:complexType>
+
+ <xs:element name="parameters" type="xcal:ArrayOfParameters"/>
+
+ <xs:element name="baseProperty" type="xcal:BasePropertyType" />
+
+ <xs:complexType name="ArrayOfProperties">
+ <xs:sequence>
+ <xs:element ref="xcal:baseProperty" minOccurs="0" maxOccurs="unbounded"/>
+ </xs:sequence>
+ </xs:complexType>
+
+ <!-- =====================================================================
+ Define all the standard properties. By using a substitutionGroup we
+ make it easy to extend the list of properties. As an example see
+ the properties defined in iCalendar-ms-extensions.xsd
+ ===================================================================== -->
+ <xs:element name="calscale" type="xcal:CalscalePropType"
+ substitutionGroup="xcal:baseProperty" />
+
+ <xs:element name="method" type="xcal:MethodPropType"
+ substitutionGroup="xcal:baseProperty" />
+
+ <xs:element name="prodid" type="xcal:ProdidPropType"
+ substitutionGroup="xcal:baseProperty" />
+
+ <xs:element name="version" type="xcal:VersionPropType"
+ substitutionGroup="xcal:baseProperty" />
+
+ <xs:element name="attach" type="xcal:AttachPropType"
+ substitutionGroup="xcal:baseProperty" />
+
+ <xs:element name="categories" type="xcal:CategoriesPropType"
+ substitutionGroup="xcal:baseProperty" />
+
+ <xs:element name="class" type="xcal:ClassPropType"
+ substitutionGroup="xcal:baseProperty" />
+
+ <xs:element name="comment" type="xcal:CommentPropType"
+ substitutionGroup="xcal:baseProperty" />
+
+ <xs:element name="description" type="xcal:DescriptionPropType"
+ substitutionGroup="xcal:baseProperty" />
+
+ <xs:element name="geo" type="xcal:GeoPropType"
+ substitutionGroup="xcal:baseProperty" />
+
+ <xs:element name="location" type="xcal:LocationPropType"
+ substitutionGroup="xcal:baseProperty" />
+
+ <xs:element name="percent-complete" type="xcal:PercentCompletePropType"
+ substitutionGroup="xcal:baseProperty" />
+
+ <xs:element name="priority" type="xcal:PriorityPropType"
+ substitutionGroup="xcal:baseProperty" />
+
+ <xs:element name="resources" type="xcal:ResourcesPropType"
+ substitutionGroup="xcal:baseProperty" />
+
+ <xs:element name="status" type="xcal:StatusPropType"
+ substitutionGroup="xcal:baseProperty" />
+
+ <xs:element name="summary" type="xcal:SummaryPropType"
+ substitutionGroup="xcal:baseProperty" />
+
+ <xs:element name="completed" type="xcal:CompletedPropType"
+ substitutionGroup="xcal:baseProperty" />
+
+ <xs:element name="dtend" type="xcal:DtendPropType"
+ substitutionGroup="xcal:baseProperty" />
+
+ <xs:element name="dtstart" type="xcal:DtstartPropType"
+ substitutionGroup="xcal:baseProperty" />
+
+ <xs:element name="due" type="xcal:DuePropType"
+ substitutionGroup="xcal:baseProperty" />
+
+ <xs:element name="duration" type="xcal:DurationPropType"
+ substitutionGroup="xcal:baseProperty" />
+
+ <xs:element name="freebusy" type="xcal:FreebusyPropType"
+ substitutionGroup="xcal:baseProperty" />
+
+ <xs:element name="transp" type="xcal:TranspPropType"
+ substitutionGroup="xcal:baseProperty" />
+
+ <!-- Comment out tzid for the moment. It has the same name as the parameter
+ and this is causing me some issues
+ <xs:element name="tzid" type="xcal:TzidPropType"
+ substitutionGroup="xcal:baseProperty" /> -->
+ <xs:element name="tzname" type="xcal:TznamePropType"
+ substitutionGroup="xcal:baseProperty" />
+
+ <xs:element name="tzoffsetfrom" type="xcal:TzoffsetfromPropType"
+ substitutionGroup="xcal:baseProperty" />
+
+ <xs:element name="tzoffsetto" type="xcal:TzoffsettoPropType"
+ substitutionGroup="xcal:baseProperty" />
+
+ <xs:element name="tzurl" type="xcal:TzurlPropType"
+ substitutionGroup="xcal:baseProperty" />
+
+ <xs:element name="attendee" type="xcal:AttendeePropType"
+ substitutionGroup="xcal:baseProperty" />
+
+ <xs:element name="contact" type="xcal:ContactPropType"
+ substitutionGroup="xcal:baseProperty" />
+
+ <xs:element name="organizer" type="xcal:OrganizerPropType"
+ substitutionGroup="xcal:baseProperty" />
+
+ <xs:element name="recurrence-id" type="xcal:RecurrenceIdPropType"
+ substitutionGroup="xcal:baseProperty" />
+
+ <xs:element name="url" type="xcal:UrlPropType"
+ substitutionGroup="xcal:baseProperty" />
+
+ <xs:element name="uid" type="xcal:UidPropType"
+ substitutionGroup="xcal:baseProperty" />
+
+ <xs:element name="exdate" type="xcal:ExdatePropType"
+ substitutionGroup="xcal:baseProperty" />
+
+ <xs:element name="rdate" type="xcal:RdatePropType"
+ substitutionGroup="xcal:baseProperty" />
+
+ <xs:element name="related-to" type="xcal:RelatedToPropType"
+ substitutionGroup="xcal:baseProperty" />
+
+ <xs:element name="exrule" type="xcal:ExrulePropType"
+ substitutionGroup="xcal:baseProperty" />
+
+ <xs:element name="rrule" type="xcal:RrulePropType"
+ substitutionGroup="xcal:baseProperty" />
+
+ <xs:element name="action" type="xcal:ActionPropType"
+ substitutionGroup="xcal:baseProperty" />
+
+ <xs:element name="repeat" type="xcal:RepeatPropType"
+ substitutionGroup="xcal:baseProperty" />
+
+ <xs:element name="trigger" type="xcal:TriggerPropType"
+ substitutionGroup="xcal:baseProperty" />
+
+ <xs:element name="created" type="xcal:CreatedPropType"
+ substitutionGroup="xcal:baseProperty" />
+
+ <xs:element name="dtstamp" type="xcal:DtstampPropType"
+ substitutionGroup="xcal:baseProperty" />
+
+ <xs:element name="last-modified" type="xcal:LastModifiedPropType"
+ substitutionGroup="xcal:baseProperty" />
+
+ <xs:element name="sequence" type="xcal:SequencePropType"
+ substitutionGroup="xcal:baseProperty" />
+
+ <xs:element name="request-status" type="xcal:RequestStatusPropType"
+ substitutionGroup="xcal:baseProperty" />
+
+ <!-- Properties that take a simple text value -->
+ <xs:complexType name="TextPropertyType" >
+ <xs:complexContent mixed="false">
+ <xs:extension base="xcal:BasePropertyType">
+ <xs:sequence>
+ <xs:element ref="xcal:text" />
+ </xs:sequence>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+
+ <xs:complexType name="TextListPropertyType">
+ <xs:complexContent mixed="false">
+ <xs:extension base="xcal:BasePropertyType">
+ <xs:sequence>
+ <xs:element ref="xcal:text" maxOccurs="unbounded"/>
+ </xs:sequence>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+
+ <!-- Properties that take a calendar address value -->
+ <xs:complexType name="CalAddressPropertyType" >
+ <xs:complexContent mixed="false">
+ <xs:extension base="xcal:BasePropertyType">
+ <xs:sequence>
+ <xs:element ref="xcal:cal-address" />
+ </xs:sequence>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+
+ <!-- Properties that take a simple integer value -->
+ <xs:complexType name="IntegerPropertyType" >
+ <xs:complexContent mixed="false">
+ <xs:extension base="xcal:BasePropertyType">
+ <xs:sequence>
+ <xs:element ref="xcal:integer"/>
+ </xs:sequence>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+
+ <!-- Properties that take a uri value -->
+ <xs:complexType name="UriPropertyType" >
+ <xs:complexContent mixed="false">
+ <xs:extension base="xcal:BasePropertyType">
+ <xs:sequence>
+ <xs:element ref="xcal:uri"/>
+ </xs:sequence>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+
+ <!-- Properties that take a utc offset value -->
+ <xs:complexType name="UtcOffsetPropertyType" >
+ <xs:complexContent mixed="false">
+ <xs:extension base="xcal:BasePropertyType">
+ <xs:sequence>
+ <xs:element ref="xcal:utc-offset"/>
+ </xs:sequence>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+
+ <!-- Properties that take a date-time value -->
+ <xs:complexType name="DatetimePropertyType" >
+ <xs:complexContent mixed="false">
+ <xs:extension base="xcal:BasePropertyType">
+ <xs:sequence>
+ <xs:element ref="xcal:date-time"/>
+ </xs:sequence>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+
+ <!-- Properties that take a utc-date-time value -->
+ <xs:complexType name="UtcDatetimePropertyType" >
+ <xs:complexContent mixed="false">
+ <xs:extension base="xcal:BasePropertyType">
+ <xs:sequence>
+ <xs:element ref="xcal:utc-date-time"/>
+ </xs:sequence>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+
+ <!-- Properties that take a date or date-time value -->
+ <xs:complexType name="DateDatetimePropertyType" >
+ <xs:complexContent mixed="false">
+ <xs:extension base="xcal:BasePropertyType">
+ <xs:sequence>
+ <xs:choice>
+ <xs:element ref="xcal:date-time"/>
+ <xs:element ref="xcal:date"/>
+ </xs:choice>
+ </xs:sequence>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+
+ <!-- Properties that take a recurrence value -->
+ <xs:complexType name="RecurPropertyType" >
+ <xs:complexContent mixed="false">
+ <xs:extension base="xcal:BasePropertyType">
+ <xs:sequence>
+ <xs:element name="recur" type="xcal:RecurType"/>
+ </xs:sequence>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+
+ <!-- 3.7.1 Calendar Scale -->
+ <xs:simpleType name="CalscaleValueType">
+ <xs:restriction base="xs:string">
+ <xs:enumeration value="GREGORIAN"/>
+ </xs:restriction>
+ </xs:simpleType>
+
+ <xs:complexType name="CalscalePropType">
+ <xs:complexContent mixed="false">
+ <xs:extension base="xcal:BasePropertyType">
+ <xs:sequence>
+ <xs:element name="text" type="xcal:CalscaleValueType"/>
+ </xs:sequence>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+
+ <!-- 3.7.2 Method -->
+ <xs:complexType name="MethodPropType">
+ <xs:complexContent mixed="false">
+ <xs:extension base="xcal:TextPropertyType"/>
+ </xs:complexContent>
+ </xs:complexType>
+
+ <!-- 3.7.3 Product Identifier -->
+ <xs:complexType name="ProdidPropType">
+ <xs:complexContent mixed="false">
+ <xs:extension base="xcal:TextPropertyType"/>
+ </xs:complexContent>
+ </xs:complexType>
+
+ <!-- 3.7.4 Version -->
+ <xs:complexType name="VersionPropType">
+ <xs:complexContent mixed="false">
+ <xs:extension base="xcal:TextPropertyType"/>
+ </xs:complexContent>
+ </xs:complexType>
+
+ <!-- 3.8 Component Properties -->
+ <!-- 3.8.1 Descriptive Component Properties -->
+ <!-- 3.8.1.1 Attachment -->
+ <xs:complexType name="AttachPropType">
+ <xs:complexContent mixed="false">
+ <xs:extension base="xcal:BasePropertyType">
+ <xs:choice>
+ <xs:element ref="xcal:uri"/>
+ <xs:element ref="xcal:binary"/>
+ </xs:choice>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+
+ <!-- 3.8.1.2 Categories -->
+ <xs:complexType name="CategoriesPropType">
+ <xs:complexContent mixed="false">
+ <xs:extension base="xcal:TextListPropertyType"/>
+ </xs:complexContent>
+ </xs:complexType>
+
+ <!-- 3.8.1.3 Classification -->
+
+ <xs:complexType name="ClassPropType">
+ <xs:annotation>
+ <xs:documentation xml:lang="en">
+ classvalue = "PUBLIC" / "PRIVATE" / "CONFIDENTIAL" / iana-token
+ / x-name
+ ;Default is PUBLIC
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexContent mixed="false">
+ <xs:extension base="xcal:TextPropertyType"/>
+ </xs:complexContent>
+ </xs:complexType>
+
+ <!-- 3.8.1.4 Comment -->
+ <xs:complexType name="CommentPropType">
+ <xs:complexContent mixed="false">
+ <xs:extension base="xcal:TextPropertyType"/>
+ </xs:complexContent>
+ </xs:complexType>
+
+ <!-- 3.8.1.5 Description -->
+ <xs:complexType name="DescriptionPropType">
+ <xs:complexContent mixed="false">
+ <xs:extension base="xcal:TextPropertyType"/>
+ </xs:complexContent>
+ </xs:complexType>
+
+ <!-- 3.8.1.6 Geographic Position -->
+ <xs:complexType name="GeoPropType">
+ <xs:complexContent mixed="false">
+ <xs:extension base="xcal:BasePropertyType">
+ <xs:sequence>
+ <xs:element ref="xcal:latitude"/>
+ <xs:element ref="xcal:longitude"/>
+ </xs:sequence>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+
+ <xs:element name="latitude" type="xs:float"/>
+ <xs:element name="longitude" type="xs:float"/>
+
+ <!-- 3.8.1.7 Location -->
+ <xs:complexType name="LocationPropType">
+ <xs:complexContent mixed="false">
+ <xs:extension base="xcal:TextPropertyType"/>
+ </xs:complexContent>
+ </xs:complexType>
+
+ <!-- 3.8.1.8 Percent Complete -->
+ <xs:complexType name="PercentCompletePropType">
+ <xs:complexContent mixed="false">
+ <xs:extension base="xcal:IntegerPropertyType"/>
+ </xs:complexContent>
+ </xs:complexType>
+
+ <!-- 3.8.1.9 Priority -->
+ <xs:complexType name="PriorityPropType">
+ <xs:complexContent mixed="false">
+ <xs:extension base="xcal:IntegerPropertyType"/>
+ </xs:complexContent>
+ </xs:complexType>
+
+ <!-- 3.8.1.10 Resources -->
+ <xs:complexType name="ResourcesPropType">
+ <xs:complexContent mixed="false">
+ <xs:extension base="xcal:TextListPropertyType"/>
+ </xs:complexContent>
+ </xs:complexType>
+
+ <!-- 3.8.1.11 Status -->
+ <xs:complexType name="StatusPropType">
+ <xs:annotation>
+ <xs:documentation xml:lang="en">
+ status = "STATUS" statparam ":" statvalue CRLF
+
+ statparam = *(";" other-param)
+
+ statvalue = (statvalue-event
+ / statvalue-todo
+ / statvalue-jour)
+
+ statvalue-event = "TENTATIVE" ;Indicates event is tentative.
+ / "CONFIRMED" ;Indicates event is definite.
+ / "CANCELLED" ;Indicates event was cancelled.
+ ;Status values for a "VEVENT"
+
+ statvalue-todo = "NEEDS-ACTION" ;Indicates to-do needs action.
+ / "COMPLETED" ;Indicates to-do completed.
+ / "IN-PROCESS" ;Indicates to-do in process of.
+ / "CANCELLED" ;Indicates to-do was cancelled.
+ ;Status values for "VTODO".
+
+ statvalue-jour = "DRAFT" ;Indicates journal is draft.
+ / "FINAL" ;Indicates journal is final.
+ / "CANCELLED" ;Indicates journal is removed.
+ ;Status values for "VJOURNAL".
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexContent mixed="false">
+ <xs:extension base="xcal:TextPropertyType"/>
+ </xs:complexContent>
+ </xs:complexType>
+
+ <!-- 3.8.1.12 Summary -->
+ <xs:complexType name="SummaryPropType">
+ <xs:complexContent mixed="false">
+ <xs:extension base="xcal:TextPropertyType"/>
+ </xs:complexContent>
+ </xs:complexType>
+
+ <!-- 3.8.2 Date and Time Component Properties -->
+ <!-- 3.8.2.1 Date/Time Completed -->
+ <xs:complexType name="CompletedPropType">
+ <xs:complexContent mixed="false">
+ <xs:extension base="xcal:UtcDatetimePropertyType"/>
+ </xs:complexContent>
+ </xs:complexType>
+
+ <!-- 3.8.2.2 Date/Time End -->
+ <xs:complexType name="DtendPropType">
+ <xs:complexContent mixed="false">
+ <xs:extension base="xcal:DateDatetimePropertyType"/>
+ </xs:complexContent>
+ </xs:complexType>
+
+ <!-- 3.8.2.3 Date/Time Due -->
+ <xs:complexType name="DuePropType">
+ <xs:complexContent mixed="false">
+ <xs:extension base="xcal:DateDatetimePropertyType"/>
+ </xs:complexContent>
+ </xs:complexType>
+
+ <!-- 3.8.2.4 Date/Time Start -->
+ <xs:complexType name="DtstartPropType">
+ <xs:complexContent mixed="false">
+ <xs:extension base="xcal:DateDatetimePropertyType"/>
+ </xs:complexContent>
+ </xs:complexType>
+
+ <!-- 3.8.2.5 Duration -->
+ <xs:complexType name="DurationPropType">
+ <xs:complexContent mixed="false">
+ <xs:extension base="xcal:BasePropertyType">
+ <xs:sequence>
+ <xs:element name="duration" type="xcal:DurationValueType"/>
+ </xs:sequence>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+
+ <!-- 3.8.2.6 Free/Busy Time -->
+ <xs:complexType name="FreebusyPropType">
+ <xs:complexContent mixed="false">
+ <xs:extension base="xcal:BasePropertyType">
+ <xs:sequence>
+ <xs:element ref="xcal:period" maxOccurs="unbounded"/>
+ </xs:sequence>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+
+ <!-- 3.8.2.7 Time Transparency -->
+
+ <xs:complexType name="TranspPropType">
+ <xs:annotation>
+ <xs:documentation xml:lang="en">
+ transvalue = "OPAQUE"
+ ;Blocks or opaque on busy time searches.
+ / "TRANSPARENT"
+ ;Transparent on busy time searches.
+ ;Default value is OPAQUE
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexContent mixed="false">
+ <xs:extension base="xcal:TextPropertyType"/>
+ </xs:complexContent>
+ </xs:complexType>
+
+ <!-- 3.8.3 Time Zone Component Properties -->
+ <!-- 3.8.3.1 Time Zone Identifier -->
+ <xs:complexType name="TzidPropType">
+ <xs:complexContent mixed="false">
+ <xs:extension base="xcal:TextPropertyType"/>
+ </xs:complexContent>
+ </xs:complexType>
+
+ <!-- 3.8.3.2 Time Zone Name -->
+ <xs:complexType name="TznamePropType">
+ <xs:complexContent mixed="false">
+ <xs:extension base="xcal:TextPropertyType"/>
+ </xs:complexContent>
+ </xs:complexType>
+
+ <!-- 3.8.3.3 Time Zone Offset From -->
+ <xs:complexType name="TzoffsetfromPropType">
+ <xs:complexContent mixed="false">
+ <xs:extension base="xcal:UtcOffsetPropertyType"/>
+ </xs:complexContent>
+ </xs:complexType>
+
+ <!-- 3.8.3.4 Time Zone Offset To -->
+ <xs:complexType name="TzoffsettoPropType">
+ <xs:complexContent mixed="false">
+ <xs:extension base="xcal:UtcOffsetPropertyType"/>
+ </xs:complexContent>
+ </xs:complexType>
+
+ <!-- 3.8.3.5 Time Zone URL -->
+ <xs:complexType name="TzurlPropType">
+ <xs:complexContent mixed="false">
+ <xs:extension base="xcal:UriPropertyType"/>
+ </xs:complexContent>
+ </xs:complexType>
+
+ <!-- 3.8.4 Relationship Component Properties -->
+ <!-- 3.8.4.1 Attendee -->
+ <xs:complexType name="AttendeePropType">
+ <xs:complexContent mixed="false">
+ <xs:extension base="xcal:CalAddressPropertyType"/>
+ </xs:complexContent>
+ </xs:complexType>
+
+ <!-- 3.8.4.2 Contact -->
+ <xs:complexType name="ContactPropType">
+ <xs:complexContent mixed="false">
+ <xs:extension base="xcal:TextPropertyType"/>
+ </xs:complexContent>
+ </xs:complexType>
+
+ <!-- 3.8.4.3 Organizer -->
+ <xs:complexType name="OrganizerPropType">
+ <xs:complexContent mixed="false">
+ <xs:extension base="xcal:CalAddressPropertyType"/>
+ </xs:complexContent>
+ </xs:complexType>
+
+ <!-- 3.8.4.4 Recurrence ID -->
+ <xs:complexType name="RecurrenceIdPropType">
+ <xs:complexContent mixed="false">
+ <xs:extension base="xcal:DateDatetimePropertyType"/>
+ </xs:complexContent>
+ </xs:complexType>
+
+ <!-- 3.8.4.5 Related-To -->
+ <!-- Before extensions to allow different value types
+ <xs:complexType name="RelatedToPropType">
+ <xs:complexContent mixed="false">
+ <xs:extension base="xcal:TextPropertyType"/>
+ </xs:complexContent>
+ </xs:complexType>
+ -->
+
+ <xs:complexType name="RelatedToPropType">
+ <xs:complexContent mixed="false">
+ <xs:extension base="xcal:BasePropertyType">
+ <xs:choice>
+ <xs:element ref="xcal:uri"/>
+ <xs:element name="uid" type="xs:string"/>
+ <xs:element ref="xcal:text"/>
+ </xs:choice>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+
+ <!-- 3.8.4.6 Uniform Resource Locator -->
+ <xs:complexType name="UrlPropType">
+ <xs:complexContent mixed="false">
+ <xs:extension base="xcal:UriPropertyType"/>
+ </xs:complexContent>
+ </xs:complexType>
+
+ <!-- 3.8.4.7 Unique Identifier -->
+ <xs:complexType name="UidPropType">
+ <xs:complexContent mixed="false">
+ <xs:extension base="xcal:TextPropertyType"/>
+ </xs:complexContent>
+ </xs:complexType>
+
+ <!-- 3.8.5 Recurrence Component Properties -->
+ <!-- 3.8.5.1 Exception Date/Times -->
+ <xs:complexType name="ExdatePropType">
+ <xs:complexContent mixed="false">
+ <xs:extension base="xcal:DateDatetimePropertyType"/>
+ </xs:complexContent>
+ </xs:complexType>
+
+ <!-- 3.8.5.2 Recurrence Date/Times -->
+ <xs:complexType name="RdatePropType">
+ <xs:complexContent mixed="false">
+ <xs:extension base="xcal:DateDatetimePropertyType"/>
+ </xs:complexContent>
+ </xs:complexType>
+
+ <!-- 3.8.5.3 Recurrence Rule -->
+ <xs:complexType name="RrulePropType">
+ <xs:complexContent mixed="false">
+ <xs:extension base="xcal:RecurPropertyType"/>
+ </xs:complexContent>
+ </xs:complexType>
+
+ <!-- x.x.x.x Deprecated ExRule -->
+ <xs:complexType name="ExrulePropType">
+ <xs:complexContent mixed="false">
+ <xs:extension base="xcal:RecurPropertyType"/>
+ </xs:complexContent>
+ </xs:complexType>
+
+ <!-- 3.8.6 Alarm Component Properties -->
+ <!-- 3.8.6.1 Action -->
+
+ <xs:complexType name="ActionPropType">
+ <xs:annotation>
+ <xs:documentation xml:lang="en">
+ actionvalue = "AUDIO" / "DISPLAY" / "EMAIL"
+ / iana-token / x-name
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexContent mixed="false">
+ <xs:extension base="xcal:TextPropertyType"/>
+ </xs:complexContent>
+ </xs:complexType>
+
+ <!-- 3.8.6.2 Repeat Count -->
+ <xs:complexType name="RepeatPropType">
+ <xs:complexContent mixed="false">
+ <xs:extension base="xcal:IntegerPropertyType"/>
+ </xs:complexContent>
+ </xs:complexType>
+
+ <!-- 3.8.6.3 Trigger -->
+ <xs:complexType name="TriggerPropType">
+ <xs:complexContent mixed="false">
+ <xs:extension base="xcal:BasePropertyType">
+ <xs:sequence>
+ <xs:choice>
+ <xs:element name="duration" type="xcal:DurationValueType"/>
+ <xs:element ref="xcal:date-time"/>
+ </xs:choice>
+ </xs:sequence>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+
+ <!-- 3.8.7 Change Management Component Properties -->
+ <!-- 3.8.7.1 Date/Time Created -->
+ <xs:complexType name="CreatedPropType">
+ <xs:complexContent mixed="false">
+ <xs:extension base="xcal:UtcDatetimePropertyType"/>
+ </xs:complexContent>
+ </xs:complexType>
+
+ <!-- 3.8.7.2 Date/Time Stamp -->
+ <xs:complexType name="DtstampPropType">
+ <xs:complexContent mixed="false">
+ <xs:extension base="xcal:UtcDatetimePropertyType"/>
+ </xs:complexContent>
+ </xs:complexType>
+
+ <!-- 3.8.7.3 Last Modified -->
+ <xs:complexType name="LastModifiedPropType">
+ <xs:complexContent mixed="false">
+ <xs:extension base="xcal:UtcDatetimePropertyType"/>
+ </xs:complexContent>
+ </xs:complexType>
+
+ <!-- 3.8.7.4 Sequence Number -->
+ <xs:complexType name="SequencePropType">
+ <xs:complexContent mixed="false">
+ <xs:extension base="xcal:IntegerPropertyType"/>
+ </xs:complexContent>
+ </xs:complexType>
+
+ <!-- 3.8.8 Miscellaneous Component Properties -->
+ <!-- 3.8.8.3 Request Status -->
+ <xs:complexType name="RequestStatusPropType">
+ <xs:complexContent mixed="false">
+ <xs:extension base="xcal:BasePropertyType">
+ <xs:sequence>
+ <xs:element name="code" type="xs:string" />
+ <xs:element name="description" type="xs:string"/>
+ <xs:element name="extdata" type="xs:string"/>
+ </xs:sequence>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+
+ <!--
+ statcode = 1*DIGIT 1*2("." 1*DIGIT)
+ ;Hierarchical, numeric return status code
+
+ statdesc = text
+ ;Textual status description
+
+ extdata = text
+ ;Textual exception data. For example, the offending property
+ ;name and value or complete property line.
+ -->
+</xs:schema>
diff --git a/schemas/ical/iCalendar-valtypes.xsd b/schemas/ical/iCalendar-valtypes.xsd
new file mode 100644
index 0000000..d194837
--- /dev/null
+++ b/schemas/ical/iCalendar-valtypes.xsd
@@ -0,0 +1,234 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ WS-Calendar Version 1.0
+ Committee Specification Draft 04 / Public Review Draft 03
+ 17 June 2011
+ Source: http://docs.oasis-open.org/ws-calendar/ws-calendar-spec/v1.0/csprd03/xsd/
+ Copyright (c) The Calendaring and Scheduling Consortium 2010-2011. All Rights Reserved.
+ Copyright (c) OASIS Open 2010-2011. All Rights Reserved. -->
+
+<!-- iCalendar values schema is intended to work in conjunction
+ with conformant implementations of IETF RFC 5545
+ ( http://www.rfc-editor.org/rfc/rfc5545.txt ),
+ the normative specification of iCalendar. -->
+
+<!-- edited with XMLSpy v2010 rel. 3 sp1 (x64) (http://www.altova.com) by Toby Considine (TC9) -->
+<!--non-normative, to support development of WS-Calendar - 2010/10/30. Refer to rfc5545 and xCal in the IETF for normative description-->
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
+ xmlns:xcal="urn:ietf:params:xml:ns:icalendar-2.0"
+ targetNamespace="urn:ietf:params:xml:ns:icalendar-2.0"
+ elementFormDefault="qualified">
+
+ <!-- =====================================================================
+ 3.3 Property Value Data Types
+ ===================================================================== -->
+
+ <!-- 3.3.1 BINARY -->
+ <xs:element name="binary" type="xs:string"/>
+
+ <!-- 3.3.2 BOOLEAN -->
+ <xs:element name="boolean" type="xs:boolean" />
+
+ <!-- 3.3.3 CAL-ADDRESS -->
+ <xs:simpleType name="CalAddressType">
+ <xs:restriction base="xs:string"/>
+ </xs:simpleType>
+
+ <xs:element name="cal-address" type="xcal:CalAddressType" />
+
+ <!-- 3.3.4 DATE -->
+ <xs:element name="date" type="xs:date"/>
+
+ <!-- 3.3.5 DATE-TIME -->
+ <!--
+ <xs:element name="date-time" type="xs:string"/>
+ -->
+ <xs:simpleType name="DateTimeType">
+ <xs:restriction base="xs:dateTime">
+ <xs:pattern value="(\-|\+)?\d{4}\-\d{2}\-\d{2}T\d{2}:\d{2}:\d{2}(\.\d*)?Z?"/>
+ </xs:restriction>
+ </xs:simpleType>
+
+ <xs:element name="date-time" type="xcal:DateTimeType"/>
+
+ <xs:simpleType name="UTCDateTimeType">
+ <xs:restriction base="xs:dateTime">
+ <xs:pattern value="(\-|\+)?\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(\.\d*)Z"/>
+ </xs:restriction>
+ </xs:simpleType>
+
+ <xs:element name="utc-date-time" type="xcal:UTCDateTimeType"/>
+
+ <!-- 3.3.6 DURATION
+ We cannot have a duration value type here as the value-type element has the same
+ name as the property.
+ <xs:element name="duration" type="xs:duration"/>-->
+
+ <xs:simpleType name="DurationValueType">
+ <xs:annotation>
+ <xs:documentation xml:lang="en">
+ Durations are a problem:
+ XML schema types allow Years, Months, Days, Hours, Minutes, Seconds
+ Ical allows Weeks, Days, Hours, Minutes, Seconds
+
+ These overlap and we really need a combination of both.
+ So the compromise is to have a pattern restricted String type and note
+ that if data is to be exported into the icalendar world it cannot have
+ years or months.
+
+ Ultimately it is to be hoped the two worlds can be aligned.
+
+ RFC5545 (icalendar) specifies
+ dur-value = (["+"] / "-") "P" (dur-date / dur-time / dur-week)
+
+ dur-date = dur-day [dur-time]
+ dur-time = "T" (dur-hour / dur-minute / dur-second)
+ dur-week = 1*DIGIT "W"
+ dur-hour = 1*DIGIT "H" [dur-minute]
+ dur-minute = 1*DIGIT "M" [dur-second]
+ dur-second = 1*DIGIT "S"
+ dur-day = 1*DIGIT "D"
+
+ So P5W is valid: P5WT10M is not. If weeks re specified nothing else can be
+
+ XML specifies
+ PnYnMnDTnHnMnS
+
+ The elements must appear in the order specified and the 'T' is omitted
+ if hours minutes and seconds are absent.
+ </xs:documentation>
+ </xs:annotation>
+ <xs:restriction base="xs:string">
+ <xs:pattern value="(\+|\-)?P((\d+Y)?(\d+M)?(\d+D)?T?(\d+H)?(\d+M)?(\d+S)?)|(\d+W)"/>
+ </xs:restriction>
+ </xs:simpleType>
+
+ <!-- 3.3.7 FLOAT -->
+ <xs:element name="float" type="xs:float"/>
+
+ <!-- 3.3.8 INTEGER -->
+ <xs:element name="integer" type="xs:integer"/>
+
+ <!-- 3.3.9 PERIOD -->
+
+ <xs:complexType name="PeriodType">
+ <xs:sequence>
+ <xs:element name="start" type="xcal:DateTimeType" />
+ <xs:sequence>
+ <xs:choice>
+ <xs:element name="end" type="xcal:DateTimeType" />
+ <xs:element name="duration" type="xcal:DurationValueType" />
+ </xs:choice>
+ </xs:sequence>
+ </xs:sequence>
+ </xs:complexType>
+
+ <xs:element name="period" type="xcal:PeriodType" />
+
+ <!-- 3.3.10 RECUR -->
+ <xs:complexType name="RecurType">
+ <xs:sequence>
+ <xs:element name="freq" type="xcal:FreqRecurType"/>
+ <xs:sequence>
+ <xs:choice minOccurs="0">
+ <xs:element ref="xcal:until" />
+ <xs:element ref="xcal:count" />
+ </xs:choice>
+ </xs:sequence>
+ <xs:element name="interval" type="xs:string" minOccurs="0"/>
+ <xs:element name="bysecond" type="xs:string"
+ minOccurs="0" maxOccurs="unbounded" />
+ <xs:element name="byminute" type="xs:string"
+ minOccurs="0" maxOccurs="unbounded" />
+ <xs:element name="byhour" type="xs:string"
+ minOccurs="0" maxOccurs="unbounded" />
+ <xs:element name="byday" type="xs:string"
+ minOccurs="0" maxOccurs="unbounded" />
+ <xs:element name="byyearday" type="xs:string"
+ minOccurs="0" maxOccurs="unbounded" />
+ <xs:element name="bymonthday" type="xcal:BymonthdayRecurType"
+ minOccurs="0" maxOccurs="unbounded" />
+ <xs:element name="byweekno" type="xs:string"
+ minOccurs="0" maxOccurs="unbounded" />
+ <xs:element name="bymonth" type="xcal:BymonthRecurType"
+ minOccurs="0" maxOccurs="unbounded" />
+ <xs:element name="bysetpos" type="xs:integer"
+ minOccurs="0" maxOccurs="unbounded" />
+ <xs:element name="wkst" type="xcal:WeekdayRecurType" minOccurs="0" />
+ </xs:sequence>
+ </xs:complexType>
+
+ <xs:simpleType name="FreqRecurType">
+ <xs:restriction base="xs:token">
+ <xs:enumeration value="SECONDLY"/>
+ <xs:enumeration value="MINUTELY"/>
+ <xs:enumeration value="HOURLY"/>
+ <xs:enumeration value="DAILY"/>
+ <xs:enumeration value="WEEKLY"/>
+ <xs:enumeration value="MONTHLY"/>
+ <xs:enumeration value="YEARLY"/>
+ </xs:restriction>
+ </xs:simpleType>
+
+ <xs:element name="until" type="xcal:UntilRecurType"/>
+
+ <xs:complexType name="UntilRecurType" >
+ <xs:sequence>
+ <xs:choice>
+ <xs:element ref="xcal:date" />
+ <xs:element ref="xcal:date-time" />
+ </xs:choice>
+ </xs:sequence>
+ </xs:complexType>
+
+ <xs:element name="count" type="xs:integer"/>
+
+ <xs:simpleType name="WeekdayRecurType">
+ <xs:restriction base="xs:token">
+ <xs:enumeration value="SU"/>
+ <xs:enumeration value="MO"/>
+ <xs:enumeration value="TU"/>
+ <xs:enumeration value="WE"/>
+ <xs:enumeration value="TH"/>
+ <xs:enumeration value="FR"/>
+ <xs:enumeration value="SA"/>
+ </xs:restriction>
+ </xs:simpleType>
+
+ <xs:simpleType name="BymonthdayRecurType">
+ <xs:restriction base="xs:integer">
+ <xs:minInclusive value="-31"/>
+ <xs:maxInclusive value="31"/>
+ </xs:restriction>
+ </xs:simpleType>
+
+ <xs:simpleType name="BymonthRecurType">
+ <xs:restriction base="xs:integer">
+ <xs:minInclusive value="1"/>
+ <xs:maxInclusive value="12"/>
+ </xs:restriction>
+ </xs:simpleType>
+
+ <!-- 3.3.11 TEXT -->
+ <xs:element name="text" type="xs:string"/>
+
+ <!-- 3.3.12 TIME -->
+ <xs:element name="time" type="xs:string"/>
+
+ <!-- 3.3.13 URI -->
+ <xs:simpleType name="UriType">
+ <xs:restriction base="xs:string"/>
+ </xs:simpleType>
+
+ <xs:element name="uri" type="xcal:UriType" />
+
+ <!-- 3.3.14 UTC-OFFSET -->
+ <xs:simpleType name="UtcOffsetType">
+ <xs:restriction base="xs:string">
+ <xs:pattern value="(\-|\+)?\d{2}:\d{2}"/>
+ </xs:restriction>
+ </xs:simpleType>
+
+ <xs:element name="utc-offset" type="xcal:UtcOffsetType" />
+
+</xs:schema>
diff --git a/schemas/ical/iCalendar-wscal-extensions.xsd b/schemas/ical/iCalendar-wscal-extensions.xsd
new file mode 100644
index 0000000..4f3c7fe
--- /dev/null
+++ b/schemas/ical/iCalendar-wscal-extensions.xsd
@@ -0,0 +1,161 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ WS-Calendar Version 1.0
+ Committee Specification Draft 04 / Public Review Draft 03
+ 17 June 2011
+ Source: http://docs.oasis-open.org/ws-calendar/ws-calendar-spec/v1.0/csprd03/xsd/
+ Copyright (c) The Calendaring and Scheduling Consortium 2010-2011. All Rights Reserved.
+ Copyright (c) OASIS Open 2010-2011. All Rights Reserved. -->
+
+<!-- iCalendar service functionality extensions schema
+ is intended to work in conjunction with conformant
+ implementations of IETF RFC 5545
+ ( http://www.rfc-editor.org/rfc/rfc5545.txt ),
+ the normative specification of iCalendar. -->
+
+<!--OASIS WS-Calendar extensions to icalendar -->
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xcal="urn:ietf:params:xml:ns:icalendar-2.0" targetNamespace="urn:ietf:params:xml:ns:icalendar-2.0" elementFormDefault="qualified">
+ <xs:include schemaLocation="iCalendar-valtypes.xsd"/>
+ <!-- ===================== Properties ================================= -->
+ <xs:include schemaLocation="iCalendar-props.xsd"/>
+ <!-- ===================== Components ================================= -->
+ <xs:include schemaLocation="iCalendar.xsd"/>
+ <!-- =====================================================================
+ 3.2 Property parameter definitions
+ ===================================================================== -->
+ <!-- Parameters that take a duration value -->
+ <xs:complexType name="DurationParameterType" mixed="false">
+ <xs:complexContent>
+ <xs:extension base="xcal:BaseParameterType">
+ <xs:sequence>
+ <xs:element name="duration" type="xs:duration"/>
+ </xs:sequence>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ <!-- Gap is used in the RELATED-TO property -->
+ <xs:element name="gap" type="xcal:DurationParameterType" substitutionGroup="xcal:baseParameter"/>
+ <!-- Granularity is used in the VAVAILABILITY and AVAILABILITY components -->
+ <xs:element name="granularity" type="xcal:DurationPropType" substitutionGroup="xcal:baseProperty"/>
+ <xs:complexType name="ToleranceValueType" mixed="false">
+ <xs:annotation>
+ <xs:documentation xml:lang="en">
+ A tolerance value is a set of durations which indicate the allowed
+ tolerance for the indicated value, e.g. startafter=PT5M indicates that
+ 5 minutes late is acceptable.
+ </xs:documentation>
+ </xs:annotation>
+ <xs:sequence>
+ <xs:element name="startbefore" type="xcal:DurationValueType" minOccurs="0" maxOccurs="1"/>
+ <xs:element name="startafter" type="xcal:DurationValueType" minOccurs="0" maxOccurs="1"/>
+ <xs:element name="endbefore" type="xcal:DurationValueType" minOccurs="0" maxOccurs="1"/>
+ <xs:element name="endafter" type="xcal:DurationValueType" minOccurs="0" maxOccurs="1"/>
+ <xs:element name="durationlong" type="xcal:DurationValueType" minOccurs="0" maxOccurs="1"/>
+ <xs:element name="durationshort" type="xcal:DurationValueType" minOccurs="0" maxOccurs="1"/>
+ <xs:element name="precision" type="xcal:DurationValueType" minOccurs="0" maxOccurs="1"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:element name="tolerance" type="xcal:TolerancePropType" substitutionGroup="xcal:baseProperty"/>
+ <xs:complexType name="TolerancePropType" mixed="false">
+ <xs:complexContent>
+ <xs:extension base="xcal:BasePropertyType">
+ <xs:sequence>
+ <xs:element name="tolerate" type="xcal:ToleranceValueType"/>
+ </xs:sequence>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ <!-- =====================================================================
+ 3.4 Calendar Components
+ ===================================================================== -->
+ <xs:complexType name="WsCalendarGluonType" mixed="false">
+ <xs:annotation>
+ <xs:documentation xml:lang="en">
+ A gluon takes vavailability.
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexContent>
+ <xs:extension base="xcal:VcalendarContainedComponentType">
+ <xs:sequence>
+ <xs:element name="components" type="xcal:ArrayOfGluonContainedComponents"/>
+ </xs:sequence>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ <xs:complexType name="ArrayOfGluonContainedComponents" mixed="false">
+ <xs:sequence>
+ <xs:choice minOccurs="0" maxOccurs="unbounded">
+ <xs:element ref="xcal:vavailability"/>
+ </xs:choice>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:element name="gluon" type="xcal:WsCalendarGluonType" substitutionGroup="xcal:vcalendarContainedComponent"/>
+ <xs:complexType name="WsCalendarIntervalType" mixed="false">
+ <xs:annotation>
+ <xs:documentation xml:lang="en">
+ An interval takes no sub-components.
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexContent>
+ <xs:extension base="xcal:VcalendarContainedComponentType"/>
+ </xs:complexContent>
+ </xs:complexType>
+ <xs:element name="interval" type="xcal:WsCalendarIntervalType" substitutionGroup="xcal:vcalendarContainedComponent"/>
+ <!-- =====================================================================
+ 3.7 Calendar Properties
+ ===================================================================== -->
+ <xs:complexType name="WsCalendarTypeType" mixed="false">
+ <xs:complexContent>
+ <xs:extension base="xcal:TextPropertyType"/>
+ </xs:complexContent>
+ </xs:complexType>
+ <xs:complexType name="WsCalendarAttachType" mixed="false">
+ <xs:annotation>
+ <xs:documentation>types the content of the xCal attach element</xs:documentation>
+ </xs:annotation>
+ <xs:complexContent>
+ <xs:extension base="xcal:BasePropertyType">
+ <xs:choice minOccurs="0" maxOccurs="unbounded">
+ <xs:element ref="xcal:artifact"/>
+ <xs:element ref="xcal:artifactBase"/>
+ <xs:element ref="xcal:uri"/>
+ <xs:element ref="xcal:text"/>
+ </xs:choice>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ <xs:element name="x-wsCalendar-attach" type="xcal:WsCalendarAttachType" substitutionGroup="xcal:baseProperty"/>
+ <xs:element name="x-wscalendar-type" type="xcal:WsCalendarTypeType" substitutionGroup="xcal:baseProperty"/>
+ <xs:element name="artifact" type="xcal:ArtifactType"/>
+ <xs:complexType name="ArtifactType">
+ <xs:annotation>
+ <xs:documentation>
+ The artifact is here to handle elements that are not proper extensions
+ of wsCalendar.
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexContent>
+ <xs:restriction base="xs:anyType">
+ <xs:anyAttribute namespace="##other" processContents="lax"/>
+ </xs:restriction>
+ </xs:complexContent>
+ </xs:complexType>
+ <xs:element name="artifactBase" type="xcal:ArtifactBaseType" block="">
+ <xs:annotation>
+ <xs:documentation>
+ The artifact Base is here for use in extending by other specifications
+ allowing attributes from other namespaces to be added to
+ ws-calendar-based schemas.
+ </xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:complexType name="ArtifactBaseType" abstract="true" block="">
+ <xs:annotation>
+ <xs:documentation>
+ The artifact Base is here for use in extending by other specifications,
+ to to allow attributes from other namespaces to be added to
+ ws-calendar-based schemas.
+ </xs:documentation>
+ </xs:annotation>
+ </xs:complexType>
+</xs:schema>
diff --git a/schemas/ical/iCalendar.rng b/schemas/ical/iCalendar.rng
new file mode 100644
index 0000000..9bdafbd
--- /dev/null
+++ b/schemas/ical/iCalendar.rng
@@ -0,0 +1,1184 @@
+# Relax NG Schema for iCalendar in XML
+
+default namespace = "urn:ietf:params:xml:ns:icalendar-2.0"
+
+# 3.2 Property Parameters
+
+# 3.2.1 Alternate Text Representation
+
+altrepparam = element altrep {
+ value-uri
+}
+
+# 3.2.2 Common Name
+
+cnparam = element cn {
+ value-text
+}
+
+# 3.2.3 Calendar User Type
+
+cutypeparam = element cutype {
+ element text {
+ "INDIVIDUAL" |
+ "GROUP" |
+ "RESOURCE" |
+ "ROOM" |
+ "UNKNOWN"
+ }
+}
+
+# 3.2.4 Delegators
+
+delfromparam = element delegated-from {
+ value-cal-address+
+}
+
+# 3.2.5 Delegatees
+
+deltoparam = element delegated-to {
+ value-cal-address+
+}
+
+# 3.2.6 Directory Entry Reference
+
+dirparam = element dir {
+ value-uri
+}
+
+# 3.2.7 Inline Encoding
+
+encodingparam = element encoding {
+ element text {
+ "8BIT" |
+ "BASE64"
+ }
+}
+
+
+# 3.2.8 Format Type
+
+fmttypeparam = element fmttype {
+ value-text
+}
+
+# 3.2.9 Free/Busy Time Type
+
+fbtypeparam = element fbtype {
+ element text {
+ "FREE" |
+ "BUSY" |
+ "BUSY-UNAVAILABLE" |
+ "BUSY-TENTATIVE"
+ }
+}
+
+# 3.2.10 Language
+
+languageparam = element language {
+ value-text
+}
+
+# 3.2.11 Group or List Membership
+
+memberparam = element member {
+ value-cal-address+
+}
+
+# 3.2.12 Participation Status
+
+partstatparam = element partstat {
+ type-partstat-event |
+ type-partstat-todo |
+ type-partstat-jour
+}
+
+type-partstat-event = (
+ element text {
+ "NEEDS-ACTION" |
+ "ACCEPTED" |
+ "DECLINED" |
+ "TENTATIVE" |
+ "DELEGATED"
+ }
+)
+
+type-partstat-todo = (
+ element text {
+ "NEEDS-ACTION" |
+ "ACCEPTED" |
+ "DECLINED" |
+ "TENTATIVE" |
+ "DELEGATED" |
+ "COMPLETED" |
+ "IN-PROCESS"
+ }
+)
+
+type-partstat-jour = (
+ element text {
+ "NEEDS-ACTION" |
+ "ACCEPTED" |
+ "DECLINED"
+ }
+)
+
+# 3.2.13 Recurrence Identifier Range
+
+rangeparam = element range {
+ element text {
+ "THISANDFUTURE"
+ }
+}
+
+# 3.2.14 Alarm Trigger Relationship
+
+trigrelparam = element related {
+ element text {
+ "START" |
+ "END"
+ }
+}
+
+# 3.2.15 Relationship Type
+
+reltypeparam = element reltype {
+ element text {
+ "PARENT" |
+ "CHILD" |
+ "SIBLING"
+ }
+}
+
+# 3.2.16 Participation Role
+
+roleparam = element role {
+ element text {
+ "CHAIR" |
+ "REQ-PARTICIPANT" |
+ "OPT-PARTICIPANT" |
+ "NON-PARTICIPANT"
+ }
+}
+
+# 3.2.17 RSVP Expectation
+
+rsvpparam = element rsvp {
+ value-boolean
+}
+
+# 3.2.18 Sent By
+
+sentbyparam = element sent-by {
+ value-cal-address
+}
+
+# 3.2.19 Time Zone Identifier
+
+tzidparam = element tzid {
+ value-text
+}
+
+# 3.3 Property Value Data Types
+
+# 3.3.1 BINARY
+
+value-binary = element binary {
+ xsd:string
+}
+
+# 3.3.2 BOOLEAN
+
+value-boolean = element boolean {
+ xsd:boolean
+}
+
+# 3.3.3 CAL-ADDRESS
+
+value-cal-address = element cal-address {
+ xsd:anyURI
+}
+
+# 3.3.4 DATE
+
+pattern-date = xsd:string {
+ pattern = "\d\d\d\d-\d\d-\d\d"
+}
+
+value-date = element date {
+ pattern-date
+}
+
+# 3.3.5 DATE-TIME
+
+pattern-date-time = xsd:string {
+ pattern = "\d\d\d\d-\d\d-\d\dT\d\d:\d\d:\d\dZ?"
+}
+
+value-date-time = element date-time {
+ pattern-date-time
+}
+
+# 3.3.6 DURATION
+
+pattern-duration = xsd:string {
+ pattern = "[+\-]?P(\d+W)|(\d+D)?"
+ ~ "(T(\d+H(\d+M)?(\d+S)?)|"
+ ~ "(\d+M(\d+S)?)|"
+ ~ "(\d+S))?"
+}
+
+value-duration = element duration {
+ pattern-duration
+}
+
+# 3.3.7 FLOAT
+
+value-float = element float {
+ xsd:float
+}
+
+# 3.3.8 INTEGER
+
+value-integer = element integer {
+ xsd:integer
+}
+
+# 3.3.9 PERIOD
+
+value-period = element period {
+ element start {
+ pattern-date-time
+ },
+ (
+ element end {
+ pattern-date-time
+ } |
+ element duration {
+ pattern-duration
+ }
+ )
+}
+
+# 3.3.10 RECUR
+
+value-recur = element recur {
+ type-freq,
+ (type-until | type-count)?,
+ element interval {
+ xsd:positiveInteger
+ }?,
+ type-bysecond*,
+ type-byminute*,
+ type-byhour*,
+ type-byday*,
+ type-bymonthday*,
+ type-byyearday*,
+ type-byweekno*,
+ type-bymonth*,
+ type-bysetpos*,
+ element wkst { type-weekday }?
+}
+
+type-freq = element freq {
+ "SECONDLY" |
+ "MINUTELY" |
+ "HOURLY" |
+ "DAILY" |
+ "WEEKLY" |
+ "MONTHLY" |
+ "YEARLY"
+}
+
+type-until = element until {
+ type-date |
+ type-date-time
+}
+
+type-count = element count {
+ xsd:positiveInteger
+}
+
+type-bysecond = element bysecond {
+ xsd:positiveInteger
+}
+
+type-byminute = element byminute {
+ xsd:positiveInteger
+}
+
+type-byhour = element byhour {
+ xsd:positiveInteger
+}
+
+type-weekday = (
+ "SU" |
+ "MO" |
+ "TU" |
+ "WE" |
+ "TH" |
+ "FR" |
+ "SA"
+)
+
+type-byday = element byday {
+ xsd:integer?,
+ type-weekday
+}
+
+type-bymonthday = element bymonthday {
+ xsd:integer
+}
+
+type-byyearday = element byyearday {
+ xsd:integer
+}
+
+type-byweekno = element byweekno {
+ xsd:integer
+}
+
+type-bymonth = element bymonth {
+ xsd:positiveInteger
+}
+
+type-bysetpos = element bysetpos {
+ xsd:integer
+}
+
+# 3.3.11 TEXT
+
+value-text = element text {
+ xsd:string
+}
+
+# 3.3.12 TIME
+
+pattern-time = xsd:string {
+ pattern = "\d\d:\d\d:\d\dZ?"
+}
+
+value-time = element time {
+ pattern-time
+}
+
+# 3.3.13 URI
+
+value-uri = element uri {
+ xsd:anyURI
+}
+
+# 3.3.14 UTC-OFFSET
+
+value-utc-offset = element utc-offset {
+ xsd:string { pattern = "[+\-]\d\d:\d\d" }
+}
+
+# UNKNOWN
+
+value-unknown = element unknown {
+ xsd:string
+}
+
+# 3.4 iCalendar Stream
+
+start = element icalendar {
+ vcalendar+
+}
+
+# 3.6 Calendar Components
+
+vcalendar = element vcalendar {
+ type-calprops,
+ type-component
+}
+
+type-calprops = element properties {
+ property-prodid &
+ property-version &
+ property-calscale? &
+ property-method?
+}
+
+type-component = element components {
+ (
+ component-vevent |
+ component-vtodo |
+ component-vjournal |
+ component-vfreebusy |
+ component-vtimezone
+ )*
+}
+
+# 3.6.1 Event Component
+
+component-vevent = element vevent {
+ type-eventprop,
+ element components {
+ component-valarm+
+ }?
+}
+
+type-eventprop = element properties {
+ property-dtstamp &
+ property-dtstart &
+ property-uid &
+
+ property-class? &
+ property-created? &
+ property-description? &
+ property-geo? &
+ property-last-mod? &
+ property-location? &
+ property-organizer? &
+ property-priority? &
+ property-seq? &
+ property-status-event? &
+ property-summary? &
+ property-transp? &
+ property-url? &
+ property-recurid? &
+
+ property-rrule? &
+
+ (property-dtend | property-duration)? &
+
+ property-attach* &
+ property-attendee* &
+ property-categories* &
+ property-comment* &
+ property-contact* &
+ property-exdate* &
+ property-rstatus* &
+ property-related* &
+ property-resources* &
+ property-rdate*
+}
+
+# 3.6.2 To-do Component
+
+component-vtodo = element vtodo {
+ type-todoprop,
+ element components {
+ component-valarm+
+ }?
+}
+
+type-todoprop = element properties {
+ property-dtstamp &
+ property-uid &
+
+ property-class? &
+ property-completed? &
+ property-created? &
+ property-description? &
+ property-geo? &
+ property-last-mod? &
+ property-location? &
+ property-organizer? &
+ property-percent? &
+ property-priority? &
+ property-recurid? &
+ property-seq? &
+ property-status-todo? &
+ property-summary? &
+ property-url? &
+
+ property-rrule? &
+
+ (
+ (property-dtstart?, property-dtend? ) |
+ (property-dtstart, property-duration)?
+ ) &
+
+ property-attach* &
+ property-attendee* &
+ property-categories* &
+ property-comment* &
+ property-contact* &
+ property-exdate* &
+ property-rstatus* &
+ property-related* &
+ property-resources* &
+ property-rdate*
+}
+
+# 3.6.3 Journal Component
+
+component-vjournal = element vjournal {
+ type-jourprop
+}
+
+type-jourprop = element properties {
+ property-dtstamp &
+ property-uid &
+
+ property-class? &
+ property-created? &
+ property-dtstart? &
+ property-last-mod? &
+ property-organizer? &
+ property-recurid? &
+ property-seq? &
+ property-status-jour? &
+ property-summary? &
+ property-url? &
+
+ property-rrule? &
+
+ property-attach* &
+ property-attendee* &
+ property-categories* &
+ property-comment* &
+ property-contact* &
+ property-description? &
+ property-exdate* &
+ property-related* &
+ property-rdate* &
+ property-rstatus*
+}
+
+# 3.6.4 Free/Busy Component
+
+component-vfreebusy = element vfreebusy {
+ type-fbprop
+}
+
+type-fbprop = element properties {
+ property-dtstamp &
+ property-uid &
+ property-contact? &
+ property-dtstart? &
+ property-dtend? &
+ property-duration? &
+ property-organizer? &
+ property-url? &
+
+ property-attendee* &
+ property-comment* &
+ property-freebusy* &
+ property-rstatus*
+}
+
+# 3.6.5 Time Zone Component
+
+component-vtimezone = element vtimezone {
+ element properties {
+ property-tzid &
+
+ property-last-mod? &
+ property-tzuurl?
+ },
+ element components {
+ (component-standard | component-daylight) &
+ component-standard* &
+ component-daylight*
+ }
+}
+
+component-standard = element standard {
+ type-tzprop
+}
+
+component-daylight = element daylight {
+ type-tzprop
+}
+
+type-tzprop = element properties {
+ property-dtstart &
+ property-tzoffsetto &
+ property-tzoffsetfrom &
+
+ property-rrule? &
+
+ property-comment* &
+ property-rdate* &
+ property-tzname*
+}
+
+# 3.6.6 Alarm Component
+
+component-valarm = element valarm {
+ audioprop | dispprop | emailprop
+}
+
+type-audioprop = element properties {
+ property-action &
+ property-trigger &
+
+ (property-duration, property-repeat)? &
+
+ property-attach?
+}
+
+type-dispprop = element properties {
+ property-action &
+ property-description &
+ property-trigger &
+ property-summary &
+
+ property-attendee+ &
+
+ (property-duration, property-repeat)? &
+
+ property-attach*
+}
+
+type-emailprop = element properties {
+ property-action &
+ property-description &
+ property-trigger &
+
+ (property-duration, property-repeat)?
+}
+
+# 3.7 Calendar Properties
+
+# 3.7.1 Calendar Scale
+
+property-calscale = element calscale {
+
+ element parameters { empty }?,
+
+ element text { "GREGORIAN" }
+}
+
+# 3.7.2 Method
+
+property-method = element method {
+
+ element parameters { empty }?,
+
+ value-text
+}
+
+# 3.7.3 Product Identifier
+
+property-prodid = element prodid {
+
+ element parameters { empty }?,
+
+ value-text
+}
+
+# 3.7.4 Version
+
+property-version = element version {
+
+ element parameters { empty }?,
+
+ element text { "2.0" }
+}
+
+# 3.8 Component Properties
+
+# 3.8.1 Descriptive Component Properties
+
+# 3.8.1.1 Attachment
+
+property-attach = element attach {
+
+ element parameters {
+ fmttypeparam? &
+ encodingparam?
+ }?,
+
+ value-uri | value-binary
+}
+
+# 3.8.1.2 Categories
+
+property-categories = element categories {
+
+ element parameters {
+ languageparam? &
+ }?,
+ value-text+
+}
+
+# 3.8.1.3 Classification
+
+property-class = element class {
+
+ element parameters { empty }?,
+
+ element text {
+ "PUBLIC" |
+ "PRIVATE" |
+ "CONFIDENTIAL"
+ }
+}
+
+# 3.8.1.4 Comment
+
+property-comment = element comment {
+
+ element parameters {
+ altrepparam? &
+ languageparam?
+ }?,
+
+ value-text
+}
+
+# 3.8.1.5 Description
+
+property-description = element description {
+
+ element parameters {
+ altrepparam? &
+ languageparam?
+ }?,
+
+ value-text
+}
+
+# 3.8.1.6 Geographic Position
+
+property-geo = element geo {
+
+ element parameters { empty }?,
+
+ element latitude { xsd:float },
+ element longitude { xsd:float }
+}
+
+# 3.8.1.7 Location
+
+property-location = element location {
+
+ element parameters {
+ altrepparam? &
+ languageparam?
+ }?,
+
+ value-text
+}
+
+# 3.8.1.8 Percent Complete
+
+property-percent = element percent-complete {
+
+ element parameters { empty }?,
+
+ value-integer
+}
+
+# 3.8.1.9 Priority
+
+property-priority = element priority {
+
+ element parameters { empty }?,
+
+ value-integer
+}
+
+# 3.8.1.10 Resources
+
+property-resources = element resources {
+
+ element parameters {
+ altrepparam? &
+ languageparam?
+ }?,
+
+ value-text+
+}
+
+# 3.8.1.11 Status
+
+property-status-event = element status {
+
+ element parameters { empty }?,
+
+ element text {
+ "TENTATIVE" |
+ "CONFIRMED" |
+ "CANCELLED"
+ }
+}
+
+property-status-todo = element status {
+
+ element parameters { empty }?,
+
+ element text {
+ "NEEDS-ACTION" |
+ "COMPLETED" |
+ "IN-PROCESS" |
+ "CANCELLED"
+ }
+}
+
+property-status-jour = element status {
+
+ element parameters { empty }?,
+
+ element text {
+ "DRAFT" |
+ "FINAL" |
+ "CANCELLED"
+ }
+}
+
+# 3.8.1.12 Summary
+
+property-summary = element summary {
+
+ element parameters {
+ altrepparam? &
+ languageparam?
+ }?,
+
+ value-text
+}
+
+# 3.8.2 Date and Time Component Properties
+
+# 3.8.2.1 Date/Time Completed
+
+property-completed = element completed {
+
+ element parameters { empty }?,
+
+ value-date-time
+}
+
+# 3.8.2.2 Date/Time End
+
+property-dtend = element dtend {
+
+ element parameters {
+ tzidparam?
+ }?,
+
+ value-date-time |
+ value-date
+}
+
+# 3.8.2.3 Date/Time Due
+
+property-due = element due {
+
+ element parameters {
+ tzidparam?
+ }?,
+
+ value-date-time |
+ value-date
+}
+
+# 3.8.2.4 Date/Time Start
+
+property-dtstart = element dtstart {
+
+ element parameters {
+ tzidparam?
+ }?,
+
+ value-date-time |
+ value-date
+}
+
+# 3.8.2.5 Duration
+
+property-duration = element duration {
+
+ element parameters { empty }?,
+ value-duration
+}
+
+# 3.8.2.6 Free/Busy Time
+
+property-freebusy = element freebusy {
+
+ element parameters {
+ fbtypeparam?
+ }?,
+
+
+ value-period+
+}
+
+# 3.8.2.7 Time Transparency
+
+property-transp = element transp {
+
+ element parameters { empty }?,
+
+ element text {
+ "OPAQUE" |
+ "TRANSPARENT"
+ }
+}
+
+# 3.8.3 Time Zone Component Properties
+
+# 3.8.3.1 Time Zone Identifier
+
+property-tzid = element tzid {
+
+ element parameters { empty }?,
+
+ value-text
+}
+
+# 3.8.3.2 Time Zone Name
+
+property-tzname = element tzname {
+
+ element parameters {
+ languageparam?
+ }?,
+
+ value-text
+}
+
+# 3.8.3.3 Time Zone Offset From
+
+property-tzoffsetfrom = element tzoffsetfrom {
+
+ element parameters { empty }?,
+
+ value-utc-offset
+}
+
+# 3.8.3.4 Time Zone Offset To
+
+property-tzoffsetto = element tzoffsetto {
+
+ element parameters { empty }?,
+
+ value-utc-offset
+}
+
+# 3.8.3.5 Time Zone URL
+
+property-tzurl = element tzurl {
+
+ element parameters { empty }?,
+
+ value-uri
+}
+
+# 3.8.4 Relationship Component Properties
+
+# 3.8.4.1 Attendee
+
+property-attendee = element attendee {
+
+ element parameters {
+ cutypeparam? &
+ memberparam? &
+ roleparam? &
+ partstatparam? &
+ rsvpparam? &
+ deltoparam? &
+ delfromparam? &
+ sentbyparam? &
+ cnparam? &
+ dirparam? &
+ languageparam?
+ }?,
+
+ value-cal-address
+}
+
+# 3.8.4.2 Contact
+
+property-contact = element contact {
+
+ element parameters {
+ altrepparam? &
+ languageparam?
+ }?,
+
+ value-text
+}
+
+# 3.8.4.3 Organizer
+
+property-organizer = element organizer {
+
+ element parameters {
+ cnparam? &
+ dirparam? &
+ sentbyparam? &
+ languageparam?
+ }?,
+
+ value-cal-address
+}
+
+# 3.8.4.4 Recurrence ID
+
+property-recurid = element recurrence-id {
+
+ element parameters {
+ tzidparam? &
+ rangeparam?
+ }?,
+
+ value-date-time |
+ value-date
+}
+
+# 3.8.4.5 Related-To
+
+property-related = element related-to {
+
+ element parameters {
+ reltypeparam?
+ }?,
+ value-text
+}
+
+# 3.8.4.6 Uniform Resource Locator
+
+property-url = element url {
+
+ element parameters { empty }?,
+
+ value-uri
+}
+
+# 3.8.4.7 Unique Identifier
+
+property-uid = element uid {
+
+ element parameters { empty }?,
+
+ value-text
+}
+
+# 3.8.5 Recurrence Component Properties
+
+# 3.8.5.1 Exception Date/Times
+
+property-exdate = element exdate {
+
+ element parameters {
+ tzidparam?
+ }?,
+
+ value-date-time+ |
+ value-date+
+}
+
+# 3.8.5.2 Recurrence Date/Times
+
+property-rdate = element rdate {
+
+ element parameters {
+ tzidparam?
+ }?,
+
+ value-date-time+ |
+ value-date+ |
+ value-period+
+}
+
+# 3.8.5.3 Recurrence Rule
+
+property-rrule = element rrule {
+
+ element parameters { empty }?,
+
+ value-recur
+}
+
+# 3.8.6 Alarm Component Properties
+
+# 3.8.6.1 Action
+
+property-action = element action {
+
+ element parameters { empty }?,
+
+ element text {
+ "AUDIO" |
+ "DISPLAY" |
+ "EMAIL"
+ }
+}
+
+# 3.8.6.2 Repeat Count
+
+property-repeat = element repeat {
+
+ element parameters { empty }?,
+
+ value-integer
+}
+
+# 3.8.6.3 Trigger
+
+property-trigger = element trigger {
+
+ (
+ element parameters {
+ trigrelparam?
+ }?,
+
+ value-duration
+ ) |
+ (
+ element parameters { empty }?,
+
+ value-date-time
+ )
+}
+
+# 3.8.7 Change Management Component Properties
+
+# 3.8.7.1 Date/Time Created
+
+property-created = element created {
+
+ element parameters { empty }?,
+
+ value-date-time
+}
+
+# 3.8.7.2 Date/Time Stamp
+
+property-dtstamp = element dtstamp {
+
+ element parameters { empty }?,
+
+ value-date-time
+}
+
+# 3.8.7.3 Last Modified
+
+property-last-mod = element last-modified {
+
+ element parameters { empty }?,
+
+ value-date-time
+}
+
+# 3.8.7.4 Sequence Number
+
+property-seq = element sequence {
+
+ element parameters { empty }?,
+
+ value-integer
+}
+
+# 3.8.8 Miscellaneous Component Properties
+
+# 3.8.8.3 Request Status
+
+property-rstatus = element request-status {
+
+ element parameters {
+ languageparam?
+ }?,
+
+ element code { xsd:string },
+ element description { xsd:string },
+ element data { xsd:string }?
+}
+
diff --git a/schemas/ical/iCalendar.xsd b/schemas/ical/iCalendar.xsd
new file mode 100644
index 0000000..def79cb
--- /dev/null
+++ b/schemas/ical/iCalendar.xsd
@@ -0,0 +1,206 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ WS-Calendar Version 1.0
+ Committee Specification Draft 04 / Public Review Draft 03
+ 17 June 2011
+ Source: http://docs.oasis-open.org/ws-calendar/ws-calendar-spec/v1.0/csprd03/xsd/
+ Copyright (c) The Calendaring and Scheduling Consortium 2010-2011. All Rights Reserved.
+ Copyright (c) OASIS Open 2010-2011. All Rights Reserved. -->
+
+<!-- iCalendar base schema is intended to work in conjunction
+ with conformant implementations of IETF RFC 5545
+ ( http://www.rfc-editor.org/rfc/rfc5545.txt ),
+ the normative specification of iCalendar. -->
+
+<!-- edited with XMLSpy v2010 rel. 3 sp1 (x64) (http://www.altova.com) by Toby Considine (TC9) -->
+<!--non-normative, to support development of WS-Calendar - 2010/10/30. Refer to rfc5545 and xCal in the IETF for normative description-->
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xcal="urn:ietf:params:xml:ns:icalendar-2.0" targetNamespace="urn:ietf:params:xml:ns:icalendar-2.0" elementFormDefault="qualified">
+ <!-- ===================== Standard Extensions ======================= -->
+ <xs:include schemaLocation="iCalendar-link-extension.xsd"/>
+ <!-- ===================== Proprietary Extensions ======================= -->
+ <xs:include schemaLocation="iCalendar-bw-extensions.xsd"/>
+ <xs:include schemaLocation="iCalendar-ms-extensions.xsd"/>
+ <xs:include schemaLocation="iCalendar-availability-extension.xsd"/>
+ <xs:include schemaLocation="iCalendar-wscal-extensions.xsd"/>
+ <!-- =====================================================================
+ 3.4 Calendar Components
+ ===================================================================== -->
+ <xs:include schemaLocation="iCalendar-props.xsd"/>
+ <xs:complexType name="BaseComponentType" abstract="true">
+ <xs:annotation>
+ <xs:documentation xml:lang="en">
+ This type is the basis for all components and provides a base class for
+ applications.
+
+ Essentially it states that a component is a set of properties.
+ </xs:documentation>
+ </xs:annotation>
+ <xs:sequence>
+ <xs:element name="properties" type="xcal:ArrayOfProperties" minOccurs="0"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:element name="baseComponent" type="xcal:BaseComponentType" abstract="true"/>
+ <xs:element name="vevent" type="xcal:VeventType" substitutionGroup="xcal:vcalendarContainedComponent"/>
+ <xs:element name="vtodo" type="xcal:VtodoType" substitutionGroup="xcal:vcalendarContainedComponent"/>
+ <xs:element name="vjournal" type="xcal:VjournalType" substitutionGroup="xcal:vcalendarContainedComponent"/>
+ <xs:element name="vfreebusy" type="xcal:VfreebusyType" substitutionGroup="xcal:vcalendarContainedComponent"/>
+ <xs:element name="vtimezone" type="xcal:VtimezoneType" substitutionGroup="xcal:vcalendarContainedComponent"/>
+ <xs:element name="standard" type="xcal:StandardType" substitutionGroup="xcal:baseComponent"/>
+ <xs:element name="daylight" type="xcal:DaylightType" substitutionGroup="xcal:baseComponent"/>
+ <xs:element name="valarm" type="xcal:ValarmType"/>
+ <!-- 3.4 iCalendar Stream -->
+ <xs:complexType name="IcalendarType">
+ <xs:sequence>
+ <xs:element name="vcalendar" type="xcal:VcalendarType" maxOccurs="unbounded"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:element name="icalendar" type="xcal:IcalendarType"/>
+ <!-- 3.6 Calendar Components -->
+ <xs:complexType name="VcalendarType" mixed="false">
+ <xs:annotation>
+ <xs:documentation xml:lang="en">
+ This type is the basis for all components and provides a base class for
+ applications.
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexContent>
+ <xs:extension base="xcal:BaseComponentType">
+ <xs:sequence>
+ <xs:element name="components" type="xcal:ArrayOfVcalendarContainedComponents"/>
+ </xs:sequence>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ <xs:element name="vcalendar" type="xcal:VcalendarType"/>
+ <xs:element name="vcalendarContainedComponent" type="xcal:VcalendarContainedComponentType" abstract="true"/>
+ <xs:complexType name="ArrayOfVcalendarContainedComponents">
+ <xs:sequence>
+ <xs:element ref="xcal:vcalendarContainedComponent" minOccurs="0" maxOccurs="unbounded"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="VcalendarContainedComponentType" mixed="false">
+ <xs:annotation>
+ <xs:documentation xml:lang="en">
+ This type is the basis for all components that can be contained within
+ a vcalendar component
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexContent>
+ <xs:extension base="xcal:BaseComponentType"/>
+ </xs:complexContent>
+ </xs:complexType>
+ <!-- 3.6.1 Event Component -->
+ <xs:complexType name="VeventType" mixed="false">
+ <xs:complexContent>
+ <xs:extension base="xcal:EventTodoComponentType"/>
+ </xs:complexContent>
+ </xs:complexType>
+ <xs:complexType name="EventTodoComponentType" mixed="false">
+ <xs:annotation>
+ <xs:documentation xml:lang="en">
+ Events and todos only contain alarms
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexContent>
+ <xs:extension base="xcal:VcalendarContainedComponentType">
+ <xs:sequence>
+ <xs:element name="components" type="xcal:ArrayOfEventTodoContainedComponents"/>
+ </xs:sequence>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ <xs:complexType name="ArrayOfEventTodoContainedComponents">
+ <xs:sequence>
+ <xs:choice minOccurs="0" maxOccurs="unbounded">
+ <xs:element ref="xcal:valarm"/>
+ </xs:choice>
+ </xs:sequence>
+ </xs:complexType>
+ <!-- 3.6.2 To-do Component -->
+ <xs:complexType name="VtodoType" mixed="false">
+ <xs:complexContent>
+ <xs:extension base="xcal:EventTodoComponentType"/>
+ </xs:complexContent>
+ </xs:complexType>
+ <!-- 3.6.3 Journal Component -->
+ <xs:complexType name="VjournalType" mixed="false">
+ <xs:annotation>
+ <xs:documentation xml:lang="en">
+ Journal components contain no other components
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexContent>
+ <xs:extension base="xcal:VcalendarContainedComponentType"/>
+ </xs:complexContent>
+ </xs:complexType>
+ <!-- 3.6.4 Free/Busy Component -->
+ <xs:complexType name="VfreebusyType" mixed="false">
+ <xs:annotation>
+ <xs:documentation xml:lang="en">
+ Freebusy components contain no other components
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexContent>
+ <xs:extension base="xcal:VcalendarContainedComponentType"/>
+ </xs:complexContent>
+ </xs:complexType>
+ <!-- 3.6.5 timezone -->
+ <xs:complexType name="VtimezoneType" mixed="false">
+ <xs:annotation>
+ <xs:documentation xml:lang="en">
+ Timezones only contain daylight and standard
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexContent>
+ <xs:extension base="xcal:VcalendarContainedComponentType">
+ <xs:sequence>
+ <xs:element name="components" type="xcal:ArrayOfTimezoneContainedComponents"/>
+ </xs:sequence>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ <xs:complexType name="ArrayOfTimezoneContainedComponents">
+ <xs:sequence>
+ <xs:choice minOccurs="0" maxOccurs="unbounded">
+ <xs:element ref="xcal:standard"/>
+ <xs:element ref="xcal:daylight"/>
+ </xs:choice>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="StandardType" mixed="false">
+ <xs:annotation>
+ <xs:documentation xml:lang="en">
+ Standard components contain no other components
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexContent>
+ <xs:extension base="xcal:BaseComponentType"/>
+ </xs:complexContent>
+ </xs:complexType>
+ <xs:complexType name="DaylightType" mixed="false">
+ <xs:annotation>
+ <xs:documentation xml:lang="en">
+ Daylight components contain no other components
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexContent>
+ <xs:extension base="xcal:BaseComponentType"/>
+ </xs:complexContent>
+ </xs:complexType>
+ <!-- 3.6.6 Alarm Component -->
+ <xs:complexType name="ValarmType" mixed="false">
+ <xs:complexContent>
+ <xs:extension base="xcal:AlarmComponentType"/>
+ </xs:complexContent>
+ </xs:complexType>
+ <xs:complexType name="AlarmComponentType" mixed="false">
+ <xs:annotation>
+ <xs:documentation xml:lang="en">
+ Alarms contain no components
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexContent>
+ <xs:extension base="xcal:BaseComponentType"/>
+ </xs:complexContent>
+ </xs:complexType>
+</xs:schema>
More information about the commits
mailing list