<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:annotation>
        <xs:documentation>
            Version 3.0f, age-de xsd vom 10.08.2011 15:00
        </xs:documentation>
    </xs:annotation>
    <xs:element name="age-declaration">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="ageblock-basic" maxOccurs="1" minOccurs="1" type="ageblock-basic" />
                <xs:element name="ageblock-labeltype" maxOccurs="1" minOccurs="1" type="ageblock-labeltype" />
                <xs:element name="ageblock-labeltype-definition" maxOccurs="1" minOccurs="1" type="ageblock-labeltype-definitionen" />
            </xs:sequence>
        </xs:complexType>
    </xs:element>

    <!--  Typdefinitionen  -->
    <!--  Elementtypen  -->
    <xs:complexType name="alternate" >
        <xs:simpleContent>
            <xs:extension base="xs:anyURI">
                <xs:attribute name="age" type="age" use="optional" />       
            </xs:extension>            
        </xs:simpleContent>
    </xs:complexType>
    
    <xs:complexType name="ageblock-basic">
        <xs:sequence>           
                <xs:element name="age-issuer" type="age-issuer"   minOccurs="1" />      
                <xs:element name="last-change" type="last-change" />
                <xs:element type="country" name="country" />
                <xs:element name="label-version" type="xs:string" />
                <xs:element name="revisit-after" type="revisit" minOccurs="0"/>
                <xs:element type="custom" maxOccurs="unbounded" minOccurs="0" name="custom" />          
        </xs:sequence>
    </xs:complexType>
    
    <xs:complexType name="ageblock-labeltype">   
    <xs:sequence>
        <xs:choice minOccurs="1" maxOccurs="6">
            <xs:element name="xmlfile" minOccurs="1" type="xs:boolean"/>
            <xs:element name="httpheader" minOccurs="1" type="xs:boolean"/>
            <xs:element name="urlparameter" minOccurs="1" type="xs:boolean"/> 
            <xs:element name="htmlmeta" minOccurs="1" type="xs:boolean"/>        
            <xs:element name="label-z" minOccurs="1" type="xs:boolean"/>
            <xs:element name="single-content" minOccurs="1" type="xs:boolean"/>
        </xs:choice>
        <xs:element name="min-age" type="age" minOccurs="0" />
        <xs:element name="default-age" type="age" />
        <xs:element minOccurs="0" maxOccurs="unbounded" name="alternate" type="alternate" />      
    </xs:sequence>
    </xs:complexType>
    
    <xs:complexType name="ageblock-labeltype-definitionen">          
            <xs:all>
                <xs:element type="label-type" name="labeltype-xmlfile" maxOccurs="1" minOccurs="0" /> 
                <xs:element type="label-type" name="labeltype-httpheader-definition" maxOccurs="1" minOccurs="0" />
                <xs:element type="label-type" name="labeltype-htmlmeta-definition" maxOccurs="1" minOccurs="0" />
                <xs:element type="label-type-z" name="labeltype-label-z-definition" maxOccurs="1" minOccurs="0" />
                <xs:element type="singlecontent" name="labeltype-singlecontent-definition" maxOccurs="1" minOccurs="0" />
            </xs:all>
    </xs:complexType>    
    
    <xs:complexType name="custom" >
        <xs:simpleContent>
            <xs:extension base="xs:string">
                <xs:attribute name="info" type="xs:string" use="required"/>       
            </xs:extension>            
        </xs:simpleContent>
    </xs:complexType>
    
    <xs:complexType name="label">       
        <xs:choice maxOccurs="1" minOccurs="1">
            <xs:group ref="label-xml-group" />           
            <!-- <xs:group ref="label-z-group" />-->
        </xs:choice>
        <xs:attribute name="class" type="label-class" use="required"/>
    </xs:complexType>
    
    <xs:complexType name="label-z">       
        <xs:choice maxOccurs="1" minOccurs="1">
            <xs:group ref="label-z-group" />           
            <!-- <xs:group ref="label-z-group" />-->
        </xs:choice>
        <xs:attribute name="class" type="label-class" use="required"/>
    </xs:complexType>
    
    <xs:complexType name="label-type">       
        <xs:sequence>                        
            <xs:element name="label" type="label" maxOccurs="unbounded" />
        </xs:sequence>
    </xs:complexType>
    
    <xs:complexType name="label-type-z">              
        <xs:sequence>                        
            <xs:element name="label" type="label-z" maxOccurs="unbounded" />            
        </xs:sequence>
    </xs:complexType>
    
    <xs:complexType name="singlecontent">          
        <xs:sequence>
            <xs:choice maxOccurs="unbounded" minOccurs="1">
                <xs:element name="scope" type="scope" />
                <xs:element name="scope-regexp" type="scope-regexp" />               
            </xs:choice>  
            <xs:element type="age" name="min-age" maxOccurs="1" minOccurs="1" />
        </xs:sequence>
    </xs:complexType>   
    
    <!--  Attributstypen  -->
    <xs:simpleType name="age">  
        <xs:restriction base="xs:int"> 
            <xs:enumeration value="0"/>
            <xs:enumeration value="6"/> 
            <xs:enumeration value="12"/> 
            <xs:enumeration value="16"/>
            <xs:enumeration value="18"/> 
        </xs:restriction> 
    </xs:simpleType>
    
    <xs:simpleType name="age-issuer">  
        <xs:restriction base="xs:string"> 
            <xs:pattern value="[_+%\- a-zA-Z0-9\./]+"/> 
        </xs:restriction> 
    </xs:simpleType>
    
    <xs:simpleType name="block-class">
        <xs:restriction base="xs:string">
            <xs:enumeration value="basic" />
            <xs:enumeration value="label-type" />    
            <xs:enumeration value="label-type-definitions" />
        </xs:restriction>
    </xs:simpleType>
    
    <xs:simpleType name="country">
        <xs:restriction base="xs:string">
            <xs:enumeration value="de"/>
        </xs:restriction>
    </xs:simpleType>    
    
    <xs:simpleType name="url-parameter">
        <xs:restriction base="xs:string"> 
            <xs:pattern value="[=\-_0-9a-zA-Z]+"/> 
        </xs:restriction> 
    </xs:simpleType>
    
    <xs:simpleType name="label-class">  
        <xs:union>
            <xs:simpleType>
                <xs:restriction base="xs:string">
                    <xs:enumeration value="default" />
                </xs:restriction>
            </xs:simpleType>
            <xs:simpleType>
                <xs:restriction base="xs:string">                  
                </xs:restriction>
            </xs:simpleType>        
        </xs:union>
    </xs:simpleType>
    
    <xs:simpleType name="label-type-class">
        <xs:restriction base="xs:string">
            <xs:enumeration value="xmlfile" />
            <xs:enumeration value="htmlmeta" />    
            <xs:enumeration value="httpheader" />    
            <xs:enumeration value="url-parameter" /> 
            <xs:enumeration value="label-z" />
            <xs:enumeration value="single-content" />
            <xs:enumeration value="all" />
        </xs:restriction>
    </xs:simpleType>
    
    <xs:simpleType name="last-change">  
        <xs:restriction base="xs:string"> 
            <xs:pattern value="[0-9]{4}\-[0-9]{2}\-[0-9]{2}"/> 
        </xs:restriction> 
    </xs:simpleType>
    
    <xs:simpleType name="protocol">
        <xs:restriction base="xs:string" />
    </xs:simpleType>
    
    <xs:simpleType name="revisit">  
        <xs:union>
            <xs:simpleType>
                <xs:restriction base="xs:string">
                    <xs:pattern value="always" />
                </xs:restriction>
            </xs:simpleType>            
            <xs:simpleType>
                <xs:restriction base="xs:string">
                    <xs:pattern value="[0-9]{1,3}days" />
                </xs:restriction>
            </xs:simpleType>
        </xs:union>
    </xs:simpleType>
    
    <xs:simpleType name="scope"> 
        <xs:restriction base="xs:string">
            <xs:pattern value="(\*\.){0,1}[a-z0-9.\-_]+(/[a-zA-Z0-9./\-_]+){0,1}(/\*){0,1}"/> 
            <!-- <xs:pattern value="(\*){0,1}[a-zA-Z0-9./\-_]+(\*){0,1}"/>  -->
        </xs:restriction>
    </xs:simpleType>
    
    <xs:simpleType name="scope-regexp">  
        <xs:restriction base="xs:string"> 
            <xs:pattern value="[$\\a-zA-Z0-9\./\+\*\^,\?\{\}|()\-]+"/> 
        </xs:restriction> 
    </xs:simpleType>
    
    <!--  Gruppen  -->   

    <xs:group name="label-xml-group">
        <xs:sequence> 
            <xs:element minOccurs="0" name="unit" type="xs:string" />
            <xs:element minOccurs="0" name="age" type="age" />
            <xs:element minOccurs="0" name="min-age" type="age" />
            <xs:element name="default-age" type="age"  minOccurs="0"/>
            <xs:choice maxOccurs="unbounded" minOccurs="0">
                <xs:element name="scope" type="scope" />
                <xs:element name="scope-regexp" type="scope-regexp" />               
            </xs:choice> 
            <xs:element name="url-parameter" type="url-parameter"  minOccurs="0"/>
            <xs:element minOccurs="0" name="protocol" type="protocol" />
            <xs:element type="custom" maxOccurs="unbounded" minOccurs="0" name="custom" />          
        </xs:sequence>
    </xs:group>
    
    <xs:group name="label-z-group">
        <xs:sequence>             
            <xs:element minOccurs="0" name="unit" type="xs:string" />
            <xs:element minOccurs="0" name="age" type="age" />
            <xs:element minOccurs="0" name="min-age" type="age" />
            <xs:element minOccurs="0" name="default-age" type="age" />                        
            <xs:element minOccurs="0" maxOccurs="unbounded" name="label-z-type" type="label-type-class" />
            <xs:choice maxOccurs="unbounded" minOccurs="0">
                <xs:element name="scope" type="scope" />
                <xs:element name="scope-regexp" type="scope-regexp" />               
            </xs:choice>          
            <xs:element minOccurs="0" name="protocol" type="protocol" />            
            <xs:element type="alternate" name="alternate"  maxOccurs="unbounded" minOccurs="0"/>             
            <xs:element name="label-z-xmlfile" type="label-z" maxOccurs="unbounded"  minOccurs="0"/>
            <xs:element name="label-z-httpheader" type="label-z" maxOccurs="unbounded"  minOccurs="0"/>
            <xs:element name="label-z-htmlmeta" type="label-z" maxOccurs="unbounded"  minOccurs="0"/>
            <xs:element type="custom" maxOccurs="unbounded" minOccurs="0" name="custom" />          
        </xs:sequence>
    </xs:group>
    
</xs:schema>