david: doc/kolab-formats/validation kolab-storage.rng, NONE, 1.1 kolablint, NONE, 1.1 runtests.sh, NONE, 1.1
cvs at intevation.de
cvs at intevation.de
Tue Jun 15 23:11:31 CEST 2004
- Previous message: david: doc/kolab-formats/validation/tests - New directory
- Next message: david: doc/kolab-formats/validation/tests contact1.xml, NONE, 1.1 event1.xml, NONE, 1.1 event2.xml, NONE, 1.1 event3.xml, NONE, 1.1 event4.xml, NONE, 1.1 event5.xml, NONE, 1.1 event6.xml, NONE, 1.1 event7.xml, NONE, 1.1 journal1.xml, NONE, 1.1 note1.xml, NONE, 1.1 task1.xml, NONE, 1.1
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
Author: david
Update of /kolabrepository/doc/kolab-formats/validation
In directory doto:/tmp/cvs-serv28132
Added Files:
kolab-storage.rng kolablint runtests.sh
Log Message:
Complete RelaxNG schema for the kolab storage format (pending a few answers on the list).
kolablint script to check an xml file against the schema (see inside the script for dependencies)
Small testsuite.
--- NEW FILE: kolab-storage.rng ---
<?xml version="1.0" encoding="UTF-8"?>
<!--
Kolab Storage Specification 1.0
Draft 1, 15 Jun 2004
Relax-NG Schema
$Id: kolab-storage.rng,v 1.1 2004/06/15 21:11:29 david Exp $
© 2004 Klaralvdalens-Datakonsult AB
-->
<grammar
xmlns="http://relaxng.org/ns/structure/1.0"
xmlns:a="http://relaxng.org/ns/compatibility/annotations/1.0"
datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"
>
<start>
<choice>
<ref name="event"/>
<ref name="journal"/>
<ref name="task"/>
<ref name="note"/>
<ref name="contact"/>
</choice>
</start>
<define name="event">
<element name="event">
<interleave>
<ref name="common-in-all-types"/>
<ref name="common-in-tasks-and-events"/>
<ref name="event-fields"/>
</interleave>
</element>
</define>
<define name="journal">
<element name="journal">
<interleave>
<ref name="common-in-all-types"/>
<ref name="journal-fields"/>
</interleave>
</element>
</define>
<define name="task">
<element name="task">
<interleave>
<ref name="common-in-all-types"/>
<ref name="common-in-tasks-and-events"/>
<ref name="task-fields"/>
</interleave>
</element>
</define>
<define name="note">
<element name="note">
<interleave>
<ref name="common-in-all-types"/>
<ref name="note-fields"/>
</interleave>
</element>
</define>
<define name="contact">
<element name="contact">
<interleave>
<ref name="common-in-all-types"/>
<ref name="contact-fields"/>
</interleave>
</element>
</define>
<define name="common-in-all-types">
<interleave>
<optional>
<attribute name="version">
<ref name="string"/>
</attribute>
</optional>
<optional>
<element name="uid">
<ref name="string"/>
</element>
</optional>
<optional>
<element name="body">
<ref name="string"/>
</element>
</optional>
<optional>
<element name="categories">
<ref name="string"/>
</element>
</optional>
<element name="creation-date">
<ref name="dateTime"/>
</element>
<element name="last-modification-date">
<ref name="dateTime"/>
</element>
<optional>
<element name="sensitivity" a:defaultValue="public">
<choice>
<value>private</value>
<value>confidential</value>
<value>public</value>
</choice>
</element>
</optional>
</interleave>
</define>
<define name="common-in-tasks-and-events">
<interleave>
<optional>
<element name="summary">
<ref name="string"/>
</element>
</optional>
<optional>
<element name="location">
<ref name="string"/>
</element>
</optional>
<optional>
<element name="organizer">
<ref name="name-and-email"/>
</element>
</optional>
<optional>
<element name="start-date">
<ref name="dateOrDateTime"/>
</element>
</optional>
<optional>
<element name="alarm">
<ref name="number"/>
</element>
</optional>
<optional>
<ref name="recurrence"/>
</optional>
<zeroOrMore>
<ref name="attendee"/>
</zeroOrMore>
</interleave>
</define>
<define name="recurrence">
<choice>
<element name="recurrence">
<attribute name="cycle">
<a:documentation>every X days</a:documentation>
<value>daily</value>
</attribute>
<ref name="recurrence-common"/>
</element>
<element name="recurrence">
<attribute name="cycle">
<a:documentation>every X weeks, on given week day(s)</a:documentation>
<value>weekly</value>
</attribute>
<interleave>
<ref name="recurrence-common"/>
<a:documentation>oneOrMore: more precisely 1 to 7</a:documentation>
<oneOrMore>
<ref name="recurrence-day"/>
</oneOrMore>
</interleave>
</element>
<element name="recurrence">
<interleave>
<attribute name="cycle">
<a:documentation>every X months, on a given date, e.g. 12</a:documentation>
<value>monthly</value>
</attribute>
<attribute name="type">
<value>daynumber</value>
</attribute>
</interleave>
<interleave>
<ref name="recurrence-common"/>
<ref name="recurrence-date"/>
</interleave>
</element>
<element name="recurrence">
<interleave>
<attribute name="cycle">
<a:documentation>every X months, e.g. third monday</a:documentation>
<value>monthly</value>
</attribute>
<attribute name="type">
<value>weekday</value>
</attribute>
</interleave>
<interleave>
<ref name="recurrence-common"/>
<ref name="recurrence-day"/>
<ref name="recurrence-daynumber"/>
</interleave>
</element>
<element name="recurrence">
<interleave>
<attribute name="cycle">
<a:documentation>every X years, on given month day</a:documentation>
<value>yearly</value>
</attribute>
<attribute name="type">
<value>monthday</value>
</attribute>
</interleave>
<interleave>
<ref name="recurrence-common"/>
<ref name="recurrence-date"/>
<ref name="recurrence-month"/>
</interleave>
</element>
<element name="recurrence">
<interleave>
<attribute name="cycle">
<a:documentation>every X years, on given year day</a:documentation>
<value>yearly</value>
</attribute>
<attribute name="type">
<value>yearday</value>
</attribute>
</interleave>
<interleave>
<ref name="recurrence-common"/>
<ref name="recurrence-daynumber"/>
</interleave>
</element>
</choice>
</define>
<define name="recurrence-common">
<interleave>
<optional>
<element name="interval" a:defaultValue="1">
<ref name="number"/>
</element>
</optional>
<ref name="range"/>
<zeroOrMore>
<element name="exception">
<ref name="date"/>
</element>
</zeroOrMore>
</interleave>
</define>
<define name="recurrence-day">
<element name="day">
<choice>
<value>monday</value>
<value>tuesday</value>
<value>wednesday</value>
<value>thursday</value>
<value>friday</value>
<value>saturday</value>
<value>sunday</value>
</choice>
</element>
</define>
<define name="recurrence-date">
<element name="date">
<ref name="number"/>
</element>
</define>
<define name="recurrence-daynumber">
<element name="daynumber">
<ref name="number"/>
</element>
</define>
<define name="recurrence-month">
<element name="month">
<ref name="number"/>
</element>
</define>
<define name="range">
<choice>
<element name="range">
<attribute name="type">
<a:documentation>never ending recurrence</a:documentation>
<value>none</value>
</attribute>
</element>
<element name="range">
<attribute name="type">
<a:documentation>recurrence happens a given number of times</a:documentation>
<value>number</value>
</attribute>
<ref name="number"/>
</element>
<element name="range">
<attribute name="type">
<a:documentation>recurrence happens until given date</a:documentation>
<value>date</value>
</attribute>
<ref name="date"/>
</element>
</choice>
</define>
<define name="attendee">
<element name="attendee">
<interleave>
<optional>
<element name="display-name">
<ref name="string"/>
</element>
</optional>
<optional>
<element name="email">
<ref name="string"/>
</element>
</optional>
<optional>
<element name="status" a:defaultValue="none">
<choice>
<value>none</value>
<value>tentative</value>
<value>accepted</value>
<value>declined</value>
</choice>
</element>
</optional>
<optional>
<element name="request-response" a:defaultValue="true">
<ref name="boolean"/>
</element>
</optional>
<optional>
<element name="invitation-sent" a:defaultValue="false">
<ref name="boolean"/>
</element>
</optional>
<optional>
<element name="role" a:defaultValue="required">
<choice>
<value>required</value>
<value>optional</value>
<value>resource</value>
</choice>
</element>
</optional>
</interleave>
</element>
</define>
<define name="note-fields">
<interleave>
<optional>
<element name="summary">
<ref name="string"/>
</element>
</optional>
<optional>
<element name="background-color" a:defaultValue="#000000">
<ref name="color"/>
</element>
</optional>
<optional>
<element name="foreground-color" a:defaultValue="#ffff00">
<ref name="color"/>
</element>
</optional>
</interleave>
</define>
<define name="contact-fields">
<interleave>
<optional>
<element name="name">
<interleave>
<optional>
<element name="given-name">
<ref name="string"/>
</element>
</optional>
<optional>
<element name="middle-names">
<ref name="string"/>
</element>
</optional>
<optional>
<element name="last-name">
<ref name="string"/>
</element>
</optional>
<optional>
<element name="full-name">
<ref name="string"/>
</element>
</optional>
<optional>
<element name="initials">
<ref name="string"/>
</element>
</optional>
<optional>
<element name="prefix">
<ref name="string"/>
</element>
</optional>
<optional>
<element name="suffix">
<ref name="string"/>
</element>
</optional>
</interleave>
</element>
</optional>
<optional>
<element name="role">
<ref name="string"/>
</element>
</optional>
<optional>
<element name="free-busy-url">
<ref name="string"/>
</element>
</optional>
<optional>
<element name="organization">
<ref name="string"/>
</element>
</optional>
<optional>
<element name="web-page">
<ref name="string"/>
</element>
</optional>
<optional>
<element name="im-address">
<ref name="string"/>
</element>
</optional>
<optional>
<element name="department">
<ref name="string"/>
</element>
</optional>
<optional>
<element name="office-location">
<ref name="string"/>
</element>
</optional>
<optional>
<element name="profession">
<ref name="string"/>
</element>
</optional>
<optional>
<element name="job-title">
<ref name="string"/>
</element>
</optional>
<optional>
<element name="manager-name">
<ref name="string"/>
</element>
</optional>
<optional>
<element name="assistant">
<ref name="string"/>
</element>
</optional>
<optional>
<element name="nick-name">
<ref name="string"/>
</element>
</optional>
<optional>
<element name="spouse-name">
<ref name="string"/>
</element>
</optional>
<optional>
<element name="birthday">
<ref name="string"/>
</element>
</optional>
<optional>
<element name="anniversary">
<ref name="string"/>
</element>
</optional>
<optional>
<element name="picture">
<ref name="string"/>
</element>
</optional>
<optional>
<element name="children">
<ref name="string"/>
</element>
</optional>
<optional>
<element name="gender">
<ref name="string"/>
</element>
</optional>
<optional>
<element name="language">
<ref name="string"/>
</element>
</optional>
<zeroOrMore>
<ref name="phone"/>
</zeroOrMore>
<zeroOrMore>
<ref name="email"/>
</zeroOrMore>
<zeroOrMore>
<element name="address">
<ref name="address-fields"/>
</element>
</zeroOrMore>
<optional>
<element name="preferred-address">
<ref name="address-fields"/>
</element>
</optional>
</interleave>
</define>
<define name="phone">
<element name="phone">
<interleave>
<element name="type">
<choice>
<value>business1</value>
<value>business2</value>
<value>businessfax</value>
<value>callback</value>
<value>car</value>
<value>company</value>
<value>home1</value>
<value>home2</value>
<value>homefax</value>
<value>isdn</value>
<value>mobile</value>
<value>pager</value>
<value>primary</value>
<value>radio</value>
<value>telex</value>
<value>ttytdd</value>
<value>assistant</value>
<value>other</value>
</choice>
</element>
<element name="number">
<ref name="string"/>
</element>
</interleave>
</element>
</define>
<define name="email">
<element name="email">
<ref name="name-and-email"/>
</element>
</define>
<define name="address-fields">
<interleave>
<optional>
<element name="type" a:defaultValue="home">
<choice>
<value>home</value>
<value>business</value>
<value>other</value>
</choice>
</element>
</optional>
<optional>
<element name="street">
<ref name="string"/>
</element>
</optional>
<optional>
<element name="city">
<ref name="string"/>
</element>
</optional>
<optional>
<element name="state">
<ref name="string"/>
</element>
</optional>
<optional>
<element name="zip">
<ref name="string"/>
</element>
</optional>
<optional>
<element name="country">
<ref name="string"/>
</element>
</optional>
</interleave>
</define>
<define name="journal-fields">
<interleave>
<optional>
<element name="summary">
<ref name="string"/>
</element>
</optional>
<optional>
<element name="start-date">
<ref name="dateTime"/>
</element>
</optional>
<optional>
<element name="end-date">
<ref name="dateTime"/>
</element>
</optional>
<zeroOrMore>
<element name="contact">
<ref name="name-and-email"/>
</element>
</zeroOrMore>
</interleave>
</define>
<define name="name-and-email">
<interleave>
<optional>
<element name="display-name">
<ref name="string"/>
</element>
</optional>
<optional>
<element name="email">
<ref name="string"/>
</element>
</optional>
</interleave>
</define>
<define name="event-fields">
<interleave>
<optional>
<element name="show-time-as" a:defaultValue="busy">
<choice>
<value>free</value>
<value>tentative</value>
<value>busy</value>
<value>outofoffice</value>
</choice>
</element>
</optional>
<optional>
<element name="color-label">
<ref name="string"/><!-- TODO -->
</element>
</optional>
<optional>
<element name="end-date">
<ref name="dateOrDateTime"/>
</element>
</optional>
</interleave>
</define>
<define name="task-fields">
<interleave>
<optional>
<element name="priority" a:defaultValue="3">
<data type="integer">
<param name="minInclusive">1</param>
<param name="maxInclusive">5</param>
</data>
</element>
</optional>
<optional>
<element name="completed" a:defaultValue="0">
<data type="integer">
<param name="minInclusive">0</param>
<param name="maxInclusive">100</param>
</data>
</element>
</optional>
<optional>
<element name="status" a:defaultValue="not-started">
<choice>
<value>not-started</value>
<value>in-progress</value>
<value>completed</value>
<value>waiting-on-someone-else</value>
<value>deferred</value>
</choice>
</element>
</optional>
<optional>
<element name="due-date">
<ref name="dateOrDateTime"/>
</element>
</optional>
<optional>
<element name="parent">
<ref name="string"/>
</element>
</optional>
</interleave>
</define>
<!-- The data types -->
<define name="string">
<data type="string"/>
</define>
<define name="number">
<data type="integer"/>
</define>
<define name="date">
<data type="date"/>
</define>
<define name="boolean">
<data type="boolean"/>
</define>
<define name="dateTime">
<data type="dateTime"/>
</define>
<define name="color">
<data type="string">
<param name="pattern">#[0-9a-fA-F]{6}</param>
</data>
</define>
<define name="dateOrDateTime">
<choice>
<data type="date"/>
<data type="dateTime"/>
</choice>
</define>
</grammar>
<!-- This is for emacs to help indenting.
Local variables:
mode: xml
sgml-indent-data:t
End:
-->
--- NEW FILE: kolablint ---
#!/bin/sh
# This script validates an xml file against the kolab-storage RelaxNG schema.
#
# Requirements:
# * jing is a java tool for checking XML files against a RelaxNG schema.
# You can get it from http://www.thaiopensource.com/relaxng/jing.html.
# Then make a symlink called "jing.jar" in the current directory.
#
# * Unless you're using the gcj-compiled version of jing, you need a Java Runtime Environment.
# Jing recommends using JRE 1.4, which can be downloaded from from java.sun.com
# Ensure that the right 'java' executable is in your PATH.
#
# David Faure <faure at kde.org>. GPL v2.
#
java -jar jing.jar -i kolab-storage.rng $*
--- NEW FILE: runtests.sh ---
#!/bin/sh
for i in tests/*.xml; do
echo "Checking $i..."
./kolablint $i
done
echo "Done."
- Previous message: david: doc/kolab-formats/validation/tests - New directory
- Next message: david: doc/kolab-formats/validation/tests contact1.xml, NONE, 1.1 event1.xml, NONE, 1.1 event2.xml, NONE, 1.1 event3.xml, NONE, 1.1 event4.xml, NONE, 1.1 event5.xml, NONE, 1.1 event6.xml, NONE, 1.1 event7.xml, NONE, 1.1 journal1.xml, NONE, 1.1 note1.xml, NONE, 1.1 task1.xml, NONE, 1.1
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
More information about the commits
mailing list