Introduce XSD support
authorMathieu Baudier <mbaudier@argeo.org>
Tue, 31 May 2022 08:49:54 +0000 (10:49 +0200)
committerMathieu Baudier <mbaudier@argeo.org>
Tue, 31 May 2022 08:49:54 +0000 (10:49 +0200)
org.argeo.app.core/OSGI-INF/maintenanceService.xml
org.argeo.app.core/src/org/argeo/app/core/SuiteContentTypes.java [new file with mode: 0644]
org.argeo.app.core/src/org/argeo/app/core/SuiteMaintenanceService.java
org.argeo.app.core/src/org/argeo/app/core/schemas/fop.xsd [new file with mode: 0644]
org.argeo.app.core/src/org/argeo/app/core/schemas/xCal-2.0-RFC6321.rnc [new file with mode: 0644]
org.argeo.app.core/src/org/argeo/app/core/schemas/xCal-2.0.rnc [new file with mode: 0644]
org.argeo.app.core/src/org/argeo/app/core/schemas/xCal-2.0.xsd [new file with mode: 0644]
org.argeo.app.core/src/org/argeo/app/core/schemas/xCard-4.0-RFC6351.rnc [new file with mode: 0644]
org.argeo.app.core/src/org/argeo/app/core/schemas/xCard-4.0.rnc [new file with mode: 0644]
org.argeo.app.core/src/org/argeo/app/core/schemas/xCard-4.0.xsd [new file with mode: 0644]

index b88d68c967040bd5f825b8a525f10e81504662c7..7ebc97b69db17de76f5ddfc5c0a889999a98ec8a 100644 (file)
@@ -4,4 +4,5 @@
    <reference bind="setRepository" cardinality="1..1" interface="javax.jcr.Repository" name="Repository" policy="static" target="(cn=entity)"/>
    <reference bind="setUserTransaction" cardinality="1..1" interface="org.argeo.osgi.transaction.WorkTransaction" name="WorkTransaction" policy="static"/>
    <reference bind="setUserAdmin" cardinality="1..1" interface="org.osgi.service.useradmin.UserAdmin" name="UserAdmin" policy="static"/>
+   <reference bind="setContentRepository" cardinality="1..1" interface="org.argeo.api.acr.spi.ProvidedRepository" name="ProvidedRepository" policy="static"/>
 </scr:component>
diff --git a/org.argeo.app.core/src/org/argeo/app/core/SuiteContentTypes.java b/org.argeo.app.core/src/org/argeo/app/core/SuiteContentTypes.java
new file mode 100644 (file)
index 0000000..3c8b5d8
--- /dev/null
@@ -0,0 +1,56 @@
+package org.argeo.app.core;
+
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.util.Objects;
+
+public enum SuiteContentTypes {
+       //
+       XCARD_4_0("xcard", "urn:ietf:params:xml:ns:vcard-4.0", "xCard-4.0.xsd", null),
+       //
+       XSL_FO_1999("fo", "http://www.w3.org/1999/XSL/Format", "fop.xsd",
+                       "https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk/fop/src/foschema/fop.xsd"),
+       //
+//     XCAL_2_0("xcal", "urn:ietf:params:xml:ns:icalendar-2.0", "xCal-2.0.xsd", null),
+       //
+       ;
+
+       private final static String RESOURCE_BASE = "/org/argeo/app/core/schemas/";
+
+       private String defaultPrefix;
+       private String namespace;
+       private URL resource;
+       private URL publicUrl;
+
+       SuiteContentTypes(String defaultPrefix, String namespace, String resourceFileName, String publicUrl) {
+               Objects.requireNonNull(namespace);
+               this.defaultPrefix = defaultPrefix;
+               Objects.requireNonNull(namespace);
+               this.namespace = namespace;
+               resource = getClass().getResource(RESOURCE_BASE + resourceFileName);
+               Objects.requireNonNull(resource);
+               if (publicUrl != null)
+                       try {
+                               this.publicUrl = new URL(publicUrl);
+                       } catch (MalformedURLException e) {
+                               throw new IllegalArgumentException("Cannot interpret public URL", e);
+                       }
+       }
+
+       public String getDefaultPrefix() {
+               return defaultPrefix;
+       }
+
+       public String getNamespace() {
+               return namespace;
+       }
+
+       public URL getResource() {
+               return resource;
+       }
+
+       public URL getPublicUrl() {
+               return publicUrl;
+       }
+
+}
index 532b7dd511f45b2bad990446079c148e5944ab5e..ce90a873b0f9ff20210bb613fefe983c810d3803 100644 (file)
@@ -8,6 +8,7 @@ import javax.jcr.Session;
 import javax.jcr.nodetype.NodeType;
 import javax.jcr.security.Privilege;
 
+import org.argeo.api.acr.spi.ProvidedRepository;
 import org.argeo.api.cms.CmsConstants;
 import org.argeo.app.api.EntityType;
 import org.argeo.jcr.JcrUtils;
@@ -15,6 +16,17 @@ import org.argeo.maintenance.AbstractMaintenanceService;
 
 /** Initialises an Argeo Suite backend. */
 public class SuiteMaintenanceService extends AbstractMaintenanceService {
+       private ProvidedRepository contentRepository;
+
+       @Override
+       public void init() {
+               super.init();
+
+               for (SuiteContentTypes types : SuiteContentTypes.values()) {
+                       contentRepository.registerTypes(types.getDefaultPrefix(), types.getNamespace(),
+                                       types.getResource().toExternalForm());
+               }
+       }
 
        @Override
        public boolean prepareJcrTree(Session adminSession) throws RepositoryException, IOException {
@@ -33,7 +45,12 @@ public class SuiteMaintenanceService extends AbstractMaintenanceService {
        public void configurePrivileges(Session adminSession) throws RepositoryException {
                JcrUtils.addPrivilege(adminSession, EntityType.user.basePath(), CmsConstants.ROLE_USER_ADMIN,
                                Privilege.JCR_ALL);
-               //JcrUtils.addPrivilege(adminSession, "/", SuiteRole.coworker.dn(), Privilege.JCR_READ);
+               // JcrUtils.addPrivilege(adminSession, "/", SuiteRole.coworker.dn(),
+               // Privilege.JCR_READ);
+       }
+
+       public void setContentRepository(ProvidedRepository contentRepository) {
+               this.contentRepository = contentRepository;
        }
 
 }
diff --git a/org.argeo.app.core/src/org/argeo/app/core/schemas/fop.xsd b/org.argeo.app.core/src/org/argeo/app/core/schemas/fop.xsd
new file mode 100644 (file)
index 0000000..a787bf3
--- /dev/null
@@ -0,0 +1,4313 @@
+<?xml version = "1.0" encoding = "UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You under the Apache License, Version 2.0
+  (the "License"); you may not use this file except in compliance with
+  the License.  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+-->
+<!-- $Id$ -->
+<schema xmlns = "http://www.w3.org/2001/XMLSchema" targetNamespace = "http://www.w3.org/1999/XSL/Format"  xmlns:fo = "http://www.w3.org/1999/XSL/Format" xmlns:xs = "http://www.w3.org/2001/XMLSchema" elementFormDefault = "qualified">
+
+  <annotation>
+    <documentation> 
+
+      I'm not sure where to place this.
+      It applies to the page context (NOT implemented)
+      <attribute name = "size"  type = "size_Type"/>
+      
+      I have not coded for the functions described in 5.10 Core Function Library
+      They need to be segregated into groups and then inserted in the types
+      
+      common_functions
+      object  inherited-property-value(NCName) 
+      object  from-parent( NCName) 
+      object  from-nearest-specified-value( NCName) 
+      object  merge-property-values( NCName) 
+      
+      font_functions
+      object  system-font( NCName , NCName) 
+      
+      length_functions
+      numeric floor( numeric) 
+      numeric ceiling(numeric) 
+      numeric round(numeric) 
+      numeric min( numeric , numeric) 
+      numeric max(numeric , numeric) 
+      numeric abs( numeric)
+      
+      table_cell_or_descendants_functions
+      object  from-table-column( NCName) 
+
+      color_functions
+      color rgb(numeric , numeric , numeric) 
+      color rgb-icc(numeric , numeric , numeric , NCName , numeric , numeric) 
+      color system-color( NCName) 
+
+      label_functions
+      numeric body-start() 
+      numeric label-end() 
+      
+      (defined)
+      table-column_functions
+      numeric proportional-column-width( numeric) 
+      
+      This schema has been developed in order to validate XSL FO documents for FOP
+      All of the elements need to be prefixed with fo:
+      The namespace prefix is xmlns:fo = "http://www.w3.org/1999/XSL/Format".
+
+      This schema, as delivered, may either validate the full spec, or, just the FOP portion. 
+      (What it validates depends upon what I was doing with it when released.)
+      
+      If you want to restrict it to just those elements and attributes implemented by FOP, 
+      you need to edit the <group xmlns=""/> and <attributeGroup xmlns=""/> tags to exclude the groups ending with _Not
+
+      Some schema tools complain about the placement of comments in this schema and will remove or reorder them
+      There are fop_result and fop_fail comments on specific features not implemented by FOP
+
+      FOP does not enforce the following schema requirements
+
+      fo:simple-page-master model = "(region-body,region-before?,region-after?,region-start?,region-end?)"
+      elements can be in any order
+
+      fo:table-cell model = "(%block;)+"
+      Can be empty
+
+      fo:flow model = "(%block;)+"
+      Can be empty
+
+      This schema allows the length attribute to be negative for some elements like margins.
+      There may be instances where I've entered %integer_Type; and it should be positive-integer or number
+      The schema trys to handle the text based rules re: fo:markers, fo:float, footer and fo:initial-property-set
+      But, allows you to do illegal things if you want because I couldn't figure out how to constrain against the illegal actions.
+
+      Please e-mail your comments to cpaussa@myrealbox.com
+
+      Contribution by Oleg Tkachenko 
+      (Declarations able to include non-xsl children)
+      <xs:any minOccurs = "0" maxOccurs = "unbounded" namespace = "##other" processContents = "skip"/>
+      This declaration assumes that all <fo:color-profile/> elements must come before other stuff, 
+      which is not required by spec, but I cannot see any way to express such constraints in schema, 
+      one could use <xs:choice/> instead of <xs:sequence/>, but this way we lose control over (color-profile)+ constraint.
+      
+      VCP 21-Oct-2002 
+        Updated all (px|pt|mm|cm|in|em) to (px|pt|mm|cm|in|em|%) to allow percentage types.
+        Updated the restriction base of those types from NMTOKEN to string
+
+    </documentation>
+  </annotation>
+
+  <group name = "initial_property_set_List_Not">
+    <choice>
+      <element ref = "fo:initial-property-set"/>
+    </choice>
+  </group>
+  
+  <annotation>
+    <documentation>
+      empty group so cannot be defined
+      <group name = "initial_property_set_List_FOP">
+        <choice/>
+      </group>
+    </documentation>
+  </annotation>
+  
+  <group name = "initial_property_set_List">
+    <annotation>
+      <documentation>
+        <choice>
+          <group ref = "fo:initial_property_set_List_FOP"/>
+        </choice>
+      </documentation>
+    </annotation>
+    <choice>
+      <group ref = "fo:initial_property_set_List_Not"/>
+    </choice>
+  </group>
+  <group name = "marker_List">
+    <choice>
+      <element ref = "fo:marker"/>
+    </choice>
+  </group>
+  <group name = "inline_List_FOP">
+    <choice>
+      <element ref = "fo:character"/>
+      <element ref = "fo:external-graphic"/>
+      <element ref = "fo:instream-foreign-object"/>
+      <element ref = "fo:inline"/>
+      <element ref = "fo:leader"/>
+      <element ref = "fo:page-number"/>
+      <element ref = "fo:page-number-citation"/>
+      <element ref = "fo:basic-link"/>
+    </choice>
+  </group>
+  <group name = "inline_List_Not">
+    <choice>
+      <element ref = "fo:bidi-override"/>
+      <element ref = "fo:inline-container"/>
+      <element ref = "fo:multi-toggle"/>
+    </choice>
+  </group>
+  <group name = "inline_List">
+    <choice>
+      <group ref = "fo:inline_List_FOP"/>
+      <group ref = "fo:inline_List_Not"/>
+    </choice>
+  </group>
+  <group name = "block_List_FOP">
+    <choice>
+      <element ref = "fo:block"/>
+      <element ref = "fo:block-container"/>
+      <element ref = "fo:table"/>
+      <element ref = "fo:list-block"/>
+    </choice>
+  </group>
+  <group name = "block_List_Not">
+    <choice>
+      <element ref = "fo:table-and-caption"/>
+    </choice>
+  </group>
+  <group name = "block_List">
+    <choice>
+      <group ref = "fo:block_List_FOP"/>
+      <group ref = "fo:block_List_Not"/>
+    </choice>
+  </group>
+  <group name = "neutral_List_FOP">
+    <choice>
+      <element ref = "fo:wrapper"/>
+      <element ref = "fo:retrieve-marker"/>
+    </choice>
+  </group>
+  <group name = "neutral_List_Not">
+    <choice>
+      <element ref = "fo:multi-switch"/>
+      <element ref = "fo:multi-properties"/>
+    </choice>
+  </group>
+  <group name = "neutral_List">
+    <choice>
+      <group ref = "fo:neutral_List_FOP"/>
+      <group ref = "fo:neutral_List_Not"/>
+    </choice>
+  </group>
+  <annotation>
+    <documentation>
+      empty group so cannot be defined
+      <group name = "float_List_FOP">
+        <choice/>
+      </group>
+    </documentation>
+  </annotation>
+  <group name = "float_List_Not">
+    <choice>
+      <element ref = "fo:float"/>
+    </choice>
+  </group>
+  <group name = "float_List">
+    <annotation>
+      <documentation>
+        empty group
+        <choice>
+          <group ref = "fo:float_List_FOP"/>
+        </choice>
+      </documentation>
+    </annotation>
+    <choice>
+      <group ref = "fo:float_List_Not"/>
+    </choice>
+  </group>
+  <group name = "footnote_List">
+    <choice>
+      <element ref = "fo:footnote"/>
+    </choice>
+  </group>
+
+  <attributeGroup name = "block_properties_Not">
+    <attribute name = "page-break-after"  type = "fo:page_break_after_Type"/>
+    <attribute name = "page-break-before" type = "fo:page_break_after_Type"/>
+  </attributeGroup>
+  <attributeGroup name = "block_properties_FOP">
+  </attributeGroup>
+  <attributeGroup name = "block_properties">
+    <attributeGroup ref = "fo:block_properties_FOP"/>
+    <attributeGroup ref = "fo:block_properties_Not"/>
+  </attributeGroup>
+
+  <attributeGroup name = "list_properties_Not">
+    <attribute name = "page-break-after"  type = "fo:page_break_after_Type"/>
+    <attribute name = "page-break-before" type = "fo:page_break_after_Type"/>
+    <attribute name = "background-position" type = "fo:background_position_Type"/>
+  </attributeGroup>
+  <attributeGroup name = "list_properties_FOP">
+  </attributeGroup>
+  <attributeGroup name = "list_properties">
+    <attributeGroup ref = "fo:list_properties_FOP"/>
+    <attributeGroup ref = "fo:list_properties_Not"/>
+  </attributeGroup>
+
+  <attributeGroup name = "inheritable_properties_List_Not">
+    <attribute name = "auto-restore" type = "fo:auto_restore_Type"/>
+    <attribute name = "background"    type = "fo:background_Type"   /> 
+    <attribute name = "border-spacing" type = "fo:length_Type"/>
+    <attribute name = "caption-side" type = "fo:caption_side_Type"/>
+    <attribute name = "direction" type = "fo:direction_Type"/>
+    <attribute name = "empty-cells" type = "fo:empty_cells_Type"/>
+    <attribute name = "font" type = "xs:string"/>
+    <attribute name = "font-selection-strategy" type = "fo:font_selection_strategy_Type"/>
+    <attribute name = "font-size-adjust" type = "fo:font_size_adjust_Type"/>
+    <attribute name = "font-stretch" type = "xs:string"/>
+    <attribute name = "font-variant" type = "fo:font_variant_Type"/>
+    <attribute name = "glyph-orientation-vertical" type = "fo:orientation_Type"/>
+    <attribute name = "glyph-orientation-horizontal" type = "fo:orientation_Type"/>
+    <attribute name = "hyphenation-keep" type = "fo:hyphenation_keep_Type"/>
+    <attribute name = "hyphenation-ladder-count" type = "fo:hyphenation_ladder_count_Type"/>
+    <attribute name = "intrusion-displace" type = "fo:displace_Type"/>
+    <attribute name = "last-line-end-indent" type = "fo:last_line_end_indent_Type"/>
+    <attribute name = "line-height-shift-adjustment" type = "fo:line_height_shift_adjustment_Type"/>
+    <attribute name = "line-stacking-strategy" type = "fo:line_stacking_strategy_Type"/>
+    <attribute name = "linefeed-treatment" type = "fo:linefeed_treatment_Type"/>
+    <attribute name = "margin"        type = "fo:border_margin_width_Type"       /> 
+    <attribute name = "max-width"     type = "fo:max_width_Type"/>
+    <attribute name = "min-height"    type = "fo:start_indent_Type"/>
+    <attribute name = "min-width"     type = "fo:start_indent_Type"/>
+    <attribute name = "page-break-inside" type = "fo:page_break_inside_Type"/>
+    <attribute name = "reference-orientation" type = "fo:orientation_Type"/>
+    <attribute name = "score-spaces" type = "fo:score_spaces_Type"/>
+    <attribute name = "script" type = "xs:string"/>
+    <attribute name = "text-transform" type = "fo:text_transform_Type"/>
+    <attribute name = "visibility" type = "fo:visibility_Type"/>
+    <attribute name = "white-space" type = "fo:white_space_Type"/>
+    <attribute name = "white-space-treatment" type = "fo:white_space_treatment_Type"/>
+    <attribute name = "word-spacing" type = "fo:letter_spacing_Type"/>
+    <attribute name = "writing-mode" type = "fo:writing_mode_Type"/>
+  </attributeGroup>
+
+
+  <attributeGroup name = "inheritable_properties_List_FOP">
+    <annotation>
+      <documentation>
+        Removed because I'm not sure how to handle this<attribute xmlns="" name = "xml:lang" type = "xs:string"/> 
+      </documentation>
+    </annotation>
+    <attribute name = "border-bottom" type = "fo:border_side_Type"/> 
+    <attribute name = "border-collapse" type = "fo:border_collapse_Type"/>
+    <attribute name = "border-color"  type = "fo:border_color_Type" /> 
+    <attribute name = "border-left"   type = "fo:border_side_Type"  /> 
+    <attribute name = "border-right"  type = "fo:border_side_Type" /> 
+    <attribute name = "border-separation" type = "fo:length_bp_ip_direction_Type"/>
+    <attribute name = "border-style"  type = "fo:border_multi_style_Type" /> 
+    <attribute name = "border-top"    type = "fo:border_side_Type"   /> 
+    <attribute name = "border-width"  type = "fo:border_margin_width_Type" /> 
+    <attribute name = "color" type = "fo:color_Type"/>
+    <attribute name = "country" type = "fo:country_Type"/>
+    <attribute name = "display-align" type = "fo:display_align_Type"/>
+    <attribute name = "end-indent" type = "fo:end_indent_Type"/>
+    <attribute name = "font-family" type = "fo:family_name_Type"/>
+    <attribute name = "font-size" type = "fo:font_size_Type"/>
+    <attribute name = "font-style" type = "fo:font_style_Type"/>
+    <attribute name = "font-weight" type = "fo:font_weight_Type"/>
+    <attribute name = "hyphenate" type = "fo:hyphenate_Type"/>
+    <attribute name = "hyphenation-character" type = "fo:hyphenation_character_Type"/>
+    <attribute name = "hyphenation-push-character-count" type = "fo:integer_Type"/>
+    <attribute name = "hyphenation-remain-character-count" type = "fo:integer_Type"/>
+    <attribute name = "keep-together" type = "fo:keep_compound_Type"/>
+    <attribute name = "keep-together.within-column" type = "fo:keep_integer_Type"/>
+    <attribute name = "keep-together.within-line" type = "fo:keep_integer_Type"/>
+    <attribute name = "keep-together.within-page" type = "fo:keep_integer_Type"/>
+    <attribute name = "language" type = "fo:language_Type"/>
+    <attribute name = "leader-alignment" type = "fo:leader_alignment_Type"/>
+    <attribute name = "leader-length" type = "fo:leader_length_Type"/>
+    <attribute name = "leader-length.maximum" type = "fo:length_Type"/>
+    <attribute name = "leader-length.minimum" type = "fo:length_Type"/>
+    <attribute name = "leader-length.optimum" type = "fo:length_Type"/>
+    <attribute name = "leader-pattern" type = "fo:leader_pattern_Type"/>
+    <attribute name = "leader-pattern-width" type = "fo:leader_pattern_width_Type"/>
+    <attribute name = "letter-spacing" type = "fo:letter_spacing_Type"/>
+    <attribute name = "line-height" type = "fo:line_height_Type"/>
+    <attribute name = "orphans" type = "fo:orphans_Type"/>
+    <attribute name = "position" type = "fo:position_Type"/>
+    <attribute name = "provisional-distance-between-starts" type = "fo:provisional_distance_between_starts_Type"/>
+    <attribute name = "provisional-label-separation" type = "fo:provisional_label_separation_Type"/>
+    <attribute name = "relative-align" type = "fo:relative_align_Type"/>
+    <attribute name = "rule-style" type = "fo:rule_style_Type"/>
+    <attribute name = "rule-thickness" type = "fo:length_Type"/>
+    <attribute name = "start-indent" type = "fo:start_indent_Type"/>
+    <attribute name = "text-align" type = "fo:text_align_Type"/>
+    <attribute name = "text-align-last" type = "fo:text_align_last_Type"/>
+    <attribute name = "text-indent" type = "fo:length_percentage_Type"/>
+    <attribute name = "white-space-collapse" type = "fo:white_space_collapse_Type"/>
+    <attribute name = "widows" type = "fo:widows_Type"/>
+    <attribute name = "wrap-option" type = "fo:wrap_option_Type"/>
+  </attributeGroup>
+  <attributeGroup name = "inheritable_properties_List">
+    <attributeGroup ref = "fo:inheritable_properties_List_FOP"/>
+    <attributeGroup ref = "fo:inheritable_properties_List_Not"/>
+  </attributeGroup>
+  <attributeGroup name = "break_Properties_List_Not">
+    <annotation>
+      <documentation>
+        Inheritable
+        <attribute name = "page-break-inside" type = "fo:breaks_Type"/>
+      </documentation>
+    </annotation>
+  </attributeGroup>
+  <attributeGroup name = "break_Properties_List_FOP">
+    <attribute name = "break-after" type = "fo:breaks_Type"/>
+    <attribute name = "break-before" type = "fo:breaks_Type"/>
+  </attributeGroup>
+  <attributeGroup name = "break_Properties_List">
+    <attributeGroup ref = "fo:break_Properties_List_FOP"/>
+    <attributeGroup ref = "fo:break_Properties_List_Not"/>
+  </attributeGroup>
+  <attributeGroup name = "text_one_Properties_List_FOP"/>
+  <attributeGroup name = "text_one_Properties_List_Not">
+    <attribute name = "text-depth" type = "fo:text_depth_Type"/>
+    <attribute name = "text-altitude" type = "fo:text_altitude_Type"/>
+  </attributeGroup>
+  <attributeGroup name = "text_one_Properties_List">
+    <attributeGroup ref = "fo:text_one_Properties_List_FOP"/>
+    <attributeGroup ref = "fo:text_one_Properties_List_Not"/>
+  </attributeGroup>
+  <attributeGroup name = "line_height_Properties_List_FOP"/>
+  <attributeGroup name = "line_height_Properties_List_Not">
+    <annotation>
+      <documentation>
+        Inheritable
+        <attribute name = "line-height-shift-adjustment" type = "fo:line_height_shift_adjustment_Type"/>
+        <attribute name = "line-stacking-strategy" type = "fo:line_stacking_strategy_Type"/>
+      </documentation>
+    </annotation>
+  </attributeGroup>
+  <attributeGroup name = "line_height_Properties_List">
+    <attributeGroup ref = "fo:line_height_Properties_List_FOP"/>
+    <attributeGroup ref = "fo:line_height_Properties_List_Not"/>
+  </attributeGroup>
+  <attributeGroup name = "keep_Properties_List_FOP">
+    <attribute name = "keep-with-next" type = "fo:keep_integer_Type"/>
+  </attributeGroup>
+  <attributeGroup name = "keep_Properties_List_Not">
+    <annotation>
+      <documentation>
+        Inheritable
+        <attribute name = "keep-together" type = "fo:keep_compound_Type"/>
+        <attribute name = "keep-together.within-line" type = "fo:keep_integer_Type"/>
+        <attribute name = "keep-together.within-column" type = "fo:keep_integer_Type"/>
+        <attribute name = "keep-together.within-page" type = "fo:keep_integer_Type"/>
+      </documentation>
+    </annotation>
+    <attribute name = "keep-with-previous" type = "fo:keep_integer_Type"/>
+  </attributeGroup>
+  <attributeGroup name = "keep_Properties_List">
+    <attributeGroup ref = "fo:keep_Properties_List_FOP"/>
+    <attributeGroup ref = "fo:keep_Properties_List_Not"/>
+  </attributeGroup>
+  <attributeGroup name = "block_hyphenation_Properties_List_FOP"/>
+  <attributeGroup name = "block_hyphenation_Properties_List_Not">
+    <annotation>
+      <documentation>
+        Inheritable
+        <attribute name = "hyphenation-keep" type = "fo:hyphenation_keep_Type"/>
+        <attribute name = "hyphenation-ladder-count" type = "fo:hyphenation_ladder_count_Type"/>
+      </documentation>
+    </annotation>
+    </attributeGroup>
+  <attributeGroup name = "block_hyphenation_Properties_List">
+    <attributeGroup ref = "fo:block_hyphenation_Properties_List_FOP"/>
+    <attributeGroup ref = "fo:block_hyphenation_Properties_List_Not"/>
+  </attributeGroup>
+  <attributeGroup name = "intrusion_displace_Properties_List_FOP"/>
+  <attributeGroup name = "intrusion_displace_Properties_List_Not">
+    <annotation>
+      <documentation>
+        Inheritable attributes
+        <attribute name = "intrusion-displace" type = "fo:displace_Type"/>
+      </documentation>
+    </annotation>
+    </attributeGroup>
+  <attributeGroup name = "intrusion_displace_Properties_List">
+    <attributeGroup ref = "fo:intrusion_displace_Properties_List_FOP"/>
+    <attributeGroup ref = "fo:intrusion_displace_Properties_List_Not"/>
+  </attributeGroup>
+  <attributeGroup name = "progression_Properties_List_FOP"/>
+  <attributeGroup name = "progression_Properties_List_Not">
+    <attribute name = "block-progression-dimension" type = "fo:margin_width_Type"/>
+    <attribute name = "block-progression-dimension.minimum" type = "fo:length_Type"/>
+    <attribute name = "block-progression-dimension.optimum" type = "fo:block_progression_dimension_optimum_Type"/>
+    <attribute name = "block-progression-dimension.maximum" type = "fo:block_progression_dimension_maximum_Type"/>
+    <attribute name = "inline-progression-dimension" type = "fo:margin_width_Type"/>
+    <attribute name = "inline-progression-dimension.minimum" type = "fo:length_Type"/>
+    <attribute name = "inline-progression-dimension.optimum" type = "fo:block_progression_dimension_optimum_Type"/>
+    <attribute name = "inline-progression-dimension.maximum" type = "fo:block_progression_dimension_maximum_Type"/>
+  </attributeGroup>
+  <attributeGroup name = "progression_Properties_List">
+    <attributeGroup ref = "fo:progression_Properties_List_FOP"/>
+    <attributeGroup ref = "fo:progression_Properties_List_Not"/>
+  </attributeGroup>
+  <attributeGroup name = "clip_Properties_List_FOP"/>
+  <attributeGroup name = "clip_Properties_List_Not">
+    <attribute name = "clip" type = "fo:clip_Type"/>
+  </attributeGroup>
+  <attributeGroup name = "clip_Properties_List">
+    <attributeGroup ref = "fo:clip_Properties_List_FOP"/>
+    <attributeGroup ref = "fo:clip_Properties_List_Not"/>
+  </attributeGroup>
+  <attributeGroup name = "reference_Properties_List_FOP"/>
+  <attributeGroup name = "reference_Properties_List_Not">
+    <annotation>
+      <documentation>
+        Inherited
+        <attribute name = "reference-orientation" type = "fo:orientation_Type"/>
+        <attribute name = "writing-mode" type = "fo:writing_mode_Type"/>
+      </documentation>
+    </annotation>
+    </attributeGroup>
+  <attributeGroup name = "reference_Properties_List">
+    <attributeGroup ref = "fo:reference_Properties_List_FOP"/>
+    <attributeGroup ref = "fo:reference_Properties_List_Not"/>
+  </attributeGroup>
+  <attributeGroup name = "Accessibility_Properties_List_FOP"/>
+  <attributeGroup name = "Accessibility_Properties_List_Not">
+    <attribute name = "source-document" type = "xs:string"/>
+    <attribute name = "role" type = "xs:string"/>
+  </attributeGroup>
+  <attributeGroup name = "Accessibility_Properties_List">
+    <attributeGroup ref = "fo:Accessibility_Properties_List_FOP"/>
+    <attributeGroup ref = "fo:Accessibility_Properties_List_Not"/>
+  </attributeGroup>
+  <attributeGroup name = "Relative_Position_Properties_List_FOP">
+    <annotation>
+      <documentation>
+        Inherited
+        <attribute name = "position" type = "fo:position_Type"/>
+      </documentation>
+    </annotation>
+    <attribute name = "top" type = "fo:top_Type"/>
+    <attribute name = "right" type = "fo:right_Type"/>
+    <attribute name = "bottom" type = "fo:bottom_Type"/>
+    <attribute name = "left" type = "fo:left_Type"/>
+  </attributeGroup>
+  <attributeGroup name = "Relative_Position_Properties_List_Not">
+    <attribute name = "relative-position" type = "fo:relative_position_Type"/>
+  </attributeGroup>
+  <attributeGroup name = "Relative_Position_Properties_List">
+    <attributeGroup ref = "fo:Relative_Position_Properties_List_FOP"/>
+    <attributeGroup ref = "fo:Relative_Position_Properties_List_Not"/>
+  </attributeGroup>
+  <attributeGroup name = "absolute_or_Relative_Position_Properties_List_FOP">
+    <attributeGroup ref = "fo:Relative_Position_Properties_List"/>
+  </attributeGroup>
+  <attributeGroup name = "absolute_or_Relative_Position_Properties_List_Not">
+    <attribute name = "absolute-position" type = "fo:absolute_position_Type"/>
+  </attributeGroup>
+  <attributeGroup name = "absolute_or_Relative_Position_Properties_List">
+    <attributeGroup ref = "fo:absolute_or_Relative_Position_Properties_List_FOP"/>
+    <attributeGroup ref = "fo:absolute_or_Relative_Position_Properties_List_Not"/>
+  </attributeGroup>
+  <attributeGroup name = "Aural_Properties_List_FOP"/>
+  <attributeGroup name = "Aural_Properties_List_Not">
+    <attribute name = "azimuth" type = "fo:azimuth_Type"/>
+    <attribute name = "cue" type = "xs:string"/>
+    <attribute name = "cue-after" type = "xs:string"/>
+    <attribute name = "cue-before" type = "xs:string"/>
+    <attribute name = "elevation" type = "fo:elevation_Type"/>
+    <attribute name = "pause" type = "xs:string"/>
+    <attribute name = "pause-after" type = "xs:string"/>
+    <attribute name = "pause-before" type = "xs:string"/>
+    <attribute name = "pitch" type = "xs:string"/>
+    <attribute name = "pitch-range" type = "xs:string"/>
+    <attribute name = "play-during" type = "xs:string"/>
+    <attribute name = "richness" type = "xs:string"/>
+    <attribute name = "speak" type = "xs:string"/>
+    <attribute name = "speak-header" type = "xs:string"/>
+    <attribute name = "speak-numeral" type = "fo:speak_numeral_Type"/>
+    <attribute name = "speak-punctuation" type = "xs:string"/>
+    <attribute name = "speech-rate" type = "fo:speech_rate_Type"/>
+    <attribute name = "stress" type = "xs:string"/>
+    <attribute name = "voice-family" type = "xs:string"/>
+    <attribute name = "volume" type = "xs:string"/>
+  </attributeGroup>
+  <attributeGroup name = "Aural_Properties_List">
+    <attributeGroup ref = "fo:Aural_Properties_List_FOP"/>
+    <attributeGroup ref = "fo:Aural_Properties_List_Not"/>
+  </attributeGroup>
+  <attributeGroup name = "Border_Padding_and_Background_Properties_List">
+    <attributeGroup ref = "fo:Border_Properties_List"/>
+    <attributeGroup ref = "fo:Padding_Properties_List"/>
+    <attributeGroup ref = "fo:Background_Properties_List"/>
+  </attributeGroup>
+  <attributeGroup name = "Absolute_Position_Properties_List_FOP">
+    <annotation>
+      <documentation>
+        Inherited
+        <attribute name = "position" type = "fo:position_Type"/>
+      </documentation>
+    </annotation>
+    <attribute name = "top" type = "fo:top_Type"/>
+    <attribute name = "right" type = "fo:right_Type"/>
+    <attribute name = "bottom" type = "fo:bottom_Type"/>
+    <attribute name = "left" type = "fo:left_Type"/>
+  </attributeGroup>
+  <attributeGroup name = "Absolute_Position_Properties_List_Not">
+    <attribute name = "absolute-position" type = "fo:absolute_position_Type"/>
+  </attributeGroup>
+  <attributeGroup name = "Absolute_Position_Properties_List">
+    <attributeGroup ref = "fo:Absolute_Position_Properties_List_FOP"/>
+    <attributeGroup ref = "fo:Absolute_Position_Properties_List_Not"/>
+  </attributeGroup>
+  <attributeGroup name = "Background_Properties_List_FOP">
+    <attribute name = "background-color" type = "fo:background_color_Type"/>
+  </attributeGroup>
+  <attributeGroup name = "Background_Properties_List_Not">
+    <attribute name = "background-attachment" type = "fo:background_attachment_Type"/>
+    <attribute name = "background-image" type = "xs:string"/>
+    <attribute name = "background-repeat" type = "fo:background_repeat_Type"/>
+    <attribute name = "background-position-horizontal" type = "fo:background_position_horizontal_Type"/>
+    <attribute name = "background-position-vertical" type = "fo:background_position_vertical_Type"/>
+  </attributeGroup>
+  <attributeGroup name = "Background_Properties_List">
+    <attributeGroup ref = "fo:Background_Properties_List_FOP"/>
+    <attributeGroup ref = "fo:Background_Properties_List_Not"/>
+  </attributeGroup>
+  <attributeGroup name = "Border_Properties_List">
+    <attribute name = "border" type = "fo:border_Type"/>
+    <attribute name = "border-before-color" type = "fo:color_Type"/>
+    <attribute name = "border-before-style" type = "fo:border_style_Type"/>
+    <attribute name = "border-before-width" type = "fo:border_before_width_Type"/>
+    <attribute name = "border-before-width.length" type = "fo:length_Type"/>
+    <attribute name = "border-before-width.conditionality" type = "fo:conditionality_Type"/>
+    <attribute name = "border-after-color" type = "fo:color_Type"/>
+    <attribute name = "border-after-style" type = "fo:border_style_Type"/>
+    <attribute name = "border-after-width" type = "fo:border_before_width_Type"/>
+    <attribute name = "border-after-width.length" type = "fo:length_Type"/>
+    <attribute name = "border-after-width.conditionality" type = "fo:conditionality_Type"/>
+    <attribute name = "border-start-color" type = "fo:color_Type"/>
+    <attribute name = "border-start-style" type = "fo:border_style_Type"/>
+    <attribute name = "border-start-width" type = "fo:border_before_width_Type"/>
+    <attribute name = "border-start-width.length" type = "fo:length_Type"/>
+    <attribute name = "border-start-width.conditionality" type = "fo:conditionality_Type"/>
+    <attribute name = "border-end-color" type = "fo:color_Type"/>
+    <attribute name = "border-end-style" type = "fo:border_style_Type"/>
+    <attribute name = "border-end-width" type = "fo:border_before_width_Type"/>
+    <attribute name = "border-end-width.length" type = "fo:length_Type"/>
+    <attribute name = "border-end-width.conditionality" type = "fo:conditionality_Type"/>
+    <attribute name = "border-top-color" type = "fo:color_Type"/>
+    <attribute name = "border-top-style" type = "fo:border_style_Type"/>
+    <attribute name = "border-top-width" type = "fo:border_top_width_Type"/>
+    <attribute name = "border-top-width.length" type = "fo:length_Type"/>
+    <attribute name = "border-top-width.conditionality" type = "fo:conditionality_Type"/>
+    <attribute name = "border-bottom-color" type = "fo:color_Type"/>
+    <attribute name = "border-bottom-style" type = "fo:border_style_Type"/>
+    <attribute name = "border-bottom-width" type = "fo:border_top_width_Type"/>
+    <attribute name = "border-bottom-width.length" type = "fo:length_Type"/>
+    <attribute name = "border-bottom-width.conditionality" type = "fo:conditionality_Type"/>
+    <attribute name = "border-left-color" type = "fo:color_Type"/>
+    <attribute name = "border-left-style" type = "fo:border_style_Type"/>
+    <attribute name = "border-left-width" type = "fo:border_top_width_Type"/>
+    <attribute name = "border-left-width.length" type = "fo:length_Type"/>
+    <attribute name = "border-left-width.conditionality" type = "fo:conditionality_Type"/>
+    <attribute name = "border-right-color" type = "fo:color_Type"/>
+    <attribute name = "border-right-style" type = "fo:border_style_Type"/>
+    <attribute name = "border-right-width" type = "fo:border_top_width_Type"/>
+    <attribute name = "border-right-width.length" type = "fo:length_Type"/>
+    <attribute name = "border-right-width.conditionality" type = "fo:conditionality_Type"/>
+  </attributeGroup>
+  <attributeGroup name = "Padding_Properties_List">
+    <attribute name = "padding" type = "fo:padding_before_Type"/>
+    <attribute name = "padding-before" type = "fo:padding_before_Type"/>
+    <attribute name = "padding-before.length" type = "fo:length_Type"/>
+    <attribute name = "padding-before.conditionality" type = "fo:conditionality_Type"/>
+    <attribute name = "padding-after" type = "fo:padding_before_Type"/>
+    <attribute name = "padding-after.length" type = "fo:length_Type"/>
+    <attribute name = "padding-after.conditionality" type = "fo:conditionality_Type"/>
+    <attribute name = "padding-start" type = "fo:padding_before_Type"/>
+    <attribute name = "padding-start.length" type = "fo:length_Type"/>
+    <attribute name = "padding-start.conditionality" type = "fo:conditionality_Type"/>
+    <attribute name = "padding-end" type = "fo:padding_before_Type"/>
+    <attribute name = "padding-end.length" type = "fo:length_Type"/>
+    <attribute name = "padding-end.conditionality" type = "fo:conditionality_Type"/>
+    <attribute name = "padding-top" type = "fo:padding_top_Type"/>
+    <attribute name = "padding-top.length" type = "fo:length_Type"/>
+    <attribute name = "padding-top.conditionality" type = "fo:conditionality_Type"/>
+    <attribute name = "padding-bottom" type = "fo:padding_top_Type"/>
+    <attribute name = "padding-bottom.length" type = "fo:length_Type"/>
+    <attribute name = "padding-bottom.conditionality" type = "fo:conditionality_Type"/>
+    <attribute name = "padding-left" type = "fo:padding_top_Type"/>
+    <attribute name = "padding-left.length" type = "fo:length_Type"/>
+    <attribute name = "padding-left.conditionality" type = "fo:conditionality_Type"/>
+    <attribute name = "padding-right" type = "fo:padding_top_Type"/>
+    <attribute name = "padding-right.length" type = "fo:length_Type"/>
+    <attribute name = "padding-right.conditionality" type = "fo:conditionality_Type"/>
+  </attributeGroup>
+  <attributeGroup name = "Font_Properties_List_FOP">
+    <annotation>
+      <documentation>
+        Font properties are all inheritable
+        <attribute name = "font-family" type = "fo:family_name_Type"/>
+        <attribute name = "font-size" type = "fo:font_size_Type"/>
+        <attribute name = "font-style" type = "fo:font_style_Type"/>
+        <attribute name = "font-weight" type = "fo:font_weight_Type"/>
+      </documentation>
+    </annotation>
+    </attributeGroup>
+  <attributeGroup name = "Font_Properties_List_Not">
+    <annotation>
+      <documentation>
+        Font properties are all inheritable
+        <attribute name = "font" type = "xs:string"/>
+        <attribute name = "font-selection-strategy" type = "fo:font_selection_strategy_Type"/>
+        <attribute name = "font-size-adjust" type = "xs:string"/>
+        <attribute name = "font-stretch" type = "xs:string"/>
+        <attribute name = "font-variant" type = "fo:font_variant_Type"/>
+      </documentation>
+    </annotation>
+    </attributeGroup>
+  <attributeGroup name = "Font_Properties_List">
+    <attributeGroup ref = "fo:Font_Properties_List_FOP"/>
+    <attributeGroup ref = "fo:Font_Properties_List_Not"/>
+  </attributeGroup>
+  <attributeGroup name = "Hyphenation_Properties_List_FOP">
+    <annotation>
+      <documentation>
+        The hyphenation properties are all inheritable and so superceeded by that list 
+        <attribute name = "country" type = "fo:country_Type"/>
+        <attribute name = "language" type = "fo:language_Type"/>
+        <attribute name = "hyphenate" type = "fo:hyphenate_Type"/>
+        <attribute name = "hyphenation-character" type = "fo:hyphenation_character_Type"/>
+        <attribute name = "hyphenation-push-character-count" type = "fo:integer_Type"/>
+        <attribute name = "hyphenation-remain-character-count" type = "fo:integer_Type"/>
+      </documentation>
+    </annotation>
+    </attributeGroup>
+  <attributeGroup name = "Hyphenation_Properties_List_Not">
+    <annotation>
+      <documentation>
+        The hyphenation properties are all inheritable and so superceeded by that list 
+        <attribute name = "script" type = "xs:string"/>
+      </documentation>
+    </annotation>
+    </attributeGroup>
+  <attributeGroup name = "Hyphenation_Properties_List">
+    <attributeGroup ref = "fo:Hyphenation_Properties_List_FOP"/>
+    <attributeGroup ref = "fo:Hyphenation_Properties_List_Not"/>
+  </attributeGroup>
+  <attributeGroup name = "Margin_Properties_Basic_List">
+    <attribute name = "margin-top" type = "fo:margin_width_Type"/>
+    <attribute name = "margin-bottom" type = "fo:margin_width_Type"/>
+    <attribute name = "margin-left" type = "fo:margin_width_Type"/>
+    <attribute name = "margin-right" type = "fo:margin_width_Type"/>
+  </attributeGroup>
+  <attributeGroup name = "Margin_Properties_vertical_Space_List_FOP">
+    <annotation>
+      <documentation>
+        Indent properties are inheritable
+        <attribute name = "start-indent" type = "fo:start_indent_Type"/>
+        <attribute name = "end-indent" type = "fo:end_indent_Type"/>
+      </documentation>
+    </annotation>
+    <attribute name = "space-before.optimum" type = "fo:space_before_optimum_Type"/>
+    <attribute name = "space-after.optimum" type = "fo:space_after_optimum_Type"/>
+  </attributeGroup>
+  <attributeGroup name = "Margin_Properties_vertical_Space_List_Not">
+    <attribute name = "space-before" type = "fo:space_Type"/>
+    <attribute name = "space-before.minimum" type = "fo:length_Type"/>
+    <attribute name = "space-before.maximum" type = "fo:length_Type"/>
+    <attribute name = "space-before.conditionality" type = "fo:conditionality_Type"/>
+    <attribute name = "space-before.precedence" type = "fo:integer_Force_Type"/>
+    <attribute name = "space-after" type = "fo:space_Type"/>
+    <attribute name = "space-after.minimum" type = "fo:length_Type"/>
+    <attribute name = "space-after.maximum" type = "fo:length_Type"/>
+    <attribute name = "space-after.conditionality" type = "fo:conditionality_Type"/>
+    <attribute name = "space-after.precedence" type = "fo:integer_Force_Type"/>
+  </attributeGroup>
+  <attributeGroup name = "Margin_Properties_vertical_Space_List">
+    <attributeGroup ref = "fo:Margin_Properties_vertical_Space_List_FOP"/>
+    <attributeGroup ref = "fo:Margin_Properties_vertical_Space_List_Not"/>
+  </attributeGroup>
+  <attributeGroup name = "Margin_Properties_Block_List">
+    <attributeGroup ref = "fo:Margin_Properties_Basic_List"/>
+    <attributeGroup ref = "fo:Margin_Properties_vertical_Space_List"/>
+  </attributeGroup>
+  <attributeGroup name = "Margin_Properties_Inline_List">
+    <attributeGroup ref = "fo:Margin_Properties_Basic_List"/>
+    <attributeGroup ref = "fo:Margin_Properties_Horizontal_Space_List"/>
+  </attributeGroup>
+  <attributeGroup name = "Margin_Properties_Horizontal_Space_List_FOP"/>
+  <attributeGroup name = "Margin_Properties_Horizontal_Space_List_Not">
+    <attribute name = "space-start" type = "fo:space_start_Type"/>
+    <attribute name = "space-start.minimum" type = "fo:length_Type"/>
+    <attribute name = "space-start.optimum" type = "fo:length_Type"/>
+    <attribute name = "space-start.maximum" type = "fo:length_Type"/>
+    <attribute name = "space-start.conditionality" type = "fo:conditionality_Type"/>
+    <attribute name = "space-start.precedence" type = "fo:integer_Force_Type"/>
+    <attribute name = "space-end" type = "fo:space_start_Type"/>
+    <attribute name = "space-end.minimum" type = "fo:length_Type"/>
+    <attribute name = "space-end.optimum" type = "fo:length_Type"/>
+    <attribute name = "space-end.maximum" type = "fo:length_Type"/>
+    <attribute name = "space-end.conditionality" type = "fo:conditionality_Type"/>
+    <attribute name = "space-end.precedence" type = "fo:integer_Force_Type"/>
+  </attributeGroup>
+  <attributeGroup name = "Margin_Properties_Horizontal_Space_List">
+    <attributeGroup ref = "fo:Margin_Properties_Horizontal_Space_List_FOP"/>
+    <attributeGroup ref = "fo:Margin_Properties_Horizontal_Space_List_Not"/>
+  </attributeGroup>
+
+  <annotation>
+    <documentation>
+      Simple Types definitions
+    </documentation>
+  </annotation>
+  <simpleType name = "integer_Type">
+    <annotation>
+      <documentation>
+        A signed integer value which consists of an optional '+' or '-' character followed by a sequence of digits. A property may define additional constraints on the value.
+        <enumeration value = "-3"/>
+        <enumeration value = "0"/>
+        <enumeration value = "1"/>
+        <enumeration value = "+3"/>
+        <enumeration value = "5"/>
+      </documentation>
+    </annotation>
+    <restriction base = "NMTOKEN">
+      <pattern value = "[\+\-]?\d+"/>
+    </restriction>
+  </simpleType>
+  <simpleType name = "number_Type">
+    <annotation>
+      <documentation>
+        A signed real number which consists of an optional '+' or '-' character followed by a sequence of digits followed by an optional '.' character and sequence of digits. A property may define additional constraints on the value. 
+        <enumeration value = "-2.4"/>
+        <enumeration value = "2"/>
+        <enumeration value = "4"/>
+      </documentation>
+    </annotation>
+    <restriction base = "string">
+      <pattern value = "[\+\-]?\d+\.\d*"/>
+    </restriction>
+  </simpleType>
+  <simpleType name = "length_Type">
+    <annotation>
+      <documentation>
+        A signed length value where a 'length' is a real number plus a unit qualification. A property may define additional constraints on the value.
+        <enumeration value = "1px"/>
+        <enumeration value = "1pt"/>
+        <enumeration value = "1mm"/>
+        <enumeration value = "1cm"/>
+        <enumeration value = "1in"/>
+        <enumeration value = "1em"/>
+      </documentation>
+    </annotation>
+    <restriction base = "string">
+      <pattern value = "[\+\-]?\d+\.?\d*(px|pt|mm|cm|in|em|%)"/>
+    </restriction>
+  </simpleType>
+  <simpleType name = "length_range_Type">
+    <annotation>
+      <documentation>
+        A compound datatype, with components: minimum, optimum, maximum. Each component is a <length xmlns=""/>. If "minimum" is greater than optimum, it will be treated as if it had been set to "optimum". If "maximum" is less than optimum, it will be treated as if it had been set to "optimum". A property may define additional constraints on the values.
+        <enumeration value = "1mm 2mm 3mm"/>
+        <enumeration value = "2mm 2mm 1mm"/>
+        <enumeration value = "3mm 2mm 1mm"/>
+      </documentation>
+    </annotation>
+    <xs:restriction>
+      <xs:simpleType>
+        <xs:list>
+          <xs:simpleType>
+            <xs:restriction base = "fo:length_Type"/>
+          </xs:simpleType>
+        </xs:list>
+      </xs:simpleType>
+      <xs:minLength value = "3" />
+      <xs:maxLength value = "3" />
+    </xs:restriction>
+  </simpleType>
+  <simpleType name = "length_conditional_Type">
+    <annotation>
+      <documentation>
+        A compound datatype, with components: length, conditionality. The length component is a <length xmlns=""/>. The conditionality component is either "discard" or "retain". A property may define additional constraints on the values.
+        <enumeration value = "1mm retain"/>
+        <enumeration value = "1mm discard"/>
+        <enumeration value = "1px retain"/>
+        <enumeration value = "1px discard"/>
+        <enumeration value = "1pt retain"/>
+        <enumeration value = "1pt discard"/>
+        <enumeration value = "1mm retain"/>
+        <enumeration value = "1mm discard"/>
+        <enumeration value = "1cm retain"/>
+        <enumeration value = "1cm discard"/>
+        <enumeration value = "1in retain"/>
+        <enumeration value = "1in discard"/>
+        <enumeration value = "1em retain"/>
+        <enumeration value = "1em discard"/>
+      </documentation>
+    </annotation>
+    <restriction base = "string">
+      <pattern value = "\+?\d+\.?\d*(px|pt|mm|cm|in|em|%) (retain|discard)"/>
+    </restriction>
+  </simpleType>
+  <xs:simpleType name = "length_bp_ip_direction_Type">
+    <annotation>
+      <documentation>
+        A compound datatype, with components: block-progression-direction, and inline-progression-direction. Each component is a <length xmlns=""/>. A property may define additional constraints on the values.
+        <enumeration value = "1mm 2mm"/>
+        <enumeration value = "2mm"/>
+        <enumeration value = "3mm 2mm"/>
+      </documentation>
+    </annotation>
+    <xs:restriction>
+      <xs:simpleType>
+        <xs:list>
+          <xs:simpleType>
+            <xs:restriction base = "fo:length_Type"/>
+          </xs:simpleType>
+        </xs:list>
+      </xs:simpleType>
+      <xs:minLength value = "1" />
+      <xs:maxLength value = "2" />
+    </xs:restriction>
+  </xs:simpleType>
+  <simpleType name = "space_Type">
+    <annotation>
+      <documentation>
+        A compound datatype, with components: minimum, optimum, maximum, precedence, and conditionality. The minimum, optimum, and maximum components are <length xmlns=""/>s. The precedence component is either "force" or an <integer/>. The conditionality component is either "discard" or "retain". If "minimum" is greater than optimum, it will be treated as if it had been set to "optimum". If "maximum" is less than optimum, it will be treated as if it had been set to "optimum".
+        <enumeration value = "1mm 2mm 3mm force retain"/>
+        <enumeration value = "1mm 2mm 3mm force discard"/>
+        <enumeration value = "1mm 2mm 3mm 3 retain"/>
+      </documentation>
+    </annotation>
+    <restriction base = "string">
+      <pattern value = "([ ]?\+?\d+\.?\d*(px|pt|mm|cm|in|em|%)){1,3}( \+?\d+| force)?( retain| discard)?"/>
+    </restriction>
+  </simpleType>
+  <simpleType name = "angle_Type">
+    <annotation>
+      <documentation>
+        A representation of an angle consisting of an optional '+' or  '-' character immediately followed by a <number/> immediately followed by an angle unit identifier. Angle unit identifiers are: 'deg' (for degrees), 'grad' (for grads), and 'rad' (for radians). The specified values are normalized to the range 0deg to 360deg. A property may define additional constraints on the value.
+        <enumeration value = "3deg"/>
+        <enumeration value = "45deg"/>
+        <enumeration value = "-12deg"/>
+      </documentation>
+    </annotation>
+    <restriction base = "string">
+      <pattern value = "[\+\-]?[1-3]?\d?\d?\.?\d*(deg|grad|rad)"/>
+    </restriction>
+  </simpleType>
+  <simpleType name = "percentage_Type">
+    <annotation>
+      <documentation>
+        A signed real percentage which consists of an optional '+' or '-' character followed by a sequence of digits followed by an optional '.' character and sequence of digits followed by '%'. A property may define additional constraints on the value.
+        <enumeration value = "10%"/>
+        <enumeration value = "30%"/>
+        <enumeration value = "100%"/>
+      </documentation>
+    </annotation>
+    <restriction base = "string">
+      <pattern value = "[\+\-]?\d+\.?\d*%"/>
+    </restriction>
+  </simpleType>
+  <simpleType name = "character_Type">
+    <annotation>
+      <documentation>
+        <enumeration value = "-"/>
+        <enumeration value = "h"/>
+        <enumeration value = "e"/>
+        <enumeration value = "l"/>
+        <enumeration value = "p"/>
+        <enumeration value = "o"/>
+      </documentation>
+    </annotation>
+    <restriction base = "string">
+      <pattern value = "."/>
+    </restriction>
+  </simpleType>
+  <simpleType name = "name_Type">
+    <annotation>
+      <documentation>
+        A string of characters representing a name. It must conform to the definition of an NCName in
+      </documentation>
+    </annotation>
+    <restriction base = "string">
+      <pattern value = ".*"/>
+    </restriction>
+  </simpleType>
+  <simpleType name = "family_name_Type">
+    <annotation>
+      <documentation>
+        A string of characters identifying a font.
+        <enumeration value = "serif"/>
+        <enumeration value = "sans-serif"/>
+        <enumeration value = "Arial"/>
+        <enumeration value = "Times"/>
+        <enumeration value = "Courier"/>
+        <enumeration value = "Zapf Dingbats"/>
+        <enumeration value = "code39"/>
+        <enumeration value = "cyberbit"/>
+        <enumeration value = "Edwardian Script ITC"/>
+        <enumeration value = "Viner Hand ITC"/>
+        <enumeration value = "Georgia"/>
+        <enumeration value = "Bookman Old Style"/>
+        <enumeration value = "Book Antiqua"/>
+      </documentation>
+    </annotation>
+    <restriction base = "string">
+      <pattern value = ".*"/>
+    </restriction>
+  </simpleType>
+  <simpleType name = "color_Type">
+    <annotation>
+      <documentation>
+        Either a string of characters representing a keyword or a color function defined in . The list of keyword color names is: aqua, black, blue, fuchsia, gray, green, lime, maroon, navy, olive, purple, red, silver, teal, white, and yellow.
+        <enumeration value = "red"/>
+        <enumeration value = "blue"/>
+        <enumeration value = "yellow"/>
+        <enumeration value = "green"/>
+      </documentation>
+    </annotation>
+    <union memberTypes = "fo:color_Hex_Type fo:color_Name_Type fo:inherit_Type"/>
+  </simpleType>
+  <simpleType name = "proportional_column_width_Type">
+    <annotation>
+      <documentation>
+        The function proportional-column-width(N[0])
+        This returns a width as a fraction of the available width as ( N[0] / sum1 ) * available space
+        The parent table must have width="x" and table-layout="fixed"
+        <enumeration value = "proportional-column-width(Number)"/>
+      </documentation>
+    </annotation>
+    <restriction base = "string">
+      <pattern value = "proportional-column-width\(\d+\)"/>
+    </restriction>
+  </simpleType>
+  <simpleType name = "column_width_Type">
+    <annotation>
+      <documentation>
+        <length xmlns=""/>, <percentage/>, <function>proportional-column-width</function>, or <function>common-functions</function>
+        <enumeration value = "20mm"/>
+        <enumeration value = "15%"/>
+      </documentation>
+    </annotation>
+    <union memberTypes = "fo:length_percentage_Type fo:proportional_column_width_Type"/>
+  </simpleType>
+  <annotation>
+    <documentation>
+      <script/> A string of characters conforming to an ISO 15924 script code.
+    </documentation>
+  </annotation>
+  <annotation>
+    <documentation>
+      <id/>     A string of characters conforming to the definition of an NCName in and is unique within the stylesheet.
+    </documentation>
+  </annotation>
+  <annotation>
+    <documentation>
+      <idRef/>  A string of characters conforming to the definition of an NCName in and that matches an ID property value used within the stylesheet.
+    </documentation>
+  </annotation>
+  <annotation>
+    <documentation>
+      <uri-specification/> A sequence of characters that is "url(", followed by optional white space, followed by an optional single quote (') or double quote (") character, followed by a URI reference as defined in , followed by an optional single quote (') or double quote (") character, followed by optional white space, followed by ")". The two quote characters must be the same and must both be present or absent. If the URI reference contains a single quote, the two quote characters must be present and be double quotes.
+    </documentation>
+  </annotation>
+  <annotation>
+    <documentation>
+      <time/>   A <number/> immediately followed by a time unit identifier. Time unit identifiers are: 'ms' (for milliseconds) and 's' (for seconds).
+    </documentation>
+  </annotation>
+  <annotation>
+    <documentation>
+      <frequency/> A <number/> immediately followed by a frequency unit identifier. Frequency unit identifiers are: 'Hz' (for Hertz) and 'kHz' (for kilo Hertz).
+    </documentation>
+  </annotation>
+  <annotation>
+    <documentation>
+      <generic-family/> The following generic families are defined: "serif", "sans-serif", "cursive", "fantasy", and "monospace". Please see the section on generic font families for descriptions of these families. Generic font family names are keywords, and therefore must not be quoted.
+    </documentation>
+  </annotation>
+  <simpleType name = "absolute_size_Type">
+    <annotation>
+      <documentation>
+        An <absolute-size/> keyword refers to an entry in a table of font sizes computed and kept by the user agent. Possible values are: [ xx-small | x-small | small | medium | large | x-large | xx-large ] On a computer screen a scaling factor of 1.2 is suggested between adjacent indexes; if the "medium" font is 12pt, the "large" font could be 14.4pt. Different media may need different scaling factors. Also, the user agent should take the quality and availability of fonts into account when computing the table. The table may be different from one font family to another. Note. In CSS1, the suggested scaling factor between adjacent indexes was 1.5 which user experience proved to be too large.
+      </documentation>
+    </annotation>
+    <restriction base = "NMTOKEN">
+      <enumeration value = "xx-small"/>
+      <enumeration value = "x-small"/>
+      <enumeration value = "small"/>
+      <enumeration value = "medium"/>
+      <enumeration value = "large"/>
+      <enumeration value = "x-large"/>
+      <enumeration value = "xx-large"/>
+    </restriction>
+  </simpleType>
+  <simpleType name = "relative_size_Type">
+    <annotation>
+      <documentation>
+        A <relative-size/> keyword is interpreted relative to the table of font sizes and the font size of the parent element. Possible values are: [ larger | smaller ] For example, if the parent element has a font size of "medium", a value of "larger" will make the font size of the current element be "large". If the parent element's size is not close to a table entry, the user agent is free to interpolate between table entries or round off to the closest one. The user agent may have to extrapolate table values if the numerical value goes beyond the keywords.
+      </documentation>
+    </annotation>
+    <restriction base = "NMTOKEN">
+      <enumeration value = "larger"/>
+      <enumeration value = "smaller"/>
+    </restriction>
+  </simpleType>
+  <simpleType name = "clip_Type">
+    <annotation>
+      <documentation>
+        shape_Type In CSS2, the only valid <shape/> value is: rect (<top/>, <right/>, <bottom/>, <left/>) where <top/>, <bottom/> <right/>, and <left/> specify offsets from the respective sides of the box. <top/>, <right/>, <bottom/>, and <left/> may either have a <length xmlns=""/> value or "auto". Negative lengths are permitted. The value "auto" means that a given edge of the clipping region will be the same as the edge of the element's generated box (i.e., "auto" means the same as "0".) When coordinates are rounded to pixel coordinates, care should be taken that no pixels remain visible when <left/> + <right/> is equal to the element's width (or <top/> + <bottom/> equals the element's height), and conversely that no pixels remain hidden when these values are 0.
+      </documentation>
+    </annotation>
+    <restriction base = "string">
+      <annotation>
+        <documentation>
+          length_Type{1,2}
+        </documentation>
+      </annotation>
+      <pattern value = "(rect\((\+?\d+\.?\d*(px|pt|mm|cm|in|em|%)|auto),(\+?\d+\.?\d*(px|pt|mm|cm|in|em|%)|auto),(\+?\d+\.?\d*(px|pt|mm|cm|in|em|%)|auto),(\+?\d+\.?\d*(px|pt|mm|cm|in|em|%)|auto)\)|auto|inherit)"/>
+    </restriction>
+  </simpleType>
+  
+  <simpleType name = "border_side_Type">
+    <annotation>
+      <documentation>
+        "fo:width_Type fo:border_style_Type fo:color_Type"
+        <enumeration value="thin solid red"/>
+        <enumeration value="medium solid black"/>
+        <enumeration value="thick solid blue"/>
+      </documentation>
+    </annotation>
+    <restriction base = "string">
+      <pattern value = "(thin|medium|thick) (none|hidden|dotted|dashed|solid|double|groove|ridge|inset|outset) ([a-z]{3,16}|#[0-9A-F]{6})"/>
+    </restriction>
+  </simpleType>
+  <simpleType name = "border_margin_width_Type">
+    <annotation>
+      <documentation>
+        "fo:width_Type{1,4} fo:inherit_Type"
+        <enumeration value = "none"/>
+        <enumeration value = "thin"/>
+        <enumeration value = "medium"/>
+        <enumeration value = "thick"/>
+        <enumeration value = "thick thin medium none"/>
+      </documentation>
+    </annotation>
+    <xs:restriction>
+      <xs:simpleType>
+        <xs:list>
+          <xs:simpleType>
+            <union memberTypes = "fo:width_Type fo:positive_length_Type"/>
+          </xs:simpleType>
+        </xs:list>
+      </xs:simpleType>
+      <xs:minLength value = "1" />
+      <xs:maxLength value = "4" />
+    </xs:restriction>
+  </simpleType>
+  <simpleType name = "border_multi_style_Type" >
+    <annotation>
+      <documentation>
+        "fo:border_style_Type{1,4} fo:inherit_Type"
+        <enumeration value = "none"/>
+        <enumeration value = "hidden"/>
+        <enumeration value = "dotted"/>
+        <enumeration value = "dashed"/>
+        <enumeration value = "solid"/>
+        <enumeration value = "double"/>
+        <enumeration value = "groove"/>
+        <enumeration value = "ridge"/>
+        <enumeration value = "inset"/>
+        <enumeration value = "outset"/>
+        <enumeration value = "solid dashed ridge groove"/>
+      </documentation>
+    </annotation>
+    <xs:restriction>
+      <xs:simpleType>
+        <xs:list>
+          <xs:simpleType>
+            <xs:restriction base = "fo:border_style_Type"/>
+          </xs:simpleType>
+        </xs:list>
+      </xs:simpleType>
+      <xs:minLength value = "1" />
+      <xs:maxLength value = "4" />
+    </xs:restriction>
+  </simpleType>
+  <simpleType name = "border_color_Type" >
+    <annotation>
+      <documentation>
+        "fo:background_color_Type{1,4}"
+        <enumeration value="red"/>
+        <enumeration value="green"/>
+        <enumeration value="blue red yellow"/>
+        <enumeration value="black"/>
+        <enumeration value="black red yellow green"/>
+        <enumeration value="silver black"/>
+      </documentation>
+    </annotation>
+    <xs:restriction>
+      <xs:simpleType>
+        <xs:list>
+          <xs:simpleType>
+            <xs:restriction base = "fo:color_Type"/>
+          </xs:simpleType>
+        </xs:list>
+      </xs:simpleType>
+      <xs:minLength value = "1" />
+      <xs:maxLength value = "4" />
+    </xs:restriction>
+  </simpleType>
+  <simpleType name = "max_width_Type">
+    <annotation>
+      <documentation>
+        <enumeration value="100%"/>
+        <enumeration value="160mm"/>
+      </documentation>
+    </annotation>
+    <union memberTypes = "fo:length_Type fo:percentage_Type fo:none_Type fo:inherit_Type"/>
+  </simpleType>
+  <simpleType name = "background_Type">
+    <union memberTypes = "fo:background_color_Type fo:background_image_Type fo:background_repeat_Type fo:background_attachment_Type fo:background_position_Type"/>
+  </simpleType>
+  <simpleType name = "background_position_Type">
+    <union memberTypes = "fo:background_position_percentage_Type fo:background_position_length_Type fo:background_position_base_Type fo:inherit_Type"/>
+  </simpleType>
+  <simpleType name = "background_position_percentage_Type">
+    <xs:restriction>
+      <xs:simpleType>
+        <xs:list>
+          <xs:simpleType>
+            <xs:restriction base = "fo:percentage_Type"/>
+          </xs:simpleType>
+        </xs:list>
+      </xs:simpleType>
+      <xs:minLength value = "1" />
+      <xs:maxLength value = "2" />
+    </xs:restriction>
+  </simpleType>
+  <simpleType name = "background_position_length_Type">
+    <xs:restriction>
+      <xs:simpleType>
+        <xs:list>
+          <xs:simpleType>
+            <xs:restriction base = "fo:length_Type"/>
+          </xs:simpleType>
+        </xs:list>
+      </xs:simpleType>
+      <xs:minLength value = "1" />
+      <xs:maxLength value = "2" />
+    </xs:restriction>
+  </simpleType>
+  <simpleType name = "background_position_base_Type">
+    <restriction base = "string">
+      <enumeration value = "top left"/>
+      <enumeration value = "top center"/>
+      <enumeration value = "top right"/>
+      <enumeration value = "center left"/>
+      <enumeration value = "center center"/>
+      <enumeration value = "center right"/>
+      <enumeration value = "bottom left"/>
+      <enumeration value = "bottom center"/>
+      <enumeration value = "bottom right"/>
+    </restriction>
+  </simpleType>
+  <simpleType name = "size_Type">
+    <union memberTypes = "fo:background_position_length_Type fo:size_base_Type"/>
+  </simpleType>
+  <simpleType name = "size_base_Type">
+    <restriction base = "string">
+      <enumeration value = "auto"/>
+      <enumeration value = "landscape"/>
+      <enumeration value = "portrait"/>
+      <enumeration value = "inherit"/>
+    </restriction>
+  </simpleType>
+  <simpleType name = "vertical_align_base_Type">
+    <restriction base = "string">
+      <enumeration value = "baseline"/>
+      <enumeration value = "middle"/>
+      <enumeration value = "sub"/>
+      <enumeration value = "super"/>
+      <enumeration value = "text-top"/>
+      <enumeration value = "text-bottom"/>
+      <enumeration value = "top"/>
+      <enumeration value = "bottom"/>
+      <enumeration value = "inherit"/>
+    </restriction>
+  </simpleType>
+  <simpleType name = "vertical_align_Type">
+    <union memberTypes = "fo:vertical_align_base_Type fo:percentage_Type fo:length_Type"/>
+  </simpleType>
+  <simpleType name = "leader_length_Type">
+    <annotation>
+      <documentation>
+        <enumeration value = "50% 100% 100%"/>
+      </documentation>
+    </annotation>
+    <union memberTypes = "fo:length_range_Type fo:inherit_Type"/>
+  </simpleType>
+  <simpleType name = "letter_spacing_Type">
+    <union memberTypes = "fo:normal_Type fo:length_Type fo:space_Type fo:inherit_Type"/>
+  </simpleType>
+  <simpleType name = "font_size_adjust_Type">
+    <union memberTypes = "fo:number_Type fo:none_Type fo:inherit_Type"/>
+  </simpleType>
+  <simpleType name = "space_start_Type">
+    <union memberTypes = "fo:space_Type fo:percentage_Type fo:inherit_Type"/>
+  </simpleType>
+  <simpleType name = "normal_Type">
+    <restriction base = "NMTOKEN">
+      <enumeration value = "normal"/>
+    </restriction>
+  </simpleType>
+  <simpleType name = "background_attachment_Type">
+    <restriction base = "NMTOKEN">
+      <enumeration value = "scroll"/>
+      <enumeration value = "fixed"/>
+      <enumeration value = "inherit"/>
+    </restriction>
+  </simpleType>
+  <simpleType name = "background_repeat_Type">
+    <restriction base = "NMTOKEN">
+      <enumeration value = "repeat"/>
+      <enumeration value = "repeat-x"/>
+      <enumeration value = "repeat-y"/>
+      <enumeration value = "no-repeat"/>
+      <enumeration value = "inherit"/>
+    </restriction>
+  </simpleType>
+  <simpleType name = "speech_rate_base_Type">
+    <restriction base = "NMTOKEN">
+      <enumeration value = "x-slow"/>
+      <enumeration value = "slow"/>
+      <enumeration value = "medium"/>
+      <enumeration value = "fast"/>
+      <enumeration value = "x-fast"/>
+      <enumeration value = "faster"/>
+      <enumeration value = "slower"/>
+      <enumeration value = "inherit"/>
+    </restriction>
+  </simpleType>
+  <simpleType name = "speech_rate_Type">
+    <union memberTypes = "fo:speech_rate_base_Type fo:integer_Type"/>
+  </simpleType>
+  <simpleType name = "speak_numeral_Type">
+    <restriction base = "NMTOKEN">
+      <enumeration value = "digits"/>
+      <enumeration value = "continuous"/>
+      <enumeration value = "inherit"/>
+    </restriction>
+  </simpleType>
+  <simpleType name = "font_variant_Type">
+    <restriction base = "string">
+      <enumeration value = "normal"/>
+      <enumeration value = "small-caps"/>
+      <enumeration value = "inherit"/>
+    </restriction>
+  </simpleType>
+  <simpleType name = "line_height_Type">
+    <union memberTypes = "fo:normal_Type fo:length_Type fo:integer_Type fo:percentage_Type fo:space_Type fo:inherit_Type"/>
+  </simpleType>
+  <simpleType name = "text_shadow_Type">
+    <union memberTypes = "fo:none_Type fo:color_Type fo:length_range_Type"/>
+  </simpleType>
+  <simpleType name = "height_Type">
+    <union memberTypes = "fo:length_Type fo:percentage_Type fo:auto_Type fo:inherit_Type"/>
+  </simpleType>
+  <simpleType name = "hyphenation_character_Type">
+    <union memberTypes = "fo:character_Type fo:inherit_Type"/>
+  </simpleType>
+  <simpleType name = "content_height_Type">
+    <union memberTypes = "fo:auto_Type fo:scale_to_fit_Type fo:length_Type fo:percentage_Type fo:inherit_Type"/>
+  </simpleType>
+  <simpleType name = "scale_to_fit_Type">
+    <restriction base = "NMTOKEN">
+      <enumeration value = "scale-to-fit"/>
+    </restriction>
+  </simpleType>
+
+  <simpleType name = "font_weight_Type">
+    <restriction base = "NMTOKEN">
+      <enumeration value = "normal"/>
+      <enumeration value = "bold">
+        <annotation>
+          <documentation>
+            <fop_result>heavier than no value</fop_result>
+          </documentation>
+        </annotation>
+      </enumeration>
+      <enumeration value = "bolder">
+        <annotation>
+          <documentation>
+            <fop_result>lighter than normal</fop_result> <fop_fail>unknown font</fop_fail>
+          </documentation>
+        </annotation>
+      </enumeration>
+      <enumeration value = "lighter">
+        <annotation>
+          <documentation>
+            <fop_result>lighter than normal</fop_result> <fop_fail>unknown font</fop_fail>
+          </documentation>
+        </annotation>
+      </enumeration>
+      <enumeration value = "100">
+        <annotation>
+          <documentation>
+            <fop_result>same as normal</fop_result>
+          </documentation>
+        </annotation>
+      </enumeration>
+      <enumeration value = "200">
+        <annotation>
+          <documentation>
+            <fop_result>same as normal</fop_result>
+          </documentation>
+        </annotation>
+      </enumeration>
+      <enumeration value = "300">
+        <annotation>
+          <documentation>
+            <fop_result>same as normal</fop_result>
+          </documentation>
+        </annotation>
+      </enumeration>
+      <enumeration value = "400">
+        <annotation>
+          <documentation>
+            <fop_result>same as normal</fop_result>
+          </documentation>
+        </annotation>
+      </enumeration>
+      <enumeration value = "500">
+        <annotation>
+          <documentation>
+            <fop_result>same as normal</fop_result>
+          </documentation>
+        </annotation>
+      </enumeration>
+      <enumeration value = "600">
+        <annotation>
+          <documentation>
+            <fop_result>same as normal</fop_result>
+          </documentation>
+        </annotation>
+      </enumeration>
+      <enumeration value = "700">
+        <annotation>
+          <documentation>
+            <fop_result>same as bold</fop_result>
+          </documentation>
+        </annotation>
+      </enumeration>
+      <enumeration value = "800">
+        <annotation>
+          <documentation>
+            <fop_result>same as bold</fop_result>
+          </documentation>
+        </annotation>
+      </enumeration>
+      <enumeration value = "900">
+        <annotation>
+          <documentation>
+            <fop_result>same as bold</fop_result>
+          </documentation>
+        </annotation>
+      </enumeration>
+      <enumeration value = "inherit">
+        <annotation>
+          <documentation>
+            <fop_result>lighter than normal</fop_result> <fop_fail>unknown font</fop_fail>
+          </documentation>
+        </annotation>
+      </enumeration>
+    </restriction>
+  </simpleType>
+  <simpleType name = "font_style_Type">
+    <restriction base = "NMTOKEN">
+      <enumeration value = "normal"/>
+      <enumeration value = "italic"/>
+      <enumeration value = "oblique"/>
+      <enumeration value = "backslant">
+        <annotation>
+          <documentation>
+            <fop_fail>unknown font</fop_fail>
+          </documentation>
+        </annotation>
+      </enumeration>
+      <enumeration value = "inherit">
+        <annotation>
+          <documentation>
+            <fop_fail>unknown font</fop_fail>
+          </documentation>
+        </annotation>
+      </enumeration>
+    </restriction>
+  </simpleType>
+  <simpleType name = "page_break_inside_Type">
+    <restriction base = "NMTOKEN">
+      <enumeration value = "auto"/>
+      <enumeration value = "avoid"/>
+      <enumeration value = "inherit"/>
+    </restriction>
+  </simpleType>
+  <simpleType name = "page_break_after_Type">
+    <restriction base = "NMTOKEN">
+      <enumeration value = "auto"/>
+      <enumeration value = "always"/>
+      <enumeration value = "avoid"/>
+      <enumeration value = "left"/>
+      <enumeration value = "right"/>
+      <enumeration value = "inherit"/>
+    </restriction>
+  </simpleType>
+  <simpleType name = "white_space_Type">
+    <restriction base = "NMTOKEN">
+      <enumeration value = "normal"/>
+      <enumeration value = "pre"/>
+      <enumeration value = "nowrap"/>
+      <enumeration value = "inherit"/>
+    </restriction>
+  </simpleType>
+  <simpleType name = "show_destination_Type">
+    <restriction base = "NMTOKEN">
+      <enumeration value = "replace"/>
+      <enumeration value = "new"/>
+    </restriction>
+  </simpleType>
+  <simpleType name = "indicate_destination_Type">
+    <restriction base = "NMTOKEN">
+      <enumeration value = "true"/>
+      <enumeration value = "false"/>
+    </restriction>
+  </simpleType>
+  <simpleType name = "speak_Type">
+    <restriction base = "NMTOKEN">
+      <enumeration value = "normal"/>
+      <enumeration value = "none"/>
+      <enumeration value = "spell-out"/>
+      <enumeration value = "inherit"/>
+    </restriction>
+  </simpleType>
+  <simpleType name = "relative_align_Type">
+    <restriction base = "NMTOKEN">
+      <enumeration value = "before"/>
+      <enumeration value = "baseline"/>
+      <enumeration value = "inherit"/>
+    </restriction>
+  </simpleType>
+  <simpleType name = "empty_cells_Type">
+    <restriction base = "NMTOKEN">
+      <enumeration value = "show"/>
+      <enumeration value = "hide"/>
+      <enumeration value = "inherit"/>
+    </restriction>
+  </simpleType>
+  <simpleType name = "ends_row_Type">
+    <restriction base = "NMTOKEN">
+      <enumeration value = "true"/>
+      <enumeration value = "false"/>
+    </restriction>
+  </simpleType>
+  <simpleType name = "starts_row_Type">
+    <restriction base = "NMTOKEN">
+      <enumeration value = "true"/>
+      <enumeration value = "false"/>
+    </restriction>
+  </simpleType>
+  <simpleType name = "position_Type">
+    <restriction base = "NMTOKEN">
+      <enumeration value = "static"/>
+      <enumeration value = "relative"/>
+      <enumeration value = "absolute"/>
+      <enumeration value = "fixed"/>
+      <enumeration value = "inherit">
+        <annotation>
+          <documentation>
+            <fop_fail>Unknown enumerated value</fop_fail>
+          </documentation>
+        </annotation>
+      </enumeration>
+    </restriction>
+  </simpleType>
+  <simpleType name = "conditionality_Type">
+    <restriction base = "NMTOKEN">
+      <enumeration value = "retain"/>
+      <enumeration value = "discard"/>
+    </restriction>
+  </simpleType>
+  <simpleType name = "keep_compound_Type">
+    <annotation>
+      <documentation>
+        A compound datatype, with components: within-line, within-column, within-page. Each component is a <keep/>. 
+        <enumeration value = "2 auto always"/>
+        <enumeration value = "auto"/>
+        <enumeration value = "always"/>
+      </documentation>
+    </annotation>
+    <xs:restriction>
+      <xs:simpleType>
+        <xs:list>
+          <xs:simpleType>
+            <xs:restriction base = "fo:keep_integer_Type"/>
+          </xs:simpleType>
+        </xs:list>
+      </xs:simpleType>
+      <xs:minLength value = "1" />
+      <xs:maxLength value = "3" />
+    </xs:restriction>
+  </simpleType>
+  <simpleType name = "keep_integer_Type">
+    <annotation>
+      <documentation>
+        <enumeration value = "2"/>
+        <enumeration value = "5"/>
+        <enumeration value = "10"/>
+        <enumeration value = "auto"/>
+        <enumeration value = "always"/>
+      </documentation>
+    </annotation>
+    <restriction base = "NMTOKEN">
+      <pattern value = "(\+?\d+|auto|always)"/>
+    </restriction>
+  </simpleType>
+  <simpleType name = "letter_value_Type">
+    <restriction base = "NMTOKEN">
+      <enumeration value = "auto"/>
+      <enumeration value = "alphabetic"/>
+      <enumeration value = "traditional"/>
+    </restriction>
+  </simpleType>
+  <simpleType name = "alignment_Type">
+    <restriction base = "NMTOKEN">
+      <enumeration value = "baseline"/>
+      <enumeration value = "before-edge"/>
+      <enumeration value = "text-before-edge"/>
+      <enumeration value = "middle"/>
+      <enumeration value = "central"/>
+      <enumeration value = "after-edge"/>
+      <enumeration value = "text-after-edge"/>
+      <enumeration value = "ideographic"/>
+      <enumeration value = "alphabetic"/>
+      <enumeration value = "hanging"/>
+      <enumeration value = "mathematical"/>
+    </restriction>
+  </simpleType>
+  <simpleType name = "box_alignment_Type">
+    <restriction base = "NMTOKEN">
+      <enumeration value = "top"/>
+      <enumeration value = "text-top"/>
+      <enumeration value = "bottom"/>
+      <enumeration value = "text-bottom"/>
+    </restriction>
+  </simpleType>
+  <simpleType name = "breaks_Type">
+    <restriction base = "NMTOKEN">
+      <enumeration value = "inherit">
+        <annotation>
+          <documentation>
+            <fop_fail>Unknown enumerated value</fop_fail>
+          </documentation>
+        </annotation>
+      </enumeration>
+      <enumeration value = "auto"/>
+      <enumeration value = "column"/>
+      <enumeration value = "page"/>
+      <enumeration value = "even-page"/>
+      <enumeration value = "odd-page"/>
+    </restriction>
+  </simpleType>
+  <simpleType name = "force_page_count_Type">
+    <restriction base = "NMTOKEN">
+      <enumeration value = "auto"/>
+      <enumeration value = "even"/>
+      <enumeration value = "odd"/>
+      <enumeration value = "end-on-even"/>
+      <enumeration value = "end-on-odd"/>
+      <enumeration value = "no-force"/>
+      <enumeration value = "inherit"/>
+    </restriction>
+  </simpleType>
+  <simpleType name = "table_layout_Type">
+    <restriction base = "NMTOKEN">
+      <enumeration value = "auto"/>
+      <enumeration value = "fixed"/>
+      <enumeration value = "inherit"/>
+    </restriction>
+  </simpleType>
+  <simpleType name = "scaling_method_Type">
+    <restriction base = "NMTOKEN">
+      <enumeration value = "auto"/>
+      <enumeration value = "integer-pixels"/>
+      <enumeration value = "resample-any-method"/>
+      <enumeration value = "inherit"/>
+    </restriction>
+  </simpleType>
+  <simpleType name = "displace_Type">
+    <restriction base = "NMTOKEN">
+      <enumeration value = "inherit"/>
+      <enumeration value = "auto"/>
+      <enumeration value = "none"/>
+      <enumeration value = "line"/>
+      <enumeration value = "indent"/>
+      <enumeration value = "block"/>
+    </restriction>
+  </simpleType>
+  <simpleType name = "media_usage_Type">
+    <restriction base = "NMTOKEN">
+      <enumeration value = "auto"/>
+      <enumeration value = "paginate"/>
+      <enumeration value = "bounded-in-one-dimension"/>
+      <enumeration value = "unbounded"/>
+    </restriction>
+  </simpleType>
+  <simpleType name = "rendering_intent_Type">
+    <restriction base = "NMTOKEN">
+      <enumeration value = "auto"/>
+      <enumeration value = "perceptual"/>
+      <enumeration value = "relative-colorimetric"/>
+      <enumeration value = "saturation"/>
+      <enumeration value = "absolute-colorimetric"/>
+      <enumeration value = "inherit"/>
+    </restriction>
+  </simpleType>
+  <simpleType name = "hyphenate_Type">
+    <restriction base = "NMTOKEN">
+      <enumeration value = "false"/>
+      <enumeration value = "true"/>
+      <enumeration value = "inherit">
+        <annotation>
+          <documentation>
+            <fop_fail>Unknown enumerated value</fop_fail>
+          </documentation>
+        </annotation>
+      </enumeration>
+    </restriction>
+  </simpleType>
+  <simpleType name = "suppress_at_line_break_Type">
+    <restriction base = "NMTOKEN">
+      <enumeration value = "auto"/>
+      <enumeration value = "suppress"/>
+      <enumeration value = "retain"/>
+      <enumeration value = "inherit"/>
+    </restriction>
+  </simpleType>
+  <simpleType name = "treat_as_word_space_Type">
+    <restriction base = "NMTOKEN">
+      <enumeration value = "auto"/>
+      <enumeration value = "true"/>
+      <enumeration value = "false"/>
+      <enumeration value = "inherit"/>
+    </restriction>
+  </simpleType>
+  <simpleType name = "dominant_baseline_Type">
+    <restriction base = "NMTOKEN">
+      <enumeration value = "auto"/>
+      <enumeration value = "use-script"/>
+      <enumeration value = "no-change"/>
+      <enumeration value = "reset-size"/>
+      <enumeration value = "ideographic"/>
+      <enumeration value = "alphabetic"/>
+      <enumeration value = "hanging"/>
+      <enumeration value = "mathematical"/>
+      <enumeration value = "inherit"/>
+    </restriction>
+  </simpleType>
+  <simpleType name = "orientation_Type">
+    <restriction base = "NMTOKEN">
+      <enumeration value = "inherit"/>
+      <enumeration value = "0"/>
+      <enumeration value = "90"/>
+      <enumeration value = "180"/>
+      <enumeration value = "270"/>
+      <enumeration value = "-90"/>
+      <enumeration value = "-180"/>
+      <enumeration value = "-270"/>
+      <enumeration value = "0deg"/>
+      <enumeration value = "90deg"/>
+      <enumeration value = "180deg"/>
+      <enumeration value = "270deg"/>
+      <enumeration value = "-90deg"/>
+      <enumeration value = "-180deg"/>
+      <enumeration value = "-270deg"/>
+    </restriction>
+  </simpleType>
+  <simpleType name = "measurement_Type">
+    <annotation>
+      <documentation>
+        Here to document the acceptable measurements 
+      </documentation>
+    </annotation>
+    <restriction base = "string">
+      <enumeration value = "px"/>
+      <enumeration value = "pt"/>
+      <enumeration value = "mm"/>
+      <enumeration value = "in"/>
+      <enumeration value = "cm"/>
+      <enumeration value = "em"/>
+    </restriction>
+  </simpleType>
+  <simpleType name = "positive_length_Type">
+    <restriction base = "string">
+      <pattern value = "\+?\d+\.?\d*(px|pt|mm|cm|in|em|%)"/>
+    </restriction>
+  </simpleType>
+  <simpleType name = "negative_length_Type">
+    <restriction base = "string">
+      <pattern value = "-\d+\.?\d*(px|pt|mm|cm|in|em|%)"/>
+    </restriction>
+  </simpleType>
+  <simpleType name = "integer_Force_Type">
+    <restriction base = "string">
+      <pattern value = "([0-9]+|force)"/>
+    </restriction>
+  </simpleType>
+  <simpleType name = "padding_top_Type">
+    <union memberTypes = "fo:width_Type fo:length_Type fo:inherit_Type"/>
+  </simpleType>
+  <simpleType name = "padding_before_Type">
+    <union memberTypes = "fo:width_Type fo:length_Type fo:length_conditional_Type fo:inherit_Type"/>
+  </simpleType>
+  <simpleType name = "country_Type">
+    <annotation>
+      <documentation>
+        A string of characters conforming to an ISO 3166 country code. 
+      </documentation>
+    </annotation>
+    <restriction base = "NMTOKEN">
+      <enumeration value = "none"/>
+      <enumeration value = "inherit"/>
+      <enumeration value = "AF"><annotation><documentation> country-name = "AFGHANISTAN"/ </documentation></annotation>               </enumeration>
+      <enumeration value = "AL"><annotation><documentation> country-name = "ALBANIA"/ </documentation></annotation>                 </enumeration>
+      <enumeration value = "DZ"><annotation><documentation> country-name = "ALGERIA"/ </documentation></annotation>                 </enumeration>
+      <enumeration value = "AS"><annotation><documentation> country-name = "AMERICANSAMOA"/ </documentation></annotation>               </enumeration>
+      <enumeration value = "AD"><annotation><documentation> country-name = "ANDORRA"/ </documentation></annotation>                 </enumeration>
+      <enumeration value = "AO"><annotation><documentation> country-name = "ANGOLA"/ </documentation></annotation>                    </enumeration>
+      <enumeration value = "AI"><annotation><documentation> country-name = "ANGUILLA"/ </documentation></annotation>                  </enumeration>
+      <enumeration value = "AQ"><annotation><documentation> country-name = "ANTARCTICA"/ </documentation></annotation>                  </enumeration>
+      <enumeration value = "AG"><annotation><documentation> country-name = "ANTIGUAANDBARBUDA"/ </documentation></annotation>             </enumeration>
+      <enumeration value = "AR"><annotation><documentation> country-name = "ARGENTINA"/ </documentation></annotation>                 </enumeration>
+      <enumeration value = "AM"><annotation><documentation> country-name = "ARMENIA"/ </documentation></annotation>                 </enumeration>
+      <enumeration value = "AW"><annotation><documentation> country-name = "ARUBA"/ </documentation></annotation>                   </enumeration>
+      <enumeration value = "AU"><annotation><documentation> country-name = "AUSTRALIA"/ </documentation></annotation>                 </enumeration>
+      <enumeration value = "AT"><annotation><documentation> country-name = "AUSTRIA"/ </documentation></annotation>                 </enumeration>
+      <enumeration value = "AZ"><annotation><documentation> country-name = "AZERBAIJAN"/ </documentation></annotation>                  </enumeration>
+      <enumeration value = "BS"><annotation><documentation> country-name = "BAHAMAS"/ </documentation></annotation>                 </enumeration>
+      <enumeration value = "BH"><annotation><documentation> country-name = "BAHRAIN"/ </documentation></annotation>                 </enumeration>
+      <enumeration value = "BD"><annotation><documentation> country-name = "BANGLADESH"/ </documentation></annotation>                  </enumeration>
+      <enumeration value = "BB"><annotation><documentation> country-name = "BARBADOS"/ </documentation></annotation>                  </enumeration>
+      <enumeration value = "BY"><annotation><documentation> country-name = "BELARUS"/ </documentation></annotation>                 </enumeration>
+      <enumeration value = "BE"><annotation><documentation> country-name = "BELGIUM"/ </documentation></annotation>                 </enumeration>
+      <enumeration value = "BZ"><annotation><documentation> country-name = "BELIZE"/ </documentation></annotation>                    </enumeration>
+      <enumeration value = "BJ"><annotation><documentation> country-name = "BENIN"/ </documentation></annotation>                   </enumeration>
+      <enumeration value = "BM"><annotation><documentation> country-name = "BERMUDA"/ </documentation></annotation>                 </enumeration>
+      <enumeration value = "BT"><annotation><documentation> country-name = "BHUTAN"/ </documentation></annotation>                    </enumeration>
+      <enumeration value = "BO"><annotation><documentation> country-name = "BOLIVIA"/ </documentation></annotation>                 </enumeration>
+      <enumeration value = "BA"><annotation><documentation> country-name = "BOSNIAANDHERZEGOVINA"/ </documentation></annotation>            </enumeration>
+      <enumeration value = "BW"><annotation><documentation> country-name = "BOTSWANA"/ </documentation></annotation>                  </enumeration>
+      <enumeration value = "BV"><annotation><documentation> country-name = "BOUVETISLAND"/ </documentation></annotation>                </enumeration>
+      <enumeration value = "BR"><annotation><documentation> country-name = "BRAZIL"/ </documentation></annotation>                    </enumeration>
+      <enumeration value = "IO"><annotation><documentation> country-name = "BRITISHINDIANOCEANTERRITORY"/ </documentation></annotation>       </enumeration>
+      <enumeration value = "BN"><annotation><documentation> country-name = "BRUNEIDARUSSALAM"/ </documentation></annotation>              </enumeration>
+      <enumeration value = "BG"><annotation><documentation> country-name = "BULGARIA"/ </documentation></annotation>                  </enumeration>
+      <enumeration value = "BF"><annotation><documentation> country-name = "BURKINAFASO"/ </documentation></annotation>               </enumeration>
+      <enumeration value = "BI"><annotation><documentation> country-name = "BURUNDI"/ </documentation></annotation>                 </enumeration>
+      <enumeration value = "KH"><annotation><documentation> country-name = "CAMBODIA"/ </documentation></annotation>                  </enumeration>
+      <enumeration value = "CM"><annotation><documentation> country-name = "CAMEROON"/ </documentation></annotation>                  </enumeration>
+      <enumeration value = "CA"><annotation><documentation> country-name = "CANADA"/ </documentation></annotation>                    </enumeration>
+      <enumeration value = "CV"><annotation><documentation> country-name = "CAPEVERDE"/ </documentation></annotation>                 </enumeration>
+      <enumeration value = "KY"><annotation><documentation> country-name = "CAYMANISLANDS"/ </documentation></annotation>               </enumeration>
+      <enumeration value = "CF"><annotation><documentation> country-name = "CENTRALAFRICANREPUBLIC"/ </documentation></annotation>            </enumeration>
+      <enumeration value = "TD"><annotation><documentation> country-name = "CHAD"/ </documentation></annotation>                    </enumeration>
+      <enumeration value = "CL"><annotation><documentation> country-name = "CHILE"/ </documentation></annotation>                   </enumeration>
+      <enumeration value = "CN"><annotation><documentation> country-name = "CHINA"/ </documentation></annotation>                   </enumeration>
+      <enumeration value = "CX"><annotation><documentation> country-name = "CHRISTMASISLAND"/ </documentation></annotation>             </enumeration>
+      <enumeration value = "CC"><annotation><documentation> country-name = "COCOS(KEELING)ISLANDS"/ </documentation></annotation>           </enumeration>
+      <enumeration value = "CO"><annotation><documentation> country-name = "COLOMBIA"/ </documentation></annotation>                  </enumeration>
+      <enumeration value = "KM"><annotation><documentation> country-name = "COMOROS"/ </documentation></annotation>                 </enumeration>
+      <enumeration value = "CG"><annotation><documentation> country-name = "CONGO"/ </documentation></annotation>                   </enumeration>
+      <enumeration value = "CD"><annotation><documentation> country-name = "CONGO,THEDEMOCRATICREPUBLICOFTHE"/ </documentation></annotation>      </enumeration>
+      <enumeration value = "CK"><annotation><documentation> country-name = "COOKISLANDS"/ </documentation></annotation>               </enumeration>
+      <enumeration value = "CR"><annotation><documentation> country-name = "COSTARICA"/ </documentation></annotation>                 </enumeration>
+      <enumeration value = "CI"><annotation><documentation> country-name = "COTED'IVOIRE"/ </documentation></annotation>                </enumeration>
+      <enumeration value = "HR"><annotation><documentation> country-name = "CROATIA"/ </documentation></annotation>                 </enumeration>
+      <enumeration value = "CU"><annotation><documentation> country-name = "CUBA"/ </documentation></annotation>                    </enumeration>
+      <enumeration value = "CY"><annotation><documentation> country-name = "CYPRUS"/ </documentation></annotation>                    </enumeration>
+      <enumeration value = "CZ"><annotation><documentation> country-name = "CZECHREPUBLIC"/ </documentation></annotation>               </enumeration>
+      <enumeration value = "DK"><annotation><documentation> country-name = "DENMARK"/ </documentation></annotation>                 </enumeration>
+      <enumeration value = "DJ"><annotation><documentation> country-name = "DJIBOUTI"/ </documentation></annotation>                  </enumeration>
+      <enumeration value = "DM"><annotation><documentation> country-name = "DOMINICA"/ </documentation></annotation>                  </enumeration>
+      <enumeration value = "DO"><annotation><documentation> country-name = "DOMINICANREPUBLIC"/ </documentation></annotation>             </enumeration>
+      <enumeration value = "TP"><annotation><documentation> country-name = "EASTTIMOR"/ </documentation></annotation>                 </enumeration>
+      <enumeration value = "EC"><annotation><documentation> country-name = "ECUADOR"/ </documentation></annotation>                 </enumeration>
+      <enumeration value = "EG"><annotation><documentation> country-name = "EGYPT"/ </documentation></annotation>                   </enumeration>
+      <enumeration value = "SV"><annotation><documentation> country-name = "ELSALVADOR"/ </documentation></annotation>                  </enumeration>
+      <enumeration value = "GQ"><annotation><documentation> country-name = "EQUATORIALGUINEA"/ </documentation></annotation>              </enumeration>
+      <enumeration value = "ER"><annotation><documentation> country-name = "ERITREA"/ </documentation></annotation>                 </enumeration>
+      <enumeration value = "EE"><annotation><documentation> country-name = "ESTONIA"/ </documentation></annotation>                 </enumeration>
+      <enumeration value = "ET"><annotation><documentation> country-name = "ETHIOPIA"/ </documentation></annotation>                  </enumeration>
+      <enumeration value = "FK"><annotation><documentation> country-name = "FALKLANDISLANDS(MALVINAS)"/ </documentation></annotation>         </enumeration>
+      <enumeration value = "FO"><annotation><documentation> country-name = "FAROEISLANDS"/ </documentation></annotation>                </enumeration>
+      <enumeration value = "FJ"><annotation><documentation> country-name = "FIJI"/ </documentation></annotation>                    </enumeration>
+      <enumeration value = "FI"><annotation><documentation> country-name = "FINLAND"/ </documentation></annotation>                 </enumeration>
+      <enumeration value = "FR"><annotation><documentation> country-name = "FRANCE"/ </documentation></annotation>                    </enumeration>
+      <enumeration value = "GF"><annotation><documentation> country-name = "FRENCHGUIANA"/ </documentation></annotation>                </enumeration>
+      <enumeration value = "PF"><annotation><documentation> country-name = "FRENCHPOLYNESIA"/ </documentation></annotation>             </enumeration>
+      <enumeration value = "TF"><annotation><documentation> country-name = "FRENCHSOUTHERNTERRITORIES"/ </documentation></annotation>         </enumeration>
+      <enumeration value = "GA"><annotation><documentation> country-name = "GABON"/ </documentation></annotation>                   </enumeration>
+      <enumeration value = "GM"><annotation><documentation> country-name = "GAMBIA"/ </documentation></annotation>                    </enumeration>
+      <enumeration value = "GE"><annotation><documentation> country-name = "GEORGIA"/ </documentation></annotation>                 </enumeration>
+      <enumeration value = "DE"><annotation><documentation> country-name = "GERMANY"/ </documentation></annotation>                 </enumeration>
+      <enumeration value = "GH"><annotation><documentation> country-name = "GHANA"/ </documentation></annotation>                   </enumeration>
+      <enumeration value = "GI"><annotation><documentation> country-name = "GIBRALTAR"/ </documentation></annotation>                 </enumeration>
+      <enumeration value = "GR"><annotation><documentation> country-name = "GREECE"/ </documentation></annotation>                    </enumeration>
+      <enumeration value = "GL"><annotation><documentation> country-name = "GREENLAND"/ </documentation></annotation>                 </enumeration>
+      <enumeration value = "GD"><annotation><documentation> country-name = "GRENADA"/ </documentation></annotation>                 </enumeration>
+      <enumeration value = "GP"><annotation><documentation> country-name = "GUADELOUPE"/ </documentation></annotation>                  </enumeration>
+      <enumeration value = "GU"><annotation><documentation> country-name = "GUAM"/ </documentation></annotation>                    </enumeration>
+      <enumeration value = "GT"><annotation><documentation> country-name = "GUATEMALA"/ </documentation></annotation>                 </enumeration>
+      <enumeration value = "GN"><annotation><documentation> country-name = "GUINEA"/ </documentation></annotation>                    </enumeration>
+      <enumeration value = "GW"><annotation><documentation> country-name = "GUINEA-BISSAU"/ </documentation></annotation>               </enumeration>
+      <enumeration value = "GY"><annotation><documentation> country-name = "GUYANA"/ </documentation></annotation>                    </enumeration>
+      <enumeration value = "HT"><annotation><documentation> country-name = "HAITI"/ </documentation></annotation>                   </enumeration>
+      <enumeration value = "HM"><annotation><documentation> country-name = "HEARDISLANDANDMCDONALDISLANDS"/ </documentation></annotation>       </enumeration>
+      <enumeration value = "VA"><annotation><documentation> country-name = "HOLYSEE(VATICANCITYSTATE)"/ </documentation></annotation>         </enumeration>
+      <enumeration value = "HN"><annotation><documentation> country-name = "HONDURAS"/ </documentation></annotation>                  </enumeration>
+      <enumeration value = "HK"><annotation><documentation> country-name = "HONGKONG"/ </documentation></annotation>                  </enumeration>
+      <enumeration value = "HU"><annotation><documentation> country-name = "HUNGARY"/ </documentation></annotation>                 </enumeration>
+      <enumeration value = "IS"><annotation><documentation> country-name = "ICELAND"/ </documentation></annotation>                 </enumeration>
+      <enumeration value = "IN"><annotation><documentation> country-name = "INDIA"/ </documentation></annotation>                   </enumeration>
+      <enumeration value = "ID"><annotation><documentation> country-name = "INDONESIA"/ </documentation></annotation>                 </enumeration>
+      <enumeration value = "IR"><annotation><documentation> country-name = "IRAN,ISLAMICREPUBLICOF"/ </documentation></annotation>            </enumeration>
+      <enumeration value = "IQ"><annotation><documentation> country-name = "IRAQ"/ </documentation></annotation>                    </enumeration>
+      <enumeration value = "IE"><annotation><documentation> country-name = "IRELAND"/ </documentation></annotation>                 </enumeration>
+      <enumeration value = "IL"><annotation><documentation> country-name = "ISRAEL"/ </documentation></annotation>                    </enumeration>
+      <enumeration value = "IT"><annotation><documentation> country-name = "ITALY"/ </documentation></annotation>                   </enumeration>
+      <enumeration value = "JM"><annotation><documentation> country-name = "JAMAICA"/ </documentation></annotation>                 </enumeration>
+      <enumeration value = "JP"><annotation><documentation> country-name = "JAPAN"/ </documentation></annotation>                   </enumeration>
+      <enumeration value = "JO"><annotation><documentation> country-name = "JORDAN"/ </documentation></annotation>                    </enumeration>
+      <enumeration value = "KZ"><annotation><documentation> country-name = "KAZAKSTAN"/ </documentation></annotation>                 </enumeration>
+      <enumeration value = "KE"><annotation><documentation> country-name = "KENYA"/ </documentation></annotation>                   </enumeration>
+      <enumeration value = "KI"><annotation><documentation> country-name = "KIRIBATI"/ </documentation></annotation>                  </enumeration>
+      <enumeration value = "KP"><annotation><documentation> country-name = "KOREA,DEMOCRATICPEOPLE'SREPUBLICOF"/ </documentation></annotation>      </enumeration>
+      <enumeration value = "KR"><annotation><documentation> country-name = "KOREA,REPUBLICOF"/ </documentation></annotation>              </enumeration>
+      <enumeration value = "KW"><annotation><documentation> country-name = "KUWAIT"/ </documentation></annotation>                    </enumeration>
+      <enumeration value = "KG"><annotation><documentation> country-name = "KYRGYZSTAN"/ </documentation></annotation>                  </enumeration>
+      <enumeration value = "LA"><annotation><documentation> country-name = "LAOPEOPLE'SDEMOCRATICREPUBLIC"/ </documentation></annotation>       </enumeration>
+      <enumeration value = "LV"><annotation><documentation> country-name = "LATVIA"/ </documentation></annotation>                    </enumeration>
+      <enumeration value = "LB"><annotation><documentation> country-name = "LEBANON"/ </documentation></annotation>                 </enumeration>
+      <enumeration value = "LS"><annotation><documentation> country-name = "LESOTHO"/ </documentation></annotation>                 </enumeration>
+      <enumeration value = "LR"><annotation><documentation> country-name = "LIBERIA"/ </documentation></annotation>                 </enumeration>
+      <enumeration value = "LY"><annotation><documentation> country-name = "LIBYANARABJAMAHIRIYA"/ </documentation></annotation>            </enumeration>
+      <enumeration value = "LI"><annotation><documentation> country-name = "LIECHTENSTEIN"/ </documentation></annotation>               </enumeration>
+      <enumeration value = "LT"><annotation><documentation> country-name = "LITHUANIA"/ </documentation></annotation>                 </enumeration>
+      <enumeration value = "LU"><annotation><documentation> country-name = "LUXEMBOURG"/ </documentation></annotation>                  </enumeration>
+      <enumeration value = "MO"><annotation><documentation> country-name = "MACAU"/ </documentation></annotation>                   </enumeration>
+      <enumeration value = "MK"><annotation><documentation> country-name = "MACEDONIA,THEFORMERYUGOSLAVREPUBLICOF"/ </documentation></annotation>   </enumeration>
+      <enumeration value = "MG"><annotation><documentation> country-name = "MADAGASCAR"/ </documentation></annotation>                  </enumeration>
+      <enumeration value = "MW"><annotation><documentation> country-name = "MALAWI"/ </documentation></annotation>                    </enumeration>
+      <enumeration value = "MY"><annotation><documentation> country-name = "MALAYSIA"/ </documentation></annotation>                  </enumeration>
+      <enumeration value = "MV"><annotation><documentation> country-name = "MALDIVES"/ </documentation></annotation>                  </enumeration>
+      <enumeration value = "ML"><annotation><documentation> country-name = "MALI"/ </documentation></annotation>                    </enumeration>
+      <enumeration value = "MT"><annotation><documentation> country-name = "MALTA"/ </documentation></annotation>                   </enumeration>
+      <enumeration value = "MH"><annotation><documentation> country-name = "MARSHALLISLANDS"/ </documentation></annotation>             </enumeration>
+      <enumeration value = "MQ"><annotation><documentation> country-name = "MARTINIQUE"/ </documentation></annotation>                  </enumeration>
+      <enumeration value = "MR"><annotation><documentation> country-name = "MAURITANIA"/ </documentation></annotation>                  </enumeration>
+      <enumeration value = "MU"><annotation><documentation> country-name = "MAURITIUS"/ </documentation></annotation>                 </enumeration>
+      <enumeration value = "YT"><annotation><documentation> country-name = "MAYOTTE"/ </documentation></annotation>                 </enumeration>
+      <enumeration value = "MX"><annotation><documentation> country-name = "MEXICO"/ </documentation></annotation>                    </enumeration>
+      <enumeration value = "FM"><annotation><documentation> country-name = "MICRONESIA,FEDERATEDSTATESOF"/ </documentation></annotation>        </enumeration>
+      <enumeration value = "MD"><annotation><documentation> country-name = "MOLDOVA,REPUBLICOF"/ </documentation></annotation>              </enumeration>
+      <enumeration value = "MC"><annotation><documentation> country-name = "MONACO"/ </documentation></annotation>                    </enumeration>
+      <enumeration value = "MN"><annotation><documentation> country-name = "MONGOLIA"/ </documentation></annotation>                  </enumeration>
+      <enumeration value = "MS"><annotation><documentation> country-name = "MONTSERRAT"/ </documentation></annotation>                  </enumeration>
+      <enumeration value = "MA"><annotation><documentation> country-name = "MOROCCO"/ </documentation></annotation>                 </enumeration>
+      <enumeration value = "MZ"><annotation><documentation> country-name = "MOZAMBIQUE"/ </documentation></annotation>                  </enumeration>
+      <enumeration value = "MM"><annotation><documentation> country-name = "MYANMAR"/ </documentation></annotation>                 </enumeration>
+      <enumeration value = "NA"><annotation><documentation> country-name = "NAMIBIA"/ </documentation></annotation>                 </enumeration>
+      <enumeration value = "NR"><annotation><documentation> country-name = "NAURU"/ </documentation></annotation>                   </enumeration>
+      <enumeration value = "NP"><annotation><documentation> country-name = "NEPAL"/ </documentation></annotation>                   </enumeration>
+      <enumeration value = "NL"><annotation><documentation> country-name = "NETHERLANDS"/ </documentation></annotation>               </enumeration>
+      <enumeration value = "AN"><annotation><documentation> country-name = "NETHERLANDSANTILLES"/ </documentation></annotation>           </enumeration>
+      <enumeration value = "NC"><annotation><documentation> country-name = "NEWCALEDONIA"/ </documentation></annotation>                </enumeration>
+      <enumeration value = "NZ"><annotation><documentation> country-name = "NEWZEALAND"/ </documentation></annotation>                  </enumeration>
+      <enumeration value = "NI"><annotation><documentation> country-name = "NICARAGUA"/ </documentation></annotation>                 </enumeration>
+      <enumeration value = "NE"><annotation><documentation> country-name = "NIGER"/ </documentation></annotation>                   </enumeration>
+      <enumeration value = "NG"><annotation><documentation> country-name = "NIGERIA"/ </documentation></annotation>                 </enumeration>
+      <enumeration value = "NU"><annotation><documentation> country-name = "NIUE"/ </documentation></annotation>                    </enumeration>
+      <enumeration value = "NF"><annotation><documentation> country-name = "NORFOLKISLAND"/ </documentation></annotation>               </enumeration>
+      <enumeration value = "MP"><annotation><documentation> country-name = "NORTHERNMARIANAISLANDS"/ </documentation></annotation>            </enumeration>
+      <enumeration value = "NO"><annotation><documentation> country-name = "NORWAY"/ </documentation></annotation>                    </enumeration>
+      <enumeration value = "OM"><annotation><documentation> country-name = "OMAN"/ </documentation></annotation>                    </enumeration>
+      <enumeration value = "PK"><annotation><documentation> country-name = "PAKISTAN"/ </documentation></annotation>                  </enumeration>
+      <enumeration value = "PW"><annotation><documentation> country-name = "PALAU"/ </documentation></annotation>                   </enumeration>
+      <enumeration value = "PS"><annotation><documentation> country-name = "PALESTINIANTERRITORY,OCCUPIED"/ </documentation></annotation>       </enumeration>
+      <enumeration value = "PA"><annotation><documentation> country-name = "PANAMA"/ </documentation></annotation>                    </enumeration>
+      <enumeration value = "PG"><annotation><documentation> country-name = "PAPUANEWGUINEA"/ </documentation></annotation>                </enumeration>
+      <enumeration value = "PY"><annotation><documentation> country-name = "PARAGUAY"/ </documentation></annotation>                  </enumeration>
+      <enumeration value = "PE"><annotation><documentation> country-name = "PERU"/ </documentation></annotation>                    </enumeration>
+      <enumeration value = "PH"><annotation><documentation> country-name = "PHILIPPINES"/ </documentation></annotation>               </enumeration>
+      <enumeration value = "PN"><annotation><documentation> country-name = "PITCAIRN"/ </documentation></annotation>                  </enumeration>
+      <enumeration value = "PL"><annotation><documentation> country-name = "POLAND"/ </documentation></annotation>                    </enumeration>
+      <enumeration value = "PT"><annotation><documentation> country-name = "PORTUGAL"/ </documentation></annotation>                  </enumeration>
+      <enumeration value = "PR"><annotation><documentation> country-name = "PUERTORICO"/ </documentation></annotation>                  </enumeration>
+      <enumeration value = "QA"><annotation><documentation> country-name = "QATAR"/ </documentation></annotation>                   </enumeration>
+      <enumeration value = "RE"><annotation><documentation> country-name = "R+UNION"/ </documentation></annotation>                 </enumeration>
+      <enumeration value = "RO"><annotation><documentation> country-name = "ROMANIA"/ </documentation></annotation>                 </enumeration>
+      <enumeration value = "RU"><annotation><documentation> country-name = "RUSSIANFEDERATION"/ </documentation></annotation>             </enumeration>
+      <enumeration value = "RW"><annotation><documentation> country-name = "RWANDA"/ </documentation></annotation>                    </enumeration>
+      <enumeration value = "SH"><annotation><documentation> country-name = "SAINTHELENA"/ </documentation></annotation>               </enumeration>
+      <enumeration value = "KN"><annotation><documentation> country-name = "SAINTKITTSANDNEVIS"/ </documentation></annotation>              </enumeration>
+      <enumeration value = "LC"><annotation><documentation> country-name = "SAINTLUCIA"/ </documentation></annotation>                  </enumeration>
+      <enumeration value = "PM"><annotation><documentation> country-name = "SAINTPIERREANDMIQUELON"/ </documentation></annotation>            </enumeration>
+      <enumeration value = "VC"><annotation><documentation> country-name = "SAINTVINCENTANDTHEGRENADINES"/ </documentation></annotation>        </enumeration>
+      <enumeration value = "WS"><annotation><documentation> country-name = "SAMOA"/ </documentation></annotation>                   </enumeration>
+      <enumeration value = "SM"><annotation><documentation> country-name = "SANMARINO"/ </documentation></annotation>                 </enumeration>
+      <enumeration value = "ST"><annotation><documentation> country-name = "SAOTOMEANDPRINCIPE"/ </documentation></annotation>              </enumeration>
+      <enumeration value = "SA"><annotation><documentation> country-name = "SAUDIARABIA"/ </documentation></annotation>               </enumeration>
+      <enumeration value = "SN"><annotation><documentation> country-name = "SENEGAL"/ </documentation></annotation>                 </enumeration>
+      <enumeration value = "SC"><annotation><documentation> country-name = "SEYCHELLES"/ </documentation></annotation>                  </enumeration>
+      <enumeration value = "SL"><annotation><documentation> country-name = "SIERRALEONE"/ </documentation></annotation>               </enumeration>
+      <enumeration value = "SG"><annotation><documentation> country-name = "SINGAPORE"/ </documentation></annotation>                 </enumeration>
+      <enumeration value = "SK"><annotation><documentation> country-name = "SLOVAKIA"/ </documentation></annotation>                  </enumeration>
+      <enumeration value = "SI"><annotation><documentation> country-name = "SLOVENIA"/ </documentation></annotation>                  </enumeration>
+      <enumeration value = "SB"><annotation><documentation> country-name = "SOLOMONISLANDS"/ </documentation></annotation>                </enumeration>
+      <enumeration value = "SO"><annotation><documentation> country-name = "SOMALIA"/ </documentation></annotation>                 </enumeration>
+      <enumeration value = "ZA"><annotation><documentation> country-name = "SOUTHAFRICA"/ </documentation></annotation>               </enumeration>
+      <enumeration value = "GS"><annotation><documentation> country-name = "SOUTHGEORGIAANDTHESOUTHSANDWICHISLANDS"/ </documentation></annotation>    </enumeration>
+      <enumeration value = "ES"><annotation><documentation> country-name = "SPAIN"/ </documentation></annotation>                   </enumeration>
+      <enumeration value = "LK"><annotation><documentation> country-name = "SRILANKA"/ </documentation></annotation>                  </enumeration>
+      <enumeration value = "SD"><annotation><documentation> country-name = "SUDAN"/ </documentation></annotation>                   </enumeration>
+      <enumeration value = "SR"><annotation><documentation> country-name = "SURINAME"/ </documentation></annotation>                  </enumeration>
+      <enumeration value = "SJ"><annotation><documentation> country-name = "SVALBARDANDJANMAYEN"/ </documentation></annotation>           </enumeration>
+      <enumeration value = "SZ"><annotation><documentation> country-name = "SWAZILAND"/ </documentation></annotation>                 </enumeration>
+      <enumeration value = "SE"><annotation><documentation> country-name = "SWEDEN"/ </documentation></annotation>                    </enumeration>
+      <enumeration value = "CH"><annotation><documentation> country-name = "SWITZERLAND"/ </documentation></annotation>               </enumeration>
+      <enumeration value = "SY"><annotation><documentation> country-name = "SYRIANARABREPUBLIC"/ </documentation></annotation>              </enumeration>
+      <enumeration value = "TW"><annotation><documentation> country-name = "TAIWAN,PROVINCEOFCHINA"/ </documentation></annotation>            </enumeration>
+      <enumeration value = "TJ"><annotation><documentation> country-name = "TAJIKISTAN"/ </documentation></annotation>                  </enumeration>
+      <enumeration value = "TZ"><annotation><documentation> country-name = "TANZANIA,UNITEDREPUBLICOF"/ </documentation></annotation>         </enumeration>
+      <enumeration value = "TH"><annotation><documentation> country-name = "THAILAND"/ </documentation></annotation>                  </enumeration>
+      <enumeration value = "TG"><annotation><documentation> country-name = "TOGO"/ </documentation></annotation>                    </enumeration>
+      <enumeration value = "TK"><annotation><documentation> country-name = "TOKELAU"/ </documentation></annotation>                 </enumeration>
+      <enumeration value = "TO"><annotation><documentation> country-name = "TONGA"/ </documentation></annotation>                   </enumeration>
+      <enumeration value = "TT"><annotation><documentation> country-name = "TRINIDADANDTOBAGO"/ </documentation></annotation>             </enumeration>
+      <enumeration value = "TN"><annotation><documentation> country-name = "TUNISIA"/ </documentation></annotation>                 </enumeration>
+      <enumeration value = "TR"><annotation><documentation> country-name = "TURKEY"/ </documentation></annotation>                    </enumeration>
+      <enumeration value = "TM"><annotation><documentation> country-name = "TURKMENISTAN"/ </documentation></annotation>                </enumeration>
+      <enumeration value = "TC"><annotation><documentation> country-name = "TURKSANDCAICOSISLANDS"/ </documentation></annotation>           </enumeration>
+      <enumeration value = "TV"><annotation><documentation> country-name = "TUVALU"/ </documentation></annotation>                    </enumeration>
+      <enumeration value = "UG"><annotation><documentation> country-name = "UGANDA"/ </documentation></annotation>                    </enumeration>
+      <enumeration value = "UA"><annotation><documentation> country-name = "UKRAINE"/ </documentation></annotation>                 </enumeration>
+      <enumeration value = "AE"><annotation><documentation> country-name = "UNITEDARABEMIRATES"/ </documentation></annotation>              </enumeration>
+      <enumeration value = "GB"><annotation><documentation> country-name = "UNITEDKINGDOM"/ </documentation></annotation>               </enumeration>
+      <enumeration value = "US"><annotation><documentation> country-name = "UNITEDSTATES"/ </documentation></annotation>                </enumeration>
+      <enumeration value = "UM"><annotation><documentation> country-name = "UNITEDSTATESMINOROUTLYINGISLANDS"/ </documentation></annotation>      </enumeration>
+      <enumeration value = "UY"><annotation><documentation> country-name = "URUGUAY"/ </documentation></annotation>                 </enumeration>
+      <enumeration value = "UZ"><annotation><documentation> country-name = "UZBEKISTAN"/ </documentation></annotation>                  </enumeration>
+      <enumeration value = "VU"><annotation><documentation> country-name = "VANUATU"/ </documentation></annotation>                 </enumeration>
+      <enumeration value = "VE"><annotation><documentation> country-name = "VENEZUELA"/ </documentation></annotation>                 </enumeration>
+      <enumeration value = "VN"><annotation><documentation> country-name = "VIETNAM"/ </documentation></annotation>                 </enumeration>
+      <enumeration value = "VG"><annotation><documentation> country-name = "VIRGINISLANDS,BRITISH"/ </documentation></annotation>           </enumeration>
+      <enumeration value = "VI"><annotation><documentation> country-name = "VIRGINISLANDS,U.S."/ </documentation></annotation>              </enumeration>
+      <enumeration value = "WF"><annotation><documentation> country-name = "WALLISANDFUTUNA"/ </documentation></annotation>             </enumeration>
+      <enumeration value = "EH"><annotation><documentation> country-name = "WESTERNSAHARA"/ </documentation></annotation>               </enumeration>
+      <enumeration value = "YE"><annotation><documentation> country-name = "YEMEN"/ </documentation></annotation>                   </enumeration>
+      <enumeration value = "YU"><annotation><documentation> country-name = "YUGOSLAVIA"/ </documentation></annotation>                  </enumeration>
+      <enumeration value = "ZM"><annotation><documentation> country-name = "ZAMBIA"/ </documentation></annotation>                    </enumeration>
+      <enumeration value = "ZW"><annotation><documentation> country-name = "ZIMBABWE"/ </documentation></annotation>                  </enumeration>
+    </restriction>
+  </simpleType>
+  <simpleType name = "language_Type">
+  <annotation><documentation> A string of characters conforming to the ISO 639 3-letter code. (Rather odd since all of them have 2 letters)</documentation></annotation>
+    <restriction base = "NMTOKEN">
+      <enumeration value = "none"/>
+      <enumeration value = "inherit"/>
+      <enumeration value = "AY"><annotation><documentation> language-name = "AYMARA" language-family = "AMERINDIAN"/ </documentation></annotation>        </enumeration>
+      <enumeration value = "GN"><annotation><documentation> language-name = "GUARANI" language-family = "AMERINDIAN"/ </documentation></annotation>     </enumeration>
+      <enumeration value = "QU"><annotation><documentation> language-name = "QUECHUA" language-family = "AMERINDIAN"/ </documentation></annotation>     </enumeration>
+      <enumeration value = "DZ"><annotation><documentation> language-name = "BHUTANI" language-family = "ASIAN"/ </documentation></annotation>          </enumeration>
+      <enumeration value = "MY"><annotation><documentation> language-name = "BURMESE" language-family = "ASIAN"/ </documentation></annotation>          </enumeration>
+      <enumeration value = "KM"><annotation><documentation> language-name = "CAMBODIAN" language-family = "ASIAN"/ </documentation></annotation>        </enumeration>
+      <enumeration value = "ZH"><annotation><documentation> language-name = "CHINESE" language-family = "ASIAN"/ </documentation></annotation>          </enumeration>
+      <enumeration value = "JA"><annotation><documentation> language-name = "JAPANESE" language-family = "ASIAN"/ </documentation></annotation>       </enumeration>
+      <enumeration value = "KO"><annotation><documentation> language-name = "KOREAN" language-family = "ASIAN"/ </documentation></annotation>         </enumeration>
+      <enumeration value = "LO"><annotation><documentation> language-name = "LAOTHIAN" language-family = "ASIAN"/ </documentation></annotation>       </enumeration>
+      <enumeration value = "TH"><annotation><documentation> language-name = "THAI" language-family = "ASIAN"/ </documentation></annotation>         </enumeration>
+      <enumeration value = "BO"><annotation><documentation> language-name = "TIBETAN" language-family = "ASIAN"/ </documentation></annotation>          </enumeration>
+      <enumeration value = "VI"><annotation><documentation> language-name = "VIETNAMESE" language-family = "ASIAN"/ </documentation></annotation>       </enumeration>
+      <enumeration value = "LV"><annotation><documentation> language-name = "LATVIAN;LETTISH" language-family = "BALTIC"/ </documentation></annotation>   </enumeration>
+      <enumeration value = "LT"><annotation><documentation> language-name = "LITHUANIAN" language-family = "BALTIC"/ </documentation></annotation>        </enumeration>
+      <enumeration value = "EU"><annotation><documentation> language-name = "BASQUE" language-family = "BASQUE"/ </documentation></annotation>          </enumeration>
+      <enumeration value = "BR"><annotation><documentation> language-name = "BRETON" language-family = "CELTIC"/ </documentation></annotation>          </enumeration>
+      <enumeration value = "GA"><annotation><documentation> language-name = "IRISH" language-family = "CELTIC"/ </documentation></annotation>         </enumeration>
+      <enumeration value = "GD"><annotation><documentation> language-name = "SCOTS-GAELIC" language-family = "CELTIC"/ </documentation></annotation>      </enumeration>
+      <enumeration value = "CY"><annotation><documentation> language-name = "WELSH" language-family = "CELTIC"/ </documentation></annotation>         </enumeration>
+      <enumeration value = "KN"><annotation><documentation> language-name = "KANNADA" language-family = "DRAVIDIAN"/ </documentation></annotation>        </enumeration>
+      <enumeration value = "ML"><annotation><documentation> language-name = "MALAYALAM" language-family = "DRAVIDIAN"/ </documentation></annotation>      </enumeration>
+      <enumeration value = "TA"><annotation><documentation> language-name = "TAMIL" language-family = "DRAVIDIAN"/ </documentation></annotation>        </enumeration>
+      <enumeration value = "TE"><annotation><documentation> language-name = "TELUGU" language-family = "DRAVIDIAN"/ </documentation></annotation>       </enumeration>
+      <enumeration value = "KL"><annotation><documentation> language-name = "GREENLANDIC" language-family = "ESKIMO"/ </documentation></annotation>     </enumeration>
+      <enumeration value = "IK"><annotation><documentation> language-name = "INUPIAK" language-family = "ESKIMO"/ </documentation></annotation>       </enumeration>
+      <enumeration value = "ET"><annotation><documentation> language-name = "ESTONIAN" language-family = "FINNO-UGRIC"/ </documentation></annotation>     </enumeration>
+      <enumeration value = "FI"><annotation><documentation> language-name = "FINNISH" language-family = "FINNO-UGRIC"/ </documentation></annotation>      </enumeration>
+      <enumeration value = "HU"><annotation><documentation> language-name = "HUNGARIAN" language-family = "FINNO-UGRIC"/ </documentation></annotation>      </enumeration>
+      <enumeration value = "AF"><annotation><documentation> language-name = "AFRIKAANS" language-family = "GERMANIC"/ </documentation></annotation>     </enumeration>
+      <enumeration value = "DA"><annotation><documentation> language-name = "DANISH" language-family = "GERMANIC"/ </documentation></annotation>        </enumeration>
+      <enumeration value = "NL"><annotation><documentation> language-name = "DUTCH" language-family = "GERMANIC"/ </documentation></annotation>       </enumeration>
+      <enumeration value = "EN"><annotation><documentation> language-name = "ENGLISH" language-family = "GERMANIC"/ </documentation></annotation>       </enumeration>
+      <enumeration value = "FO"><annotation><documentation> language-name = "FAROESE" language-family = "GERMANIC"/ </documentation></annotation>       </enumeration>
+      <enumeration value = "FY"><annotation><documentation> language-name = "FRISIAN" language-family = "GERMANIC"/ </documentation></annotation>       </enumeration>
+      <enumeration value = "DE"><annotation><documentation> language-name = "GERMAN" language-family = "GERMANIC"/ </documentation></annotation>        </enumeration>
+      <enumeration value = "IS"><annotation><documentation> language-name = "ICELANDIC" language-family = "GERMANIC"/ </documentation></annotation>     </enumeration>
+      <enumeration value = "NO"><annotation><documentation> language-name = "NORWEGIAN" language-family = "GERMANIC"/ </documentation></annotation>     </enumeration>
+      <enumeration value = "SV"><annotation><documentation> language-name = "SWEDISH" language-family = "GERMANIC"/ </documentation></annotation>       </enumeration>
+      <enumeration value = "YI"><annotation><documentation> language-name = "YIDDISH" language-family = "GERMANIC"/ </documentation></annotation>       </enumeration>
+      <enumeration value = "OM"><annotation><documentation> language-name = "AFAN-(OROMO)" language-family = "HAMITIC"/ </documentation></annotation>     </enumeration>
+      <enumeration value = "AA"><annotation><documentation> language-name = "AFAR" language-family = "HAMITIC"/ </documentation></annotation>         </enumeration>
+      <enumeration value = "SO"><annotation><documentation> language-name = "SOMALI" language-family = "HAMITIC"/ </documentation></annotation>       </enumeration>
+      <enumeration value = "AB"><annotation><documentation> language-name = "ABKHAZIAN" language-family = "IBERO-CAUCASIAN"/ </documentation></annotation>    </enumeration>
+      <enumeration value = "KA"><annotation><documentation> language-name = "GEORGIAN" language-family = "IBERO-CAUCASIAN"/ </documentation></annotation>   </enumeration>
+      <enumeration value = "AS"><annotation><documentation> language-name = "ASSAMESE" language-family = "INDIAN"/ </documentation></annotation>        </enumeration>
+      <enumeration value = "BN"><annotation><documentation> language-name = "BENGALI;BANGLA" language-family = "INDIAN"/ </documentation></annotation>      </enumeration>
+      <enumeration value = "BH"><annotation><documentation> language-name = "BIHARI" language-family = "INDIAN"/ </documentation></annotation>          </enumeration>
+      <enumeration value = "GU"><annotation><documentation> language-name = "GUJARATI" language-family = "INDIAN"/ </documentation></annotation>        </enumeration>
+      <enumeration value = "HI"><annotation><documentation> language-name = "HINDI" language-family = "INDIAN"/ </documentation></annotation>         </enumeration>
+      <enumeration value = "KS"><annotation><documentation> language-name = "KASHMIRI" language-family = "INDIAN"/ </documentation></annotation>        </enumeration>
+      <enumeration value = "MR"><annotation><documentation> language-name = "MARATHI" language-family = "INDIAN"/ </documentation></annotation>       </enumeration>
+      <enumeration value = "NE"><annotation><documentation> language-name = "NEPALI" language-family = "INDIAN"/ </documentation></annotation>          </enumeration>
+      <enumeration value = "OR"><annotation><documentation> language-name = "ORIYA" language-family = "INDIAN"/ </documentation></annotation>         </enumeration>
+      <enumeration value = "PA"><annotation><documentation> language-name = "PUNJABI" language-family = "INDIAN"/ </documentation></annotation>       </enumeration>
+      <enumeration value = "SA"><annotation><documentation> language-name = "SANSKRIT" language-family = "INDIAN"/ </documentation></annotation>        </enumeration>
+      <enumeration value = "SD"><annotation><documentation> language-name = "SINDHI" language-family = "INDIAN"/ </documentation></annotation>          </enumeration>
+      <enumeration value = "SI"><annotation><documentation> language-name = "SINGHALESE" language-family = "INDIAN"/ </documentation></annotation>        </enumeration>
+      <enumeration value = "UR"><annotation><documentation> language-name = "URDU" language-family = "INDIAN"/ </documentation></annotation>          </enumeration>
+      <enumeration value = "SQ"><annotation><documentation> language-name = "ALBANIAN" language-family = "INDO-EUROPEAN(OTHER)"/ </documentation></annotation>  </enumeration>
+      <enumeration value = "HY"><annotation><documentation> language-name = "ARMENIAN" language-family = "INDO-EUROPEAN(OTHER)"/ </documentation></annotation>  </enumeration>
+      <enumeration value = "EO"><annotation><documentation> language-name = "ESPERANTO" language-family = "INTERNATIONAL-AUX."/ </documentation></annotation> </enumeration>
+      <enumeration value = "IA"><annotation><documentation> language-name = "INTERLINGUA" language-family = "INTERNATIONAL-AUX."/ </documentation></annotation> </enumeration>
+      <enumeration value = "IE"><annotation><documentation> language-name = "INTERLINGUE" language-family = "INTERNATIONAL-AUX."/ </documentation></annotation> </enumeration>
+      <enumeration value = "VO"><annotation><documentation> language-name = "VOLAPUK" language-family = "INTERNATIONAL-AUX."/ </documentation></annotation> </enumeration>
+      <enumeration value = "KU"><annotation><documentation> language-name = "KURDISH" language-family = "IRANIAN"/ </documentation></annotation>        </enumeration>
+      <enumeration value = "PS"><annotation><documentation> language-name = "PASHTO;PUSHTO" language-family = "IRANIAN"/ </documentation></annotation>      </enumeration>
+      <enumeration value = "FA"><annotation><documentation> language-name = "PERSIAN-(farsi)" language-family = "IRANIAN"/ </documentation></annotation>    </enumeration>
+      <enumeration value = "TG"><annotation><documentation> language-name = "TAJIK" language-family = "IRANIAN"/ </documentation></annotation>          </enumeration>
+      <enumeration value = "EL"><annotation><documentation> language-name = "GREEK" language-family = "LATIN/GREEK"/ </documentation></annotation>        </enumeration>
+      <enumeration value = "LA"><annotation><documentation> language-name = "LATIN" language-family = "LATIN/GREEK"/ </documentation></annotation>        </enumeration>
+      <enumeration value = "HA"><annotation><documentation> language-name = "HAUSA" language-family = "NEGRO-AFRICAN"/ </documentation></annotation>      </enumeration>
+      <enumeration value = "RW"><annotation><documentation> language-name = "KINYARWANDA" language-family = "NEGRO-AFRICAN"/ </documentation></annotation>    </enumeration>
+      <enumeration value = "RN"><annotation><documentation> language-name = "KURUNDI" language-family = "NEGRO-AFRICAN"/ </documentation></annotation>      </enumeration>
+      <enumeration value = "LN"><annotation><documentation> language-name = "LINGALA" language-family = "NEGRO-AFRICAN"/ </documentation></annotation>      </enumeration>
+      <enumeration value = "SG"><annotation><documentation> language-name = "SANGHO" language-family = "NEGRO-AFRICAN"/ </documentation></annotation>     </enumeration>
+      <enumeration value = "ST"><annotation><documentation> language-name = "SESOTHO" language-family = "NEGRO-AFRICAN"/ </documentation></annotation>      </enumeration>
+      <enumeration value = "TN"><annotation><documentation> language-name = "SETSWANA" language-family = "NEGRO-AFRICAN"/ </documentation></annotation>   </enumeration>
+      <enumeration value = "SN"><annotation><documentation> language-name = "SHONA" language-family = "NEGRO-AFRICAN"/ </documentation></annotation>      </enumeration>
+      <enumeration value = "SS"><annotation><documentation> language-name = "SISWATI" language-family = "NEGRO-AFRICAN"/ </documentation></annotation>      </enumeration>
+      <enumeration value = "SW"><annotation><documentation> language-name = "SWAHILI" language-family = "NEGRO-AFRICAN"/ </documentation></annotation>      </enumeration>
+      <enumeration value = "TS"><annotation><documentation> language-name = "TSONGA" language-family = "NEGRO-AFRICAN"/ </documentation></annotation>     </enumeration>
+      <enumeration value = "TW"><annotation><documentation> language-name = "TWI" language-family = "NEGRO-AFRICAN"/ </documentation></annotation>        </enumeration>
+      <enumeration value = "WO"><annotation><documentation> language-name = "WOLOF" language-family = "NEGRO-AFRICAN"/ </documentation></annotation>      </enumeration>
+      <enumeration value = "XH"><annotation><documentation> language-name = "XHOSA" language-family = "NEGRO-AFRICAN"/ </documentation></annotation>      </enumeration>
+      <enumeration value = "YO"><annotation><documentation> language-name = "YORUBA" language-family = "NEGRO-AFRICAN"/ </documentation></annotation>     </enumeration>
+      <enumeration value = "ZU"><annotation><documentation> language-name = "ZULU" language-family = "NEGRO-AFRICAN"/ </documentation></annotation>     </enumeration>
+      <enumeration value = "FJ"><annotation><documentation> language-name = "FIJI" language-family = "OCEANIC/INDONESIAN"/ </documentation></annotation>    </enumeration>
+      <enumeration value = "ID"><annotation><documentation> language-name = "INDONESIAN" language-family = "OCEANIC/INDONESIAN"/ </documentation></annotation>  </enumeration>
+      <enumeration value = "JV"><annotation><documentation> language-name = "JAVANESE" language-family = "OCEANIC/INDONESIAN"/ </documentation></annotation>  </enumeration>
+      <enumeration value = "MG"><annotation><documentation> language-name = "MALAGASY" language-family = "OCEANIC/INDONESIAN"/ </documentation></annotation>  </enumeration>
+      <enumeration value = "MS"><annotation><documentation> language-name = "MALAY" language-family = "OCEANIC/INDONESIAN"/ </documentation></annotation>   </enumeration>
+      <enumeration value = "MI"><annotation><documentation> language-name = "MAORI" language-family = "OCEANIC/INDONESIAN"/ </documentation></annotation>   </enumeration>
+      <enumeration value = "SM"><annotation><documentation> language-name = "SAMOAN" language-family = "OCEANIC/INDONESIAN"/ </documentation></annotation>    </enumeration>
+      <enumeration value = "SU"><annotation><documentation> language-name = "SUNDANESE" language-family = "OCEANIC/INDONESIAN"/ </documentation></annotation> </enumeration>
+      <enumeration value = "TL"><annotation><documentation> language-name = "TAGALOG" language-family = "OCEANIC/INDONESIAN"/ </documentation></annotation> </enumeration>
+      <enumeration value = "TO"><annotation><documentation> language-name = "TONGA" language-family = "OCEANIC/INDONESIAN"/ </documentation></annotation>   </enumeration>
+      <enumeration value = "CA"><annotation><documentation> language-name = "CATALAN" language-family = "ROMANCE"/ </documentation></annotation>        </enumeration>
+      <enumeration value = "CO"><annotation><documentation> language-name = "CORSICAN" language-family = "ROMANCE"/ </documentation></annotation>       </enumeration>
+      <enumeration value = "FR"><annotation><documentation> language-name = "FRENCH" language-family = "ROMANCE"/ </documentation></annotation>       </enumeration>
+      <enumeration value = "GL"><annotation><documentation> language-name = "GALICIAN" language-family = "ROMANCE"/ </documentation></annotation>       </enumeration>
+      <enumeration value = "IT"><annotation><documentation> language-name = "ITALIAN" language-family = "ROMANCE"/ </documentation></annotation>        </enumeration>
+      <enumeration value = "MO"><annotation><documentation> language-name = "MOLDAVIAN" language-family = "ROMANCE"/ </documentation></annotation>        </enumeration>
+      <enumeration value = "OC"><annotation><documentation> language-name = "OCCITAN" language-family = "ROMANCE"/ </documentation></annotation>        </enumeration>
+      <enumeration value = "PT"><annotation><documentation> language-name = "PORTUGUESE" language-family = "ROMANCE"/ </documentation></annotation>     </enumeration>
+      <enumeration value = "RM"><annotation><documentation> language-name = "RHAETO-ROMANCE" language-family = "ROMANCE"/ </documentation></annotation>   </enumeration>
+      <enumeration value = "RO"><annotation><documentation> language-name = "ROMANIAN" language-family = "ROMANCE"/ </documentation></annotation>       </enumeration>
+      <enumeration value = "ES"><annotation><documentation> language-name = "SPANISH" language-family = "ROMANCE"/ </documentation></annotation>        </enumeration>
+      <enumeration value = "AM"><annotation><documentation> language-name = "AMHARIC" language-family = "SEMITIC"/ </documentation></annotation>        </enumeration>
+      <enumeration value = "AR"><annotation><documentation> language-name = "ARABIC" language-family = "SEMITIC"/ </documentation></annotation>       </enumeration>
+      <enumeration value = "HE"><annotation><documentation> language-name = "HEBREW" language-family = "SEMITIC"/ </documentation></annotation>       </enumeration>
+      <enumeration value = "MT"><annotation><documentation> language-name = "MALTESE" language-family = "SEMITIC"/ </documentation></annotation>        </enumeration>
+      <enumeration value = "TI"><annotation><documentation> language-name = "TIGRINYA" language-family = "SEMITIC"/ </documentation></annotation>       </enumeration>
+      <enumeration value = "BG"><annotation><documentation> language-name = "BULGARIAN" language-family = "SLAVIC"/ </documentation></annotation>       </enumeration>
+      <enumeration value = "BE"><annotation><documentation> language-name = "BYELORUSSIAN" language-family = "SLAVIC"/ </documentation></annotation>      </enumeration>
+      <enumeration value = "HR"><annotation><documentation> language-name = "CROATIAN" language-family = "SLAVIC"/ </documentation></annotation>        </enumeration>
+      <enumeration value = "CS"><annotation><documentation> language-name = "CZECH" language-family = "SLAVIC"/ </documentation></annotation>         </enumeration>
+      <enumeration value = "MK"><annotation><documentation> language-name = "MACEDONIAN" language-family = "SLAVIC"/ </documentation></annotation>        </enumeration>
+      <enumeration value = "PL"><annotation><documentation> language-name = "POLISH" language-family = "SLAVIC"/ </documentation></annotation>          </enumeration>
+      <enumeration value = "RU"><annotation><documentation> language-name = "RUSSIAN" language-family = "SLAVIC"/ </documentation></annotation>       </enumeration>
+      <enumeration value = "SR"><annotation><documentation> language-name = "SERBIAN" language-family = "SLAVIC"/ </documentation></annotation>       </enumeration>
+      <enumeration value = "SH"><annotation><documentation> language-name = "SERBO-CROATIAN" language-family = "SLAVIC"/ </documentation></annotation>      </enumeration>
+      <enumeration value = "SK"><annotation><documentation> language-name = "SLOVAK" language-family = "SLAVIC"/ </documentation></annotation>          </enumeration>
+      <enumeration value = "SL"><annotation><documentation> language-name = "SLOVENIAN" language-family = "SLAVIC"/ </documentation></annotation>       </enumeration>
+      <enumeration value = "UK"><annotation><documentation> language-name = "UKRAINIAN" language-family = "SLAVIC"/ </documentation></annotation>       </enumeration>
+      <enumeration value = "AZ"><annotation><documentation> language-name = "AZERBAIJANI" language-family = "TURKIC/ALTAIC"/ </documentation></annotation>    </enumeration>
+      <enumeration value = "BA"><annotation><documentation> language-name = "BASHKIR" language-family = "TURKIC/ALTAIC"/ </documentation></annotation>      </enumeration>
+      <enumeration value = "KK"><annotation><documentation> language-name = "KAZAKH" language-family = "TURKIC/ALTAIC"/ </documentation></annotation>     </enumeration>
+      <enumeration value = "KY"><annotation><documentation> language-name = "KIRGHIZ" language-family = "TURKIC/ALTAIC"/ </documentation></annotation>      </enumeration>
+      <enumeration value = "TT"><annotation><documentation> language-name = "TATAR" language-family = "TURKIC/ALTAIC"/ </documentation></annotation>      </enumeration>
+      <enumeration value = "TR"><annotation><documentation> language-name = "TURKISH" language-family = "TURKIC/ALTAIC"/ </documentation></annotation>      </enumeration>
+      <enumeration value = "TK"><annotation><documentation> language-name = "TURKMEN" language-family = "TURKIC/ALTAIC"/ </documentation></annotation>      </enumeration>
+      <enumeration value = "UZ"><annotation><documentation> language-name = "UZBEK" language-family = "TURKIC/ALTAIC"/ </documentation></annotation>      </enumeration>
+      <enumeration value = "BI"><annotation><documentation> language-name = "BISLAMA" language-family = "[not-given]"/ </documentation></annotation>      </enumeration>
+      <enumeration value = "MN"><annotation><documentation> language-name = "MONGOLIAN" language-family = "[not-given]"/ </documentation></annotation>      </enumeration>
+      <enumeration value = "NA"><annotation><documentation> language-name = "NAURU" language-family = "[not-given]"/ </documentation></annotation>        </enumeration>
+    </restriction>
+  </simpleType>
+  <simpleType name = "always_Type">
+    <restriction base = "NMTOKEN">
+      <enumeration value = "always"/>
+    </restriction>
+  </simpleType>
+  <simpleType name = "auto_Type">
+    <restriction base = "NMTOKEN">
+      <enumeration value = "auto"/>
+    </restriction>
+  </simpleType>
+  <simpleType name = "baseline_base_Type">
+    <restriction base = "NMTOKEN">
+      <enumeration value = "baseline"/>
+      <enumeration value = "sub"/>
+      <enumeration value = "super"/>
+    </restriction>
+  </simpleType>
+  <simpleType name = "caption_side_Type">
+    <restriction base = "NMTOKEN">
+      <enumeration value = "before"/>
+      <enumeration value = "after"/>
+      <enumeration value = "start"/>
+      <enumeration value = "end"/>
+      <enumeration value = "top"/>
+      <enumeration value = "bottom"/>
+      <enumeration value = "left"/>
+      <enumeration value = "right"/>
+      <enumeration value = "inherit"/>
+    </restriction>
+  </simpleType>
+  <simpleType name = "display_align_Type">
+    <restriction base = "NMTOKEN">
+      <enumeration value = "auto"/>
+      <enumeration value = "before"/>
+      <enumeration value = "center"/>
+      <enumeration value = "after"/>
+      <enumeration value = "inherit"/>
+    </restriction>
+  </simpleType>
+  <simpleType name = "float_Type">
+    <restriction base = "NMTOKEN">
+      <enumeration value = "inherit"/>
+      <enumeration value = "before"/>
+      <enumeration value = "start"/>
+      <enumeration value = "end"/>
+      <enumeration value = "left"/>
+      <enumeration value = "right"/>
+      <enumeration value = "none"/>
+    </restriction>
+  </simpleType>
+  <simpleType name = "blank_or_not_blank_Type">
+    <restriction base = "NMTOKEN">
+      <enumeration value = "blank"/>
+      <enumeration value = "not-blank"/>
+      <enumeration value = "any"/>
+      <enumeration value = "inherit"/>
+    </restriction>
+  </simpleType>
+  <simpleType name = "text_transform_Type">
+    <restriction base = "NMTOKEN">
+      <enumeration value = "capitalize"/>
+      <enumeration value = "uppercase"/>
+      <enumeration value = "lowercase"/>
+      <enumeration value = "none"/>
+      <enumeration value = "inherit"/>
+    </restriction>
+  </simpleType>
+  <simpleType name = "border_collapse_Type">
+    <restriction base = "NMTOKEN">
+      <enumeration value = "collapse"/>
+      <enumeration value = "separate"/>
+      <enumeration value = "inherit"/>
+    </restriction>
+  </simpleType>
+  <simpleType name = "line_height_shift_adjustment_Type">
+    <restriction base = "NMTOKEN">
+      <enumeration value = "consider-shifts"/>
+      <enumeration value = "disregard-shifts"/>
+      <enumeration value = "inherit"/>
+    </restriction>
+  </simpleType>
+  <simpleType name = "white_space_collapse_Type">
+    <restriction base = "NMTOKEN">
+      <enumeration value = "false"/>
+      <enumeration value = "true"/>
+      <enumeration value = "inherit">
+        <annotation>
+          <documentation>
+            <fop_fail>Unknown enumerated value</fop_fail>
+          </documentation>
+        </annotation>
+      </enumeration>
+    </restriction>
+  </simpleType>
+  <simpleType name = "retrieve_position_Type">
+    <restriction base = "NMTOKEN">
+      <enumeration value = "first-starting-within-page"/>
+      <enumeration value = "first-including-carryover"/>
+      <enumeration value = "last-starting-within-page"/>
+      <enumeration value = "last-ending-within-page"/>
+    </restriction>
+  </simpleType>
+  <simpleType name = "page_position_Type">
+    <restriction base = "NMTOKEN">
+      <enumeration value = "first"/>
+      <enumeration value = "last"/>
+      <enumeration value = "rest"/>
+      <enumeration value = "any"/>
+      <enumeration value = "inherit"/>
+    </restriction>
+  </simpleType>
+  <simpleType name = "force_Type">
+    <restriction base = "NMTOKEN">
+      <enumeration value = "force"/>
+    </restriction>
+  </simpleType>
+  <simpleType name = "white_space_treatment_Type">
+    <annotation>
+      <documentation>
+        <fop_fail>property ignored</fop_fail>
+      </documentation>
+    </annotation>
+    <restriction base = "NMTOKEN">
+      <enumeration value = "ignore"/>
+      <enumeration value = "preserve"/>
+      <enumeration value = "ignore-if-before-linefeed"/>
+      <enumeration value = "ignore-if-after-linefeed"/>
+      <enumeration value = "ignore-if-surrounding-linefeed"/>
+      <enumeration value = "inherit"/>
+    </restriction>
+  </simpleType>
+  <simpleType name = "linefeed_treatment_Type">
+    <annotation>
+      <documentation>
+        <fop_fail>property is not implemented yet</fop_fail>
+      </documentation>
+    </annotation>
+    <restriction base = "NMTOKEN">
+      <enumeration value = "ignore"/>
+      <enumeration value = "preserve"/>
+      <enumeration value = "treat-as-space"/>
+      <enumeration value = "treat-as-zero-width-space"/>
+      <enumeration value = "inherit"/>
+    </restriction>
+  </simpleType>
+  <simpleType name = "inherit_Type">
+    <restriction base = "NMTOKEN">
+      <enumeration value = "inherit"/>
+    </restriction>
+  </simpleType>
+  <simpleType name = "horizontal_position_Type">
+    <restriction base = "NMTOKEN">
+      <enumeration value = "left"/>
+      <enumeration value = "center"/>
+      <enumeration value = "right"/>
+    </restriction>
+  </simpleType>
+  <simpleType name = "line_stacking_strategy_Type">
+    <restriction base = "NMTOKEN">
+      <enumeration value = "line-height"/>
+      <enumeration value = "font-height"/>
+      <enumeration value = "max-height"/>
+      <enumeration value = "inherit"/>
+    </restriction>
+  </simpleType>
+  <simpleType name = "active_state_Type">
+    <restriction base = "NMTOKEN">
+      <enumeration value = "link"/>
+      <enumeration value = "visited"/>
+      <enumeration value = "active"/>
+      <enumeration value = "hover"/>
+      <enumeration value = "focus"/>
+    </restriction>
+  </simpleType>
+  <simpleType name = "writing_mode_Type">
+    <restriction base = "NMTOKEN">
+      <enumeration value = "lr-tb"/>
+      <enumeration value = "rl-tb"/>
+      <enumeration value = "tb-rl"/>
+      <enumeration value = "lr"/>
+      <enumeration value = "rl"/>
+      <enumeration value = "tb"/>
+      <enumeration value = "inherit"/>
+    </restriction>
+  </simpleType>
+  <simpleType name = "direction_Type">
+    <restriction base = "NMTOKEN">
+      <enumeration value = "ltr"/>
+      <enumeration value = "rtl"/>
+      <enumeration value = "inherit"/>
+    </restriction>
+  </simpleType>
+  <simpleType name = "wrap_option_Type">
+    <restriction base = "NMTOKEN">
+      <enumeration value = "no-wrap"/>
+      <enumeration value = "wrap"/>
+      <enumeration value = "inherit">
+        <annotation>
+          <documentation>
+            <fop_fail>Unknown enumerated value</fop_fail>
+          </documentation>
+        </annotation>
+      </enumeration>
+    </restriction>
+  </simpleType>
+  <simpleType name = "span_Type">
+    <restriction base = "NMTOKEN">
+      <enumeration value = "none"/>
+      <enumeration value = "all"/>
+      <enumeration value = "inherit">
+        <annotation>
+          <documentation>
+            <fop_fail>Unknown enumerated value</fop_fail>
+          </documentation>
+        </annotation>
+      </enumeration>
+    </restriction>
+  </simpleType>
+  <simpleType name = "rule_style_Type">
+    <restriction base = "NMTOKEN">
+      <enumeration value = "none"/>
+      <enumeration value = "dotted"/>
+      <enumeration value = "dashed"/>
+      <enumeration value = "solid"/>
+      <enumeration value = "double"/>
+      <enumeration value = "groove"/>
+      <enumeration value = "ridge"/>
+      <enumeration value = "inherit"/>
+    </restriction>
+  </simpleType>
+  <simpleType name = "border_style_Type">
+    <restriction base = "NMTOKEN">
+      <enumeration value = "inherit">
+        <annotation>
+          <documentation>
+            <fop_fail>Unknown enumerated value</fop_fail>
+          </documentation>
+        </annotation>
+      </enumeration>
+      <enumeration value = "none"/>
+      <enumeration value = "hidden"/>
+      <enumeration value = "dotted"/>
+      <enumeration value = "dashed"/>
+      <enumeration value = "solid"/>
+      <enumeration value = "double"/>
+      <enumeration value = "groove"/>
+      <enumeration value = "ridge"/>
+      <enumeration value = "inset"/>
+      <enumeration value = "outset"/>
+    </restriction>
+  </simpleType>
+  <simpleType name = "leader_alignment_Type">
+    <restriction base = "NMTOKEN">
+      <enumeration value = "none"/>
+      <enumeration value = "reference-area"/>
+      <enumeration value = "page"/>
+      <enumeration value = "inherit"/>
+    </restriction>
+  </simpleType>
+  <simpleType name = "text_decoration_Type">
+    <annotation>
+      <documentation>
+        <fop_result>not implemented</fop_result>
+      </documentation>
+    </annotation>
+    <restriction base = "NMTOKEN">
+      <enumeration value = "none"/>
+      <enumeration value = "underline"/>
+      <enumeration value = "no-underline"/>
+      <enumeration value = "overline"/>
+      <enumeration value = "no-overline"/>
+      <enumeration value = "line-through"/>
+      <enumeration value = "no-line-through"/>
+      <enumeration value = "blink"/>
+      <enumeration value = "no-blink"/>
+      <enumeration value = "inherit"/>
+    </restriction>
+  </simpleType>
+  <simpleType name = "unicode_bidi_Type">
+    <restriction base = "NMTOKEN">
+      <enumeration value = "normal"/>
+      <enumeration value = "embed"/>
+      <enumeration value = "bidi-override"/>
+      <enumeration value = "inherit"/>
+    </restriction>
+  </simpleType>
+  <simpleType name = "odd_or_even_Type">
+    <restriction base = "NMTOKEN">
+      <enumeration value = "odd"/>
+      <enumeration value = "even"/>
+      <enumeration value = "any"/>
+      <enumeration value = "inherit"/>
+    </restriction>
+  </simpleType>
+  <simpleType name = "once_Type">
+    <restriction base = "NMTOKEN">
+      <enumeration value = "once"/>
+    </restriction>
+  </simpleType>
+  <simpleType name = "retrieve_boundary_Type">
+    <restriction base = "NMTOKEN">
+      <enumeration value = "page"/>
+      <enumeration value = "page-sequence"/>
+      <enumeration value = "document"/>
+    </restriction>
+  </simpleType>
+  <simpleType name = "starting_state_Type">
+    <restriction base = "NMTOKEN">
+      <enumeration value = "show"/>
+      <enumeration value = "hide"/>
+    </restriction>
+  </simpleType>
+  <simpleType name = "leader_pattern_Type">
+    <restriction base = "NMTOKEN">
+      <enumeration value = "space"/>
+      <enumeration value = "rule"/>
+      <enumeration value = "dots"/>
+      <enumeration value = "use-content"/>
+      <enumeration value = "inherit"/>
+    </restriction>
+  </simpleType>
+  <simpleType name = "text_align_last_Type">
+    <restriction base = "NMTOKEN">
+      <enumeration value = "start"/>
+      <enumeration value = "center"/>
+      <enumeration value = "end"/>
+      <enumeration value = "justify"/>
+      <enumeration value = "inside">
+        <annotation>
+          <documentation>
+            <fop_fail>Unknown enumerated value</fop_fail>
+          </documentation>
+        </annotation>
+      </enumeration>
+      <enumeration value = "outside">
+        <annotation>
+          <documentation>
+            <fop_fail>Unknown enumerated value</fop_fail>
+          </documentation>
+        </annotation>
+      </enumeration>
+      <enumeration value = "left">
+        <annotation>
+          <documentation>
+            <fop_fail>Unknown enumerated value</fop_fail>
+          </documentation>
+        </annotation>
+      </enumeration>
+      <enumeration value = "right">
+        <annotation>
+          <documentation>
+            <fop_fail>Unknown enumerated value</fop_fail>
+          </documentation>
+        </annotation>
+      </enumeration>
+      <enumeration value = "inherit">
+        <annotation>
+          <documentation>
+            <fop_fail>Unknown enumerated value</fop_fail>
+          </documentation>
+        </annotation>
+      </enumeration>
+    </restriction>
+  </simpleType>
+  <simpleType name = "text_align_Type">
+    <restriction base = "NMTOKEN">
+      <enumeration value = "start"/>
+      <enumeration value = "center"/>
+      <enumeration value = "end"/>
+      <enumeration value = "justify"/>
+      <enumeration value = "inside">
+        <annotation>
+          <documentation>
+            <fop_fail>Unknown enumerated value</fop_fail>
+          </documentation>
+        </annotation>
+      </enumeration>
+      <enumeration value = "outside">
+        <annotation>
+          <documentation>
+            <fop_fail>Unknown enumerated value</fop_fail>
+          </documentation>
+        </annotation>
+      </enumeration>
+      <enumeration value = "left"/>
+      <enumeration value = "right"/>
+      <enumeration value = "inherit">
+        <annotation>
+          <documentation>
+            <fop_fail>Unknown enumerated value</fop_fail>
+          </documentation>
+        </annotation>
+      </enumeration>
+    </restriction>
+  </simpleType>
+  <simpleType name = "width_Type">
+    <restriction base = "NMTOKEN">
+      <enumeration value = "thin"/>
+      <enumeration value = "medium"/>
+      <enumeration value = "thick"/>
+    </restriction>
+  </simpleType>
+  <simpleType name = "vertical_position_Type">
+    <restriction base = "NMTOKEN">
+      <enumeration value = "top"/>
+      <enumeration value = "center"/>
+      <enumeration value = "bottom"/>
+    </restriction>
+  </simpleType>
+  <simpleType name = "auto_restore_Type">
+    <restriction base = "NMTOKEN">
+      <enumeration value = "true"/>
+      <enumeration value = "false"/>
+    </restriction>
+  </simpleType>
+  <simpleType name = "table_omit_footer_at_break_Type">
+    <restriction base = "NMTOKEN">
+      <enumeration value = "true"/>
+      <enumeration value = "false"/>
+    </restriction>
+  </simpleType>
+  <simpleType name = "table_omit_header_at_break_Type">
+    <restriction base = "NMTOKEN">
+      <enumeration value = "true"/>
+      <enumeration value = "false"/>
+    </restriction>
+  </simpleType>
+  <simpleType name = "precedence_Type">
+    <restriction base = "NMTOKEN">
+      <enumeration value = "true"/>
+      <enumeration value = "false"/>
+      <enumeration value = "inherit"/>
+    </restriction>
+  </simpleType>
+  <simpleType name = "score_spaces_Type">
+    <restriction base = "NMTOKEN">
+      <enumeration value = "true"/>
+      <enumeration value = "false"/>
+      <enumeration value = "inherit"/>
+    </restriction>
+  </simpleType>
+  <simpleType name = "scaling_Type">
+    <restriction base = "NMTOKEN">
+      <enumeration value = "uniform"/>
+      <enumeration value = "non-uniform"/>
+      <enumeration value = "inherit"/>
+    </restriction>
+  </simpleType>
+  <simpleType name = "use_font_metrics_Type">
+    <restriction base = "NMTOKEN">
+      <enumeration value = "use-font-metrics"/>
+    </restriction>
+  </simpleType>
+  <simpleType name = "background_image_Type">
+    <restriction base = "NMTOKEN">
+      <enumeration value = "uri-specification"/>
+      <enumeration value = "none"/>
+      <enumeration value = "inherit"/>
+    </restriction>
+  </simpleType>
+  <simpleType name = "hyphenation_keep_Type">
+    <restriction base = "NMTOKEN">
+      <enumeration value = "auto"/>
+      <enumeration value = "column"/>
+      <enumeration value = "page"/>
+      <enumeration value = "inherit"/>
+    </restriction>
+  </simpleType>
+  <simpleType name = "no_limit_Type">
+    <restriction base = "NMTOKEN">
+      <enumeration value = "no-limit"/>
+    </restriction>
+  </simpleType>
+  <simpleType name = "visibility_Type">
+    <annotation>
+      <documentation>
+        <fop_fail>property is not implemented yet</fop_fail>
+      </documentation>
+    </annotation>
+    <restriction base = "NMTOKEN">
+      <enumeration value = "visible"/>
+      <enumeration value = "hidden"/>
+      <enumeration value = "collapse"/>
+      <enumeration value = "inherit"/>
+    </restriction>
+  </simpleType>
+  <simpleType name = "overflow_Type">
+    <restriction base = "NMTOKEN">
+      <enumeration value = "auto"/>
+      <enumeration value = "visible"/>
+      <enumeration value = "hidden"/>
+      <enumeration value = "scroll"/>
+      <enumeration value = "error-if-overflow"/>
+      <enumeration value = "inherit"/>
+    </restriction>
+  </simpleType>
+  <simpleType name = "transparent_Type">
+    <restriction base = "NMTOKEN">
+      <enumeration value = "transparent"/>
+    </restriction>
+  </simpleType>
+  <simpleType name = "none_Type">
+    <restriction base = "NMTOKEN">
+      <enumeration value = "none"/>
+    </restriction>
+  </simpleType>
+  <simpleType name = "absolute_position_Type">
+    <restriction base = "NMTOKEN">
+      <enumeration value = "auto"/>
+      <enumeration value = "absolute"/>
+      <enumeration value = "fixed"/>
+      <enumeration value = "inherit"/>
+    </restriction>
+  </simpleType>
+  <simpleType name = "azimuth_base_Type">
+    <restriction base = "NMTOKEN">
+      <enumeration value = "left-side"/>
+      <enumeration value = "far-left"/>
+      <enumeration value = "left"/>
+      <enumeration value = "center-left"/>
+      <enumeration value = "center"/>
+      <enumeration value = "center-right"/>
+      <enumeration value = "right"/>
+      <enumeration value = "far-right"/>
+      <enumeration value = "right-side"/>
+      <enumeration value = "behind"/>
+      <enumeration value = "leftwards"/>
+      <enumeration value = "rightwards"/>
+      <enumeration value = "inherit"/>
+    </restriction>
+  </simpleType>
+  <simpleType name = "azimuth_Type">
+    <union memberTypes = "fo:angle_Type fo:azimuth_base_Type"/>
+  </simpleType>
+  <simpleType name = "elevation_Type">
+    <restriction base = "NMTOKEN">
+      <enumeration value = "below"/>
+      <enumeration value = "level"/>
+      <enumeration value = "above"/>
+      <enumeration value = "higher"/>
+      <enumeration value = "lower"/>
+      <enumeration value = "0"/>
+      <enumeration value = "90"/>
+      <enumeration value = "180"/>
+      <enumeration value = "270"/>
+      <enumeration value = "0deg"/>
+      <enumeration value = "90deg"/>
+      <enumeration value = "180deg"/>
+      <enumeration value = "270deg"/>
+      <enumeration value = "inherit"/>
+    </restriction>
+  </simpleType>
+  <simpleType name = "font_selection_strategy_Type">
+    <restriction base = "NMTOKEN">
+      <enumeration value = "auto"/>
+      <enumeration value = "character-by-character"/>
+      <enumeration value = "inherit"/>
+    </restriction>
+  </simpleType>
+  <simpleType name = "font_stretch_Type">
+    <restriction base = "NMTOKEN">
+      <enumeration value = "normal"/>
+      <enumeration value = "wider"/>
+      <enumeration value = "narrower"/>
+      <enumeration value = "ultra-condensed"/>
+      <enumeration value = "extra-condensed"/>
+      <enumeration value = "condensed"/>
+      <enumeration value = "semi-condensed"/>
+      <enumeration value = "semi-expanded"/>
+      <enumeration value = "expanded"/>
+      <enumeration value = "extra-expanded"/>
+      <enumeration value = "ultra-expanded"/>
+      <enumeration value = "inherit"/>
+    </restriction>
+  </simpleType>
+  <simpleType name = "clear_Type">
+    <restriction base = "NMTOKEN">
+      <enumeration value = "start"/>
+      <enumeration value = "end"/>
+      <enumeration value = "left"/>
+      <enumeration value = "right"/>
+      <enumeration value = "both"/>
+      <enumeration value = "none"/>
+      <enumeration value = "inherit"/>
+    </restriction>
+  </simpleType>
+  <simpleType name = "color_Name_Type">
+    <restriction base = "NMTOKEN">
+      <enumeration value = "aliceblue"/>
+      <enumeration value = "antiquewhite"/>
+      <enumeration value = "aqua"/>
+      <enumeration value = "aquamarine"/>
+      <enumeration value = "azure"/>
+      <enumeration value = "beige"/>
+      <enumeration value = "bisque"/>
+      <enumeration value = "black"/>
+      <enumeration value = "blanchedalmond"/>
+      <enumeration value = "blue"/>
+      <enumeration value = "blueviolet"/>
+      <enumeration value = "brown"/>
+      <enumeration value = "burlywood"/>
+      <enumeration value = "cadetblue"/>
+      <enumeration value = "chartreuse"/>
+      <enumeration value = "chocolate"/>
+      <enumeration value = "coral"/>
+      <enumeration value = "cornflowerblue"/>
+      <enumeration value = "cornsilk"/>
+      <enumeration value = "crimson"/>
+      <enumeration value = "cyan"/>
+      <enumeration value = "darkblue"/>
+      <enumeration value = "darkcyan"/>
+      <enumeration value = "darkgoldenrod"/>
+      <enumeration value = "darkgray"/>
+      <enumeration value = "darkgreen"/>
+      <enumeration value = "darkgrey"/>
+      <enumeration value = "darkkhaki"/>
+      <enumeration value = "darkmagenta"/>
+      <enumeration value = "darkolivegreen"/>
+      <enumeration value = "darkorange"/>
+      <enumeration value = "darkorchid"/>
+      <enumeration value = "darkred"/>
+      <enumeration value = "darksalmon"/>
+      <enumeration value = "darkseagreen"/>
+      <enumeration value = "darkslateblue"/>
+      <enumeration value = "darkslategray"/>
+      <enumeration value = "darkslategrey"/>
+      <enumeration value = "darkturquoise"/>
+      <enumeration value = "darkviolet"/>
+      <enumeration value = "deeppink"/>
+      <enumeration value = "deepskyblue"/>
+      <enumeration value = "dimgray"/>
+      <enumeration value = "dimgrey"/>
+      <enumeration value = "dodgerblue"/>
+      <enumeration value = "firebrick"/>
+      <enumeration value = "floralwhite"/>
+      <enumeration value = "forestgreen"/>
+      <enumeration value = "fuchsia"/>
+      <enumeration value = "gainsboro"/>
+      <enumeration value = "lightpink"/>
+      <enumeration value = "lightsalmon"/>
+      <enumeration value = "lightseagreen"/>
+      <enumeration value = "lightskyblue"/>
+      <enumeration value = "lightslategray"/>
+      <enumeration value = "lightslategrey"/>
+      <enumeration value = "lightsteelblue"/>
+      <enumeration value = "lightyellow"/>
+      <enumeration value = "lime"/>
+      <enumeration value = "limegreen"/>
+      <enumeration value = "linen"/>
+      <enumeration value = "magenta"/>
+      <enumeration value = "maroon"/>
+      <enumeration value = "mediumaquamarine"/>
+      <enumeration value = "mediumblue"/>
+      <enumeration value = "mediumorchid"/>
+      <enumeration value = "mediumpurple"/>
+      <enumeration value = "mediumseagreen"/>
+      <enumeration value = "mediumslateblue"/>
+      <enumeration value = "mediumspringgreen"/>
+      <enumeration value = "mediumturquoise"/>
+      <enumeration value = "mediumvioletred"/>
+      <enumeration value = "midnightblue"/>
+      <enumeration value = "mintcream"/>
+      <enumeration value = "mistyrose"/>
+      <enumeration value = "moccasin"/>
+      <enumeration value = "navajowhite"/>
+      <enumeration value = "navy"/>
+      <enumeration value = "oldlace"/>
+      <enumeration value = "olive"/>
+      <enumeration value = "olivedrab"/>
+      <enumeration value = "orange"/>
+      <enumeration value = "orangered"/>
+      <enumeration value = "orchid"/>
+      <enumeration value = "palegoldenrod"/>
+      <enumeration value = "palegreen"/>
+      <enumeration value = "paleturquoise"/>
+      <enumeration value = "palevioletred"/>
+      <enumeration value = "papayawhip"/>
+      <enumeration value = "peachpuff"/>
+      <enumeration value = "peru"/>
+      <enumeration value = "pink"/>
+      <enumeration value = "plum"/>
+      <enumeration value = "powderblue"/>
+      <enumeration value = "purple"/>
+      <enumeration value = "red"/>
+      <enumeration value = "rosybrown"/>
+      <enumeration value = "royalblue"/>
+      <enumeration value = "saddlebrown"/>
+      <enumeration value = "salmon"/>
+      <enumeration value = "ghostwhite"/>
+      <enumeration value = "gold"/>
+      <enumeration value = "goldenrod"/>
+      <enumeration value = "gray"/>
+      <enumeration value = "grey"/>
+      <enumeration value = "green"/>
+      <enumeration value = "greenyellow"/>
+      <enumeration value = "honeydew"/>
+      <enumeration value = "hotpink"/>
+      <enumeration value = "indianred"/>
+      <enumeration value = "indigo"/>
+      <enumeration value = "ivory"/>
+      <enumeration value = "khaki"/>
+      <enumeration value = "lavender"/>
+      <enumeration value = "lavenderblush"/>
+      <enumeration value = "lawngreen"/>
+      <enumeration value = "lemonchiffon"/>
+      <enumeration value = "lightblue"/>
+      <enumeration value = "lightcoral"/>
+      <enumeration value = "lightcyan"/>
+      <enumeration value = "lightgoldenrodyellow"/>
+      <enumeration value = "lightgray"/>
+      <enumeration value = "lightgreen"/>
+      <enumeration value = "lightgrey"/>
+      <enumeration value = "sandybrown"/>
+      <enumeration value = "seagreen"/>
+      <enumeration value = "seashell"/>
+      <enumeration value = "sienna"/>
+      <enumeration value = "silver"/>
+      <enumeration value = "skyblue"/>
+      <enumeration value = "slateblue"/>
+      <enumeration value = "slategray"/>
+      <enumeration value = "slategrey"/>
+      <enumeration value = "snow"/>
+      <enumeration value = "springgreen"/>
+      <enumeration value = "steelblue"/>
+      <enumeration value = "tan"/>
+      <enumeration value = "teal"/>
+      <enumeration value = "thistle"/>
+      <enumeration value = "tomato"/>
+      <enumeration value = "turquoise"/>
+      <enumeration value = "violet"/>
+      <enumeration value = "wheat"/>
+      <enumeration value = "white"/>
+      <enumeration value = "whitesmoke"/>
+      <enumeration value = "yellow"/>
+      <enumeration value = "yellowgreen"/>
+    </restriction>
+  </simpleType>
+  <simpleType name = "color_Hex_Type">
+    <restriction base = "string">
+      <pattern value = "#[0-9A-F]{6}"/>
+    </restriction>
+  </simpleType>
+  <simpleType name = "background_color_Type">
+    <union memberTypes = "fo:color_Hex_Type fo:color_Name_Type fo:inherit_Type fo:transparent_Type"/>
+  </simpleType>
+  <simpleType name = "relative_position_Type">
+    <restriction base = "NMTOKEN">
+      <enumeration value = "static"/>
+      <enumeration value = "relative"/>
+      <enumeration value = "inherit"/>
+    </restriction>
+  </simpleType>
+  <simpleType name = "speak_header_Type">
+    <restriction base = "NMTOKEN">
+      <enumeration value = "once"/>
+      <enumeration value = "always"/>
+      <enumeration value = "inherit"/>
+    </restriction>
+  </simpleType>
+  <simpleType name = "border_Type">
+    <annotation>
+      <documentation>
+        "fo:width_Type fo:border_style_Type fo:color_Type"
+        <enumeration value="solid 4px yellow"/>
+        <enumeration value="solid 2px green"/>
+        <enumeration value="solid 1px blue"/>
+        <enumeration value="solid 1px silver"/>
+      </documentation>
+    </annotation>
+    <restriction base = "string">
+      <pattern value = "(none|hidden|dotted|dashed|solid|double|groove|ridge|inset|outset) \+?\d+\.?\d*(px|pt|mm|cm|in|em|%) (#[0-9A-F]{6}|[a-z]{3,16})"/>
+    </restriction>
+  </simpleType>
+  <simpleType name = "font_size_Type">
+    <union memberTypes = "fo:absolute_size_Type fo:relative_size_Type fo:length_Type fo:percentage_Type fo:inherit_Type"/>
+  </simpleType>
+  <simpleType name = "alignment_baseline_Type">
+    <union memberTypes = "fo:auto_Type fo:alignment_Type fo:box_alignment_Type fo:inherit_Type"/>
+  </simpleType>
+  <simpleType name = "alignment_adjust_Type">
+    <union memberTypes = "fo:auto_Type fo:alignment_Type fo:percentage_Type fo:length_Type fo:inherit_Type"/>
+  </simpleType>
+  <simpleType name = "z_index_Type">
+    <union memberTypes = "fo:auto_Type fo:integer_Type fo:inherit_Type"/>
+  </simpleType>
+  <simpleType name = "margin_width_Type">
+    <union memberTypes = "fo:auto_Type fo:length_Type fo:percentage_Type fo:inherit_Type"/>
+  </simpleType>
+  <simpleType name = "block_progression_dimension_optimum_Type">
+    <union memberTypes = "fo:auto_Type fo:length_Type"/>
+  </simpleType>
+  <simpleType name = "block_progression_dimension_maximum_Type">
+    <union memberTypes = "fo:auto_Type fo:length_Type"/>
+  </simpleType>
+  <simpleType name = "inline_progression_dimension_maximum_Type">
+    <union memberTypes = "fo:auto_Type fo:length_Type"/>
+  </simpleType>
+  <simpleType name = "inline_progression_dimension_optimum_Type">
+    <union memberTypes = "fo:auto_Type fo:length_Type"/>
+  </simpleType>
+  <simpleType name = "baseline_shift_Type">
+    <union memberTypes = "fo:baseline_base_Type fo:percentage_Type fo:length_Type fo:inherit_Type"/>
+  </simpleType>
+  <simpleType name = "space_start_precedence_Type">
+    <union memberTypes = "fo:integer_Type fo:force_Type"/>
+  </simpleType>
+  <simpleType name = "space_end_precedence_Type">
+    <union memberTypes = "fo:integer_Type fo:force_Type"/>
+  </simpleType>
+  <simpleType name = "space_after_precedence_Type">
+    <union memberTypes = "fo:integer_Type fo:force_Type"/>
+  </simpleType>
+  <simpleType name = "space_before_precedence_Type">
+    <union memberTypes = "fo:integer_Type fo:force_Type"/>
+  </simpleType>
+  <simpleType name = "widows_Type">
+    <union memberTypes = "fo:integer_Type fo:inherit_Type"/>
+  </simpleType>
+  <simpleType name = "orphans_Type">
+    <union memberTypes = "fo:integer_Type fo:inherit_Type"/>
+  </simpleType>
+  <simpleType name = "space_start_maximum_Type">
+    <union memberTypes = "fo:length_Type fo:inherit_Type"/>
+  </simpleType>
+  <simpleType name = "space_start_minimum_Type">
+    <union memberTypes = "fo:length_Type fo:inherit_Type"/>
+  </simpleType>
+  <simpleType name = "space_end_minimum_Type">
+    <union memberTypes = "fo:length_Type fo:inherit_Type"/>
+  </simpleType>
+  <simpleType name = "space_end_optimum_Type">
+    <union memberTypes = "fo:length_Type fo:inherit_Type"/>
+  </simpleType>
+  <simpleType name = "space_before_minimum_Type">
+    <union memberTypes = "fo:length_Type fo:inherit_Type"/>
+  </simpleType>
+  <simpleType name = "space_after_maximum_Type">
+    <union memberTypes = "fo:length_Type fo:inherit_Type"/>
+  </simpleType>
+  <simpleType name = "space_start_optimum_Type">
+    <union memberTypes = "fo:length_Type fo:inherit_Type"/>
+  </simpleType>
+  <simpleType name = "space_end_maximum_Type">
+    <union memberTypes = "fo:length_Type fo:inherit_Type"/>
+  </simpleType>
+  <simpleType name = "space_before_optimum_Type">
+    <union memberTypes = "fo:length_Type fo:inherit_Type"/>
+  </simpleType>
+  <simpleType name = "space_before_maximum_Type">
+    <union memberTypes = "fo:length_Type fo:inherit_Type"/>
+  </simpleType>
+  <simpleType name = "space_after_optimum_Type">
+    <union memberTypes = "fo:length_Type fo:inherit_Type"/>
+  </simpleType>
+  <simpleType name = "space_after_minimum_Type">
+    <union memberTypes = "fo:length_Type fo:inherit_Type"/>
+  </simpleType>
+  <simpleType name = "left_Type">
+    <union memberTypes = "fo:length_Type fo:percentage_Type fo:auto_Type fo:inherit_Type"/>
+  </simpleType>
+  <simpleType name = "bottom_Type">
+    <union memberTypes = "fo:length_Type fo:percentage_Type fo:auto_Type fo:inherit_Type"/>
+  </simpleType>
+  <simpleType name = "right_Type">
+    <union memberTypes = "fo:length_Type fo:percentage_Type fo:auto_Type fo:inherit_Type"/>
+  </simpleType>
+  <simpleType name = "top_Type">
+    <union memberTypes = "fo:length_Type fo:percentage_Type fo:auto_Type fo:inherit_Type"/>
+  </simpleType>
+  <simpleType name = "start_indent_Type">
+    <union memberTypes = "fo:length_Type fo:percentage_Type fo:inherit_Type"/>
+  </simpleType>
+  <simpleType name = "last_line_end_indent_Type">
+    <union memberTypes = "fo:length_Type fo:percentage_Type fo:inherit_Type"/>
+  </simpleType>
+  <simpleType name = "provisional_distance_between_starts_Type">
+    <union memberTypes = "fo:length_Type fo:percentage_Type fo:inherit_Type"/>
+  </simpleType>
+  <simpleType name = "end_indent_Type">
+    <union memberTypes = "fo:length_Type fo:percentage_Type fo:inherit_Type"/>
+  </simpleType>
+  <simpleType name = "extent_Type">
+    <union memberTypes = "fo:length_Type fo:percentage_Type fo:inherit_Type"/>
+  </simpleType>
+  <simpleType name = "provisional_label_separation_Type">
+    <union memberTypes = "fo:length_Type fo:percentage_Type fo:inherit_Type"/>
+  </simpleType>
+  <simpleType name = "length_percentage_Type">
+    <union memberTypes = "fo:length_Type fo:percentage_Type"/>
+  </simpleType>
+  <simpleType name = "hyphenation_ladder_count_Type">
+    <union memberTypes = "fo:no_limit_Type fo:integer_Type fo:inherit_Type"/>
+  </simpleType>
+  <simpleType name = "background_position_horizontal_Type">
+    <union memberTypes = "fo:percentage_Type fo:length_Type fo:horizontal_position_Type fo:inherit_Type"/>
+  </simpleType>
+  <simpleType name = "background_position_vertical_Type">
+    <union memberTypes = "fo:percentage_Type fo:length_Type fo:vertical_position_Type fo:inherit_Type"/>
+  </simpleType>
+  <simpleType name = "leader_pattern_width_Type">
+    <union memberTypes = "fo:use_font_metrics_Type fo:length_Type fo:percentage_Type fo:inherit_Type"/>
+  </simpleType>
+  <simpleType name = "text_altitude_Type">
+    <union memberTypes = "fo:use_font_metrics_Type fo:length_Type fo:percentage_Type fo:inherit_Type"/>
+  </simpleType>
+  <simpleType name = "text_depth_Type">
+    <union memberTypes = "fo:use_font_metrics_Type fo:length_Type fo:percentage_Type fo:inherit_Type"/>
+  </simpleType>
+  <simpleType name = "border_before_width_Type">
+    <union memberTypes = "fo:width_Type fo:length_Type fo:length_conditional_Type fo:inherit_Type"/>
+  </simpleType>
+  <simpleType name = "border_top_width_Type">
+    <union memberTypes = "fo:width_Type fo:length_Type fo:inherit_Type"/>
+  </simpleType>
+  
+  <annotation>
+    <documentation>
+      Element definitions 
+    </documentation>
+  </annotation>
+  
+  <element name = "root">
+    <complexType>
+      <sequence>
+        <element ref = "fo:layout-master-set"/>
+        <element ref = "fo:declarations" minOccurs = "0"/>
+        <element ref = "fo:page-sequence" maxOccurs = "unbounded"/>
+      </sequence>
+      <attribute name = "media-usage" type = "fo:media_usage_Type"/>
+      <attributeGroup ref = "fo:inheritable_properties_List"/>
+    </complexType>
+  </element>
+  <element name = "declarations">
+    <complexType>
+      <sequence>
+        <element ref = "fo:color-profile" maxOccurs = "unbounded"/>
+        <any minOccurs = "0" maxOccurs = "unbounded" namespace = "##other" processContents = "skip"/>
+      </sequence>
+      <attributeGroup ref = "fo:inheritable_properties_List"/>
+    </complexType>
+  </element>
+  <element name = "color-profile">
+    <complexType>
+      <attribute name = "src" type = "xs:string" use = "required"/>
+      <attribute name = "color-profile-name" type = "xs:string" use = "required"/>
+      <attribute name = "rendering-intent" type = "fo:rendering_intent_Type"/>
+      <attributeGroup ref = "fo:inheritable_properties_List"/>
+    </complexType>
+  </element>
+  <element name = "layout-master-set">
+    <complexType>
+      <choice maxOccurs = "unbounded">
+        <element ref = "fo:simple-page-master"/>
+        <element ref = "fo:page-sequence-master"/>
+      </choice>
+      <attributeGroup ref = "fo:inheritable_properties_List"/>
+    </complexType>
+  </element>
+  <element name = "page-sequence-master">
+    <complexType>
+      <choice maxOccurs = "unbounded">
+        <element ref = "fo:single-page-master-reference"/>
+        <element ref = "fo:repeatable-page-master-reference"/>
+        <element ref = "fo:repeatable-page-master-alternatives"/>
+      </choice>
+      <attribute name = "master-name" type = "xs:string" use = "required"/>
+      <attributeGroup ref = "fo:inheritable_properties_List"/>
+    </complexType>
+  </element>
+  <element name = "single-page-master-reference">
+    <complexType>
+      <attribute name = "master-reference" type = "xs:string" use = "required"/>
+      <attributeGroup ref = "fo:inheritable_properties_List"/>
+    </complexType>
+  </element>
+  <element name = "repeatable-page-master-reference">
+    <complexType>
+      <attribute name = "master-reference" type = "xs:string" use = "required"/>
+      <attribute name = "maximum-repeats" type = "fo:integer_Type"/>
+      <attributeGroup ref = "fo:inheritable_properties_List"/>
+    </complexType>
+  </element>
+  <element name = "repeatable-page-master-alternatives">
+    <complexType>
+      <sequence>
+        <element ref = "fo:conditional-page-master-reference" maxOccurs = "unbounded"/>
+      </sequence>
+      <attribute name = "maximum-repeats" type = "fo:integer_Type"/>
+      <attributeGroup ref = "fo:inheritable_properties_List"/>
+    </complexType>
+  </element>
+  <element name = "conditional-page-master-reference">
+    <complexType>
+      <attribute name = "master-reference" type = "xs:string" use = "required"/>
+      <attribute name = "page-position" type = "fo:page_position_Type"/>
+      <attribute name = "odd-or-even" type = "fo:odd_or_even_Type"/>
+      <attribute name = "blank-or-not-blank" type = "fo:blank_or_not_blank_Type"/>
+      <attributeGroup ref = "fo:inheritable_properties_List"/>
+    </complexType>
+  </element>
+  <element name = "simple-page-master">
+    <complexType>
+      <sequence>
+        <element ref = "fo:region-body"/>
+        <element ref = "fo:region-before" minOccurs = "0"/>
+        <element ref = "fo:region-after" minOccurs = "0"/>
+        <element ref = "fo:region-start" minOccurs = "0"/>
+        <element ref = "fo:region-end" minOccurs = "0"/>
+      </sequence>
+      <attributeGroup ref = "fo:Margin_Properties_Block_List"/>
+      <attribute name = "master-name" type = "xs:string" use = "required"/>
+      <attribute name = "page-height" type = "fo:length_Type"/>
+      <attribute name = "page-width" type = "fo:length_Type"/>
+      <attributeGroup ref = "fo:reference_Properties_List"/>
+      <attributeGroup ref = "fo:inheritable_properties_List"/>
+    </complexType>
+  </element>
+  <element name = "region-body">
+    <complexType>
+      <annotation>
+        <documentation>
+          Inheritable <attribute name = "display-align" type = "fo:display_align_Type"/> 
+        </documentation>
+      </annotation>
+      <attributeGroup ref = "fo:Margin_Properties_Block_List"/>
+      <attributeGroup ref = "fo:Border_Padding_and_Background_Properties_List"/>
+      <attributeGroup ref = "fo:clip_Properties_List"/>
+      <attribute name = "column-count" type = "fo:integer_Type"/>
+      <attribute name = "column-gap" type = "fo:length_Type"/>
+      <attribute name = "overflow" type = "fo:overflow_Type"/>
+      <attribute name = "region-name" type = "xs:string"/>
+      <attributeGroup ref = "fo:reference_Properties_List"/>
+      <attributeGroup ref = "fo:inheritable_properties_List"/>
+    </complexType>
+  </element>
+  <element name = "region-before">
+    <complexType>
+      <annotation>
+        <documentation>
+          Inheritable <attribute name = "display-align" type = "fo:display_align_Type"/> 
+        </documentation>
+      </annotation>
+      <attributeGroup ref = "fo:Border_Padding_and_Background_Properties_List"/>
+      <attributeGroup ref = "fo:clip_Properties_List"/>
+      <attribute name = "extent" type = "fo:extent_Type"/>
+      <attribute name = "overflow" type = "fo:overflow_Type"/>
+      <attribute name = "precedence" type = "fo:precedence_Type"/>
+      <attribute name = "region-name" type = "xs:string"/>
+      <attributeGroup ref = "fo:reference_Properties_List"/>
+      <attributeGroup ref = "fo:inheritable_properties_List"/>
+    </complexType>
+  </element>
+  <element name = "region-after">
+    <complexType>
+      <annotation>
+        <documentation>
+          Inheritable <attribute name = "display-align" type = "fo:display_align_Type"/> 
+        </documentation>
+      </annotation>
+      <attributeGroup ref = "fo:Border_Padding_and_Background_Properties_List"/>
+      <attributeGroup ref = "fo:clip_Properties_List"/>
+      <attribute name = "extent" type = "fo:extent_Type"/>
+      <attribute name = "overflow" type = "fo:overflow_Type"/>
+      <attribute name = "precedence" type = "fo:precedence_Type"/>
+      <attribute name = "region-name" type = "xs:string"/>
+      <attributeGroup ref = "fo:reference_Properties_List"/>
+      <attributeGroup ref = "fo:inheritable_properties_List"/>
+    </complexType>
+  </element>
+  <element name = "region-start">
+    <complexType>
+      <annotation>
+        <documentation>
+          Inheritable <attribute name = "display-align" type = "fo:display_align_Type"/> 
+        </documentation>
+      </annotation>
+      <attributeGroup ref = "fo:Border_Padding_and_Background_Properties_List"/>
+      <attributeGroup ref = "fo:clip_Properties_List"/>
+      <attribute name = "extent" type = "fo:extent_Type"/>
+      <attribute name = "overflow" type = "fo:overflow_Type"/>
+      <attribute name = "precedence" type = "fo:precedence_Type"/>
+      <attribute name = "region-name" type = "xs:string"/>
+      <attributeGroup ref = "fo:reference_Properties_List"/>
+      <attributeGroup ref = "fo:inheritable_properties_List"/>
+    </complexType>
+  </element>
+  <element name = "region-end">
+    <complexType>
+      <annotation>
+        <documentation>
+          Inheritable <attribute name = "display-align" type = "fo:display_align_Type"/> 
+        </documentation>
+      </annotation>
+      <attributeGroup ref = "fo:Border_Padding_and_Background_Properties_List"/>
+      <attributeGroup ref = "fo:clip_Properties_List"/>
+      <attribute name = "extent" type = "fo:extent_Type"/>
+      <attribute name = "overflow" type = "fo:overflow_Type"/>
+      <attribute name = "precedence" type = "fo:precedence_Type"/>
+      <attribute name = "region-name" type = "xs:string"/>
+      <attributeGroup ref = "fo:reference_Properties_List"/>
+      <attributeGroup ref = "fo:inheritable_properties_List"/>
+    </complexType>
+  </element>
+  <element name = "page-sequence">
+    <complexType>
+      <annotation>
+        <documentation>
+          Inheritable 
+          <attribute name = "country" type = "fo:country_Type"/> 
+          <attribute name = "language" type = "fo:language_Type"/>
+        </documentation>
+      </annotation>
+      <sequence>
+        <element ref = "fo:title" minOccurs = "0"/>
+        <element ref = "fo:static-content" minOccurs = "0" maxOccurs = "unbounded"/>
+        <element ref = "fo:flow"/>
+      </sequence>
+      <attribute name = "id" type = "xs:string"/>
+      <attribute name = "master-reference" type = "xs:string" use = "required"/>
+      <attribute name = "initial-page-number" type = "fo:integer_Type"/>
+      <attribute name = "force-page-count" type = "fo:force_page_count_Type"/>
+      <attribute name = "format" type = "xs:string"/>
+      <attribute name = "letter-value" type = "fo:letter_value_Type"/>
+      <attribute name = "grouping-separator" type = "fo:character_Type"/>
+      <attribute name = "grouping-size" type = "fo:integer_Type"/>
+      <attributeGroup ref = "fo:inheritable_properties_List"/>
+    </complexType>
+  </element>
+  <element name = "title">
+    <complexType mixed = "true">
+      <annotation>
+        <documentation>
+          Inheritable 
+          <attribute name = "color" type = "fo:color_Type"/>
+          <attribute name = "line-height" type = "fo:line_height_Type"/>
+          <attribute name = "visibility" type = "fo:visibility_Type"/>
+        </documentation>
+      </annotation>
+      <choice minOccurs = "0" maxOccurs = "unbounded">
+        <group ref = "fo:inline_List"/>
+        <group ref = "fo:neutral_List"/>
+      </choice>
+      <attributeGroup ref = "fo:Accessibility_Properties_List"/>
+      <attributeGroup ref = "fo:Aural_Properties_List"/>
+      <attributeGroup ref = "fo:Border_Padding_and_Background_Properties_List"/>
+      <attributeGroup ref = "fo:Font_Properties_List"/>
+      <attributeGroup ref = "fo:Margin_Properties_Inline_List"/>
+      <attributeGroup ref = "fo:inheritable_properties_List"/>
+    </complexType>
+  </element>
+  <element name = "static-content">
+    <complexType>
+      <choice maxOccurs = "unbounded">
+        <group ref = "fo:block_List"/>
+        <group ref = "fo:neutral_List"/>
+        <group ref = "fo:float_List"/>
+        <group ref = "fo:footnote_List"/>
+      </choice>
+      <attribute name = "flow-name" type = "xs:string" use = "required"/>
+      <attributeGroup ref = "fo:inheritable_properties_List"/>
+    </complexType>
+  </element>
+  <element name = "flow">
+    <complexType>
+      <choice maxOccurs = "unbounded">
+        <group ref = "fo:marker_List"/>
+        <group ref = "fo:block_List"/>
+        <group ref = "fo:neutral_List"/>
+        <group ref = "fo:float_List"/>
+        <group ref = "fo:footnote_List"/>
+      </choice>
+      <attribute name = "flow-name" type = "xs:string" use = "required"/>
+      <attributeGroup ref = "fo:inheritable_properties_List"/>
+    </complexType>
+  </element>
+  <element name = "block">
+    <complexType mixed = "true">
+      <annotation>
+        <documentation>
+          Inheritable
+          <attribute name = "color" type = "fo:color_Type"/>
+          <attribute name = "last-line-end-indent" type = "fo:last_line_end_indent_Type"/>
+          <attribute name = "linefeed-treatment" type = "fo:linefeed_treatment_Type"/>
+          <attribute name = "line-height" type = "fo:line_height_Type"/>
+          <attribute name = "orphans" type = "fo:orphans_Type"/>
+          <attribute name = "white-space-treatment" type = "fo:white_space_treatment_Type"/>
+          <attribute name = "text-align" type = "fo:text_align_Type"/>
+          <attribute name = "text-align-last" type = "fo:text_align_last_Type"/>
+          <attribute name = "text-indent" type = "fo:length_percentage_Type"/>
+          <attribute name = "visibility" type = "fo:visibility_Type"/>
+          <attribute name = "white-space-collapse" type = "fo:white_space_collapse_Type"/>
+          <attribute name = "widows" type = "fo:widows_Type"/>
+          <attribute name = "wrap-option" type = "fo:wrap_option_Type"/>
+        </documentation>
+      </annotation>
+      <choice minOccurs = "0" maxOccurs = "unbounded">
+        <group ref = "fo:marker_List"/>
+        <group ref = "fo:initial_property_set_List"/>
+        <group ref = "fo:inline_List"/>
+        <group ref = "fo:block_List"/>
+        <group ref = "fo:neutral_List"/>
+        <group ref = "fo:float_List"/>
+        <group ref = "fo:footnote_List"/>
+      </choice>
+      <attributeGroup ref = "fo:block_properties"/>
+      <attributeGroup ref = "fo:Accessibility_Properties_List"/>
+      <attributeGroup ref = "fo:Aural_Properties_List"/>
+      <attributeGroup ref = "fo:Border_Padding_and_Background_Properties_List"/>
+      <attributeGroup ref = "fo:Font_Properties_List"/>
+      <attributeGroup ref = "fo:Hyphenation_Properties_List"/>
+      <attributeGroup ref = "fo:Margin_Properties_Block_List"/>
+      <attributeGroup ref = "fo:Relative_Position_Properties_List"/>
+      <attributeGroup ref = "fo:break_Properties_List"/>
+      <attributeGroup ref = "fo:text_one_Properties_List"/>
+      <attributeGroup ref = "fo:block_hyphenation_Properties_List"/>
+      <attribute name = "id" type = "xs:string"/>
+      <attributeGroup ref = "fo:intrusion_displace_Properties_List"/>
+      <attributeGroup ref = "fo:keep_Properties_List"/>
+      <attributeGroup ref = "fo:line_height_Properties_List"/>
+      <attribute name = "span" type = "fo:span_Type"/>
+      <attributeGroup ref = "fo:inheritable_properties_List"/>
+    </complexType>
+  </element>
+  <element name = "block-container">
+    <complexType>
+      <annotation>
+        <documentation>
+          Inheritable <attribute name = "display-align" type = "fo:display_align_Type"/> 
+        </documentation>
+      </annotation>
+      <choice maxOccurs = "unbounded">
+        <group ref = "fo:marker_List"/>
+        <group ref = "fo:block_List"/>
+        <group ref = "fo:neutral_List"/>
+        <group ref = "fo:float_List"/>
+        <group ref = "fo:footnote_List"/>
+      </choice>
+      <attributeGroup ref = "fo:block_properties"/>
+      <attributeGroup ref = "fo:Absolute_Position_Properties_List"/>
+      <attributeGroup ref = "fo:Border_Padding_and_Background_Properties_List"/>
+      <attributeGroup ref = "fo:Margin_Properties_Block_List"/>
+      <attributeGroup ref = "fo:progression_Properties_List"/>
+      <attributeGroup ref = "fo:break_Properties_List"/>
+      <attributeGroup ref = "fo:clip_Properties_List"/>
+      <attribute name = "height" type = "fo:height_Type"/>
+      <attribute name = "id" type = "xs:string"/>
+      <attributeGroup ref = "fo:intrusion_displace_Properties_List"/>
+      <attributeGroup ref = "fo:keep_Properties_List"/>
+      <attribute name = "overflow" type = "fo:overflow_Type"/>
+      <attributeGroup ref = "fo:reference_Properties_List"/>
+      <attribute name = "span" type = "fo:span_Type"/>
+      <attribute name = "width" type = "fo:height_Type"/>
+      <attribute name = "z-index" type = "fo:z_index_Type"/>
+      <attributeGroup ref = "fo:inheritable_properties_List"/>
+    </complexType>
+  </element>
+  <element name = "bidi-override">
+    <complexType mixed = "true">
+      <annotation>
+        <documentation>
+          Inheritable 
+          <attribute name = "color" type = "fo:color_Type"/> 
+          <attribute name = "direction" type = "fo:direction_Type"/> 
+          <attribute name = "letter-spacing" type = "fo:letter_spacing_Type"/>
+          <attribute name = "line-height" type = "fo:line_height_Type"/> 
+          <attribute name = "score-spaces" type = "fo:score_spaces_Type"/> 
+          <attribute name = "word-spacing" type = "fo:letter_spacing_Type"/> 
+        </documentation>
+      </annotation>
+      <choice minOccurs = "0" maxOccurs = "unbounded">
+        <group ref = "fo:marker_List"/>
+        <group ref = "fo:inline_List"/>
+        <group ref = "fo:block_List"/>
+        <group ref = "fo:neutral_List"/>
+        <group ref = "fo:float_List"/>
+        <group ref = "fo:footnote_List"/>
+      </choice>
+      <attributeGroup ref = "fo:Aural_Properties_List"/>
+      <attributeGroup ref = "fo:Font_Properties_List"/>
+      <attributeGroup ref = "fo:Relative_Position_Properties_List"/>
+      <attribute name = "id" type = "xs:string"/>
+      <attribute name = "unicode-bidi" type = "fo:unicode_bidi_Type"/>
+      <attributeGroup ref = "fo:inheritable_properties_List"/>
+      <attribute name = "vertical-align" type = "fo:vertical_align_Type"/>
+    </complexType>
+  </element>
+  <element name = "character">
+    <complexType>
+      <annotation>
+        <documentation>
+          Inheritable
+          <attribute name = "color" type = "fo:color_Type"/> 
+          <attribute name = "glyph-orientation-horizontal" type = "fo:orientation_Type"/> 
+          <attribute name = "glyph-orientation-vertical" type = "fo:orientation_Type"/> 
+          <attribute name = "letter-spacing" type = "fo:letter_spacing_Type"/> 
+          <attribute name = "line-height" type = "fo:line_height_Type"/> 
+          <attribute name = "score-spaces" type = "fo:score_spaces_Type"/> 
+          <attribute name = "text-transform" type = "fo:text_transform_Type"/> 
+          <attribute name = "visibility" type = "fo:visibility_Type"/> 
+          <attribute name = "word-spacing" type = "fo:letter_spacing_Type"/>
+        </documentation>
+      </annotation>
+      <attributeGroup ref = "fo:Aural_Properties_List"/>
+      <attributeGroup ref = "fo:Border_Padding_and_Background_Properties_List"/>
+      <attributeGroup ref = "fo:Font_Properties_List"/>
+      <attributeGroup ref = "fo:Hyphenation_Properties_List"/>
+      <attributeGroup ref = "fo:Margin_Properties_Inline_List"/>
+      <attributeGroup ref = "fo:Relative_Position_Properties_List"/>
+      <attribute name = "alignment-adjust" type = "fo:alignment_adjust_Type"/>
+      <attribute name = "treat-as-word-space" type = "fo:treat_as_word_space_Type"/>
+      <attribute name = "alignment-baseline" type = "fo:alignment_baseline_Type"/>
+      <attribute name = "baseline-shift" type = "fo:baseline_shift_Type"/>
+      <attribute name = "character" type = "fo:character_Type"/>
+      <attribute name = "dominant-baseline" type = "fo:dominant_baseline_Type"/>
+      <attributeGroup ref = "fo:text_one_Properties_List"/>
+      <attribute name = "id" type = "xs:string"/>
+      <attribute name = "keep-with-next" type = "fo:keep_integer_Type"/>
+      <attribute name = "keep-with-previous" type = "fo:keep_integer_Type"/>
+      <attribute name = "suppress-at-line-break" type = "fo:suppress_at_line_break_Type"/>
+      <attribute name = "text-decoration" type = "fo:text_decoration_Type"/>
+      <attribute name = "text-shadow" type = "fo:text_shadow_Type"/>
+      <attributeGroup ref = "fo:inheritable_properties_List"/>
+      <attribute name = "vertical-align" type = "fo:vertical_align_Type"/>
+    </complexType>
+  </element>
+  <element name = "initial-property-set">
+    <complexType>
+      <annotation>
+        <documentation>
+          Inheritable
+          <attribute name = "color" type = "fo:color_Type"/> 
+          <attribute name = "letter-spacing" type = "fo:letter_spacing_Type"/> 
+          <attribute name = "line-height" type = "fo:line_height_Type"/> 
+          <attribute name = "score-spaces" type = "fo:score_spaces_Type"/> 
+          <attribute name = "text-transform" type = "fo:text_transform_Type"/> 
+          <attribute name = "word-spacing" type = "fo:letter_spacing_Type"/>
+        </documentation>
+      </annotation>
+      <attributeGroup ref = "fo:Accessibility_Properties_List"/>
+      <attributeGroup ref = "fo:Aural_Properties_List"/>
+      <attributeGroup ref = "fo:Border_Padding_and_Background_Properties_List"/>
+      <attributeGroup ref = "fo:Font_Properties_List"/>
+      <attributeGroup ref = "fo:Relative_Position_Properties_List"/>
+      <attribute name = "id" type = "xs:string"/>
+      <attribute name = "text-decoration" type = "fo:text_decoration_Type"/>
+      <attribute name = "text-shadow" type = "fo:text_shadow_Type"/>
+      <attributeGroup ref = "fo:inheritable_properties_List"/>
+    </complexType>
+  </element>
+  <element name = "external-graphic">
+    <complexType>
+      <annotation>
+        <documentation>
+          Inheritable
+          <attribute name = "display-align" type = "fo:display_align_Type"/> 
+          <attribute name = "line-height" type = "fo:line_height_Type"/> 
+          <attribute name = "text-align" type = "fo:text_align_Type"/>
+        </documentation>
+      </annotation>
+      <attributeGroup ref = "fo:Accessibility_Properties_List"/>
+      <attributeGroup ref = "fo:Aural_Properties_List"/>
+      <attributeGroup ref = "fo:Border_Padding_and_Background_Properties_List"/>
+      <attributeGroup ref = "fo:Margin_Properties_Inline_List"/>
+      <attributeGroup ref = "fo:Relative_Position_Properties_List"/>
+      <attribute name = "alignment-adjust" type = "fo:alignment_adjust_Type"/>
+      <attribute name = "alignment-baseline" type = "fo:alignment_baseline_Type"/>
+      <attribute name = "baseline-shift" type = "fo:baseline_shift_Type"/>
+      <attributeGroup ref = "fo:progression_Properties_List"/>
+      <attributeGroup ref = "fo:clip_Properties_List"/>
+      <attribute name = "content-height" type = "fo:content_height_Type"/>
+      <attribute name = "content-type" type = "xs:string"/>
+      <attribute name = "content-width" type = "fo:content_height_Type"/>
+      <attribute name = "dominant-baseline" type = "fo:dominant_baseline_Type"/>
+      <attribute name = "height" type = "fo:height_Type"/>
+      <attribute name = "id" type = "xs:string"/>
+      <attribute name = "keep-with-next" type = "fo:keep_integer_Type"/>
+      <attribute name = "keep-with-previous" type = "fo:keep_integer_Type"/>
+      <attribute name = "overflow" type = "fo:overflow_Type"/>
+      <attribute name = "scaling" type = "fo:scaling_Type"/>
+      <attribute name = "scaling-method" type = "fo:scaling_method_Type"/>
+      <attribute name = "src" type = "xs:string" use = "required"/>
+      <attribute name = "width" type = "fo:height_Type"/>
+      <attributeGroup ref = "fo:inheritable_properties_List"/>
+      <attribute name = "vertical-align" type = "fo:vertical_align_Type"/>
+    </complexType>
+  </element>
+  <element name = "instream-foreign-object">
+    <complexType>
+      <annotation>
+        <documentation>
+          Inheritable
+          <attribute name = "display-align" type = "fo:display_align_Type"/> 
+          <attribute name = "line-height" type = "fo:line_height_Type"/> 
+          <attribute name = "text-align" type = "fo:text_align_Type"/>
+        </documentation>
+      </annotation>
+      <attributeGroup ref = "fo:Accessibility_Properties_List"/>
+      <attributeGroup ref = "fo:Aural_Properties_List"/>
+      <attributeGroup ref = "fo:Border_Padding_and_Background_Properties_List"/>
+      <attributeGroup ref = "fo:Margin_Properties_Inline_List"/>
+      <attributeGroup ref = "fo:Relative_Position_Properties_List"/>
+      <attribute name = "alignment-adjust" type = "fo:alignment_adjust_Type"/>
+      <attribute name = "alignment-baseline" type = "fo:alignment_baseline_Type"/>
+      <attribute name = "baseline-shift" type = "fo:baseline_shift_Type"/>
+      <attributeGroup ref = "fo:progression_Properties_List"/>
+      <attributeGroup ref = "fo:clip_Properties_List"/>
+      <attribute name = "content-height" type = "fo:content_height_Type"/>
+      <attribute name = "content-type" type = "xs:string"/>
+      <attribute name = "content-width" type = "fo:content_height_Type"/>
+      <attribute name = "dominant-baseline" type = "fo:dominant_baseline_Type"/>
+      <attribute name = "height" type = "fo:height_Type"/>
+      <attribute name = "id" type = "xs:string"/>
+      <attribute name = "keep-with-next" type = "fo:keep_integer_Type"/>
+      <attribute name = "keep-with-previous" type = "fo:keep_integer_Type"/>
+      <attribute name = "overflow" type = "fo:overflow_Type"/>
+      <attribute name = "scaling" type = "fo:scaling_Type"/>
+      <attribute name = "scaling-method" type = "fo:scaling_method_Type"/>
+      <attribute name = "width" type = "fo:height_Type"/>
+      <attributeGroup ref = "fo:inheritable_properties_List"/>
+      <attribute name = "vertical-align" type = "fo:vertical_align_Type"/>
+    </complexType>
+  </element>
+  <element name = "inline">
+    <complexType mixed = "true">
+      <annotation>
+        <documentation>
+          Inheritable
+          <attribute name = "color" type = "fo:color_Type"/> 
+          <attribute name = "line-height" type = "fo:line_height_Type"/> 
+          <attribute name = "visibility" type = "fo:visibility_Type"/> 
+          <attribute name = "wrap-option" type = "fo:wrap_option_Type"/>
+        </documentation>
+      </annotation>
+      <choice minOccurs = "0" maxOccurs = "unbounded">
+        <group ref = "fo:marker_List"/>
+        <group ref = "fo:inline_List"/>
+        <group ref = "fo:block_List"/>
+        <group ref = "fo:neutral_List"/>
+        <group ref = "fo:float_List"/>
+        <group ref = "fo:footnote_List"/>
+      </choice>
+      <attributeGroup ref = "fo:Accessibility_Properties_List"/>
+      <attributeGroup ref = "fo:Aural_Properties_List"/>
+      <attributeGroup ref = "fo:Border_Padding_and_Background_Properties_List">
+        <annotation>
+          <documentation>
+            <fop_result>Border and background properties not implemented</fop_result>
+          </documentation>
+        </annotation>
+      </attributeGroup>
+      <attributeGroup ref = "fo:Font_Properties_List"/>
+      <attributeGroup ref = "fo:Margin_Properties_Inline_List"/>
+      <attributeGroup ref = "fo:Relative_Position_Properties_List"/>
+      <attribute name = "alignment-adjust" type = "fo:alignment_adjust_Type"/>
+      <attribute name = "alignment-baseline" type = "fo:alignment_baseline_Type"/>
+      <attribute name = "baseline-shift" type = "fo:baseline_shift_Type"/>
+      <attributeGroup ref = "fo:progression_Properties_List"/>
+      <attribute name = "dominant-baseline" type = "fo:dominant_baseline_Type"/>
+      <attribute name = "height" type = "fo:height_Type"/>
+      <attribute name = "id" type = "xs:string"/>
+      <attributeGroup ref = "fo:keep_Properties_List"/>
+      <attribute name = "text-decoration" type = "fo:text_decoration_Type"/>
+      <attribute name = "width" type = "fo:height_Type"/>
+      <attributeGroup ref = "fo:inheritable_properties_List"/>
+      <attribute name = "vertical-align" type = "fo:vertical_align_Type"/>
+    </complexType>
+  </element>
+  <element name = "inline-container">
+    <complexType>
+      <annotation>
+        <documentation>
+          Inheritable 
+          <attribute name = "display-align" type = "fo:display_align_Type"/>
+          <attribute name = "line-height" type = "fo:line_height_Type"/>
+        </documentation>
+      </annotation>
+      <choice maxOccurs = "unbounded">
+        <group ref = "fo:marker_List"/>
+        <group ref = "fo:block_List"/>
+        <group ref = "fo:neutral_List"/>
+        <group ref = "fo:float_List"/>
+        <group ref = "fo:footnote_List"/>
+      </choice>
+      <attributeGroup ref = "fo:Border_Padding_and_Background_Properties_List"/>
+      <attributeGroup ref = "fo:Margin_Properties_Inline_List"/>
+      <attributeGroup ref = "fo:Relative_Position_Properties_List"/>
+      <attribute name = "alignment-adjust" type = "fo:alignment_adjust_Type"/>
+      <attribute name = "alignment-baseline" type = "fo:alignment_baseline_Type"/>
+      <attribute name = "baseline-shift" type = "fo:baseline_shift_Type"/>
+      <attributeGroup ref = "fo:progression_Properties_List"/>
+      <attributeGroup ref = "fo:clip_Properties_List"/>
+      <attribute name = "dominant-baseline" type = "fo:dominant_baseline_Type"/>
+      <attribute name = "height" type = "fo:height_Type"/>
+      <attribute name = "id" type = "xs:string"/>
+      <attributeGroup ref = "fo:keep_Properties_List"/>
+      <attribute name = "overflow" type = "fo:overflow_Type"/>
+      <attributeGroup ref = "fo:reference_Properties_List"/>
+      <attribute name = "width" type = "fo:height_Type"/>
+      <attributeGroup ref = "fo:inheritable_properties_List"/>
+      <attribute name = "vertical-align" type = "fo:vertical_align_Type"/>
+    </complexType>
+  </element>
+  <element name = "leader">
+    <complexType mixed = "true">
+      <annotation>
+        <documentation>
+          Inheritable 
+          <attribute name = "color" type = "fo:color_Type"/> 
+          <attribute name = "leader-alignment" type = "fo:leader_alignment_Type"/> 
+          <attribute name = "leader-length" type = "fo:leader_length_Type"/> 
+          <attribute name = "leader-length.minimum" type = "fo:length_Type"/>
+          <attribute name = "leader-length.optimum" type = "fo:length_Type"/>
+          <attribute name = "leader-length.maximum" type = "fo:length_Type"/>
+          <attribute name = "leader-pattern" type = "fo:leader_pattern_Type"/> 
+          <attribute name = "leader-pattern-width" type = "fo:leader_pattern_width_Type"/> 
+          <attribute name = "rule-style" type = "fo:rule_style_Type"/> 
+          <attribute name = "rule-thickness" type = "fo:length_Type"/> 
+          <attribute name = "letter-spacing" type = "fo:letter_spacing_Type"/> 
+          <attribute name = "line-height" type = "fo:line_height_Type"/> 
+          <attribute name = "visibility" type = "fo:visibility_Type"/> 
+          <attribute name = "word-spacing" type = "fo:letter_spacing_Type"/>
+        </documentation>
+      </annotation>
+      <choice minOccurs = "0" maxOccurs = "unbounded">
+        <group ref = "fo:inline_List"/>
+        <group ref = "fo:neutral_List"/>
+      </choice>
+      <attributeGroup ref = "fo:Accessibility_Properties_List"/>
+      <attributeGroup ref = "fo:Aural_Properties_List"/>
+      <attributeGroup ref = "fo:Border_Padding_and_Background_Properties_List"/>
+      <attributeGroup ref = "fo:Font_Properties_List"/>
+      <attributeGroup ref = "fo:Margin_Properties_Inline_List"/>
+      <attributeGroup ref = "fo:Relative_Position_Properties_List"/>
+      <attribute name = "alignment-adjust" type = "fo:alignment_adjust_Type"/>
+      <attribute name = "alignment-baseline" type = "fo:alignment_baseline_Type"/>
+      <attribute name = "baseline-shift" type = "fo:baseline_shift_Type"/>
+      <attribute name = "dominant-baseline" type = "fo:dominant_baseline_Type"/>
+      <attributeGroup ref = "fo:text_one_Properties_List"/>
+      <attribute name = "id" type = "xs:string"/>
+      <attribute name = "keep-with-next" type = "fo:keep_integer_Type"/>
+      <attribute name = "keep-with-previous" type = "fo:keep_integer_Type"/>
+      <attribute name = "text-shadow" type = "fo:text_shadow_Type"/>
+      <attributeGroup ref = "fo:inheritable_properties_List"/>
+      <attribute name = "vertical-align" type = "fo:vertical_align_Type"/>
+    </complexType>
+  </element>
+  <element name = "page-number">
+    <complexType>
+      <annotation>
+        <documentation>
+          Inheritable 
+          <attribute name = "letter-spacing" type = "fo:letter_spacing_Type"/>
+          <attribute name = "line-height" type = "fo:line_height_Type"/>
+          <attribute name = "score-spaces" type = "fo:score_spaces_Type"/>
+          <attribute name = "text-transform" type = "fo:text_transform_Type"/>
+          <attribute name = "visibility" type = "fo:visibility_Type"/>
+          <attribute name = "word-spacing" type = "fo:letter_spacing_Type"/>
+          <attribute name = "wrap-option" type = "fo:wrap_option_Type"/>
+        </documentation>
+      </annotation>
+      <attributeGroup ref = "fo:Accessibility_Properties_List"/>
+      <attributeGroup ref = "fo:Aural_Properties_List"/>
+      <attributeGroup ref = "fo:Border_Padding_and_Background_Properties_List"/>
+      <attributeGroup ref = "fo:Font_Properties_List"/>
+      <attributeGroup ref = "fo:Margin_Properties_Inline_List"/>
+      <attributeGroup ref = "fo:Relative_Position_Properties_List"/>
+      <attribute name = "alignment-adjust" type = "fo:alignment_adjust_Type"/>
+      <attribute name = "alignment-baseline" type = "fo:alignment_baseline_Type"/>
+      <attribute name = "baseline-shift" type = "fo:baseline_shift_Type"/>
+      <attribute name = "dominant-baseline" type = "fo:dominant_baseline_Type"/>
+      <attribute name = "id" type = "xs:string"/>
+      <attribute name = "keep-with-next" type = "fo:keep_integer_Type"/>
+      <attribute name = "keep-with-previous" type = "fo:keep_integer_Type"/>
+      <attributeGroup ref = "fo:text_one_Properties_List"/>
+      <attribute name = "text-decoration" type = "fo:text_decoration_Type"/>
+      <attribute name = "text-shadow" type = "fo:text_shadow_Type"/>
+      <attributeGroup ref = "fo:inheritable_properties_List"/>
+      <attribute name = "vertical-align" type = "fo:vertical_align_Type"/>
+    </complexType>
+  </element>
+  <element name = "page-number-citation">
+    <complexType>
+      <annotation>
+        <documentation>
+          Inheritable 
+          <attribute name = "letter-spacing" type = "fo:letter_spacing_Type"/>
+          <attribute name = "line-height" type = "fo:line_height_Type"/>
+          <attribute name = "score-spaces" type = "fo:score_spaces_Type"/>
+          <attribute name = "text-transform" type = "fo:text_transform_Type"/>
+          <attribute name = "visibility" type = "fo:visibility_Type"/>
+          <attribute name = "word-spacing" type = "fo:letter_spacing_Type"/>
+          <attribute name = "wrap-option" type = "fo:wrap_option_Type"/>
+        </documentation>
+      </annotation>
+      <attribute name = "ref-id" type = "xs:string" use = "required"/>
+      <attributeGroup ref = "fo:Accessibility_Properties_List"/>
+      <attributeGroup ref = "fo:Aural_Properties_List"/>
+      <attributeGroup ref = "fo:Border_Padding_and_Background_Properties_List"/>
+      <attributeGroup ref = "fo:Font_Properties_List"/>
+      <attributeGroup ref = "fo:Margin_Properties_Inline_List"/>
+      <attributeGroup ref = "fo:Relative_Position_Properties_List"/>
+      <attribute name = "alignment-adjust" type = "fo:alignment_adjust_Type"/>
+      <attribute name = "alignment-baseline" type = "fo:alignment_baseline_Type"/>
+      <attribute name = "baseline-shift" type = "fo:baseline_shift_Type"/>
+      <attribute name = "dominant-baseline" type = "fo:dominant_baseline_Type"/>
+      <attribute name = "id" type = "xs:string"/>
+      <attribute name = "keep-with-next" type = "fo:keep_integer_Type"/>
+      <attribute name = "keep-with-previous" type = "fo:keep_integer_Type"/>
+      <attributeGroup ref = "fo:text_one_Properties_List"/>
+      <attribute name = "text-decoration" type = "fo:text_decoration_Type"/>
+      <attribute name = "text-shadow" type = "fo:text_shadow_Type"/>
+      <attributeGroup ref = "fo:inheritable_properties_List"/>
+      <attribute name = "vertical-align" type = "fo:vertical_align_Type"/>
+    </complexType>
+  </element>
+  <element name = "table-and-caption">
+    <complexType>
+      <annotation>
+        <documentation>
+          Inheritable
+          <attribute name = "caption-side" type = "fo:caption_side_Type"/>
+          <attribute name = "text-align" type = "fo:text_align_Type"/>
+        </documentation>
+      </annotation>
+      <sequence>
+        <element ref = "fo:table-caption" minOccurs = "0"/>
+        <element ref = "fo:table"/>
+      </sequence>
+      <attributeGroup ref = "fo:block_properties"/>
+      <attributeGroup ref = "fo:Accessibility_Properties_List"/>
+      <attributeGroup ref = "fo:Aural_Properties_List"/>
+      <attributeGroup ref = "fo:Border_Padding_and_Background_Properties_List"/>
+      <attributeGroup ref = "fo:Margin_Properties_Block_List"/>
+      <attributeGroup ref = "fo:Relative_Position_Properties_List"/>
+      <attributeGroup ref = "fo:break_Properties_List"/>
+      <attribute name = "id" type = "xs:string"/>
+      <attributeGroup ref = "fo:intrusion_displace_Properties_List"/>
+      <attributeGroup ref = "fo:keep_Properties_List"/>
+      <attributeGroup ref = "fo:inheritable_properties_List"/>
+    </complexType>
+  </element>
+  <element name = "table-caption">
+    <complexType>
+      <annotation>
+        <documentation>
+          Inheritable 
+          <attribute name = "keep-together" type = "fo:keep_compound_Type"/>
+          <attribute name = "keep-together.within-line" type = "fo:keep_integer_Type"/>
+          <attribute name = "keep-together.within-column" type = "fo:keep_integer_Type"/>
+          <attribute name = "keep-together.within-page" type = "fo:keep_integer_Type"/>
+        </documentation>
+      </annotation>
+      <choice maxOccurs = "unbounded">
+        <group ref = "fo:marker_List"/>
+        <group ref = "fo:block_List"/>
+        <group ref = "fo:neutral_List"/>
+        <group ref = "fo:float_List"/>
+        <group ref = "fo:footnote_List"/>
+      </choice>
+      <attributeGroup ref = "fo:Accessibility_Properties_List"/>
+      <attributeGroup ref = "fo:Aural_Properties_List"/>
+      <attributeGroup ref = "fo:Border_Padding_and_Background_Properties_List"/>
+      <attributeGroup ref = "fo:Relative_Position_Properties_List"/>
+      <attributeGroup ref = "fo:progression_Properties_List"/>
+      <attribute name = "height" type = "fo:height_Type"/>
+      <attribute name = "id" type = "xs:string"/>
+      <attributeGroup ref = "fo:intrusion_displace_Properties_List"/>
+      <attribute name = "width" type = "fo:height_Type"/>
+      <attributeGroup ref = "fo:inheritable_properties_List"/>
+    </complexType>
+  </element>
+  <element name = "table">
+    <complexType>
+      <annotation>
+        <documentation>
+          Inheritable
+          <attribute name = "border-collapse" type = "fo:border_collapse_Type"/>
+          <attribute name = "border-separation" type = "fo:length_bp_ip_direction_Type"/>
+          <attribute name = "border-spacing" type = "fo:length_Type"/>
+          <attribute name = "writing-mode" type = "fo:writing_mode_Type"/>
+        </documentation>
+      </annotation>
+      <sequence>
+        <element ref = "fo:table-column" minOccurs = "0" maxOccurs = "unbounded"/>
+        <element ref = "fo:table-header" minOccurs = "0"/>
+        <element ref = "fo:table-footer" minOccurs = "0"/>
+        <element ref = "fo:table-body" maxOccurs = "unbounded"/>
+      </sequence>
+      <attributeGroup ref = "fo:block_properties"/>
+      <attributeGroup ref = "fo:Accessibility_Properties_List"/>
+      <attributeGroup ref = "fo:Aural_Properties_List"/>
+      <attributeGroup ref = "fo:Border_Padding_and_Background_Properties_List"/>
+      <attributeGroup ref = "fo:Margin_Properties_Block_List"/>
+      <attributeGroup ref = "fo:Relative_Position_Properties_List"/>
+      <attributeGroup ref = "fo:progression_Properties_List"/>
+      <attribute name = "border-after-precedence" type = "fo:precedence_Type"/>
+      <attribute name = "border-before-precedence" type = "fo:precedence_Type"/>
+      <attribute name = "border-end-precedence" type = "fo:precedence_Type"/>
+      <attribute name = "border-start-precedence" type = "fo:precedence_Type"/>
+      <attributeGroup ref = "fo:break_Properties_List"/>
+      <attribute name = "id" type = "xs:string"/>
+      <attributeGroup ref = "fo:intrusion_displace_Properties_List"/>
+      <attribute name = "height" type = "fo:height_Type"/>
+      <attributeGroup ref = "fo:keep_Properties_List"/>
+      <attribute name = "table-layout" type = "fo:table_layout_Type"/>
+      <attribute name = "table-omit-footer-at-break" type = "fo:table_omit_footer_at_break_Type"/>
+      <attribute name = "table-omit-header-at-break" type = "fo:table_omit_header_at_break_Type"/>
+      <attribute name = "width" type = "fo:height_Type"/>
+      <attributeGroup ref = "fo:inheritable_properties_List"/>
+    </complexType>
+  </element>
+  <element name = "table-column">
+    <complexType>
+      <annotation>
+        <documentation>
+          Inheritable 
+          <attribute name = "visibility" type = "fo:visibility_Type"/> 
+        </documentation>
+      </annotation>
+      <attributeGroup ref = "fo:Border_Properties_List"/>
+      <attributeGroup ref = "fo:Background_Properties_List"/>
+      <attribute name = "border-after-precedence" type = "fo:precedence_Type"/>
+      <attribute name = "border-before-precedence" type = "fo:precedence_Type"/>
+      <attribute name = "border-end-precedence" type = "fo:precedence_Type"/>
+      <attribute name = "border-start-precedence" type = "fo:precedence_Type"/>
+      <attribute name = "column-number" type = "fo:integer_Type"/>
+      <attribute name = "column-width" type = "fo:column_width_Type"/>
+      <attribute name = "number-columns-repeated" type = "fo:integer_Type"/>
+      <attribute name = "number-columns-spanned" type = "fo:integer_Type"/>
+      <attributeGroup ref = "fo:inheritable_properties_List"/>
+    </complexType>
+  </element>
+  <element name = "table-header">
+    <complexType>
+      <annotation>
+        <documentation>
+          Inheritable <attribute name = "visibility" type = "fo:visibility_Type"/> 
+        </documentation>
+      </annotation>
+      <choice>
+        <element ref = "fo:table-row" maxOccurs = "unbounded"/>
+        <element ref = "fo:table-cell" maxOccurs = "unbounded"/>
+      </choice>
+      <attributeGroup ref = "fo:Accessibility_Properties_List"/>
+      <attributeGroup ref = "fo:Aural_Properties_List"/>
+      <attributeGroup ref = "fo:Border_Properties_List"/>
+      <attributeGroup ref = "fo:Background_Properties_List"/>
+      <attributeGroup ref = "fo:Relative_Position_Properties_List"/>
+      <attribute name = "border-after-precedence" type = "fo:precedence_Type"/>
+      <attribute name = "border-before-precedence" type = "fo:precedence_Type"/>
+      <attribute name = "border-end-precedence" type = "fo:precedence_Type"/>
+      <attribute name = "border-start-precedence" type = "fo:precedence_Type"/>
+      <attribute name = "id" type = "xs:string"/>
+      <attributeGroup ref = "fo:inheritable_properties_List"/>
+    </complexType>
+  </element>
+  <element name = "table-footer">
+    <complexType>
+      <annotation>
+        <documentation>
+          Inheritable <attribute name = "visibility" type = "fo:visibility_Type"/> 
+        </documentation>
+      </annotation>
+      <choice>
+        <element ref = "fo:table-row" maxOccurs = "unbounded"/>
+        <element ref = "fo:table-cell" maxOccurs = "unbounded"/>
+      </choice>
+      <attributeGroup ref = "fo:Accessibility_Properties_List"/>
+      <attributeGroup ref = "fo:Aural_Properties_List"/>
+      <attributeGroup ref = "fo:Border_Properties_List"/>
+      <attributeGroup ref = "fo:Background_Properties_List"/>
+      <attributeGroup ref = "fo:Relative_Position_Properties_List"/>
+      <attribute name = "border-after-precedence" type = "fo:precedence_Type"/>
+      <attribute name = "border-before-precedence" type = "fo:precedence_Type"/>
+      <attribute name = "border-end-precedence" type = "fo:precedence_Type"/>
+      <attribute name = "border-start-precedence" type = "fo:precedence_Type"/>
+      <attribute name = "id" type = "xs:string"/>
+      <attributeGroup ref = "fo:inheritable_properties_List"/>
+    </complexType>
+  </element>
+  <element name = "table-body">
+    <complexType>
+      <annotation>
+        <documentation>
+          Inheritable <attribute name = "visibility" type = "fo:visibility_Type"/> 
+        </documentation>
+      </annotation>
+      <choice>
+        <element ref = "fo:table-row" maxOccurs = "unbounded"/>
+        <element ref = "fo:table-cell" maxOccurs = "unbounded"/>
+      </choice>
+      <attributeGroup ref = "fo:Accessibility_Properties_List"/>
+      <attributeGroup ref = "fo:Aural_Properties_List"/>
+      <attributeGroup ref = "fo:Border_Properties_List"/>
+      <attributeGroup ref = "fo:Background_Properties_List"/>
+      <attributeGroup ref = "fo:Relative_Position_Properties_List"/>
+      <attribute name = "border-after-precedence" type = "fo:precedence_Type"/>
+      <attribute name = "border-before-precedence" type = "fo:precedence_Type"/>
+      <attribute name = "border-end-precedence" type = "fo:precedence_Type"/>
+      <attribute name = "border-start-precedence" type = "fo:precedence_Type"/>
+      <attribute name = "id" type = "xs:string"/>
+      <attributeGroup ref = "fo:inheritable_properties_List"/>
+    </complexType>
+  </element>
+  <element name = "table-row">
+    <complexType>
+      <annotation>
+        <documentation>
+          Inheritable <attribute name = "visibility" type = "fo:visibility_Type"/> 
+        </documentation>
+      </annotation>
+      <sequence>
+        <element ref = "fo:table-cell" maxOccurs = "unbounded"/>
+      </sequence>
+      <attributeGroup ref = "fo:Accessibility_Properties_List"/>
+      <attributeGroup ref = "fo:Aural_Properties_List"/>
+      <attributeGroup ref = "fo:Border_Properties_List"/>
+      <attributeGroup ref = "fo:Background_Properties_List"/>
+      <attributeGroup ref = "fo:Relative_Position_Properties_List"/>
+      <attribute name = "block-progression-dimension" type = "fo:margin_width_Type"/>
+      <attribute name = "block-progression-dimension.minimum" type = "fo:length_Type"/>
+      <attribute name = "block-progression-dimension.optimum" type = "fo:block_progression_dimension_optimum_Type"/>
+      <attribute name = "block-progression-dimension.maximum" type = "fo:block_progression_dimension_maximum_Type"/>
+      <attribute name = "border-after-precedence" type = "fo:precedence_Type"/>
+      <attribute name = "border-before-precedence" type = "fo:precedence_Type"/>
+      <attribute name = "border-end-precedence" type = "fo:precedence_Type"/>
+      <attribute name = "border-start-precedence" type = "fo:precedence_Type"/>
+      <attributeGroup ref = "fo:break_Properties_List"/>
+      <attribute name = "id" type = "xs:string"/>
+      <attribute name = "height" type = "fo:height_Type"/>
+      <attributeGroup ref = "fo:keep_Properties_List"/>
+      <attributeGroup ref = "fo:inheritable_properties_List"/>
+      <attribute name = "page-break-after"  type = "fo:page_break_after_Type"/>
+      <attribute name = "page-break-before" type = "fo:page_break_after_Type"/>
+    </complexType>
+  </element>
+  <element name = "table-cell">
+    <complexType>
+      <annotation>
+        <documentation>
+          Inheritable
+          <attribute name = "display-align" type = "fo:display_align_Type"/>
+          <attribute name = "relative-align" type = "fo:relative_align_Type"/>
+          <attribute name = "empty-cells" type = "fo:empty_cells_Type"/>
+        </documentation>
+      </annotation>
+      <choice maxOccurs = "unbounded">
+        <group ref = "fo:marker_List"/>
+        <group ref = "fo:block_List"/>
+        <group ref = "fo:neutral_List"/>
+        <group ref = "fo:float_List"/>
+        <group ref = "fo:footnote_List"/>
+      </choice>
+      <attributeGroup ref = "fo:Accessibility_Properties_List"/>
+      <attributeGroup ref = "fo:Aural_Properties_List"/>
+      <attributeGroup ref = "fo:Border_Padding_and_Background_Properties_List"/>
+      <attributeGroup ref = "fo:Relative_Position_Properties_List"/>
+      <attribute name = "border-after-precedence" type = "fo:precedence_Type"/>
+      <attribute name = "border-before-precedence" type = "fo:precedence_Type"/>
+      <attribute name = "border-end-precedence" type = "fo:precedence_Type"/>
+      <attribute name = "border-start-precedence" type = "fo:precedence_Type"/>
+      <attributeGroup ref = "fo:progression_Properties_List"/>
+      <attribute name = "column-number" type = "fo:integer_Type"/>
+      <attribute name = "ends-row" type = "fo:ends_row_Type"/>
+      <attribute name = "height" type = "fo:height_Type"/>
+      <attribute name = "id" type = "xs:string"/>
+      <attribute name = "number-columns-spanned" type = "fo:integer_Type"/>
+      <attribute name = "number-rows-spanned" type = "fo:integer_Type"/>
+      <attribute name = "starts-row" type = "fo:starts_row_Type"/>
+      <attribute name = "width" type = "fo:height_Type"/>
+      <attributeGroup ref = "fo:inheritable_properties_List"/>
+      <attribute name = "vertical-align" type = "fo:vertical_align_Type"/>
+    </complexType>
+  </element>
+  <element name = "list-block">
+    <complexType>
+      <annotation>
+        <documentation>
+          Inheritable
+          <attribute name = "provisional-distance-between-starts" type = "fo:provisional_distance_between_starts_Type"/>
+          <attribute name = "provisional-label-separation" type = "fo:provisional_label_separation_Type"/>
+        </documentation>
+      </annotation>
+      <sequence>
+        <element ref = "fo:list-item" maxOccurs = "unbounded"/>
+      </sequence>
+      <attributeGroup ref = "fo:Accessibility_Properties_List"/>
+      <attributeGroup ref = "fo:Aural_Properties_List"/>
+      <attributeGroup ref = "fo:Border_Padding_and_Background_Properties_List"/>
+      <attributeGroup ref = "fo:Margin_Properties_Block_List"/>
+      <attributeGroup ref = "fo:Relative_Position_Properties_List"/>
+      <attributeGroup ref = "fo:break_Properties_List"/>
+      <attribute name = "id" type = "xs:string"/>
+      <attributeGroup ref = "fo:intrusion_displace_Properties_List"/>
+      <attributeGroup ref = "fo:keep_Properties_List"/>
+      <attributeGroup ref = "fo:inheritable_properties_List"/>
+      <attributeGroup ref = "fo:list_properties"/>
+    </complexType>
+  </element>
+  <element name = "list-item">
+    <complexType>
+      <annotation>
+        <documentation>
+          Inheritable <attribute name = "relative-align" type = "fo:relative_align_Type"/> 
+        </documentation>
+      </annotation>
+      <sequence>
+        <element ref = "fo:list-item-label"/>
+        <element ref = "fo:list-item-body"/>
+      </sequence>
+      <attributeGroup ref = "fo:Accessibility_Properties_List"/>
+      <attributeGroup ref = "fo:Aural_Properties_List"/>
+      <attributeGroup ref = "fo:Border_Padding_and_Background_Properties_List"/>
+      <attributeGroup ref = "fo:Margin_Properties_Block_List"/>
+      <attributeGroup ref = "fo:Relative_Position_Properties_List"/>
+      <attributeGroup ref = "fo:break_Properties_List"/>
+      <attribute name = "id" type = "xs:string"/>
+      <attributeGroup ref = "fo:intrusion_displace_Properties_List"/>
+      <attributeGroup ref = "fo:keep_Properties_List"/>
+      <attributeGroup ref = "fo:inheritable_properties_List"/>
+      <attributeGroup ref = "fo:list_properties"/>
+    </complexType>
+  </element>
+  <element name = "list-item-body">
+    <complexType>
+      <annotation>
+        <documentation>
+          Inheritable 
+          <attribute name = "keep-together" type = "fo:keep_compound_Type"/>
+          <attribute name = "keep-together.within-line" type = "fo:keep_integer_Type"/>
+          <attribute name = "keep-together.within-column" type = "fo:keep_integer_Type"/>
+          <attribute name = "keep-together.within-page" type = "fo:keep_integer_Type"/>
+        </documentation>
+      </annotation>
+      <choice maxOccurs = "unbounded">
+        <group ref = "fo:marker_List"/>
+        <group ref = "fo:block_List"/>
+        <group ref = "fo:neutral_List"/>
+        <group ref = "fo:float_List"/>
+        <group ref = "fo:footnote_List"/>
+      </choice>
+      <attributeGroup ref = "fo:Accessibility_Properties_List"/>
+      <attribute name = "id" type = "xs:string"/>
+      <attributeGroup ref = "fo:inheritable_properties_List"/>
+      <attributeGroup ref = "fo:list_properties"/>
+    </complexType>
+  </element>
+  <element name = "list-item-label">
+    <complexType>
+      <annotation>
+        <documentation>
+          Inheritable 
+          <attribute name = "keep-together" type = "fo:keep_compound_Type"/>
+          <attribute name = "keep-together.within-line" type = "fo:keep_integer_Type"/>
+          <attribute name = "keep-together.within-column" type = "fo:keep_integer_Type"/>
+          <attribute name = "keep-together.within-page" type = "fo:keep_integer_Type"/>
+        </documentation>
+      </annotation>
+      <choice maxOccurs = "unbounded">
+        <group ref = "fo:marker_List"/>
+        <group ref = "fo:block_List"/>
+        <group ref = "fo:neutral_List"/>
+        <group ref = "fo:float_List"/>
+        <group ref = "fo:footnote_List"/>
+      </choice>
+      <attributeGroup ref = "fo:Accessibility_Properties_List"/>
+      <attribute name = "id" type = "xs:string"/>
+      <attributeGroup ref = "fo:inheritable_properties_List"/>
+      <attributeGroup ref = "fo:list_properties"/>
+    </complexType>
+  </element>
+  <element name = "float">
+    <complexType>
+      <choice maxOccurs = "unbounded">
+        <group ref = "fo:block_List"/>
+        <group ref = "fo:neutral_List"/>
+        <group ref = "fo:float_List"/>
+        <group ref = "fo:footnote_List"/>
+      </choice>
+      <attribute name = "float" type = "fo:float_Type"/>
+      <attribute name = "clear" type = "fo:clear_Type"/>
+      <attributeGroup ref = "fo:inheritable_properties_List"/>
+    </complexType>
+  </element>
+  <element name = "footnote">
+    <complexType>
+      <sequence>
+        <element ref = "fo:inline"/>
+        <element ref = "fo:footnote-body"/>
+      </sequence>
+      <attributeGroup ref = "fo:Accessibility_Properties_List"/>
+      <attributeGroup ref = "fo:inheritable_properties_List"/>
+    </complexType>
+  </element>
+  <element name = "footnote-body">
+    <complexType>
+      <choice maxOccurs = "unbounded">
+        <group ref = "fo:block_List"/>
+        <group ref = "fo:neutral_List"/>
+        <group ref = "fo:float_List"/>
+        <group ref = "fo:footnote_List"/>
+      </choice>
+      <attributeGroup ref = "fo:Accessibility_Properties_List"/>
+      <attributeGroup ref = "fo:inheritable_properties_List"/>
+    </complexType>
+  </element>
+  <element name = "basic-link">
+    <complexType mixed = "true">
+      <annotation>
+        <documentation>
+          Inheritable <attribute name = "line-height" type = "fo:line_height_Type"/> 
+        </documentation>
+      </annotation>
+      <choice minOccurs = "0" maxOccurs = "unbounded">
+        <group ref = "fo:marker_List"/>
+        <group ref = "fo:inline_List"/>
+        <group ref = "fo:block_List"/>
+        <group ref = "fo:neutral_List"/>
+        <group ref = "fo:float_List"/>
+        <group ref = "fo:footnote_List"/>
+      </choice>
+      <attributeGroup ref = "fo:Accessibility_Properties_List"/>
+      <attributeGroup ref = "fo:Aural_Properties_List"/>
+      <attributeGroup ref = "fo:Border_Padding_and_Background_Properties_List"/>
+      <attributeGroup ref = "fo:Margin_Properties_Inline_List"/>
+      <attributeGroup ref = "fo:Relative_Position_Properties_List"/>
+      <attribute name = "alignment-adjust" type = "fo:alignment_adjust_Type"/>
+      <attribute name = "alignment-baseline" type = "fo:alignment_baseline_Type"/>
+      <attribute name = "baseline-shift" type = "fo:baseline_shift_Type"/>
+      <attribute name = "destination-placement-offset" type = "fo:length_Type"/>
+      <attribute name = "dominant-baseline" type = "fo:dominant_baseline_Type"/>
+      <attribute name = "external-destination" type = "xs:string"/>
+      <attribute name = "id" type = "xs:string"/>
+      <attribute name = "indicate-destination" type = "fo:indicate_destination_Type"/>
+      <attribute name = "internal-destination" type = "xs:string"/>
+      <attributeGroup ref = "fo:keep_Properties_List"/>
+      <attribute name = "show-destination" type = "fo:show_destination_Type"/>
+      <attribute name = "target-processing-context" type = "xs:string"/>
+      <attribute name = "target-presentation-context" type = "xs:string"/>
+      <attribute name = "target-stylesheet" type = "xs:string"/>
+      <attributeGroup ref = "fo:inheritable_properties_List"/>
+      <attribute name = "vertical-align" type = "fo:vertical_align_Type"/>
+    </complexType>
+  </element>
+  <element name = "wrapper">
+    <complexType mixed = "true">
+      <choice minOccurs = "0" maxOccurs = "unbounded">
+        <group ref = "fo:marker_List"/>
+        <group ref = "fo:inline_List"/>
+        <group ref = "fo:block_List"/>
+        <group ref = "fo:neutral_List"/>
+        <group ref = "fo:float_List"/>
+        <group ref = "fo:footnote_List"/>
+      </choice>
+      <attribute name = "id" type = "xs:string"/>
+      <attributeGroup ref = "fo:inheritable_properties_List"/>
+    </complexType>
+  </element>
+  <element name = "marker">
+    <complexType mixed = "true">
+      <choice minOccurs = "0" maxOccurs = "unbounded">
+        <group ref = "fo:inline_List"/>
+        <group ref = "fo:block_List"/>
+      </choice>
+      <attribute name = "marker-class-name" type = "xs:string"/>
+      <attributeGroup ref = "fo:inheritable_properties_List"/>
+    </complexType>
+  </element>
+  <element name = "retrieve-marker">
+    <complexType>
+      <attribute name = "retrieve-class-name" type = "xs:string"/>
+      <attribute name = "retrieve-position" type = "fo:retrieve_position_Type"/>
+      <attribute name = "retrieve-boundary" type = "fo:retrieve_boundary_Type"/>
+      <attributeGroup ref = "fo:inheritable_properties_List"/>
+    </complexType>
+  </element>
+  <element name = "multi-switch">
+    <complexType>
+      <annotation>
+        <documentation>
+          Inheritable <attribute name = "auto-restore" type = "fo:auto_restore_Type"/> 
+        </documentation>
+      </annotation>
+      <sequence>
+        <element ref = "fo:multi-case"/>
+      </sequence>
+      <attributeGroup ref = "fo:Accessibility_Properties_List"/>
+      <attribute name = "id" type = "xs:string"/>
+      <attributeGroup ref = "fo:inheritable_properties_List"/>
+    </complexType>
+  </element>
+  <element name = "multi-case">
+    <complexType mixed = "true">
+      <choice minOccurs = "0" maxOccurs = "unbounded">
+        <group ref = "fo:inline_List"/>
+        <group ref = "fo:block_List"/>
+        <group ref = "fo:neutral_List"/>
+        <group ref = "fo:float_List"/>
+        <group ref = "fo:footnote_List"/>
+      </choice>
+      <attributeGroup ref = "fo:Accessibility_Properties_List"/>
+      <attribute name = "id" type = "xs:string"/>
+      <attribute name = "starting-state" type = "fo:starting_state_Type"/>
+      <attribute name = "case-name" type = "xs:string"/>
+      <attribute name = "case-title" type = "xs:string"/>
+      <attributeGroup ref = "fo:inheritable_properties_List"/>
+    </complexType>
+  </element>
+  <element name = "multi-toggle">
+    <complexType mixed = "true">
+      <choice minOccurs = "0" maxOccurs = "unbounded">
+        <group ref = "fo:inline_List"/>
+        <group ref = "fo:block_List"/>
+        <group ref = "fo:neutral_List"/>
+        <group ref = "fo:float_List"/>
+        <group ref = "fo:footnote_List"/>
+      </choice>
+      <attributeGroup ref = "fo:Accessibility_Properties_List"/>
+      <attribute name = "id" type = "xs:string"/>
+      <attribute name = "switch-to" type = "xs:string"/>
+      <attributeGroup ref = "fo:inheritable_properties_List"/>
+      <attribute name = "vertical-align" type = "fo:vertical_align_Type"/>
+    </complexType>
+  </element>
+  <element name = "multi-properties">
+    <complexType>
+      <sequence>
+        <element ref = "fo:multi-property-set" maxOccurs = "unbounded"/>
+        <element ref = "fo:wrapper"/>
+      </sequence>
+      <attributeGroup ref = "fo:Accessibility_Properties_List"/>
+      <attribute name = "id" type = "xs:string"/>
+      <attributeGroup ref = "fo:inheritable_properties_List"/>
+    </complexType>
+  </element>
+  <element name = "multi-property-set">
+    <complexType>
+      <attribute name = "id" type = "xs:string"/>
+      <attribute name = "active-state" type = "fo:active_state_Type" use = "required"/>
+      <attributeGroup ref = "fo:inheritable_properties_List"/>
+    </complexType>
+  </element>
+</schema>
diff --git a/org.argeo.app.core/src/org/argeo/app/core/schemas/xCal-2.0-RFC6321.rnc b/org.argeo.app.core/src/org/argeo/app/core/schemas/xCal-2.0-RFC6321.rnc
new file mode 100644 (file)
index 0000000..d18211d
--- /dev/null
@@ -0,0 +1,1192 @@
+   default namespace = "urn:ietf:params:xml:ns:icalendar-2.0"
+
+   # 3.2 Property Parameters
+
+   # 3.2.1 Alternate Text Representation
+
+   altrepparam = element altrep {
+       value-uri
+   }
+
+   # 3.2.2 Common Name
+
+   cnparam = element cn {
+       value-text
+   }
+
+   # 3.2.3 Calendar User Type
+
+   cutypeparam = element cutype {
+       element text {
+           "INDIVIDUAL" |
+           "GROUP" |
+           "RESOURCE" |
+           "ROOM" |
+           "UNKNOWN"
+       }
+   }
+
+   # 3.2.4 Delegators
+
+   delfromparam = element delegated-from {
+       value-cal-address+
+   }
+
+   # 3.2.5 Delegatees
+
+   deltoparam = element delegated-to {
+       value-cal-address+
+   }
+
+   # 3.2.6 Directory Entry Reference
+
+   dirparam = element dir {
+       value-uri
+   }
+
+   # 3.2.7 Inline Encoding
+
+   encodingparam = element encoding {
+       element text {
+           "8BIT" |
+           "BASE64"
+       }
+   }
+
+   # 3.2.8 Format Type
+
+   fmttypeparam = element fmttype {
+       value-text
+   }
+
+   # 3.2.9 Free/Busy Time Type
+
+   fbtypeparam = element fbtype {
+       element text {
+           "FREE" |
+           "BUSY" |
+           "BUSY-UNAVAILABLE" |
+           "BUSY-TENTATIVE"
+       }
+   }
+
+   # 3.2.10 Language
+
+   languageparam = element language {
+       value-text
+   }
+
+   # 3.2.11 Group or List Membership
+
+   memberparam = element member {
+       value-cal-address+
+   }
+
+   # 3.2.12 Participation Status
+
+   partstatparam = element partstat {
+       type-partstat-event |
+       type-partstat-todo |
+       type-partstat-jour
+   }
+
+   type-partstat-event = (
+       element text {
+           "NEEDS-ACTION" |
+           "ACCEPTED" |
+           "DECLINED" |
+           "TENTATIVE" |
+           "DELEGATED"
+       }
+   )
+
+   type-partstat-todo = (
+       element text {
+           "NEEDS-ACTION" |
+           "ACCEPTED" |
+           "DECLINED" |
+           "TENTATIVE" |
+           "DELEGATED" |
+           "COMPLETED" |
+           "IN-PROCESS"
+       }
+   )
+
+   type-partstat-jour = (
+       element text {
+           "NEEDS-ACTION" |
+           "ACCEPTED" |
+           "DECLINED"
+       }
+   )
+
+   # 3.2.13 Recurrence Identifier Range
+
+   rangeparam = element range {
+       element text {
+           "THISANDFUTURE"
+       }
+   }
+
+   # 3.2.14 Alarm Trigger Relationship
+
+   trigrelparam = element related {
+       element text {
+           "START" |
+           "END"
+       }
+   }
+
+   # 3.2.15 Relationship Type
+
+   reltypeparam = element reltype {
+       element text {
+           "PARENT" |
+           "CHILD" |
+           "SIBLING"
+       }
+   }
+
+   # 3.2.16 Participation Role
+
+   roleparam = element role {
+       element text {
+           "CHAIR" |
+           "REQ-PARTICIPANT" |
+           "OPT-PARTICIPANT" |
+           "NON-PARTICIPANT"
+       }
+   }
+
+   # 3.2.17 RSVP Expectation
+
+   rsvpparam = element rsvp {
+       value-boolean
+   }
+
+   # 3.2.18 Sent By
+
+   sentbyparam = element sent-by {
+       value-cal-address
+   }
+
+   # 3.2.19 Time Zone Identifier
+
+   tzidparam = element tzid {
+       value-text
+   }
+
+   # 3.3 Property Value Data Types
+
+   # 3.3.1 BINARY
+
+   value-binary =  element binary {
+       xsd:string
+   }
+
+   # 3.3.2 BOOLEAN
+
+   value-boolean = element boolean {
+       xsd:boolean
+   }
+
+   # 3.3.3 CAL-ADDRESS
+
+   value-cal-address = element cal-address {
+       xsd:anyURI
+   }
+
+   # 3.3.4 DATE
+
+   pattern-date = xsd:string {
+       pattern = "\d\d\d\d-\d\d-\d\d"
+   }
+
+   value-date = element date {
+       pattern-date
+   }
+
+   # 3.3.5 DATE-TIME
+
+   pattern-date-time = xsd:string {
+       pattern = "\d\d\d\d-\d\d-\d\dT\d\d:\d\d:\d\dZ?"
+   }
+
+   value-date-time = element date-time {
+       pattern-date-time
+   }
+
+   # 3.3.6 DURATION
+
+   pattern-duration = xsd:string {
+       pattern = "(+|-)?P(\d+W)|(\d+D)?"
+               ~ "(T(\d+H(\d+M)?(\d+S)?)|"
+               ~   "(\d+M(\d+S)?)|"
+               ~   "(\d+S))?"
+   }
+
+   value-duration = element duration {
+       pattern-duration
+   }
+
+   # 3.3.7 FLOAT
+
+   value-float = element float {
+       xsd:float
+   }
+
+   # 3.3.8 INTEGER
+
+   value-integer = element integer {
+       xsd:integer
+   }
+
+   # 3.3.9 PERIOD
+
+   value-period = element period {
+       element start {
+           pattern-date-time
+       },
+       (
+           element end {
+               pattern-date-time
+           } |
+           element duration {
+               pattern-duration
+           }
+       )
+   }
+
+   # 3.3.10 RECUR
+
+   value-recur = element recur {
+       type-freq,
+       (type-until | type-count)?,
+       element interval {
+           xsd:positiveInteger
+       }?,
+       type-bysecond*,
+       type-byminute*,
+       type-byhour*,
+       type-byday*,
+       type-bymonthday*,
+       type-byyearday*,
+       type-byweekno*,
+       type-bymonth*,
+       type-bysetpos*,
+       element wkst { type-weekday }?
+   }
+
+   type-freq = element freq {
+       "SECONDLY" |
+       "MINUTELY" |
+       "HOURLY"   |
+       "DAILY"    |
+       "WEEKLY"   |
+       "MONTHLY"  |
+       "YEARLY"
+   }
+
+   type-until = element until {
+       type-date |
+       type-date-time
+   }
+
+   type-count = element count {
+       xsd:positiveInteger
+   }
+
+   type-bysecond = element bysecond {
+       xsd:positiveInteger
+   }
+
+   type-byminute = element byminute {
+       xsd:positiveInteger
+   }
+
+   type-byhour = element byhour {
+       xsd:positiveInteger
+   }
+
+   type-weekday = (
+       "SU" |
+       "MO" |
+       "TU" |
+       "WE" |
+       "TH" |
+       "FR" |
+       "SA"
+   )
+
+   type-byday = element byday {
+       xsd:integer?,
+       type-weekday
+   }
+
+   type-bymonthday = element bymonthday {
+       xsd:integer
+   }
+
+   type-byyearday = element byyearday {
+       xsd:integer
+   }
+
+   type-byweekno = element byweekno {
+       xsd:integer
+   }
+
+   type-bymonth = element bymonth {
+       xsd:positiveInteger
+   }
+
+   type-bysetpos = element bysetpos {
+       xsd:integer
+   }
+
+   # 3.3.11 TEXT
+
+   value-text = element text {
+       xsd:string
+   }
+
+   # 3.3.12 TIME
+
+   pattern-time = xsd:string {
+       pattern = "\d\d:\d\d:\d\dZ?"
+   }
+
+   value-time = element time {
+       pattern-time
+   }
+
+   # 3.3.13 URI
+
+   value-uri = element uri {
+       xsd:anyURI
+   }
+
+   # 3.3.14 UTC-OFFSET
+
+   value-utc-offset = element utc-offset {
+       xsd:string { pattern = "(+|-)\d\d:\d\d(:\d\d)?" }
+   }
+
+   # UNKNOWN
+
+   value-unknown = element unknown {
+       xsd:string
+   }
+
+   # 3.4 iCalendar Stream
+
+   start = element icalendar {
+       vcalendar+
+   }
+
+   # 3.6 Calendar Components
+
+   vcalendar = element vcalendar {
+       type-calprops,
+       type-component
+   }
+
+   type-calprops = element properties {
+       property-prodid &
+       property-version &
+       property-calscale? &
+       property-method?
+   }
+
+   type-component = element components {
+       (
+           component-vevent |
+           component-vtodo |
+           component-vjournal |
+           component-vfreebusy |
+           component-vtimezone
+       )*
+   }
+
+   # 3.6.1 Event Component
+
+   component-vevent = element vevent {
+       type-eventprop,
+       element components {
+           component-valarm+
+       }?
+   }
+
+   type-eventprop = element properties {
+       property-dtstamp &
+       property-dtstart &
+       property-uid &
+
+       property-class? &
+       property-created? &
+       property-description? &
+       property-geo? &
+       property-last-mod? &
+       property-location? &
+       property-organizer? &
+       property-priority? &
+       property-seq? &
+       property-status-event? &
+
+       property-summary? &
+       property-transp? &
+       property-url? &
+       property-recurid? &
+
+       property-rrule? &
+
+       (property-dtend | property-duration)? &
+
+       property-attach* &
+       property-attendee* &
+       property-categories* &
+       property-comment* &
+       property-contact* &
+       property-exdate* &
+       property-rstatus* &
+       property-related* &
+       property-resources* &
+       property-rdate*
+   }
+
+   # 3.6.2 To-do Component
+
+   component-vtodo = element vtodo {
+       type-todoprop,
+       element components {
+           component-valarm+
+       }?
+   }
+
+   type-todoprop = element properties {
+       property-dtstamp &
+       property-uid &
+
+       property-class? &
+       property-completed? &
+       property-created? &
+       property-description? &
+       property-geo? &
+       property-last-mod? &
+       property-location? &
+       property-organizer? &
+       property-percent? &
+       property-priority? &
+       property-recurid? &
+       property-seq? &
+       property-status-todo? &
+       property-summary? &
+
+       property-url? &
+
+       property-rrule? &
+
+       (
+           (property-dtstart?, property-dtend? ) |
+           (property-dtstart, property-duration)?
+       ) &
+
+       property-attach* &
+       property-attendee* &
+       property-categories* &
+       property-comment* &
+       property-contact* &
+       property-exdate* &
+       property-rstatus* &
+       property-related* &
+       property-resources* &
+       property-rdate*
+   }
+
+   # 3.6.3 Journal Component
+
+   component-vjournal = element vjournal {
+       type-jourprop
+   }
+
+   type-jourprop = element properties {
+       property-dtstamp &
+       property-uid &
+
+       property-class? &
+       property-created? &
+       property-dtstart? &
+       property-last-mod? &
+       property-organizer? &
+       property-recurid? &
+       property-seq? &
+       property-status-jour? &
+       property-summary? &
+       property-url? &
+
+       property-rrule? &
+
+       property-attach* &
+       property-attendee* &
+       property-categories* &
+       property-comment* &
+       property-contact* &
+       property-description? &
+       property-exdate* &
+       property-related* &
+       property-rdate* &
+       property-rstatus*
+   }
+
+   # 3.6.4 Free/Busy Component
+
+   component-vfreebusy = element vfreebusy {
+       type-fbprop
+   }
+
+   type-fbprop = element properties {
+       property-dtstamp &
+       property-uid &
+
+       property-contact? &
+       property-dtstart? &
+       property-dtend? &
+       property-duration? &
+       property-organizer? &
+       property-url? &
+
+       property-attendee* &
+       property-comment* &
+       property-freebusy* &
+       property-rstatus*
+   }
+
+   # 3.6.5 Time Zone Component
+
+   component-vtimezone = element vtimezone {
+       element properties {
+           property-tzid &
+
+           property-last-mod? &
+           property-tzuurl?
+       },
+       element components {
+           (component-standard | component-daylight) &
+           component-standard* &
+           component-daylight*
+       }
+   }
+
+   component-standard = element standard {
+       type-tzprop
+   }
+
+   component-daylight = element daylight {
+       type-tzprop
+   }
+
+   type-tzprop = element properties {
+       property-dtstart &
+       property-tzoffsetto &
+       property-tzoffsetfrom &
+
+       property-rrule? &
+
+       property-comment* &
+       property-rdate* &
+       property-tzname*
+   }
+
+   # 3.6.6 Alarm Component
+
+   component-valarm = element valarm {
+       audioprop | dispprop | emailprop
+   }
+
+   type-audioprop = element properties {
+       property-action &
+
+       property-trigger &
+
+       (property-duration, property-repeat)? &
+
+       property-attach?
+   }
+
+   type-dispprop = element properties {
+       property-action &
+       property-description &
+       property-trigger &
+       property-summary &
+
+       property-attendee+ &
+
+       (property-duration, property-repeat)? &
+
+       property-attach*
+   }
+
+   type-emailprop = element properties {
+       property-action &
+       property-description &
+       property-trigger &
+
+       (property-duration, property-repeat)?
+   }
+
+   # 3.7 Calendar Properties
+
+   # 3.7.1 Calendar Scale
+
+   property-calscale = element calscale {
+
+       element parameters { empty }?,
+
+       element text { "GREGORIAN" }
+   }
+
+   # 3.7.2 Method
+
+   property-method = element method {
+
+       element parameters { empty }?,
+
+       value-text
+   }
+
+   # 3.7.3 Product Identifier
+
+   property-prodid = element prodid {
+
+       element parameters { empty }?,
+
+       value-text
+   }
+
+   # 3.7.4 Version
+
+   property-version = element version {
+
+       element parameters { empty }?,
+
+       element text { "2.0" }
+   }
+
+   # 3.8 Component Properties
+
+   # 3.8.1 Descriptive Component Properties
+
+   # 3.8.1.1 Attachment
+
+   property-attach = element attach {
+
+       element parameters {
+           fmttypeparam? &
+           encodingparam?
+       }?,
+
+       value-uri | value-binary
+   }
+
+   # 3.8.1.2 Categories
+
+   property-categories = element categories {
+
+       element parameters {
+           languageparam? &
+       }?,
+
+       value-text+
+   }
+
+   # 3.8.1.3 Classification
+
+   property-class = element class {
+
+       element parameters { empty }?,
+
+       element text {
+           "PUBLIC" |
+           "PRIVATE" |
+           "CONFIDENTIAL"
+       }
+   }
+
+   # 3.8.1.4 Comment
+
+   property-comment = element comment {
+
+       element parameters {
+           altrepparam? &
+           languageparam?
+       }?,
+
+       value-text
+   }
+
+   # 3.8.1.5 Description
+
+   property-description = element description {
+
+       element parameters {
+           altrepparam? &
+           languageparam?
+       }?,
+
+       value-text
+   }
+
+   # 3.8.1.6 Geographic Position
+
+   property-geo = element geo {
+
+       element parameters { empty }?,
+
+       element latitude  { xsd:float },
+       element longitude { xsd:float }
+   }
+
+   # 3.8.1.7 Location
+
+   property-location = element location {
+
+       element parameters {
+
+           altrepparam? &
+           languageparam?
+       }?,
+
+       value-text
+   }
+
+   # 3.8.1.8 Percent Complete
+
+   property-percent = element percent-complete {
+
+       element parameters { empty }?,
+
+       value-integer
+   }
+
+
+   # 3.8.1.9 Priority
+
+   property-priority = element priority {
+
+       element parameters { empty }?,
+
+       value-integer
+   }
+
+   # 3.8.1.10 Resources
+
+   property-resources = element resources {
+
+       element parameters {
+           altrepparam? &
+           languageparam?
+       }?,
+
+       value-text+
+   }
+
+   # 3.8.1.11 Status
+
+   property-status-event = element status {
+
+       element parameters { empty }?,
+
+       element text {
+           "TENTATIVE" |
+           "CONFIRMED" |
+           "CANCELLED"
+       }
+   }
+
+   property-status-todo = element status {
+
+       element parameters { empty }?,
+
+       element text {
+           "NEEDS-ACTION" |
+           "COMPLETED" |
+           "IN-PROCESS" |
+           "CANCELLED"
+       }
+   }
+
+   property-status-jour = element status {
+
+       element parameters { empty }?,
+
+       element text {
+           "DRAFT" |
+           "FINAL" |
+           "CANCELLED"
+       }
+   }
+
+   # 3.8.1.12 Summary
+
+   property-summary = element summary {
+
+       element parameters {
+           altrepparam? &
+           languageparam?
+       }?,
+
+       value-text
+   }
+
+   # 3.8.2 Date and Time Component Properties
+
+   # 3.8.2.1 Date/Time Completed
+
+   property-completed = element completed {
+
+       element parameters { empty }?,
+
+       value-date-time
+   }
+
+   # 3.8.2.2 Date/Time End
+
+   property-dtend = element dtend {
+
+       element parameters {
+           tzidparam?
+       }?,
+
+       value-date-time |
+       value-date
+   }
+
+   # 3.8.2.3 Date/Time Due
+
+   property-due = element due {
+
+       element parameters {
+           tzidparam?
+       }?,
+
+       value-date-time |
+       value-date
+   }
+
+   # 3.8.2.4 Date/Time Start
+
+   property-dtstart = element dtstart {
+
+       element parameters {
+           tzidparam?
+       }?,
+
+       value-date-time |
+       value-date
+   }
+
+   # 3.8.2.5 Duration
+
+   property-duration = element duration {
+
+       element parameters { empty }?,
+
+       value-duration
+   }
+
+   # 3.8.2.6 Free/Busy Time
+
+   property-freebusy = element freebusy {
+
+       element parameters {
+           fbtypeparam?
+       }?,
+
+
+       value-period+
+   }
+
+   # 3.8.2.7 Time Transparency
+
+   property-transp = element transp {
+
+
+       element parameters { empty }?,
+
+       element text {
+           "OPAQUE" |
+           "TRANSPARENT"
+       }
+   }
+
+   # 3.8.3 Time Zone Component Properties
+
+   # 3.8.3.1 Time Zone Identifier
+
+   property-tzid = element tzid {
+
+       element parameters { empty }?,
+
+       value-text
+   }
+
+   # 3.8.3.2 Time Zone Name
+
+   property-tzname = element tzname {
+
+       element parameters {
+           languageparam?
+       }?,
+
+       value-text
+   }
+
+   # 3.8.3.3 Time Zone Offset From
+
+   property-tzoffsetfrom = element tzoffsetfrom {
+
+       element parameters { empty }?,
+
+       value-utc-offset
+   }
+
+   # 3.8.3.4 Time Zone Offset To
+
+   property-tzoffsetto = element tzoffsetto {
+
+       element parameters { empty }?,
+
+       value-utc-offset
+   }
+
+   # 3.8.3.5 Time Zone URL
+
+   property-tzurl = element tzurl {
+
+       element parameters { empty }?,
+
+       value-uri
+   }
+
+   # 3.8.4 Relationship Component Properties
+
+   # 3.8.4.1 Attendee
+
+   property-attendee = element attendee {
+
+       element parameters {
+           cutypeparam? &
+           memberparam? &
+           roleparam? &
+           partstatparam? &
+           rsvpparam? &
+           deltoparam? &
+           delfromparam? &
+           sentbyparam? &
+           cnparam? &
+           dirparam? &
+           languageparam?
+       }?,
+
+       value-cal-address
+   }
+
+   # 3.8.4.2 Contact
+
+   property-contact = element contact {
+
+       element parameters {
+           altrepparam? &
+           languageparam?
+       }?,
+
+       value-text
+   }
+
+   # 3.8.4.3 Organizer
+
+   property-organizer = element organizer {
+
+       element parameters {
+           cnparam? &
+           dirparam? &
+           sentbyparam? &
+           languageparam?
+       }?,
+
+       value-cal-address
+   }
+
+   # 3.8.4.4 Recurrence ID
+
+   property-recurid = element recurrence-id {
+
+       element parameters {
+           tzidparam? &
+           rangeparam?
+       }?,
+
+       value-date-time |
+       value-date
+   }
+
+   # 3.8.4.5 Related-To
+
+   property-related = element related-to {
+
+       element parameters {
+           reltypeparam?
+       }?,
+
+       value-text
+   }
+
+   # 3.8.4.6 Uniform Resource Locator
+
+   property-url = element url {
+
+       element parameters { empty }?,
+
+       value-uri
+   }
+
+   # 3.8.4.7 Unique Identifier
+
+   property-uid = element uid {
+
+       element parameters { empty }?,
+       value-text
+   }
+
+   # 3.8.5 Recurrence Component Properties
+
+   # 3.8.5.1 Exception Date/Times
+
+   property-exdate = element exdate {
+
+       element parameters {
+           tzidparam?
+       }?,
+
+       value-date-time+ |
+       value-date+
+   }
+
+   # 3.8.5.2 Recurrence Date/Times
+
+   property-rdate = element rdate {
+
+       element parameters {
+           tzidparam?
+       }?,
+
+       value-date-time+ |
+       value-date+ |
+       value-period+
+   }
+
+   # 3.8.5.3 Recurrence Rule
+
+   property-rrule = element rrule {
+
+       element parameters { empty }?,
+
+       value-recur
+   }
+
+   # 3.8.6 Alarm Component Properties
+
+   # 3.8.6.1 Action
+
+   property-action = element action {
+
+       element parameters { empty }?,
+       element text {
+           "AUDIO" |
+           "DISPLAY" |
+           "EMAIL"
+       }
+   }
+
+   # 3.8.6.2 Repeat Count
+
+   property-repeat = element repeat {
+
+       element parameters { empty }?,
+
+       value-integer
+   }
+
+   # 3.8.6.3 Trigger
+
+   property-trigger = element trigger {
+
+       (
+           element parameters {
+               trigrelparam?
+           }?,
+
+           value-duration
+       ) |
+       (
+           element parameters { empty }?,
+
+           value-date-time
+       )
+   }
+
+   # 3.8.7 Change Management Component Properties
+
+   # 3.8.7.1 Date/Time Created
+
+   property-created = element created {
+
+       element parameters { empty }?,
+
+       value-date-time
+   }
+
+   # 3.8.7.2 Date/Time Stamp
+
+   property-dtstamp = element dtstamp {
+       element parameters { empty }?,
+
+       value-date-time
+   }
+
+   # 3.8.7.3 Last Modified
+
+   property-last-mod = element last-modified {
+
+       element parameters { empty }?,
+
+       value-date-time
+   }
+
+   # 3.8.7.4 Sequence Number
+
+   property-seq = element sequence {
+
+       element parameters { empty }?,
+
+       value-integer
+   }
+
+   # 3.8.8 Miscellaneous Component Properties
+
+   # 3.8.8.3 Request Status
+
+   property-rstatus = element request-status {
+
+       element parameters {
+           languageparam?
+       }?,
+
+       element code { xsd:string },
+       element description { xsd:string },
+       element data { xsd:string }?
+   }
+
+
+
+
+
diff --git a/org.argeo.app.core/src/org/argeo/app/core/schemas/xCal-2.0.rnc b/org.argeo.app.core/src/org/argeo/app/core/schemas/xCal-2.0.rnc
new file mode 100644 (file)
index 0000000..4c863be
--- /dev/null
@@ -0,0 +1,1207 @@
+   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 {
+       # mbaudier - 2022-05-31 : corrected regexp from RFC 6321
+       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 {
+       # mbaudier - 2022-05-31 : corrected undefined pattern from RFC 6321
+       value-date |
+       value-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 {
+       # mbaudier - 2022-05-31 : corrected (?) grouping data is only allowed inside list from RFC 6321
+       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 {
+       # mbaudier - 2022-05-31 : corrected regexp from RFC 6321
+       xsd:string { pattern = "(\+|-)\d\d:\d\d(:\d\d)?" }
+   }
+
+   # UNKNOWN
+
+   value-unknown = element unknown {
+       xsd:string
+   }
+
+   # 3.4 iCalendar Stream
+
+   start = element icalendar {
+       vcalendar+
+   }
+
+   # 3.6 Calendar Components
+
+   vcalendar = element vcalendar {
+       type-calprops,
+       type-component
+   }
+
+   type-calprops = element properties {
+       property-prodid &
+       property-version &
+       property-calscale? &
+       property-method?
+   }
+
+   type-component = element components {
+       (
+           component-vevent |
+           component-vtodo |
+           component-vjournal |
+           component-vfreebusy |
+           component-vtimezone
+       )*
+   }
+
+   # 3.6.1 Event Component
+
+   component-vevent = element vevent {
+       type-eventprop,
+       element components {
+           component-valarm+
+       }?
+   }
+
+   type-eventprop = element properties {
+       property-dtstamp &
+       property-dtstart &
+       property-uid &
+
+       property-class? &
+       property-created? &
+       property-description? &
+       property-geo? &
+       property-last-mod? &
+       property-location? &
+       property-organizer? &
+       property-priority? &
+       property-seq? &
+       property-status-event? &
+
+       property-summary? &
+       property-transp? &
+       property-url? &
+       property-recurid? &
+
+       property-rrule? &
+
+       (property-dtend | property-duration)? &
+
+       property-attach* &
+       property-attendee* &
+       property-categories* &
+       property-comment* &
+       property-contact* &
+       property-exdate* &
+       property-rstatus* &
+       property-related* &
+       property-resources* &
+       property-rdate*
+   }
+
+   # 3.6.2 To-do Component
+
+   component-vtodo = element vtodo {
+       type-todoprop,
+       element components {
+           component-valarm+
+       }?
+   }
+
+   type-todoprop = element properties {
+       property-dtstamp &
+       property-uid &
+
+       property-class? &
+       property-completed? &
+       property-created? &
+       property-description? &
+       property-geo? &
+       property-last-mod? &
+       property-location? &
+       property-organizer? &
+       property-percent? &
+       property-priority? &
+       property-recurid? &
+       property-seq? &
+       property-status-todo? &
+       property-summary? &
+
+       property-url? &
+
+       property-rrule? &
+
+       (
+           (property-dtstart?, property-dtend? ) |
+           (property-dtstart, property-duration)?
+       ) &
+
+       property-attach* &
+       property-attendee* &
+       property-categories* &
+       property-comment* &
+       property-contact* &
+       property-exdate* &
+       property-rstatus* &
+       property-related* &
+       property-resources* &
+       property-rdate*
+   }
+
+   # 3.6.3 Journal Component
+
+   component-vjournal = element vjournal {
+       type-jourprop
+   }
+
+   type-jourprop = element properties {
+       property-dtstamp &
+       property-uid &
+
+       property-class? &
+       property-created? &
+       property-dtstart? &
+       property-last-mod? &
+       property-organizer? &
+       property-recurid? &
+       property-seq? &
+       property-status-jour? &
+       property-summary? &
+       property-url? &
+
+       property-rrule? &
+
+       property-attach* &
+       property-attendee* &
+       property-categories* &
+       property-comment* &
+       property-contact* &
+       property-description? &
+       property-exdate* &
+       property-related* &
+       property-rdate* &
+       property-rstatus*
+   }
+
+   # 3.6.4 Free/Busy Component
+
+   component-vfreebusy = element vfreebusy {
+       type-fbprop
+   }
+
+   type-fbprop = element properties {
+       property-dtstamp &
+       property-uid &
+
+       property-contact? &
+       property-dtstart? &
+       property-dtend? &
+       property-duration? &
+       property-organizer? &
+       property-url? &
+
+       property-attendee* &
+       property-comment* &
+       property-freebusy* &
+       property-rstatus*
+   }
+
+   # 3.6.5 Time Zone Component
+
+   component-vtimezone = element vtimezone {
+       element properties {
+           property-tzid &
+
+           property-last-mod? &
+       # mbaudier - 2022-05-31 : corrected undefined reference from RFC 6321
+           property-tzurl?
+       },
+       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 {
+       # mbaudier - 2022-05-31 : corrected undefined reference from RFC 6321
+       type-audioprop | type-dispprop | type-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?
+       }?,
+
+       # mbaudier - 2022-05-31 : corrected syntax error from RFC 6321
+       (value-uri |
+       value-binary)
+   }
+
+   # 3.8.1.2 Categories
+
+   property-categories = element categories {
+
+       element parameters {
+       # mbaudier - 2022-05-31 : corrected syntax error from RFC 6321
+           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?
+       }?,
+
+       # mbaudier - 2022-05-31 : corrected syntax error from RFC 6321
+       (value-date-time |
+       value-date)
+   }
+
+   # 3.8.2.3 Date/Time Due
+
+   property-due = element due {
+
+       element parameters {
+           tzidparam?
+       }?,
+
+       # mbaudier - 2022-05-31 : corrected syntax error from RFC 6321
+       (value-date-time |
+       value-date)
+   }
+
+   # 3.8.2.4 Date/Time Start
+
+   property-dtstart = element dtstart {
+
+       element parameters {
+           tzidparam?
+       }?,
+
+       # mbaudier - 2022-05-31 : corrected syntax error from RFC 6321
+       (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?
+       }?,
+
+       # mbaudier - 2022-05-31 : corrected syntax error from RFC 6321
+       (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?
+       }?,
+
+       # mbaudier - 2022-05-31 : corrected syntax error from RFC 6321
+       (value-date-time+ |
+       value-date+)
+   }
+
+   # 3.8.5.2 Recurrence Date/Times
+
+   property-rdate = element rdate {
+
+       element parameters {
+           tzidparam?
+       }?,
+
+       # mbaudier - 2022-05-31 : corrected syntax error from RFC 6321
+       (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/org.argeo.app.core/src/org/argeo/app/core/schemas/xCal-2.0.xsd b/org.argeo.app.core/src/org/argeo/app/core/schemas/xCal-2.0.xsd
new file mode 100644 (file)
index 0000000..d0bb31e
--- /dev/null
@@ -0,0 +1,1489 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" targetNamespace="urn:ietf:params:xml:ns:icalendar-2.0" xmlns:ns1="urn:ietf:params:xml:ns:icalendar-2.0">
+  <!-- 3.2 Property Parameters -->
+  <!-- 3.2.1 Alternate Text Representation -->
+  <xs:element name="altrep">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element ref="ns1:uri"/>
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <!-- 3.2.2 Common Name -->
+  <xs:element name="cn">
+    <xs:complexType>
+      <xs:group ref="ns1:value-text"/>
+    </xs:complexType>
+  </xs:element>
+  <!-- 3.2.3 Calendar User Type -->
+  <xs:element name="cutype">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element name="text">
+          <xs:simpleType>
+            <xs:restriction base="xs:token">
+              <xs:enumeration value="INDIVIDUAL"/>
+              <xs:enumeration value="GROUP"/>
+              <xs:enumeration value="RESOURCE"/>
+              <xs:enumeration value="ROOM"/>
+              <xs:enumeration value="UNKNOWN"/>
+            </xs:restriction>
+          </xs:simpleType>
+        </xs:element>
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <!-- 3.2.4 Delegators -->
+  <xs:element name="delegated-from">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element maxOccurs="unbounded" ref="ns1:cal-address"/>
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <!-- 3.2.5 Delegatees -->
+  <xs:element name="delegated-to">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element maxOccurs="unbounded" ref="ns1:cal-address"/>
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <!-- 3.2.6 Directory Entry Reference -->
+  <xs:element name="dir">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element ref="ns1:uri"/>
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <!-- 3.2.7 Inline Encoding -->
+  <xs:element name="encoding">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element name="text">
+          <xs:simpleType>
+            <xs:restriction base="xs:token">
+              <xs:enumeration value="8BIT"/>
+              <xs:enumeration value="BASE64"/>
+            </xs:restriction>
+          </xs:simpleType>
+        </xs:element>
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <!-- 3.2.8 Format Type -->
+  <xs:element name="fmttype">
+    <xs:complexType>
+      <xs:group ref="ns1:value-text"/>
+    </xs:complexType>
+  </xs:element>
+  <!-- 3.2.9 Free/Busy Time Type -->
+  <xs:element name="fbtype">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element name="text">
+          <xs:simpleType>
+            <xs:restriction base="xs:token">
+              <xs:enumeration value="FREE"/>
+              <xs:enumeration value="BUSY"/>
+              <xs:enumeration value="BUSY-UNAVAILABLE"/>
+              <xs:enumeration value="BUSY-TENTATIVE"/>
+            </xs:restriction>
+          </xs:simpleType>
+        </xs:element>
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <!-- 3.2.10 Language -->
+  <xs:element name="language">
+    <xs:complexType>
+      <xs:group ref="ns1:value-text"/>
+    </xs:complexType>
+  </xs:element>
+  <!-- 3.2.11 Group or List Membership -->
+  <xs:element name="member">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element maxOccurs="unbounded" ref="ns1:cal-address"/>
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <!-- 3.2.12 Participation Status -->
+  <xs:element name="partstat">
+    <xs:complexType>
+      <xs:choice>
+        <xs:group ref="ns1:type-partstat-event"/>
+        <xs:group ref="ns1:type-partstat-todo"/>
+        <xs:group ref="ns1:type-partstat-jour"/>
+      </xs:choice>
+    </xs:complexType>
+  </xs:element>
+  <xs:group name="type-partstat-event">
+    <xs:sequence>
+      <xs:element name="text">
+        <xs:simpleType>
+          <xs:restriction base="xs:token">
+            <xs:enumeration value="NEEDS-ACTION"/>
+            <xs:enumeration value="ACCEPTED"/>
+            <xs:enumeration value="DECLINED"/>
+            <xs:enumeration value="TENTATIVE"/>
+            <xs:enumeration value="DELEGATED"/>
+          </xs:restriction>
+        </xs:simpleType>
+      </xs:element>
+    </xs:sequence>
+  </xs:group>
+  <xs:group name="type-partstat-todo">
+    <xs:sequence>
+      <xs:element name="text">
+        <xs:simpleType>
+          <xs:restriction base="xs:token">
+            <xs:enumeration value="NEEDS-ACTION"/>
+            <xs:enumeration value="ACCEPTED"/>
+            <xs:enumeration value="DECLINED"/>
+            <xs:enumeration value="TENTATIVE"/>
+            <xs:enumeration value="DELEGATED"/>
+            <xs:enumeration value="COMPLETED"/>
+            <xs:enumeration value="IN-PROCESS"/>
+          </xs:restriction>
+        </xs:simpleType>
+      </xs:element>
+    </xs:sequence>
+  </xs:group>
+  <xs:group name="type-partstat-jour">
+    <xs:sequence>
+      <xs:element name="text">
+        <xs:simpleType>
+          <xs:restriction base="xs:token">
+            <xs:enumeration value="NEEDS-ACTION"/>
+            <xs:enumeration value="ACCEPTED"/>
+            <xs:enumeration value="DECLINED"/>
+          </xs:restriction>
+        </xs:simpleType>
+      </xs:element>
+    </xs:sequence>
+  </xs:group>
+  <!-- 3.2.13 Recurrence Identifier Range -->
+  <xs:element name="range">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element name="text">
+          <xs:simpleType>
+            <xs:restriction base="xs:token">
+              <xs:enumeration value="THISANDFUTURE"/>
+            </xs:restriction>
+          </xs:simpleType>
+        </xs:element>
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <!-- 3.2.14 Alarm Trigger Relationship -->
+  <xs:element name="related">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element name="text">
+          <xs:simpleType>
+            <xs:restriction base="xs:token">
+              <xs:enumeration value="START"/>
+              <xs:enumeration value="END"/>
+            </xs:restriction>
+          </xs:simpleType>
+        </xs:element>
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <!-- 3.2.15 Relationship Type -->
+  <xs:element name="reltype">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element name="text">
+          <xs:simpleType>
+            <xs:restriction base="xs:token">
+              <xs:enumeration value="PARENT"/>
+              <xs:enumeration value="CHILD"/>
+              <xs:enumeration value="SIBLING"/>
+            </xs:restriction>
+          </xs:simpleType>
+        </xs:element>
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <!-- 3.2.16 Participation Role -->
+  <xs:element name="role">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element name="text">
+          <xs:simpleType>
+            <xs:restriction base="xs:token">
+              <xs:enumeration value="CHAIR"/>
+              <xs:enumeration value="REQ-PARTICIPANT"/>
+              <xs:enumeration value="OPT-PARTICIPANT"/>
+              <xs:enumeration value="NON-PARTICIPANT"/>
+            </xs:restriction>
+          </xs:simpleType>
+        </xs:element>
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <!-- 3.2.17 RSVP Expectation -->
+  <xs:element name="rsvp" type="ns1:value-boolean"/>
+  <!-- 3.2.18 Sent By -->
+  <xs:element name="sent-by">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element ref="ns1:cal-address"/>
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <!-- 3.2.19 Time Zone Identifier -->
+  <xs:group name="tzidparam">
+    <xs:sequence>
+      <xs:element name="tzid">
+        <xs:complexType>
+          <xs:group ref="ns1:value-text"/>
+        </xs:complexType>
+      </xs:element>
+    </xs:sequence>
+  </xs:group>
+  <!-- 3.3 Property Value Data Types -->
+  <!-- 3.3.1 BINARY -->
+  <xs:element name="binary" type="xs:string"/>
+  <!-- 3.3.2 BOOLEAN -->
+  <xs:complexType name="value-boolean">
+    <xs:sequence>
+      <xs:element ref="ns1:boolean"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:element name="boolean" type="xs:boolean"/>
+  <!-- 3.3.3 CAL-ADDRESS -->
+  <xs:element name="cal-address" type="xs:anyURI"/>
+  <!-- 3.3.4 DATE -->
+  <xs:simpleType name="pattern-date">
+    <xs:restriction base="xs:string">
+      <xs:pattern value="\d\d\d\d-\d\d-\d\d"/>
+    </xs:restriction>
+  </xs:simpleType>
+  <xs:element name="date" type="ns1:pattern-date"/>
+  <!-- 3.3.5 DATE-TIME -->
+  <xs:simpleType name="pattern-date-time">
+    <xs:restriction base="xs:string">
+      <xs:pattern value="\d\d\d\d-\d\d-\d\dT\d\d:\d\d:\d\dZ?"/>
+    </xs:restriction>
+  </xs:simpleType>
+  <xs:element name="date-time" type="ns1:pattern-date-time"/>
+  <!-- 3.3.6 DURATION -->
+  <xs:simpleType name="pattern-duration">
+    <xs:restriction base="xs:string">
+      <xs:pattern value="(\+|-)?P(\d+W)|(\d+D)?(T(\d+H(\d+M)?(\d+S)?)|(\d+M(\d+S)?)|(\d+S))?"/>
+    </xs:restriction>
+  </xs:simpleType>
+  <xs:group name="value-duration">
+    <xs:sequence>
+      <xs:element name="duration" type="ns1:pattern-duration"/>
+    </xs:sequence>
+  </xs:group>
+  <!-- 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:element name="period">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element ref="ns1:start"/>
+        <xs:choice>
+          <xs:element ref="ns1:end"/>
+          <xs:element name="duration" type="ns1:pattern-duration"/>
+        </xs:choice>
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="start" type="ns1:pattern-date-time"/>
+  <xs:element name="end" type="ns1:pattern-date-time"/>
+  <!-- 3.3.10 RECUR -->
+  <xs:element name="recur">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element ref="ns1:freq"/>
+        <xs:choice minOccurs="0">
+          <xs:element ref="ns1:until"/>
+          <xs:element ref="ns1:count"/>
+        </xs:choice>
+        <xs:element minOccurs="0" ref="ns1:interval"/>
+        <xs:element minOccurs="0" maxOccurs="unbounded" ref="ns1:bysecond"/>
+        <xs:element minOccurs="0" maxOccurs="unbounded" ref="ns1:byminute"/>
+        <xs:element minOccurs="0" maxOccurs="unbounded" ref="ns1:byhour"/>
+        <xs:element minOccurs="0" maxOccurs="unbounded" ref="ns1:byday"/>
+        <xs:element minOccurs="0" maxOccurs="unbounded" ref="ns1:bymonthday"/>
+        <xs:element minOccurs="0" maxOccurs="unbounded" ref="ns1:byyearday"/>
+        <xs:element minOccurs="0" maxOccurs="unbounded" ref="ns1:byweekno"/>
+        <xs:element minOccurs="0" maxOccurs="unbounded" ref="ns1:bymonth"/>
+        <xs:element minOccurs="0" maxOccurs="unbounded" ref="ns1:bysetpos"/>
+        <xs:element minOccurs="0" ref="ns1:wkst"/>
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="interval" type="xs:positiveInteger"/>
+  <xs:element name="wkst" type="ns1:type-weekday"/>
+  <xs:element name="freq">
+    <xs:simpleType>
+      <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>
+  <xs:element name="until">
+    <xs:complexType>
+      <xs:choice>
+        <xs:element ref="ns1:date"/>
+        <xs:element ref="ns1:date-time"/>
+      </xs:choice>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="count" type="xs:positiveInteger"/>
+  <xs:element name="bysecond" type="xs:positiveInteger"/>
+  <xs:element name="byminute" type="xs:positiveInteger"/>
+  <xs:element name="byhour" type="xs:positiveInteger"/>
+  <xs:simpleType name="type-weekday">
+    <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:element name="byday">
+    <xs:simpleType>
+      <xs:union>
+        <xs:simpleType>
+          <xs:union memberTypes="xs:integer ns1:type-weekday"/>
+        </xs:simpleType>
+        <xs:simpleType>
+          <xs:restriction base="xs:token">
+            <xs:length value="0"/>
+          </xs:restriction>
+        </xs:simpleType>
+      </xs:union>
+    </xs:simpleType>
+  </xs:element>
+  <xs:element name="bymonthday" type="xs:integer"/>
+  <xs:element name="byyearday" type="xs:integer"/>
+  <xs:element name="byweekno" type="xs:integer"/>
+  <xs:element name="bymonth" type="xs:positiveInteger"/>
+  <xs:element name="bysetpos" type="xs:integer"/>
+  <!-- 3.3.11 TEXT -->
+  <xs:group name="value-text">
+    <xs:sequence>
+      <xs:element name="text" type="xs:string"/>
+    </xs:sequence>
+  </xs:group>
+  <!-- 3.3.12 TIME -->
+  <xs:simpleType name="pattern-time">
+    <xs:restriction base="xs:string">
+      <xs:pattern value="\d\d:\d\d:\d\dZ?"/>
+    </xs:restriction>
+  </xs:simpleType>
+  <xs:element name="time" type="ns1:pattern-time"/>
+  <!-- 3.3.13 URI -->
+  <xs:element name="uri" type="xs:anyURI"/>
+  <!-- 3.3.14 UTC-OFFSET -->
+  <xs:element name="utc-offset">
+    <xs:simpleType>
+      <xs:restriction base="xs:string">
+        <xs:pattern value="(\+|-)\d\d:\d\d(:\d\d)?"/>
+      </xs:restriction>
+    </xs:simpleType>
+  </xs:element>
+  <!-- UNKNOWN -->
+  <xs:element name="unknown" type="xs:string"/>
+  <!-- 3.4 iCalendar Stream -->
+  <xs:element name="icalendar">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element maxOccurs="unbounded" ref="ns1:vcalendar"/>
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <!-- 3.6 Calendar Components -->
+  <xs:element name="vcalendar">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:group ref="ns1:type-calprops"/>
+        <xs:element ref="ns1:components"/>
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:group name="type-calprops">
+    <xs:sequence>
+      <xs:element name="properties">
+        <xs:complexType>
+          <xs:choice minOccurs="0" maxOccurs="unbounded">
+            <xs:element ref="ns1:prodid"/>
+            <xs:element ref="ns1:version"/>
+            <xs:element ref="ns1:calscale"/>
+            <xs:element ref="ns1:method"/>
+          </xs:choice>
+        </xs:complexType>
+      </xs:element>
+    </xs:sequence>
+  </xs:group>
+  <xs:element name="components">
+    <xs:complexType>
+      <xs:choice minOccurs="0" maxOccurs="unbounded">
+        <xs:element ref="ns1:vevent"/>
+        <xs:element ref="ns1:vtodo"/>
+        <xs:element ref="ns1:vjournal"/>
+        <xs:element ref="ns1:vfreebusy"/>
+        <xs:element ref="ns1:vtimezone"/>
+      </xs:choice>
+    </xs:complexType>
+  </xs:element>
+  <!-- 3.6.1 Event Component -->
+  <xs:element name="vevent">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:group ref="ns1:type-eventprop"/>
+        <xs:element minOccurs="0" name="components">
+          <xs:complexType>
+            <xs:sequence>
+              <xs:element maxOccurs="unbounded" ref="ns1:valarm"/>
+            </xs:sequence>
+          </xs:complexType>
+        </xs:element>
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:group name="type-eventprop">
+    <xs:sequence>
+      <xs:element name="properties">
+        <xs:complexType>
+          <xs:choice minOccurs="0" maxOccurs="unbounded">
+            <xs:element ref="ns1:dtstamp"/>
+            <xs:element ref="ns1:dtstart"/>
+            <xs:element ref="ns1:uid"/>
+            <xs:element ref="ns1:class"/>
+            <xs:element ref="ns1:created"/>
+            <xs:element ref="ns1:description"/>
+            <xs:element ref="ns1:geo"/>
+            <xs:element ref="ns1:last-modified"/>
+            <xs:element ref="ns1:location"/>
+            <xs:element ref="ns1:organizer"/>
+            <xs:element ref="ns1:priority"/>
+            <xs:element ref="ns1:sequence"/>
+            <xs:group ref="ns1:property-status-event"/>
+            <xs:element ref="ns1:summary"/>
+            <xs:element ref="ns1:transp"/>
+            <xs:element ref="ns1:url"/>
+            <xs:element ref="ns1:recurrence-id"/>
+            <xs:element ref="ns1:rrule"/>
+            <xs:choice>
+              <xs:element ref="ns1:dtend"/>
+              <xs:group ref="ns1:property-duration"/>
+            </xs:choice>
+            <xs:element ref="ns1:attach"/>
+            <xs:element ref="ns1:attendee"/>
+            <xs:element ref="ns1:categories"/>
+            <xs:element ref="ns1:comment"/>
+            <xs:element ref="ns1:contact"/>
+            <xs:element ref="ns1:exdate"/>
+            <xs:element ref="ns1:request-status"/>
+            <xs:element ref="ns1:related-to"/>
+            <xs:element ref="ns1:resources"/>
+            <xs:element ref="ns1:rdate"/>
+          </xs:choice>
+        </xs:complexType>
+      </xs:element>
+    </xs:sequence>
+  </xs:group>
+  <!-- 3.6.2 To-do Component -->
+  <xs:element name="vtodo">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:group ref="ns1:type-todoprop"/>
+        <xs:element minOccurs="0" name="components">
+          <xs:complexType>
+            <xs:sequence>
+              <xs:element maxOccurs="unbounded" ref="ns1:valarm"/>
+            </xs:sequence>
+          </xs:complexType>
+        </xs:element>
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:group name="type-todoprop">
+    <xs:sequence>
+      <xs:element name="properties">
+        <xs:complexType>
+          <xs:choice minOccurs="0" maxOccurs="unbounded">
+            <xs:element ref="ns1:dtstamp"/>
+            <xs:element ref="ns1:uid"/>
+            <xs:element ref="ns1:class"/>
+            <xs:element ref="ns1:completed"/>
+            <xs:element ref="ns1:created"/>
+            <xs:element ref="ns1:description"/>
+            <xs:element ref="ns1:geo"/>
+            <xs:element ref="ns1:last-modified"/>
+            <xs:element ref="ns1:location"/>
+            <xs:element ref="ns1:organizer"/>
+            <xs:element ref="ns1:percent-complete"/>
+            <xs:element ref="ns1:priority"/>
+            <xs:element ref="ns1:recurrence-id"/>
+            <xs:element ref="ns1:sequence"/>
+            <xs:group ref="ns1:property-status-todo"/>
+            <xs:element ref="ns1:summary"/>
+            <xs:element ref="ns1:url"/>
+            <xs:element ref="ns1:rrule"/>
+            <xs:choice>
+              <xs:choice>
+                <xs:element ref="ns1:dtstart"/>
+                <xs:element ref="ns1:dtend"/>
+              </xs:choice>
+              <xs:choice>
+                <xs:element ref="ns1:dtstart"/>
+                <xs:group ref="ns1:property-duration"/>
+              </xs:choice>
+            </xs:choice>
+            <xs:element ref="ns1:attach"/>
+            <xs:element ref="ns1:attendee"/>
+            <xs:element ref="ns1:categories"/>
+            <xs:element ref="ns1:comment"/>
+            <xs:element ref="ns1:contact"/>
+            <xs:element ref="ns1:exdate"/>
+            <xs:element ref="ns1:request-status"/>
+            <xs:element ref="ns1:related-to"/>
+            <xs:element ref="ns1:resources"/>
+            <xs:element ref="ns1:rdate"/>
+          </xs:choice>
+        </xs:complexType>
+      </xs:element>
+    </xs:sequence>
+  </xs:group>
+  <!-- 3.6.3 Journal Component -->
+  <xs:element name="vjournal" type="ns1:type-jourprop"/>
+  <xs:complexType name="type-jourprop">
+    <xs:sequence>
+      <xs:element name="properties">
+        <xs:complexType>
+          <xs:choice minOccurs="0" maxOccurs="unbounded">
+            <xs:element ref="ns1:dtstamp"/>
+            <xs:element ref="ns1:uid"/>
+            <xs:element ref="ns1:class"/>
+            <xs:element ref="ns1:created"/>
+            <xs:element ref="ns1:dtstart"/>
+            <xs:element ref="ns1:last-modified"/>
+            <xs:element ref="ns1:organizer"/>
+            <xs:element ref="ns1:recurrence-id"/>
+            <xs:element ref="ns1:sequence"/>
+            <xs:group ref="ns1:property-status-jour"/>
+            <xs:element ref="ns1:summary"/>
+            <xs:element ref="ns1:url"/>
+            <xs:element ref="ns1:rrule"/>
+            <xs:element ref="ns1:attach"/>
+            <xs:element ref="ns1:attendee"/>
+            <xs:element ref="ns1:categories"/>
+            <xs:element ref="ns1:comment"/>
+            <xs:element ref="ns1:contact"/>
+            <xs:element ref="ns1:description"/>
+            <xs:element ref="ns1:exdate"/>
+            <xs:element ref="ns1:related-to"/>
+            <xs:element ref="ns1:rdate"/>
+            <xs:element ref="ns1:request-status"/>
+          </xs:choice>
+        </xs:complexType>
+      </xs:element>
+    </xs:sequence>
+  </xs:complexType>
+  <!-- 3.6.4 Free/Busy Component -->
+  <xs:element name="vfreebusy" type="ns1:type-fbprop"/>
+  <xs:complexType name="type-fbprop">
+    <xs:sequence>
+      <xs:element name="properties">
+        <xs:complexType>
+          <xs:choice minOccurs="0" maxOccurs="unbounded">
+            <xs:element ref="ns1:dtstamp"/>
+            <xs:element ref="ns1:uid"/>
+            <xs:element ref="ns1:contact"/>
+            <xs:element ref="ns1:dtstart"/>
+            <xs:element ref="ns1:dtend"/>
+            <xs:group ref="ns1:property-duration"/>
+            <xs:element ref="ns1:organizer"/>
+            <xs:element ref="ns1:url"/>
+            <xs:element ref="ns1:attendee"/>
+            <xs:element ref="ns1:comment"/>
+            <xs:element ref="ns1:freebusy"/>
+            <xs:element ref="ns1:request-status"/>
+          </xs:choice>
+        </xs:complexType>
+      </xs:element>
+    </xs:sequence>
+  </xs:complexType>
+  <!-- 3.6.5 Time Zone Component -->
+  <xs:element name="vtimezone">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element name="properties">
+          <xs:complexType>
+            <xs:choice minOccurs="0" maxOccurs="unbounded">
+              <xs:group ref="ns1:property-tzid"/>
+              <xs:element ref="ns1:last-modified"/>
+              <xs:element ref="ns1:tzurl"/>
+            </xs:choice>
+          </xs:complexType>
+        </xs:element>
+        <xs:element name="components">
+          <xs:complexType>
+            <xs:choice minOccurs="0" maxOccurs="unbounded">
+              <xs:choice>
+                <xs:element ref="ns1:standard"/>
+                <xs:element ref="ns1:daylight"/>
+              </xs:choice>
+              <xs:element ref="ns1:standard"/>
+              <xs:element ref="ns1:daylight"/>
+            </xs:choice>
+          </xs:complexType>
+        </xs:element>
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="standard" type="ns1:type-tzprop"/>
+  <xs:element name="daylight" type="ns1:type-tzprop"/>
+  <xs:complexType name="type-tzprop">
+    <xs:sequence>
+      <xs:element name="properties">
+        <xs:complexType>
+          <xs:choice minOccurs="0" maxOccurs="unbounded">
+            <xs:element ref="ns1:dtstart"/>
+            <xs:element ref="ns1:tzoffsetto"/>
+            <xs:element ref="ns1:tzoffsetfrom"/>
+            <xs:element ref="ns1:rrule"/>
+            <xs:element ref="ns1:comment"/>
+            <xs:element ref="ns1:rdate"/>
+            <xs:element ref="ns1:tzname"/>
+          </xs:choice>
+        </xs:complexType>
+      </xs:element>
+    </xs:sequence>
+  </xs:complexType>
+  <!-- 3.6.6 Alarm Component -->
+  <xs:element name="valarm">
+    <xs:complexType>
+      <xs:choice>
+        <xs:group ref="ns1:type-audioprop"/>
+        <xs:group ref="ns1:type-dispprop"/>
+        <xs:group ref="ns1:type-emailprop"/>
+      </xs:choice>
+    </xs:complexType>
+  </xs:element>
+  <xs:group name="type-audioprop">
+    <xs:sequence>
+      <xs:element name="properties">
+        <xs:complexType>
+          <xs:choice minOccurs="0" maxOccurs="unbounded">
+            <xs:element ref="ns1:action"/>
+            <xs:element ref="ns1:trigger"/>
+            <xs:choice>
+              <xs:group ref="ns1:property-duration"/>
+              <xs:element ref="ns1:repeat"/>
+            </xs:choice>
+            <xs:element ref="ns1:attach"/>
+          </xs:choice>
+        </xs:complexType>
+      </xs:element>
+    </xs:sequence>
+  </xs:group>
+  <xs:group name="type-dispprop">
+    <xs:sequence>
+      <xs:element name="properties">
+        <xs:complexType>
+          <xs:choice minOccurs="0" maxOccurs="unbounded">
+            <xs:element ref="ns1:action"/>
+            <xs:element ref="ns1:description"/>
+            <xs:element ref="ns1:trigger"/>
+            <xs:element ref="ns1:summary"/>
+            <xs:element ref="ns1:attendee"/>
+            <xs:choice>
+              <xs:group ref="ns1:property-duration"/>
+              <xs:element ref="ns1:repeat"/>
+            </xs:choice>
+            <xs:element ref="ns1:attach"/>
+          </xs:choice>
+        </xs:complexType>
+      </xs:element>
+    </xs:sequence>
+  </xs:group>
+  <xs:group name="type-emailprop">
+    <xs:sequence>
+      <xs:element name="properties">
+        <xs:complexType>
+          <xs:choice minOccurs="0" maxOccurs="unbounded">
+            <xs:element ref="ns1:action"/>
+            <xs:element ref="ns1:description"/>
+            <xs:element ref="ns1:trigger"/>
+            <xs:choice>
+              <xs:group ref="ns1:property-duration"/>
+              <xs:element ref="ns1:repeat"/>
+            </xs:choice>
+          </xs:choice>
+        </xs:complexType>
+      </xs:element>
+    </xs:sequence>
+  </xs:group>
+  <!-- 3.7 Calendar Properties -->
+  <!-- 3.7.1 Calendar Scale -->
+  <xs:element name="calscale">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element minOccurs="0" name="parameters">
+          <xs:complexType/>
+        </xs:element>
+        <xs:element name="text">
+          <xs:simpleType>
+            <xs:restriction base="xs:token">
+              <xs:enumeration value="GREGORIAN"/>
+            </xs:restriction>
+          </xs:simpleType>
+        </xs:element>
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <!-- 3.7.2 Method -->
+  <xs:element name="method">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element minOccurs="0" name="parameters">
+          <xs:complexType/>
+        </xs:element>
+        <xs:group ref="ns1:value-text"/>
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <!-- 3.7.3 Product Identifier -->
+  <xs:element name="prodid">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element minOccurs="0" name="parameters">
+          <xs:complexType/>
+        </xs:element>
+        <xs:group ref="ns1:value-text"/>
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <!-- 3.7.4 Version -->
+  <xs:element name="version">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element minOccurs="0" name="parameters">
+          <xs:complexType/>
+        </xs:element>
+        <xs:element name="text">
+          <xs:simpleType>
+            <xs:restriction base="xs:token">
+              <xs:enumeration value="2.0"/>
+            </xs:restriction>
+          </xs:simpleType>
+        </xs:element>
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <!-- 3.8 Component Properties -->
+  <!-- 3.8.1 Descriptive Component Properties -->
+  <!-- 3.8.1.1 Attachment -->
+  <xs:element name="attach">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element minOccurs="0" name="parameters">
+          <xs:complexType>
+            <xs:choice minOccurs="0" maxOccurs="unbounded">
+              <xs:element ref="ns1:fmttype"/>
+              <xs:element ref="ns1:encoding"/>
+            </xs:choice>
+          </xs:complexType>
+        </xs:element>
+        <xs:choice>
+          <xs:element ref="ns1:uri"/>
+          <xs:element ref="ns1:binary"/>
+        </xs:choice>
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <!-- 3.8.1.2 Categories -->
+  <xs:element name="categories">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element minOccurs="0" name="parameters">
+          <xs:complexType>
+            <xs:sequence>
+              <xs:element minOccurs="0" ref="ns1:language"/>
+            </xs:sequence>
+          </xs:complexType>
+        </xs:element>
+        <xs:group maxOccurs="unbounded" ref="ns1:value-text"/>
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <!-- 3.8.1.3 Classification -->
+  <xs:element name="class">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element minOccurs="0" name="parameters">
+          <xs:complexType/>
+        </xs:element>
+        <xs:element name="text">
+          <xs:simpleType>
+            <xs:restriction base="xs:token">
+              <xs:enumeration value="PUBLIC"/>
+              <xs:enumeration value="PRIVATE"/>
+              <xs:enumeration value="CONFIDENTIAL"/>
+            </xs:restriction>
+          </xs:simpleType>
+        </xs:element>
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <!-- 3.8.1.4 Comment -->
+  <xs:element name="comment">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element minOccurs="0" name="parameters">
+          <xs:complexType>
+            <xs:choice minOccurs="0" maxOccurs="unbounded">
+              <xs:element ref="ns1:altrep"/>
+              <xs:element ref="ns1:language"/>
+            </xs:choice>
+          </xs:complexType>
+        </xs:element>
+        <xs:group ref="ns1:value-text"/>
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <!-- 3.8.1.5 Description -->
+  <xs:element name="description">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element minOccurs="0" name="parameters">
+          <xs:complexType>
+            <xs:choice minOccurs="0" maxOccurs="unbounded">
+              <xs:element ref="ns1:altrep"/>
+              <xs:element ref="ns1:language"/>
+            </xs:choice>
+          </xs:complexType>
+        </xs:element>
+        <xs:group ref="ns1:value-text"/>
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <!-- 3.8.1.6 Geographic Position -->
+  <xs:element name="geo">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element minOccurs="0" name="parameters">
+          <xs:complexType/>
+        </xs:element>
+        <xs:element ref="ns1:latitude"/>
+        <xs:element ref="ns1:longitude"/>
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="latitude" type="xs:float"/>
+  <xs:element name="longitude" type="xs:float"/>
+  <!-- 3.8.1.7 Location -->
+  <xs:element name="location">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element minOccurs="0" name="parameters">
+          <xs:complexType>
+            <xs:choice minOccurs="0" maxOccurs="unbounded">
+              <xs:element ref="ns1:altrep"/>
+              <xs:element ref="ns1:language"/>
+            </xs:choice>
+          </xs:complexType>
+        </xs:element>
+        <xs:group ref="ns1:value-text"/>
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <!-- 3.8.1.8 Percent Complete -->
+  <xs:element name="percent-complete">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element minOccurs="0" name="parameters">
+          <xs:complexType/>
+        </xs:element>
+        <xs:element ref="ns1:integer"/>
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <!-- 3.8.1.9 Priority -->
+  <xs:element name="priority">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element minOccurs="0" name="parameters">
+          <xs:complexType/>
+        </xs:element>
+        <xs:element ref="ns1:integer"/>
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <!-- 3.8.1.10 Resources -->
+  <xs:element name="resources">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element minOccurs="0" name="parameters">
+          <xs:complexType>
+            <xs:choice minOccurs="0" maxOccurs="unbounded">
+              <xs:element ref="ns1:altrep"/>
+              <xs:element ref="ns1:language"/>
+            </xs:choice>
+          </xs:complexType>
+        </xs:element>
+        <xs:group maxOccurs="unbounded" ref="ns1:value-text"/>
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <!-- 3.8.1.11 Status -->
+  <xs:group name="property-status-event">
+    <xs:sequence>
+      <xs:element name="status">
+        <xs:complexType>
+          <xs:sequence>
+            <xs:element minOccurs="0" name="parameters">
+              <xs:complexType/>
+            </xs:element>
+            <xs:element name="text">
+              <xs:simpleType>
+                <xs:restriction base="xs:token">
+                  <xs:enumeration value="TENTATIVE"/>
+                  <xs:enumeration value="CONFIRMED"/>
+                  <xs:enumeration value="CANCELLED"/>
+                </xs:restriction>
+              </xs:simpleType>
+            </xs:element>
+          </xs:sequence>
+        </xs:complexType>
+      </xs:element>
+    </xs:sequence>
+  </xs:group>
+  <xs:group name="property-status-todo">
+    <xs:sequence>
+      <xs:element name="status">
+        <xs:complexType>
+          <xs:sequence>
+            <xs:element minOccurs="0" name="parameters">
+              <xs:complexType/>
+            </xs:element>
+            <xs:element name="text">
+              <xs:simpleType>
+                <xs:restriction base="xs:token">
+                  <xs:enumeration value="NEEDS-ACTION"/>
+                  <xs:enumeration value="COMPLETED"/>
+                  <xs:enumeration value="IN-PROCESS"/>
+                  <xs:enumeration value="CANCELLED"/>
+                </xs:restriction>
+              </xs:simpleType>
+            </xs:element>
+          </xs:sequence>
+        </xs:complexType>
+      </xs:element>
+    </xs:sequence>
+  </xs:group>
+  <xs:group name="property-status-jour">
+    <xs:sequence>
+      <xs:element name="status">
+        <xs:complexType>
+          <xs:sequence>
+            <xs:element minOccurs="0" name="parameters">
+              <xs:complexType/>
+            </xs:element>
+            <xs:element name="text">
+              <xs:simpleType>
+                <xs:restriction base="xs:token">
+                  <xs:enumeration value="DRAFT"/>
+                  <xs:enumeration value="FINAL"/>
+                  <xs:enumeration value="CANCELLED"/>
+                </xs:restriction>
+              </xs:simpleType>
+            </xs:element>
+          </xs:sequence>
+        </xs:complexType>
+      </xs:element>
+    </xs:sequence>
+  </xs:group>
+  <!-- 3.8.1.12 Summary -->
+  <xs:element name="summary">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element minOccurs="0" name="parameters">
+          <xs:complexType>
+            <xs:choice minOccurs="0" maxOccurs="unbounded">
+              <xs:element ref="ns1:altrep"/>
+              <xs:element ref="ns1:language"/>
+            </xs:choice>
+          </xs:complexType>
+        </xs:element>
+        <xs:group ref="ns1:value-text"/>
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <!-- 3.8.2 Date and Time Component Properties -->
+  <!-- 3.8.2.1 Date/Time Completed -->
+  <xs:element name="completed">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element minOccurs="0" name="parameters">
+          <xs:complexType/>
+        </xs:element>
+        <xs:element ref="ns1:date-time"/>
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <!-- 3.8.2.2 Date/Time End -->
+  <xs:element name="dtend">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element minOccurs="0" name="parameters">
+          <xs:complexType>
+            <xs:group minOccurs="0" ref="ns1:tzidparam"/>
+          </xs:complexType>
+        </xs:element>
+        <xs:choice>
+          <xs:element ref="ns1:date-time"/>
+          <xs:element ref="ns1:date"/>
+        </xs:choice>
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <!-- 3.8.2.3 Date/Time Due -->
+  <xs:element name="due">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element minOccurs="0" name="parameters">
+          <xs:complexType>
+            <xs:group minOccurs="0" ref="ns1:tzidparam"/>
+          </xs:complexType>
+        </xs:element>
+        <xs:choice>
+          <xs:element ref="ns1:date-time"/>
+          <xs:element ref="ns1:date"/>
+        </xs:choice>
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <!-- 3.8.2.4 Date/Time Start -->
+  <xs:element name="dtstart">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element minOccurs="0" name="parameters">
+          <xs:complexType>
+            <xs:group minOccurs="0" ref="ns1:tzidparam"/>
+          </xs:complexType>
+        </xs:element>
+        <xs:choice>
+          <xs:element ref="ns1:date-time"/>
+          <xs:element ref="ns1:date"/>
+        </xs:choice>
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <!-- 3.8.2.5 Duration -->
+  <xs:group name="property-duration">
+    <xs:sequence>
+      <xs:element name="duration">
+        <xs:complexType>
+          <xs:sequence>
+            <xs:element minOccurs="0" name="parameters">
+              <xs:complexType/>
+            </xs:element>
+            <xs:group ref="ns1:value-duration"/>
+          </xs:sequence>
+        </xs:complexType>
+      </xs:element>
+    </xs:sequence>
+  </xs:group>
+  <!-- 3.8.2.6 Free/Busy Time -->
+  <xs:element name="freebusy">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element minOccurs="0" name="parameters">
+          <xs:complexType>
+            <xs:sequence>
+              <xs:element minOccurs="0" ref="ns1:fbtype"/>
+            </xs:sequence>
+          </xs:complexType>
+        </xs:element>
+        <xs:element maxOccurs="unbounded" ref="ns1:period"/>
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <!-- 3.8.2.7 Time Transparency -->
+  <xs:element name="transp">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element minOccurs="0" name="parameters">
+          <xs:complexType/>
+        </xs:element>
+        <xs:element name="text">
+          <xs:simpleType>
+            <xs:restriction base="xs:token">
+              <xs:enumeration value="OPAQUE"/>
+              <xs:enumeration value="TRANSPARENT"/>
+            </xs:restriction>
+          </xs:simpleType>
+        </xs:element>
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <!-- 3.8.3 Time Zone Component Properties -->
+  <!-- 3.8.3.1 Time Zone Identifier -->
+  <xs:group name="property-tzid">
+    <xs:sequence>
+      <xs:element name="tzid">
+        <xs:complexType>
+          <xs:sequence>
+            <xs:element minOccurs="0" name="parameters">
+              <xs:complexType/>
+            </xs:element>
+            <xs:group ref="ns1:value-text"/>
+          </xs:sequence>
+        </xs:complexType>
+      </xs:element>
+    </xs:sequence>
+  </xs:group>
+  <!-- 3.8.3.2 Time Zone Name -->
+  <xs:element name="tzname">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element minOccurs="0" name="parameters">
+          <xs:complexType>
+            <xs:sequence>
+              <xs:element minOccurs="0" ref="ns1:language"/>
+            </xs:sequence>
+          </xs:complexType>
+        </xs:element>
+        <xs:group ref="ns1:value-text"/>
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <!-- 3.8.3.3 Time Zone Offset From -->
+  <xs:element name="tzoffsetfrom">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element minOccurs="0" name="parameters">
+          <xs:complexType/>
+        </xs:element>
+        <xs:element ref="ns1:utc-offset"/>
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <!-- 3.8.3.4 Time Zone Offset To -->
+  <xs:element name="tzoffsetto">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element minOccurs="0" name="parameters">
+          <xs:complexType/>
+        </xs:element>
+        <xs:element ref="ns1:utc-offset"/>
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <!-- 3.8.3.5 Time Zone URL -->
+  <xs:element name="tzurl">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element minOccurs="0" name="parameters">
+          <xs:complexType/>
+        </xs:element>
+        <xs:element ref="ns1:uri"/>
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <!-- 3.8.4 Relationship Component Properties -->
+  <!-- 3.8.4.1 Attendee -->
+  <xs:element name="attendee">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element minOccurs="0" name="parameters">
+          <xs:complexType>
+            <xs:choice minOccurs="0" maxOccurs="unbounded">
+              <xs:element ref="ns1:cutype"/>
+              <xs:element ref="ns1:member"/>
+              <xs:element ref="ns1:role"/>
+              <xs:element ref="ns1:partstat"/>
+              <xs:element ref="ns1:rsvp"/>
+              <xs:element ref="ns1:delegated-to"/>
+              <xs:element ref="ns1:delegated-from"/>
+              <xs:element ref="ns1:sent-by"/>
+              <xs:element ref="ns1:cn"/>
+              <xs:element ref="ns1:dir"/>
+              <xs:element ref="ns1:language"/>
+            </xs:choice>
+          </xs:complexType>
+        </xs:element>
+        <xs:element ref="ns1:cal-address"/>
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <!-- 3.8.4.2 Contact -->
+  <xs:element name="contact">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element minOccurs="0" name="parameters">
+          <xs:complexType>
+            <xs:choice minOccurs="0" maxOccurs="unbounded">
+              <xs:element ref="ns1:altrep"/>
+              <xs:element ref="ns1:language"/>
+            </xs:choice>
+          </xs:complexType>
+        </xs:element>
+        <xs:group ref="ns1:value-text"/>
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <!-- 3.8.4.3 Organizer -->
+  <xs:element name="organizer">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element minOccurs="0" name="parameters">
+          <xs:complexType>
+            <xs:choice minOccurs="0" maxOccurs="unbounded">
+              <xs:element ref="ns1:cn"/>
+              <xs:element ref="ns1:dir"/>
+              <xs:element ref="ns1:sent-by"/>
+              <xs:element ref="ns1:language"/>
+            </xs:choice>
+          </xs:complexType>
+        </xs:element>
+        <xs:element ref="ns1:cal-address"/>
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <!-- 3.8.4.4 Recurrence ID -->
+  <xs:element name="recurrence-id">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element minOccurs="0" name="parameters">
+          <xs:complexType>
+            <xs:choice minOccurs="0" maxOccurs="unbounded">
+              <xs:group ref="ns1:tzidparam"/>
+              <xs:element ref="ns1:range"/>
+            </xs:choice>
+          </xs:complexType>
+        </xs:element>
+        <xs:choice>
+          <xs:element ref="ns1:date-time"/>
+          <xs:element ref="ns1:date"/>
+        </xs:choice>
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <!-- 3.8.4.5 Related-To -->
+  <xs:element name="related-to">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element minOccurs="0" name="parameters">
+          <xs:complexType>
+            <xs:sequence>
+              <xs:element minOccurs="0" ref="ns1:reltype"/>
+            </xs:sequence>
+          </xs:complexType>
+        </xs:element>
+        <xs:group ref="ns1:value-text"/>
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <!-- 3.8.4.6 Uniform Resource Locator -->
+  <xs:element name="url">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element minOccurs="0" name="parameters">
+          <xs:complexType/>
+        </xs:element>
+        <xs:element ref="ns1:uri"/>
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <!-- 3.8.4.7 Unique Identifier -->
+  <xs:element name="uid">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element minOccurs="0" name="parameters">
+          <xs:complexType/>
+        </xs:element>
+        <xs:group ref="ns1:value-text"/>
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <!-- 3.8.5 Recurrence Component Properties -->
+  <!-- 3.8.5.1 Exception Date/Times -->
+  <xs:element name="exdate">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element minOccurs="0" name="parameters">
+          <xs:complexType>
+            <xs:group minOccurs="0" ref="ns1:tzidparam"/>
+          </xs:complexType>
+        </xs:element>
+        <xs:choice>
+          <xs:element maxOccurs="unbounded" ref="ns1:date-time"/>
+          <xs:element maxOccurs="unbounded" ref="ns1:date"/>
+        </xs:choice>
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <!-- 3.8.5.2 Recurrence Date/Times -->
+  <xs:element name="rdate">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element minOccurs="0" name="parameters">
+          <xs:complexType>
+            <xs:group minOccurs="0" ref="ns1:tzidparam"/>
+          </xs:complexType>
+        </xs:element>
+        <xs:choice>
+          <xs:element maxOccurs="unbounded" ref="ns1:date-time"/>
+          <xs:element maxOccurs="unbounded" ref="ns1:date"/>
+          <xs:element maxOccurs="unbounded" ref="ns1:period"/>
+        </xs:choice>
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <!-- 3.8.5.3 Recurrence Rule -->
+  <xs:element name="rrule">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element minOccurs="0" name="parameters">
+          <xs:complexType/>
+        </xs:element>
+        <xs:element ref="ns1:recur"/>
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <!-- 3.8.6 Alarm Component Properties -->
+  <!-- 3.8.6.1 Action -->
+  <xs:element name="action">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element minOccurs="0" name="parameters">
+          <xs:complexType/>
+        </xs:element>
+        <xs:element name="text">
+          <xs:simpleType>
+            <xs:restriction base="xs:token">
+              <xs:enumeration value="AUDIO"/>
+              <xs:enumeration value="DISPLAY"/>
+              <xs:enumeration value="EMAIL"/>
+            </xs:restriction>
+          </xs:simpleType>
+        </xs:element>
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <!-- 3.8.6.2 Repeat Count -->
+  <xs:element name="repeat">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element minOccurs="0" name="parameters">
+          <xs:complexType/>
+        </xs:element>
+        <xs:element ref="ns1:integer"/>
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <!-- 3.8.6.3 Trigger -->
+  <xs:element name="trigger">
+    <xs:complexType>
+      <xs:choice>
+        <xs:sequence>
+          <xs:element minOccurs="0" name="parameters">
+            <xs:complexType>
+              <xs:sequence>
+                <xs:element minOccurs="0" ref="ns1:related"/>
+              </xs:sequence>
+            </xs:complexType>
+          </xs:element>
+          <xs:group ref="ns1:value-duration"/>
+        </xs:sequence>
+        <xs:sequence>
+          <xs:element minOccurs="0" name="parameters">
+            <xs:complexType/>
+          </xs:element>
+          <xs:element ref="ns1:date-time"/>
+        </xs:sequence>
+      </xs:choice>
+    </xs:complexType>
+  </xs:element>
+  <!-- 3.8.7 Change Management Component Properties -->
+  <!-- 3.8.7.1 Date/Time Created -->
+  <xs:element name="created">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element minOccurs="0" name="parameters">
+          <xs:complexType/>
+        </xs:element>
+        <xs:element ref="ns1:date-time"/>
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <!-- 3.8.7.2 Date/Time Stamp -->
+  <xs:element name="dtstamp">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element minOccurs="0" name="parameters">
+          <xs:complexType/>
+        </xs:element>
+        <xs:element ref="ns1:date-time"/>
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <!-- 3.8.7.3 Last Modified -->
+  <xs:element name="last-modified">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element minOccurs="0" name="parameters">
+          <xs:complexType/>
+        </xs:element>
+        <xs:element ref="ns1:date-time"/>
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <!-- 3.8.7.4 Sequence Number -->
+  <xs:element name="sequence">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element minOccurs="0" name="parameters">
+          <xs:complexType/>
+        </xs:element>
+        <xs:element ref="ns1:integer"/>
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <!-- 3.8.8 Miscellaneous Component Properties -->
+  <!-- 3.8.8.3 Request Status -->
+  <xs:element name="request-status">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element minOccurs="0" name="parameters">
+          <xs:complexType>
+            <xs:sequence>
+              <xs:element minOccurs="0" ref="ns1:language"/>
+            </xs:sequence>
+          </xs:complexType>
+        </xs:element>
+        <xs:element ref="ns1:code"/>
+        <xs:element name="description" type="xs:string"/>
+        <xs:element minOccurs="0" ref="ns1:data"/>
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="code" type="xs:string"/>
+  <xs:element name="data" type="xs:string"/>
+</xs:schema>
diff --git a/org.argeo.app.core/src/org/argeo/app/core/schemas/xCard-4.0-RFC6351.rnc b/org.argeo.app.core/src/org/argeo/app/core/schemas/xCard-4.0-RFC6351.rnc
new file mode 100644 (file)
index 0000000..9f4f163
--- /dev/null
@@ -0,0 +1,382 @@
+default namespace = "urn:ietf:params:xml:ns:vcard-4.0"
+
+### Section 3.3: vCard Format Specification
+#
+# 3.3
+iana-token = xsd:string { pattern = "[a-zA-Z0-9-]+" }
+x-name = xsd:string { pattern = "x-[a-zA-Z0-9-]+" }
+
+### Section 4: Value types
+#
+# 4.1
+value-text = element text { text }
+value-text-list = value-text+
+
+# 4.2
+value-uri = element uri { xsd:anyURI }
+
+# 4.3.1
+value-date = element date {
+    xsd:string { pattern = "\d{8}|\d{4}-\d\d|--\d\d(\d\d)?|---\d\d" }
+  }
+
+# 4.3.2
+value-time = element time {
+    xsd:string { pattern = "(\d\d(\d\d(\d\d)?)?|-\d\d(\d\d?)|--\d\d)"
+                         ~ "(Z|[+\-]\d\d(\d\d)?)?" }
+  }
+
+# 4.3.3
+value-date-time = element date-time {
+    xsd:string { pattern = "(\d{8}|--\d{4}|---\d\d)T\d\d(\d\d(\d\d)?)?"
+                         ~ "(Z|[+\-]\d\d(\d\d)?)?" }
+  }
+
+# 4.3.4
+value-date-and-or-time = value-date | value-date-time | value-time
+
+# 4.3.5
+value-timestamp = element timestamp {
+    xsd:string { pattern = "\d{8}T\d{6}(Z|[+\-]\d\d(\d\d)?)?" }
+  }
+
+# 4.4
+value-boolean = element boolean { xsd:boolean }
+
+# 4.5
+value-integer = element integer { xsd:integer }
+
+# 4.6
+value-float = element float { xsd:float }
+
+# 4.7
+value-utc-offset = element utc-offset {
+    xsd:string { pattern = "[+\-]\d\d(\d\d)?" }
+  }
+
+# 4.8
+value-language-tag = element language-tag {
+    xsd:string { pattern = "([a-z]{2,3}((-[a-z]{3}){0,3})?|[a-z]{4,8})"
+                         ~ "(-[a-z]{4})?(-([a-z]{2}|\d{3}))?"
+                         ~ "(-([0-9a-z]{5,8}|\d[0-9a-z]{3}))*"
+                         ~ "(-[0-9a-wyz](-[0-9a-z]{2,8})+)*"
+                         ~ "(-x(-[0-9a-z]{1,8})+)?|x(-[0-9a-z]{1,8})+|"
+                         ~ "[a-z]{1,3}(-[0-9a-z]{2,8}){1,2}" }
+  }
+
+### Section 5: Parameters
+#
+# 5.1
+param-language = element language { value-language-tag }?
+
+# 5.2
+param-pref = element pref {
+    element integer {
+      xsd:integer { minInclusive = "1" maxInclusive = "100" }
+    }
+  }?
+
+# 5.4
+param-altid = element altid { value-text }?
+
+# 5.5
+param-pid = element pid {
+    element text { xsd:string { pattern = "\d+(\.\d+)?" } }+
+  }?
+
+# 5.6
+param-type = element type { element text { "work" | "home" }+ }?
+
+# 5.7
+param-mediatype = element mediatype { value-text }?
+
+# 5.8
+param-calscale = element calscale { element text { "gregorian" } }?
+
+# 5.9
+param-sort-as = element sort-as { value-text+ }?
+
+# 5.10
+param-geo = element geo { value-uri }?
+
+# 5.11
+param-tz = element tz { value-text | value-uri }?
+
+### Section 6: Properties
+#
+# 6.1.3
+property-source = element source {
+    element parameters { param-altid, param-pid, param-pref,
+                         param-mediatype },
+    value-uri
+  }
+
+# 6.1.4
+property-kind = element kind {
+    element text { "individual" | "group" | "org" | "location" |
+                   x-name | iana-token }*
+  }
+
+# 6.2.1
+property-fn = element fn {
+    element parameters { param-language, param-altid, param-pid,
+                         param-pref, param-type }?,
+    value-text
+  }
+
+# 6.2.2
+property-n = element n {
+    element parameters { param-language, param-sort-as, param-altid }?,
+    element surname { text }+,
+    element given { text }+,
+    element additional { text }+,
+    element prefix { text }+,
+    element suffix { text }+
+  }
+
+# 6.2.3
+property-nickname = element nickname {
+    element parameters { param-language, param-altid, param-pid,
+                         param-pref, param-type }?,
+    value-text-list
+  }
+
+# 6.2.4
+property-photo = element photo {
+    element parameters { param-altid, param-pid, param-pref, param-type,
+                         param-mediatype }?,
+    value-uri
+  }
+
+# 6.2.5
+property-bday = element bday {
+    element parameters { param-altid, param-calscale }?,
+    (value-date-and-or-time | value-text)
+  }
+
+# 6.2.6
+property-anniversary = element anniversary {
+    element parameters { param-altid, param-calscale }?,
+    (value-date-and-or-time | value-text)
+  }
+
+# 6.2.7
+property-gender = element gender {
+    element sex { "" | "M" | "F" | "O" | "N" | "U" },
+    element identity { text }?
+  }
+
+# 6.3.1
+param-label = element label { value-text }?
+property-adr = element adr {
+    element parameters { param-language, param-altid, param-pid,
+                         param-pref, param-type, param-geo, param-tz,
+                         param-label }?,
+    element pobox { text }+,
+    element ext { text }+,
+    element street { text }+,
+    element locality { text }+,
+    element region { text }+,
+    element code { text }+,
+    element country { text }+
+  }
+
+# 6.4.1
+property-tel = element tel {
+    element parameters {
+      param-altid,
+      param-pid,
+      param-pref,
+      element type {
+        element text { "work" | "home" | "text" | "voice"
+                     | "fax" | "cell" | "video" | "pager"
+                     | "textphone" }+
+      }?,
+      param-mediatype
+    }?,
+    (value-text | value-uri)
+  }
+
+# 6.4.2
+property-email = element email {
+    element parameters { param-altid, param-pid, param-pref,
+                         param-type }?,
+    value-text
+  }
+
+# 6.4.3
+property-impp = element impp {
+    element parameters { param-altid, param-pid, param-pref,
+                         param-type, param-mediatype }?,
+    value-uri
+  }
+
+# 6.4.4
+property-lang = element lang {
+    element parameters { param-altid, param-pid, param-pref,
+                         param-type }?,
+    value-language-tag
+  }
+
+# 6.5.1
+property-tz = element tz {
+    element parameters { param-altid, param-pid, param-pref,
+                         param-type, param-mediatype }?,
+    (value-text | value-uri | value-utc-offset)
+  }
+
+# 6.5.2
+property-geo = element geo {
+    element parameters { param-altid, param-pid, param-pref,
+                         param-type, param-mediatype }?,
+    value-uri
+  }
+
+# 6.6.1
+property-title = element title {
+    element parameters { param-language, param-altid, param-pid,
+                         param-pref, param-type }?,
+    value-text
+  }
+
+# 6.6.2
+property-role = element role {
+    element parameters { param-language, param-altid, param-pid,
+                         param-pref, param-type }?,
+    value-text
+  }
+
+# 6.6.3
+property-logo = element logo {
+    element parameters { param-language, param-altid, param-pid,
+                         param-pref, param-type, param-mediatype }?,
+    value-uri
+  }
+
+# 6.6.4
+property-org = element org {
+    element parameters { param-language, param-altid, param-pid,
+                         param-pref, param-type, param-sort-as }?,
+    value-text-list
+  }
+
+# 6.6.5
+property-member = element member {
+    element parameters { param-altid, param-pid, param-pref,
+                         param-mediatype }?,
+    value-uri
+  }
+
+# 6.6.6
+property-related = element related {
+    element parameters {
+      param-altid,
+      param-pid,
+      param-pref,
+      element type {
+        element text {
+          "work" | "home" | "contact" | "acquaintance" |
+          "friend" | "met" | "co-worker" | "colleague" | "co-resident" |
+          "neighbor" | "child" | "parent" | "sibling" | "spouse" |
+          "kin" | "muse" | "crush" | "date" | "sweetheart" | "me" |
+          "agent" | "emergency"
+        }+
+      }?,
+      param-mediatype
+    }?,
+    (value-uri | value-text)
+  }
+
+# 6.7.1
+property-categories = element categories {
+    element parameters { param-altid, param-pid, param-pref,
+                         param-type }?,
+    value-text-list
+  }
+
+# 6.7.2
+property-note = element note {
+    element parameters { param-language, param-altid, param-pid,
+                         param-pref, param-type }?,
+    value-text
+  }
+
+# 6.7.3
+property-prodid = element prodid { value-text }
+
+# 6.7.4
+property-rev = element rev { value-timestamp }
+
+# 6.7.5
+property-sound = element sound {
+    element parameters { param-language, param-altid, param-pid,
+                         param-pref, param-type, param-mediatype }?,
+    value-uri
+  }
+
+# 6.7.6
+property-uid = element uid { value-uri }
+
+# 6.7.7
+property-clientpidmap = element clientpidmap {
+    element sourceid { xsd:positiveInteger },
+    value-uri
+  }
+
+# 6.7.8
+property-url = element url {
+    element parameters { param-altid, param-pid, param-pref,
+                         param-type, param-mediatype }?,
+    value-uri
+  }
+
+# 6.8.1
+property-key = element key {
+    element parameters { param-altid, param-pid, param-pref,
+                         param-type, param-mediatype }?,
+    (value-uri | value-text)
+  }
+
+# 6.9.1
+property-fburl = element fburl {
+    element parameters { param-altid, param-pid, param-pref,
+                         param-type, param-mediatype }?,
+    value-uri
+  }
+
+# 6.9.2
+property-caladruri = element caladruri {
+    element parameters { param-altid, param-pid, param-pref,
+                         param-type, param-mediatype }?,
+    value-uri
+  }
+
+# 6.9.3
+property-caluri = element caluri {
+    element parameters { param-altid, param-pid, param-pref,
+                         param-type, param-mediatype }?,
+    value-uri
+  }
+
+# Top-level grammar
+property = property-adr | property-anniversary | property-bday
+         | property-caladruri | property-caluri | property-categories
+         | property-clientpidmap | property-email | property-fburl
+         | property-fn | property-geo | property-impp | property-key
+         | property-kind | property-lang | property-logo
+         | property-member | property-n | property-nickname
+         | property-note | property-org | property-photo
+         | property-prodid | property-related | property-rev
+         | property-role | property-gender | property-sound
+         | property-source | property-tel | property-title
+         | property-tz | property-uid | property-url
+start = element vcards {
+    element vcard {
+      (property
+       | element group {
+           attribute name { text },
+           property*
+         })+
+    }+
+  }
+
diff --git a/org.argeo.app.core/src/org/argeo/app/core/schemas/xCard-4.0.rnc b/org.argeo.app.core/src/org/argeo/app/core/schemas/xCard-4.0.rnc
new file mode 100644 (file)
index 0000000..5494882
--- /dev/null
@@ -0,0 +1,385 @@
+default namespace = "urn:ietf:params:xml:ns:vcard-4.0"
+
+### Section 3.3: vCard Format Specification
+#
+# 3.3
+
+# mbaudier - 2022-05-31 : corrected regexp from RFC 6351
+iana-token = xsd:string { pattern = "[a-zA-Z0-9]+" }
+# mbaudier - 2022-05-31 : corrected regexp from RFC 6351
+x-name = xsd:string { pattern = "x-[a-zA-Z0-9]+" }
+
+### Section 4: Value types
+#
+# 4.1
+value-text = element text { text }
+value-text-list = value-text+
+
+# 4.2
+value-uri = element uri { xsd:anyURI }
+
+# 4.3.1
+value-date = element date {
+    xsd:string { pattern = "\d{8}|\d{4}-\d\d|--\d\d(\d\d)?|---\d\d" }
+  }
+
+# 4.3.2
+value-time = element time {
+    xsd:string { pattern = "(\d\d(\d\d(\d\d)?)?|-\d\d(\d\d?)|--\d\d)"
+                         ~ "(Z|[+\-]\d\d(\d\d)?)?" }
+  }
+
+# 4.3.3
+value-date-time = element date-time {
+    xsd:string { pattern = "(\d{8}|--\d{4}|---\d\d)T\d\d(\d\d(\d\d)?)?"
+                         ~ "(Z|[+\-]\d\d(\d\d)?)?" }
+  }
+
+# 4.3.4
+value-date-and-or-time = value-date | value-date-time | value-time
+
+# 4.3.5
+value-timestamp = element timestamp {
+    xsd:string { pattern = "\d{8}T\d{6}(Z|[+\-]\d\d(\d\d)?)?" }
+  }
+
+# 4.4
+value-boolean = element boolean { xsd:boolean }
+
+# 4.5
+value-integer = element integer { xsd:integer }
+
+# 4.6
+value-float = element float { xsd:float }
+
+# 4.7
+value-utc-offset = element utc-offset {
+    xsd:string { pattern = "[+\-]\d\d(\d\d)?" }
+  }
+
+# 4.8
+value-language-tag = element language-tag {
+    xsd:string { pattern = "([a-z]{2,3}((-[a-z]{3}){0,3})?|[a-z]{4,8})"
+                         ~ "(-[a-z]{4})?(-([a-z]{2}|\d{3}))?"
+                         ~ "(-([0-9a-z]{5,8}|\d[0-9a-z]{3}))*"
+                         ~ "(-[0-9a-wyz](-[0-9a-z]{2,8})+)*"
+                         ~ "(-x(-[0-9a-z]{1,8})+)?|x(-[0-9a-z]{1,8})+|"
+                         ~ "[a-z]{1,3}(-[0-9a-z]{2,8}){1,2}" }
+  }
+
+### Section 5: Parameters
+#
+# 5.1
+param-language = element language { value-language-tag }?
+
+# 5.2
+param-pref = element pref {
+    element integer {
+      xsd:integer { minInclusive = "1" maxInclusive = "100" }
+    }
+  }?
+
+# 5.4
+param-altid = element altid { value-text }?
+
+# 5.5
+param-pid = element pid {
+    element text { xsd:string { pattern = "\d+(\.\d+)?" } }+
+  }?
+
+# 5.6
+param-type = element type { element text { "work" | "home" }+ }?
+
+# 5.7
+param-mediatype = element mediatype { value-text }?
+
+# 5.8
+param-calscale = element calscale { element text { "gregorian" } }?
+
+# 5.9
+param-sort-as = element sort-as { value-text+ }?
+
+# 5.10
+param-geo = element geo { value-uri }?
+
+# 5.11
+param-tz = element tz { value-text | value-uri }?
+
+### Section 6: Properties
+#
+# 6.1.3
+property-source = element source {
+    element parameters { param-altid, param-pid, param-pref,
+                         param-mediatype },
+    value-uri
+  }
+
+# 6.1.4
+property-kind = element kind {
+    element text { "individual" | "group" | "org" | "location" |
+                   x-name | iana-token }*
+  }
+
+# 6.2.1
+property-fn = element fn {
+    element parameters { param-language, param-altid, param-pid,
+                         param-pref, param-type }?,
+    value-text
+  }
+
+# 6.2.2
+property-n = element n {
+    element parameters { param-language, param-sort-as, param-altid }?,
+    element surname { text }+,
+    element given { text }+,
+    element additional { text }+,
+    element prefix { text }+,
+    element suffix { text }+
+  }
+
+# 6.2.3
+property-nickname = element nickname {
+    element parameters { param-language, param-altid, param-pid,
+                         param-pref, param-type }?,
+    value-text-list
+  }
+
+# 6.2.4
+property-photo = element photo {
+    element parameters { param-altid, param-pid, param-pref, param-type,
+                         param-mediatype }?,
+    value-uri
+  }
+
+# 6.2.5
+property-bday = element bday {
+    element parameters { param-altid, param-calscale }?,
+    (value-date-and-or-time | value-text)
+  }
+
+# 6.2.6
+property-anniversary = element anniversary {
+    element parameters { param-altid, param-calscale }?,
+    (value-date-and-or-time | value-text)
+  }
+
+# 6.2.7
+property-gender = element gender {
+    element sex { "" | "M" | "F" | "O" | "N" | "U" },
+    element identity { text }?
+  }
+
+# 6.3.1
+param-label = element label { value-text }?
+property-adr = element adr {
+    element parameters { param-language, param-altid, param-pid,
+                         param-pref, param-type, param-geo, param-tz,
+                         param-label }?,
+    element pobox { text }+,
+    element ext { text }+,
+    element street { text }+,
+    element locality { text }+,
+    element region { text }+,
+    element code { text }+,
+    element country { text }+
+  }
+
+# 6.4.1
+property-tel = element tel {
+    element parameters {
+      param-altid,
+      param-pid,
+      param-pref,
+      element type {
+        element text { "work" | "home" | "text" | "voice"
+                     | "fax" | "cell" | "video" | "pager"
+                     | "textphone" }+
+      }?,
+      param-mediatype
+    }?,
+    (value-text | value-uri)
+  }
+
+# 6.4.2
+property-email = element email {
+    element parameters { param-altid, param-pid, param-pref,
+                         param-type }?,
+    value-text
+  }
+
+# 6.4.3
+property-impp = element impp {
+    element parameters { param-altid, param-pid, param-pref,
+                         param-type, param-mediatype }?,
+    value-uri
+  }
+
+# 6.4.4
+property-lang = element lang {
+    element parameters { param-altid, param-pid, param-pref,
+                         param-type }?,
+    value-language-tag
+  }
+
+# 6.5.1
+property-tz = element tz {
+    element parameters { param-altid, param-pid, param-pref,
+                         param-type, param-mediatype }?,
+    (value-text | value-uri | value-utc-offset)
+  }
+
+# 6.5.2
+property-geo = element geo {
+    element parameters { param-altid, param-pid, param-pref,
+                         param-type, param-mediatype }?,
+    value-uri
+  }
+
+# 6.6.1
+property-title = element title {
+    element parameters { param-language, param-altid, param-pid,
+                         param-pref, param-type }?,
+    value-text
+  }
+
+# 6.6.2
+property-role = element role {
+    element parameters { param-language, param-altid, param-pid,
+                         param-pref, param-type }?,
+    value-text
+  }
+
+# 6.6.3
+property-logo = element logo {
+    element parameters { param-language, param-altid, param-pid,
+                         param-pref, param-type, param-mediatype }?,
+    value-uri
+  }
+
+# 6.6.4
+property-org = element org {
+    element parameters { param-language, param-altid, param-pid,
+                         param-pref, param-type, param-sort-as }?,
+    value-text-list
+  }
+
+# 6.6.5
+property-member = element member {
+    element parameters { param-altid, param-pid, param-pref,
+                         param-mediatype }?,
+    value-uri
+  }
+
+# 6.6.6
+property-related = element related {
+    element parameters {
+      param-altid,
+      param-pid,
+      param-pref,
+      element type {
+        element text {
+          "work" | "home" | "contact" | "acquaintance" |
+          "friend" | "met" | "co-worker" | "colleague" | "co-resident" |
+          "neighbor" | "child" | "parent" | "sibling" | "spouse" |
+          "kin" | "muse" | "crush" | "date" | "sweetheart" | "me" |
+          "agent" | "emergency"
+        }+
+      }?,
+      param-mediatype
+    }?,
+    (value-uri | value-text)
+  }
+
+# 6.7.1
+property-categories = element categories {
+    element parameters { param-altid, param-pid, param-pref,
+                         param-type }?,
+    value-text-list
+  }
+
+# 6.7.2
+property-note = element note {
+    element parameters { param-language, param-altid, param-pid,
+                         param-pref, param-type }?,
+    value-text
+  }
+
+# 6.7.3
+property-prodid = element prodid { value-text }
+
+# 6.7.4
+property-rev = element rev { value-timestamp }
+
+# 6.7.5
+property-sound = element sound {
+    element parameters { param-language, param-altid, param-pid,
+                         param-pref, param-type, param-mediatype }?,
+    value-uri
+  }
+
+# 6.7.6
+property-uid = element uid { value-uri }
+
+# 6.7.7
+property-clientpidmap = element clientpidmap {
+    element sourceid { xsd:positiveInteger },
+    value-uri
+  }
+
+# 6.7.8
+property-url = element url {
+    element parameters { param-altid, param-pid, param-pref,
+                         param-type, param-mediatype }?,
+    value-uri
+  }
+
+# 6.8.1
+property-key = element key {
+    element parameters { param-altid, param-pid, param-pref,
+                         param-type, param-mediatype }?,
+    (value-uri | value-text)
+  }
+
+# 6.9.1
+property-fburl = element fburl {
+    element parameters { param-altid, param-pid, param-pref,
+                         param-type, param-mediatype }?,
+    value-uri
+  }
+
+# 6.9.2
+property-caladruri = element caladruri {
+    element parameters { param-altid, param-pid, param-pref,
+                         param-type, param-mediatype }?,
+    value-uri
+  }
+
+# 6.9.3
+property-caluri = element caluri {
+    element parameters { param-altid, param-pid, param-pref,
+                         param-type, param-mediatype }?,
+    value-uri
+  }
+
+# Top-level grammar
+property = property-adr | property-anniversary | property-bday
+         | property-caladruri | property-caluri | property-categories
+         | property-clientpidmap | property-email | property-fburl
+         | property-fn | property-geo | property-impp | property-key
+         | property-kind | property-lang | property-logo
+         | property-member | property-n | property-nickname
+         | property-note | property-org | property-photo
+         | property-prodid | property-related | property-rev
+         | property-role | property-gender | property-sound
+         | property-source | property-tel | property-title
+         | property-tz | property-uid | property-url
+start = element vcards {
+    element vcard {
+      (property
+       | element group {
+           attribute name { text },
+           property*
+         })+
+    }+
+  }
+
diff --git a/org.argeo.app.core/src/org/argeo/app/core/schemas/xCard-4.0.xsd b/org.argeo.app.core/src/org/argeo/app/core/schemas/xCard-4.0.xsd
new file mode 100644 (file)
index 0000000..bb1b175
--- /dev/null
@@ -0,0 +1,1041 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" targetNamespace="urn:ietf:params:xml:ns:vcard-4.0" xmlns:ns1="urn:ietf:params:xml:ns:vcard-4.0">
+  <!--
+    
+    3.3
+  -->
+  <!-- mbaudier - 2022-05-31 : corrected regexp from RFC 6351 -->
+  <xs:simpleType name="iana-token">
+    <xs:annotation>
+      <xs:documentation>Section 3.3: vCard Format Specification</xs:documentation>
+    </xs:annotation>
+    <xs:restriction base="xs:string">
+      <xs:pattern value="[a-zA-Z0-9]+"/>
+    </xs:restriction>
+  </xs:simpleType>
+  <!-- mbaudier - 2022-05-31 : corrected regexp from RFC 6351 -->
+  <xs:simpleType name="x-name">
+    <xs:restriction base="xs:string">
+      <xs:pattern value="x-[a-zA-Z0-9]+"/>
+    </xs:restriction>
+  </xs:simpleType>
+  <!--
+    
+    4.1
+  -->
+  <xs:element name="text" type="xs:string"/>
+  <xs:group name="value-text-list">
+    <xs:sequence>
+      <xs:element maxOccurs="unbounded" ref="ns1:text"/>
+    </xs:sequence>
+  </xs:group>
+  <!-- 4.2 -->
+  <xs:element name="uri" type="xs:anyURI"/>
+  <!-- 4.3.1 -->
+  <xs:element name="date" substitutionGroup="ns1:value-date-and-or-time">
+    <xs:simpleType>
+      <xs:restriction base="xs:string">
+        <xs:pattern value="\d{8}|\d{4}-\d\d|--\d\d(\d\d)?|---\d\d"/>
+      </xs:restriction>
+    </xs:simpleType>
+  </xs:element>
+  <!-- 4.3.2 -->
+  <xs:element name="time" substitutionGroup="ns1:value-date-and-or-time">
+    <xs:simpleType>
+      <xs:restriction base="xs:string">
+        <xs:pattern value="(\d\d(\d\d(\d\d)?)?|-\d\d(\d\d?)|--\d\d)(Z|[+\-]\d\d(\d\d)?)?"/>
+      </xs:restriction>
+    </xs:simpleType>
+  </xs:element>
+  <!-- 4.3.3 -->
+  <xs:element name="date-time" substitutionGroup="ns1:value-date-and-or-time">
+    <xs:simpleType>
+      <xs:restriction base="xs:string">
+        <xs:pattern value="(\d{8}|--\d{4}|---\d\d)T\d\d(\d\d(\d\d)?)?(Z|[+\-]\d\d(\d\d)?)?"/>
+      </xs:restriction>
+    </xs:simpleType>
+  </xs:element>
+  <!-- 4.3.4 -->
+  <xs:element name="value-date-and-or-time" abstract="true"/>
+  <!-- 4.3.5 -->
+  <xs:complexType name="value-timestamp">
+    <xs:sequence>
+      <xs:element ref="ns1:timestamp"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:element name="timestamp">
+    <xs:simpleType>
+      <xs:restriction base="xs:string">
+        <xs:pattern value="\d{8}T\d{6}(Z|[+\-]\d\d(\d\d)?)?"/>
+      </xs:restriction>
+    </xs:simpleType>
+  </xs:element>
+  <!-- 4.4 -->
+  <xs:element name="boolean" type="xs:boolean"/>
+  <!-- 4.5 -->
+  <xs:element name="integer" type="xs:integer"/>
+  <!-- 4.6 -->
+  <xs:element name="float" type="xs:float"/>
+  <!-- 4.7 -->
+  <xs:element name="utc-offset">
+    <xs:simpleType>
+      <xs:restriction base="xs:string">
+        <xs:pattern value="[+\-]\d\d(\d\d)?"/>
+      </xs:restriction>
+    </xs:simpleType>
+  </xs:element>
+  <!-- 4.8 -->
+  <xs:element name="language-tag">
+    <xs:simpleType>
+      <xs:restriction base="xs:string">
+        <xs:pattern value="([a-z]{2,3}((-[a-z]{3}){0,3})?|[a-z]{4,8})(-[a-z]{4})?(-([a-z]{2}|\d{3}))?(-([0-9a-z]{5,8}|\d[0-9a-z]{3}))*(-[0-9a-wyz](-[0-9a-z]{2,8})+)*(-x(-[0-9a-z]{1,8})+)?|x(-[0-9a-z]{1,8})+|[a-z]{1,3}(-[0-9a-z]{2,8}){1,2}"/>
+      </xs:restriction>
+    </xs:simpleType>
+  </xs:element>
+  <!--
+    
+    5.1
+  -->
+  <xs:group name="param-language">
+    <xs:annotation>
+      <xs:documentation>Section 5: Parameters</xs:documentation>
+    </xs:annotation>
+    <xs:sequence>
+      <xs:element minOccurs="0" ref="ns1:language"/>
+    </xs:sequence>
+  </xs:group>
+  <xs:element name="language">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element ref="ns1:language-tag"/>
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <!-- 5.2 -->
+  <xs:group name="param-pref">
+    <xs:sequence>
+      <xs:element minOccurs="0" ref="ns1:pref"/>
+    </xs:sequence>
+  </xs:group>
+  <xs:element name="pref">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element name="integer">
+          <xs:simpleType>
+            <xs:restriction base="xs:integer">
+              <xs:minInclusive value="1"/>
+              <xs:maxInclusive value="100"/>
+            </xs:restriction>
+          </xs:simpleType>
+        </xs:element>
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <!-- 5.4 -->
+  <xs:group name="param-altid">
+    <xs:sequence>
+      <xs:element minOccurs="0" ref="ns1:altid"/>
+    </xs:sequence>
+  </xs:group>
+  <xs:element name="altid">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element ref="ns1:text"/>
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <!-- 5.5 -->
+  <xs:group name="param-pid">
+    <xs:sequence>
+      <xs:element minOccurs="0" ref="ns1:pid"/>
+    </xs:sequence>
+  </xs:group>
+  <xs:element name="pid">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element maxOccurs="unbounded" name="text">
+          <xs:simpleType>
+            <xs:restriction base="xs:string">
+              <xs:pattern value="\d+(\.\d+)?"/>
+            </xs:restriction>
+          </xs:simpleType>
+        </xs:element>
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <!-- 5.6 -->
+  <xs:group name="param-type">
+    <xs:sequence>
+      <xs:element minOccurs="0" ref="ns1:type"/>
+    </xs:sequence>
+  </xs:group>
+  <xs:element name="type">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element maxOccurs="unbounded" name="text">
+          <xs:simpleType>
+            <xs:restriction base="xs:token">
+              <xs:enumeration value="work"/>
+              <xs:enumeration value="home"/>
+            </xs:restriction>
+          </xs:simpleType>
+        </xs:element>
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <!-- 5.7 -->
+  <xs:group name="param-mediatype">
+    <xs:sequence>
+      <xs:element minOccurs="0" ref="ns1:mediatype"/>
+    </xs:sequence>
+  </xs:group>
+  <xs:element name="mediatype">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element ref="ns1:text"/>
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <!-- 5.8 -->
+  <xs:group name="param-calscale">
+    <xs:sequence>
+      <xs:element minOccurs="0" ref="ns1:calscale"/>
+    </xs:sequence>
+  </xs:group>
+  <xs:element name="calscale">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element name="text">
+          <xs:simpleType>
+            <xs:restriction base="xs:token">
+              <xs:enumeration value="gregorian"/>
+            </xs:restriction>
+          </xs:simpleType>
+        </xs:element>
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <!-- 5.9 -->
+  <xs:group name="param-sort-as">
+    <xs:sequence>
+      <xs:element minOccurs="0" ref="ns1:sort-as"/>
+    </xs:sequence>
+  </xs:group>
+  <xs:element name="sort-as">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element maxOccurs="unbounded" ref="ns1:text"/>
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <!-- 5.10 -->
+  <xs:group name="param-geo">
+    <xs:sequence>
+      <xs:element minOccurs="0" name="geo">
+        <xs:complexType>
+          <xs:sequence>
+            <xs:element ref="ns1:uri"/>
+          </xs:sequence>
+        </xs:complexType>
+      </xs:element>
+    </xs:sequence>
+  </xs:group>
+  <!-- 5.11 -->
+  <xs:group name="param-tz">
+    <xs:sequence>
+      <xs:element minOccurs="0" name="tz">
+        <xs:complexType>
+          <xs:choice>
+            <xs:element ref="ns1:text"/>
+            <xs:element ref="ns1:uri"/>
+          </xs:choice>
+        </xs:complexType>
+      </xs:element>
+    </xs:sequence>
+  </xs:group>
+  <!--
+    
+    6.1.3
+  -->
+  <xs:element name="source">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element name="parameters">
+          <xs:complexType>
+            <xs:sequence>
+              <xs:group ref="ns1:param-altid"/>
+              <xs:group ref="ns1:param-pid"/>
+              <xs:group ref="ns1:param-pref"/>
+              <xs:group ref="ns1:param-mediatype"/>
+            </xs:sequence>
+          </xs:complexType>
+        </xs:element>
+        <xs:element ref="ns1:uri"/>
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <!-- 6.1.4 -->
+  <xs:element name="kind">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element minOccurs="0" maxOccurs="unbounded" name="text">
+          <xs:simpleType>
+            <xs:union memberTypes="ns1:x-name ns1:iana-token">
+              <xs:simpleType>
+                <xs:restriction base="xs:token">
+                  <xs:enumeration value="individual"/>
+                </xs:restriction>
+              </xs:simpleType>
+              <xs:simpleType>
+                <xs:restriction base="xs:token">
+                  <xs:enumeration value="group"/>
+                </xs:restriction>
+              </xs:simpleType>
+              <xs:simpleType>
+                <xs:restriction base="xs:token">
+                  <xs:enumeration value="org"/>
+                </xs:restriction>
+              </xs:simpleType>
+              <xs:simpleType>
+                <xs:restriction base="xs:token">
+                  <xs:enumeration value="location"/>
+                </xs:restriction>
+              </xs:simpleType>
+            </xs:union>
+          </xs:simpleType>
+        </xs:element>
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <!-- 6.2.1 -->
+  <xs:element name="fn">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element minOccurs="0" name="parameters">
+          <xs:complexType>
+            <xs:sequence>
+              <xs:group ref="ns1:param-language"/>
+              <xs:group ref="ns1:param-altid"/>
+              <xs:group ref="ns1:param-pid"/>
+              <xs:group ref="ns1:param-pref"/>
+              <xs:group ref="ns1:param-type"/>
+            </xs:sequence>
+          </xs:complexType>
+        </xs:element>
+        <xs:element ref="ns1:text"/>
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <!-- 6.2.2 -->
+  <xs:element name="n">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element minOccurs="0" name="parameters">
+          <xs:complexType>
+            <xs:sequence>
+              <xs:group ref="ns1:param-language"/>
+              <xs:group ref="ns1:param-sort-as"/>
+              <xs:group ref="ns1:param-altid"/>
+            </xs:sequence>
+          </xs:complexType>
+        </xs:element>
+        <xs:element maxOccurs="unbounded" ref="ns1:surname"/>
+        <xs:element maxOccurs="unbounded" ref="ns1:given"/>
+        <xs:element maxOccurs="unbounded" ref="ns1:additional"/>
+        <xs:element maxOccurs="unbounded" ref="ns1:prefix"/>
+        <xs:element maxOccurs="unbounded" ref="ns1:suffix"/>
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="surname" type="xs:string"/>
+  <xs:element name="given" type="xs:string"/>
+  <xs:element name="additional" type="xs:string"/>
+  <xs:element name="prefix" type="xs:string"/>
+  <xs:element name="suffix" type="xs:string"/>
+  <!-- 6.2.3 -->
+  <xs:element name="nickname">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element minOccurs="0" name="parameters">
+          <xs:complexType>
+            <xs:sequence>
+              <xs:group ref="ns1:param-language"/>
+              <xs:group ref="ns1:param-altid"/>
+              <xs:group ref="ns1:param-pid"/>
+              <xs:group ref="ns1:param-pref"/>
+              <xs:group ref="ns1:param-type"/>
+            </xs:sequence>
+          </xs:complexType>
+        </xs:element>
+        <xs:group ref="ns1:value-text-list"/>
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <!-- 6.2.4 -->
+  <xs:element name="photo">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element minOccurs="0" name="parameters">
+          <xs:complexType>
+            <xs:sequence>
+              <xs:group ref="ns1:param-altid"/>
+              <xs:group ref="ns1:param-pid"/>
+              <xs:group ref="ns1:param-pref"/>
+              <xs:group ref="ns1:param-type"/>
+              <xs:group ref="ns1:param-mediatype"/>
+            </xs:sequence>
+          </xs:complexType>
+        </xs:element>
+        <xs:element ref="ns1:uri"/>
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <!-- 6.2.5 -->
+  <xs:element name="bday">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element minOccurs="0" name="parameters">
+          <xs:complexType>
+            <xs:sequence>
+              <xs:group ref="ns1:param-altid"/>
+              <xs:group ref="ns1:param-calscale"/>
+            </xs:sequence>
+          </xs:complexType>
+        </xs:element>
+        <xs:choice>
+          <xs:element ref="ns1:value-date-and-or-time"/>
+          <xs:element ref="ns1:text"/>
+        </xs:choice>
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <!-- 6.2.6 -->
+  <xs:element name="anniversary">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element minOccurs="0" name="parameters">
+          <xs:complexType>
+            <xs:sequence>
+              <xs:group ref="ns1:param-altid"/>
+              <xs:group ref="ns1:param-calscale"/>
+            </xs:sequence>
+          </xs:complexType>
+        </xs:element>
+        <xs:choice>
+          <xs:element ref="ns1:value-date-and-or-time"/>
+          <xs:element ref="ns1:text"/>
+        </xs:choice>
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <!-- 6.2.7 -->
+  <xs:element name="gender">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element ref="ns1:sex"/>
+        <xs:element minOccurs="0" ref="ns1:identity"/>
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="sex">
+    <xs:simpleType>
+      <xs:restriction base="xs:token">
+        <xs:enumeration value=""/>
+        <xs:enumeration value="M"/>
+        <xs:enumeration value="F"/>
+        <xs:enumeration value="O"/>
+        <xs:enumeration value="N"/>
+        <xs:enumeration value="U"/>
+      </xs:restriction>
+    </xs:simpleType>
+  </xs:element>
+  <xs:element name="identity" type="xs:string"/>
+  <!-- 6.3.1 -->
+  <xs:group name="param-label">
+    <xs:sequence>
+      <xs:element minOccurs="0" ref="ns1:label"/>
+    </xs:sequence>
+  </xs:group>
+  <xs:element name="label">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element ref="ns1:text"/>
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="adr">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element minOccurs="0" name="parameters">
+          <xs:complexType>
+            <xs:sequence>
+              <xs:group ref="ns1:param-language"/>
+              <xs:group ref="ns1:param-altid"/>
+              <xs:group ref="ns1:param-pid"/>
+              <xs:group ref="ns1:param-pref"/>
+              <xs:group ref="ns1:param-type"/>
+              <xs:group ref="ns1:param-geo"/>
+              <xs:group ref="ns1:param-tz"/>
+              <xs:group ref="ns1:param-label"/>
+            </xs:sequence>
+          </xs:complexType>
+        </xs:element>
+        <xs:element maxOccurs="unbounded" ref="ns1:pobox"/>
+        <xs:element maxOccurs="unbounded" ref="ns1:ext"/>
+        <xs:element maxOccurs="unbounded" ref="ns1:street"/>
+        <xs:element maxOccurs="unbounded" ref="ns1:locality"/>
+        <xs:element maxOccurs="unbounded" ref="ns1:region"/>
+        <xs:element maxOccurs="unbounded" ref="ns1:code"/>
+        <xs:element maxOccurs="unbounded" ref="ns1:country"/>
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="pobox" type="xs:string"/>
+  <xs:element name="ext" type="xs:string"/>
+  <xs:element name="street" type="xs:string"/>
+  <xs:element name="locality" type="xs:string"/>
+  <xs:element name="region" type="xs:string"/>
+  <xs:element name="code" type="xs:string"/>
+  <xs:element name="country" type="xs:string"/>
+  <!-- 6.4.1 -->
+  <xs:element name="tel">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element minOccurs="0" name="parameters">
+          <xs:complexType>
+            <xs:sequence>
+              <xs:group ref="ns1:param-altid"/>
+              <xs:group ref="ns1:param-pid"/>
+              <xs:group ref="ns1:param-pref"/>
+              <xs:element minOccurs="0" name="type">
+                <xs:complexType>
+                  <xs:sequence>
+                    <xs:element maxOccurs="unbounded" name="text">
+                      <xs:simpleType>
+                        <xs:restriction base="xs:token">
+                          <xs:enumeration value="work"/>
+                          <xs:enumeration value="home"/>
+                          <xs:enumeration value="text"/>
+                          <xs:enumeration value="voice"/>
+                          <xs:enumeration value="fax"/>
+                          <xs:enumeration value="cell"/>
+                          <xs:enumeration value="video"/>
+                          <xs:enumeration value="pager"/>
+                          <xs:enumeration value="textphone"/>
+                        </xs:restriction>
+                      </xs:simpleType>
+                    </xs:element>
+                  </xs:sequence>
+                </xs:complexType>
+              </xs:element>
+              <xs:group ref="ns1:param-mediatype"/>
+            </xs:sequence>
+          </xs:complexType>
+        </xs:element>
+        <xs:choice>
+          <xs:element ref="ns1:text"/>
+          <xs:element ref="ns1:uri"/>
+        </xs:choice>
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <!-- 6.4.2 -->
+  <xs:element name="email">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element minOccurs="0" name="parameters">
+          <xs:complexType>
+            <xs:sequence>
+              <xs:group ref="ns1:param-altid"/>
+              <xs:group ref="ns1:param-pid"/>
+              <xs:group ref="ns1:param-pref"/>
+              <xs:group ref="ns1:param-type"/>
+            </xs:sequence>
+          </xs:complexType>
+        </xs:element>
+        <xs:element ref="ns1:text"/>
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <!-- 6.4.3 -->
+  <xs:element name="impp">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element minOccurs="0" name="parameters">
+          <xs:complexType>
+            <xs:sequence>
+              <xs:group ref="ns1:param-altid"/>
+              <xs:group ref="ns1:param-pid"/>
+              <xs:group ref="ns1:param-pref"/>
+              <xs:group ref="ns1:param-type"/>
+              <xs:group ref="ns1:param-mediatype"/>
+            </xs:sequence>
+          </xs:complexType>
+        </xs:element>
+        <xs:element ref="ns1:uri"/>
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <!-- 6.4.4 -->
+  <xs:element name="lang">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element minOccurs="0" name="parameters">
+          <xs:complexType>
+            <xs:sequence>
+              <xs:group ref="ns1:param-altid"/>
+              <xs:group ref="ns1:param-pid"/>
+              <xs:group ref="ns1:param-pref"/>
+              <xs:group ref="ns1:param-type"/>
+            </xs:sequence>
+          </xs:complexType>
+        </xs:element>
+        <xs:element ref="ns1:language-tag"/>
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <!-- 6.5.1 -->
+  <xs:group name="property-tz">
+    <xs:sequence>
+      <xs:element name="tz">
+        <xs:complexType>
+          <xs:sequence>
+            <xs:element minOccurs="0" name="parameters">
+              <xs:complexType>
+                <xs:sequence>
+                  <xs:group ref="ns1:param-altid"/>
+                  <xs:group ref="ns1:param-pid"/>
+                  <xs:group ref="ns1:param-pref"/>
+                  <xs:group ref="ns1:param-type"/>
+                  <xs:group ref="ns1:param-mediatype"/>
+                </xs:sequence>
+              </xs:complexType>
+            </xs:element>
+            <xs:choice>
+              <xs:element ref="ns1:text"/>
+              <xs:element ref="ns1:uri"/>
+              <xs:element ref="ns1:utc-offset"/>
+            </xs:choice>
+          </xs:sequence>
+        </xs:complexType>
+      </xs:element>
+    </xs:sequence>
+  </xs:group>
+  <!-- 6.5.2 -->
+  <xs:group name="property-geo">
+    <xs:sequence>
+      <xs:element name="geo">
+        <xs:complexType>
+          <xs:sequence>
+            <xs:element minOccurs="0" name="parameters">
+              <xs:complexType>
+                <xs:sequence>
+                  <xs:group ref="ns1:param-altid"/>
+                  <xs:group ref="ns1:param-pid"/>
+                  <xs:group ref="ns1:param-pref"/>
+                  <xs:group ref="ns1:param-type"/>
+                  <xs:group ref="ns1:param-mediatype"/>
+                </xs:sequence>
+              </xs:complexType>
+            </xs:element>
+            <xs:element ref="ns1:uri"/>
+          </xs:sequence>
+        </xs:complexType>
+      </xs:element>
+    </xs:sequence>
+  </xs:group>
+  <!-- 6.6.1 -->
+  <xs:element name="title">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element minOccurs="0" name="parameters">
+          <xs:complexType>
+            <xs:sequence>
+              <xs:group ref="ns1:param-language"/>
+              <xs:group ref="ns1:param-altid"/>
+              <xs:group ref="ns1:param-pid"/>
+              <xs:group ref="ns1:param-pref"/>
+              <xs:group ref="ns1:param-type"/>
+            </xs:sequence>
+          </xs:complexType>
+        </xs:element>
+        <xs:element ref="ns1:text"/>
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <!-- 6.6.2 -->
+  <xs:element name="role">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element minOccurs="0" name="parameters">
+          <xs:complexType>
+            <xs:sequence>
+              <xs:group ref="ns1:param-language"/>
+              <xs:group ref="ns1:param-altid"/>
+              <xs:group ref="ns1:param-pid"/>
+              <xs:group ref="ns1:param-pref"/>
+              <xs:group ref="ns1:param-type"/>
+            </xs:sequence>
+          </xs:complexType>
+        </xs:element>
+        <xs:element ref="ns1:text"/>
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <!-- 6.6.3 -->
+  <xs:element name="logo">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element minOccurs="0" name="parameters">
+          <xs:complexType>
+            <xs:sequence>
+              <xs:group ref="ns1:param-language"/>
+              <xs:group ref="ns1:param-altid"/>
+              <xs:group ref="ns1:param-pid"/>
+              <xs:group ref="ns1:param-pref"/>
+              <xs:group ref="ns1:param-type"/>
+              <xs:group ref="ns1:param-mediatype"/>
+            </xs:sequence>
+          </xs:complexType>
+        </xs:element>
+        <xs:element ref="ns1:uri"/>
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <!-- 6.6.4 -->
+  <xs:element name="org">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element minOccurs="0" name="parameters">
+          <xs:complexType>
+            <xs:sequence>
+              <xs:group ref="ns1:param-language"/>
+              <xs:group ref="ns1:param-altid"/>
+              <xs:group ref="ns1:param-pid"/>
+              <xs:group ref="ns1:param-pref"/>
+              <xs:group ref="ns1:param-type"/>
+              <xs:group ref="ns1:param-sort-as"/>
+            </xs:sequence>
+          </xs:complexType>
+        </xs:element>
+        <xs:group ref="ns1:value-text-list"/>
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <!-- 6.6.5 -->
+  <xs:element name="member">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element minOccurs="0" name="parameters">
+          <xs:complexType>
+            <xs:sequence>
+              <xs:group ref="ns1:param-altid"/>
+              <xs:group ref="ns1:param-pid"/>
+              <xs:group ref="ns1:param-pref"/>
+              <xs:group ref="ns1:param-mediatype"/>
+            </xs:sequence>
+          </xs:complexType>
+        </xs:element>
+        <xs:element ref="ns1:uri"/>
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <!-- 6.6.6 -->
+  <xs:element name="related">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element minOccurs="0" name="parameters">
+          <xs:complexType>
+            <xs:sequence>
+              <xs:group ref="ns1:param-altid"/>
+              <xs:group ref="ns1:param-pid"/>
+              <xs:group ref="ns1:param-pref"/>
+              <xs:element minOccurs="0" name="type">
+                <xs:complexType>
+                  <xs:sequence>
+                    <xs:element maxOccurs="unbounded" name="text">
+                      <xs:simpleType>
+                        <xs:restriction base="xs:token">
+                          <xs:enumeration value="work"/>
+                          <xs:enumeration value="home"/>
+                          <xs:enumeration value="contact"/>
+                          <xs:enumeration value="acquaintance"/>
+                          <xs:enumeration value="friend"/>
+                          <xs:enumeration value="met"/>
+                          <xs:enumeration value="co-worker"/>
+                          <xs:enumeration value="colleague"/>
+                          <xs:enumeration value="co-resident"/>
+                          <xs:enumeration value="neighbor"/>
+                          <xs:enumeration value="child"/>
+                          <xs:enumeration value="parent"/>
+                          <xs:enumeration value="sibling"/>
+                          <xs:enumeration value="spouse"/>
+                          <xs:enumeration value="kin"/>
+                          <xs:enumeration value="muse"/>
+                          <xs:enumeration value="crush"/>
+                          <xs:enumeration value="date"/>
+                          <xs:enumeration value="sweetheart"/>
+                          <xs:enumeration value="me"/>
+                          <xs:enumeration value="agent"/>
+                          <xs:enumeration value="emergency"/>
+                        </xs:restriction>
+                      </xs:simpleType>
+                    </xs:element>
+                  </xs:sequence>
+                </xs:complexType>
+              </xs:element>
+              <xs:group ref="ns1:param-mediatype"/>
+            </xs:sequence>
+          </xs:complexType>
+        </xs:element>
+        <xs:choice>
+          <xs:element ref="ns1:uri"/>
+          <xs:element ref="ns1:text"/>
+        </xs:choice>
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <!-- 6.7.1 -->
+  <xs:element name="categories">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element minOccurs="0" name="parameters">
+          <xs:complexType>
+            <xs:sequence>
+              <xs:group ref="ns1:param-altid"/>
+              <xs:group ref="ns1:param-pid"/>
+              <xs:group ref="ns1:param-pref"/>
+              <xs:group ref="ns1:param-type"/>
+            </xs:sequence>
+          </xs:complexType>
+        </xs:element>
+        <xs:group ref="ns1:value-text-list"/>
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <!-- 6.7.2 -->
+  <xs:element name="note">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element minOccurs="0" name="parameters">
+          <xs:complexType>
+            <xs:sequence>
+              <xs:group ref="ns1:param-language"/>
+              <xs:group ref="ns1:param-altid"/>
+              <xs:group ref="ns1:param-pid"/>
+              <xs:group ref="ns1:param-pref"/>
+              <xs:group ref="ns1:param-type"/>
+            </xs:sequence>
+          </xs:complexType>
+        </xs:element>
+        <xs:element ref="ns1:text"/>
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <!-- 6.7.3 -->
+  <xs:element name="prodid">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element ref="ns1:text"/>
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <!-- 6.7.4 -->
+  <xs:element name="rev" type="ns1:value-timestamp"/>
+  <!-- 6.7.5 -->
+  <xs:element name="sound">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element minOccurs="0" name="parameters">
+          <xs:complexType>
+            <xs:sequence>
+              <xs:group ref="ns1:param-language"/>
+              <xs:group ref="ns1:param-altid"/>
+              <xs:group ref="ns1:param-pid"/>
+              <xs:group ref="ns1:param-pref"/>
+              <xs:group ref="ns1:param-type"/>
+              <xs:group ref="ns1:param-mediatype"/>
+            </xs:sequence>
+          </xs:complexType>
+        </xs:element>
+        <xs:element ref="ns1:uri"/>
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <!-- 6.7.6 -->
+  <xs:element name="uid">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element ref="ns1:uri"/>
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <!-- 6.7.7 -->
+  <xs:element name="clientpidmap">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element ref="ns1:sourceid"/>
+        <xs:element ref="ns1:uri"/>
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="sourceid" type="xs:positiveInteger"/>
+  <!-- 6.7.8 -->
+  <xs:element name="url">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element minOccurs="0" name="parameters">
+          <xs:complexType>
+            <xs:sequence>
+              <xs:group ref="ns1:param-altid"/>
+              <xs:group ref="ns1:param-pid"/>
+              <xs:group ref="ns1:param-pref"/>
+              <xs:group ref="ns1:param-type"/>
+              <xs:group ref="ns1:param-mediatype"/>
+            </xs:sequence>
+          </xs:complexType>
+        </xs:element>
+        <xs:element ref="ns1:uri"/>
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <!-- 6.8.1 -->
+  <xs:element name="key">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element minOccurs="0" name="parameters">
+          <xs:complexType>
+            <xs:sequence>
+              <xs:group ref="ns1:param-altid"/>
+              <xs:group ref="ns1:param-pid"/>
+              <xs:group ref="ns1:param-pref"/>
+              <xs:group ref="ns1:param-type"/>
+              <xs:group ref="ns1:param-mediatype"/>
+            </xs:sequence>
+          </xs:complexType>
+        </xs:element>
+        <xs:choice>
+          <xs:element ref="ns1:uri"/>
+          <xs:element ref="ns1:text"/>
+        </xs:choice>
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <!-- 6.9.1 -->
+  <xs:element name="fburl">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element minOccurs="0" name="parameters">
+          <xs:complexType>
+            <xs:sequence>
+              <xs:group ref="ns1:param-altid"/>
+              <xs:group ref="ns1:param-pid"/>
+              <xs:group ref="ns1:param-pref"/>
+              <xs:group ref="ns1:param-type"/>
+              <xs:group ref="ns1:param-mediatype"/>
+            </xs:sequence>
+          </xs:complexType>
+        </xs:element>
+        <xs:element ref="ns1:uri"/>
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <!-- 6.9.2 -->
+  <xs:element name="caladruri">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element minOccurs="0" name="parameters">
+          <xs:complexType>
+            <xs:sequence>
+              <xs:group ref="ns1:param-altid"/>
+              <xs:group ref="ns1:param-pid"/>
+              <xs:group ref="ns1:param-pref"/>
+              <xs:group ref="ns1:param-type"/>
+              <xs:group ref="ns1:param-mediatype"/>
+            </xs:sequence>
+          </xs:complexType>
+        </xs:element>
+        <xs:element ref="ns1:uri"/>
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <!-- 6.9.3 -->
+  <xs:element name="caluri">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element minOccurs="0" name="parameters">
+          <xs:complexType>
+            <xs:sequence>
+              <xs:group ref="ns1:param-altid"/>
+              <xs:group ref="ns1:param-pid"/>
+              <xs:group ref="ns1:param-pref"/>
+              <xs:group ref="ns1:param-type"/>
+              <xs:group ref="ns1:param-mediatype"/>
+            </xs:sequence>
+          </xs:complexType>
+        </xs:element>
+        <xs:element ref="ns1:uri"/>
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <!-- Top-level grammar -->
+  <xs:group name="property">
+    <xs:choice>
+      <xs:element ref="ns1:adr"/>
+      <xs:element ref="ns1:anniversary"/>
+      <xs:element ref="ns1:bday"/>
+      <xs:element ref="ns1:caladruri"/>
+      <xs:element ref="ns1:caluri"/>
+      <xs:element ref="ns1:categories"/>
+      <xs:element ref="ns1:clientpidmap"/>
+      <xs:element ref="ns1:email"/>
+      <xs:element ref="ns1:fburl"/>
+      <xs:element ref="ns1:fn"/>
+      <xs:group ref="ns1:property-geo"/>
+      <xs:element ref="ns1:impp"/>
+      <xs:element ref="ns1:key"/>
+      <xs:element ref="ns1:kind"/>
+      <xs:element ref="ns1:lang"/>
+      <xs:element ref="ns1:logo"/>
+      <xs:element ref="ns1:member"/>
+      <xs:element ref="ns1:n"/>
+      <xs:element ref="ns1:nickname"/>
+      <xs:element ref="ns1:note"/>
+      <xs:element ref="ns1:org"/>
+      <xs:element ref="ns1:photo"/>
+      <xs:element ref="ns1:prodid"/>
+      <xs:element ref="ns1:related"/>
+      <xs:element ref="ns1:rev"/>
+      <xs:element ref="ns1:role"/>
+      <xs:element ref="ns1:gender"/>
+      <xs:element ref="ns1:sound"/>
+      <xs:element ref="ns1:source"/>
+      <xs:element ref="ns1:tel"/>
+      <xs:element ref="ns1:title"/>
+      <xs:group ref="ns1:property-tz"/>
+      <xs:element ref="ns1:uid"/>
+      <xs:element ref="ns1:url"/>
+    </xs:choice>
+  </xs:group>
+  <xs:element name="vcards">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element maxOccurs="unbounded" ref="ns1:vcard"/>
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="vcard">
+    <xs:complexType>
+      <xs:choice maxOccurs="unbounded">
+        <xs:group ref="ns1:property"/>
+        <xs:element ref="ns1:group"/>
+      </xs:choice>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="group">
+    <xs:complexType>
+      <xs:group minOccurs="0" maxOccurs="unbounded" ref="ns1:property"/>
+      <xs:attribute name="name" use="required"/>
+    </xs:complexType>
+  </xs:element>
+</xs:schema>