<?xml version="1.0" encoding="UTF-8"?>

<!-- 

    DIG 2.0 Interface
    DIG Asks XML Schema Definition
    ==============================
    Original Author: Timo Weithoener, Ulm University, Dept. of AI
    
    12.07.2006 - Creation
    12.09.2006 - Fix: DIG Schema Location changed

-->

<xs:schema 
    targetNamespace="http://dl.kr.org/dig/lang/asks-schema"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    xmlns="http://dl.kr.org/dig/lang/asks-schema"
    xmlns:lang="http://dl.kr.org/dig/lang/schema"
    attributeFormDefault="unqualified"
    elementFormDefault="qualified">
    
    <xs:import namespace="http://dl.kr.org/dig/lang/schema" schemaLocation="http://dig.cs.manchester.ac.uk/schema.xsd"/>
    
    <xs:attributeGroup name="basicAskAttributes">
        <xs:attribute name="id" type="xs:string" use="required"/>
    </xs:attributeGroup>
    
    <xs:attributeGroup name="taxonomyAttributes">
        <xs:attribute name="direct" type="xs:boolean" default="false" use="optional"/>
    </xs:attributeGroup>
    
    <xs:attributeGroup name="instantiationAttributes">
        <xs:attribute name="mostSpecific" type="xs:boolean" default="false" use="optional"/>
    </xs:attributeGroup>
    
    <xs:attributeGroup name="classInstantiationAttributes">
        <xs:attributeGroup ref="instantiationAttributes"/>
    </xs:attributeGroup>
    
    <xs:attributeGroup name="dataPropertyInstantiationAttributes">
        <xs:attributeGroup ref="instantiationAttributes"/>
    </xs:attributeGroup>
    
    <xs:attributeGroup name="objectPropertyInstantiationAttributes">
        <xs:attributeGroup ref="instantiationAttributes"/>
        <xs:attribute name="transitivity" type="xs:boolean" default="true"/>
    </xs:attributeGroup>
    
    <xs:attributeGroup name="kbIdentificationAttributes">
        <xs:attribute name="URI" type="xs:anyURI" use="required"/>
    </xs:attributeGroup>
    
    <xs:complexType name="basicAsk">
        <xs:attributeGroup ref="basicAskAttributes"/>
    </xs:complexType>
    
    <xs:complexType name="basicClassAsk">
        <xs:complexContent>
            <xs:extension base="basicAsk">
                <xs:group ref="lang:description"/>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>
    
    <xs:complexType name="basicClassPairAsk">
        <xs:complexContent>
            <xs:extension base="basicClassAsk">
                <xs:group ref="lang:description"/>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>
    
    <xs:complexType name="basicIndividualAsk">
        <xs:complexContent>
            <xs:extension base="basicAsk">
                <xs:sequence>
                    <xs:element ref="lang:individual"/>
                </xs:sequence>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>
    
    <xs:complexType name="basicIndividualPairAsk">
        <xs:complexContent>
            <xs:extension base="basicIndividualAsk">
                <xs:sequence>
                    <xs:element ref="lang:individual"/>
                </xs:sequence>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>
    
    <xs:complexType name="basicPropertyAsk">
        <xs:complexContent>
            <xs:extension base="basicAsk">
                <xs:choice>
                    <xs:group ref="lang:objectPropertyExpression"/>
                    <xs:group ref="lang:dataPropertyExpression"/>
                </xs:choice>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>
    
    <xs:complexType name="basicPropertyPairAsk">
        <xs:complexContent>
            <xs:extension base="basicAsk">
                <xs:choice>
                    <xs:group ref="lang:objectPropertyExpression" minOccurs="2" maxOccurs="2"/>
                    <xs:group ref="lang:dataPropertyExpression" minOccurs="2" maxOccurs="2"/>
                </xs:choice>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>
    
    <xs:complexType name="basicObjectPropertyAsk">
        <xs:complexContent>
            <xs:extension base="basicAsk">
                <xs:group ref="lang:objectPropertyExpression"/>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>
    
    <xs:complexType name="basicObjectPropertyPairAsk">
        <xs:complexContent>
            <xs:extension base="basicObjectPropertyAsk">
                <xs:group ref="lang:objectPropertyExpression"/>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>
    
    <xs:complexType name="basicDataPropertyAsk">
        <xs:complexContent>
            <xs:extension base="basicAsk">
                <xs:group ref="lang:dataPropertyExpression"/>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>
    
    <xs:complexType name="basicDataPropertyPairAsk">
        <xs:complexContent>
            <xs:extension base="basicDataPropertyAsk">
                <xs:group ref="lang:dataPropertyExpression"/>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>
    
    <xs:complexType name="classHierarchyAsk">
        <xs:complexContent>
            <xs:extension base="basicClassAsk">
                <xs:attributeGroup ref="taxonomyAttributes"/>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>
    
    <xs:complexType name="classHierarchyTest">
        <xs:complexContent>
            <xs:extension base="basicClassPairAsk">
                <xs:attributeGroup ref="taxonomyAttributes"/>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>
    
    <xs:complexType name="objectPropertyHierarchyAsk">
        <xs:complexContent>
            <xs:extension base="basicObjectPropertyAsk">
                <xs:attributeGroup ref="taxonomyAttributes"/>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>
    
    <xs:complexType name="objectPropertyHierarchyTest">
        <xs:complexContent>
            <xs:extension base="basicObjectPropertyPairAsk">
                <xs:attributeGroup ref="taxonomyAttributes"/>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>
    
    <xs:complexType name="dataPropertyHierarchyAsk">
        <xs:complexContent>
            <xs:extension base="basicDataPropertyAsk">
                <xs:attributeGroup ref="taxonomyAttributes"/>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>
    
    <xs:complexType name="dataPropertyHierarchyTest">
        <xs:complexContent>
            <xs:extension base="basicDataPropertyPairAsk">
                <xs:attributeGroup ref="taxonomyAttributes"/>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>
    
    <xs:complexType name="propertyHierarchyAsk">
        <xs:complexContent>
            <xs:extension base="basicPropertyAsk">
                <xs:attributeGroup ref="taxonomyAttributes"/>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>

    <xs:complexType name="propertyHierarchyTest">
        <xs:complexContent>
            <xs:extension base="basicPropertyPairAsk">
                <xs:attributeGroup ref="taxonomyAttributes"/>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>
    
    
    <xs:complexType name="classInstancesAsk">
        <xs:complexContent>
            <xs:extension base="basicClassAsk">
                <xs:attributeGroup ref="classInstantiationAttributes"/>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>
    
    <xs:complexType name="instanceTypesAsk">
        <xs:complexContent>
            <xs:extension base="basicIndividualAsk">
                <xs:attributeGroup ref="classInstantiationAttributes"/>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>
    
    <xs:complexType name="instantiationTest">
        <xs:complexContent>
            <xs:extension base="basicIndividualAsk">
                <xs:group ref="lang:description"/>
                <xs:attributeGroup ref="classInstantiationAttributes"/>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>
    
    <xs:complexType name="objectPropertyInstancesAsk">
        <xs:complexContent>
            <xs:extension base="basicIndividualPairAsk">
                <xs:group ref="lang:objectPropertyExpression"/>
                <xs:attributeGroup ref="objectPropertyInstantiationAttributes"/>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>
    
    <xs:complexType name="dataPropertyInstancesAsk">
        <xs:complexContent>
            <xs:extension base="basicIndividualPairAsk">
                <xs:group ref="lang:dataPropertyExpression"/>
                <xs:attributeGroup ref="dataPropertyInstantiationAttributes"/>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>
    
    <xs:complexType name="rangeClassesAsk">
        <xs:complexContent>
            <xs:extension base="basicObjectPropertyAsk">
                <xs:attributeGroup ref="taxonomyAttributes"/>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>
    
    <xs:complexType name="rangeClassTest">
        <xs:complexContent>
            <xs:extension base="rangeClassesAsk">
                <xs:group ref="lang:description"/>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>
    
    <xs:complexType name="domainClassesAsk">
        <xs:complexContent>
            <xs:extension base="basicPropertyAsk">
                <xs:attributeGroup ref="taxonomyAttributes"/>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>
    
    <xs:complexType name="domainClassTest">
        <xs:complexContent>
            <xs:extension base="domainClassesAsk">
                <xs:group ref="lang:description"/>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>
    
    <xs:complexType name="asks">
        <xs:choice minOccurs="1" maxOccurs="unbounded">
            <xs:element name="consistentKB" type="basicAsk"/>
            
            <xs:element name="namedClasses" type="basicAsk"/>
            <xs:element name="namedIndividuals" type="basicAsk"/>
            <xs:element name="namedDataProperties" type="basicAsk"/>
            <xs:element name="namedObjectProperties" type="basicAsk"/>
            
            <xs:element name="isSatisfiable" type="basicClassAsk"/>
            
            <xs:element name="subClasses" type="classHierarchyAsk"/>
            <xs:element name="superClasses" type="classHierarchyAsk"/>
            <xs:element name="isSubClassOf" type="classHierarchyTest"/>
            
            <xs:element name="equivalentClasses" type="basicClassAsk"/>
            <xs:element name="isEquivalentClassTo" type="basicClassPairAsk"/>
            <xs:element name="disjointClasses" type="basicClassAsk"/>
            <xs:element name="isDisjointClassWith" type="basicClassPairAsk"/>
            
            <xs:element name="instances" type="classInstancesAsk"/>
            <xs:element name="types" type="instanceTypesAsk"/>
            <xs:element name="isInstanceOf" type="instantiationTest"/>
            
            <xs:element name="synonyms" type="basicIndividualAsk"/>
            <xs:element name="isSynonymFor" type="basicIndividualPairAsk"/>
            <xs:element name="differentIndividuals" type="basicIndividualAsk"/>
            <xs:element name="isDifferentFrom" type="basicIndividualPairAsk"/>
            
            <xs:element name="subProperties" type="propertyHierarchyAsk"/>
            <xs:element name="superProperties" type="propertyHierarchyAsk"/>
            <xs:element name="isSubPropertyOf" type="propertyHierarchyTest"/>
            
            <xs:element name="equivalentProperties" type="basicPropertyAsk"/>
            <xs:element name="isEquivalentPropertyTo" type="basicPropertyPairAsk"/>
            <xs:element name="disjointProperties" type="basicPropertyAsk"/>
            <xs:element name="isDisjointPropertyWith" type="basicPropertyPairAsk"/>
            
            <xs:element name="objectPropertyInstances" type="objectPropertyInstancesAsk"/>
            <xs:element name="dataPropertyInstances" type="dataPropertyInstancesAsk"/>
            
            <xs:element name="rangeClasses" type="rangeClassesAsk"/>
            <xs:element name="isRangeClassOf" type="rangeClassTest"/>
            <xs:element name="rangeDataType" type="rangeClassesAsk"/>
            <xs:element name="domainClasses" type="domainClassesAsk"/>
            <xs:element name="isDomainClassOf" type="rangeClassTest"/>
            
            <xs:element name="inverseProperties" type="basicObjectPropertyAsk"/>
            <xs:element name="isInversePropertyOf" type="basicObjectPropertyPairAsk"/>
            <xs:element name="transitiveProperties" type="basicAsk"/>
            <xs:element name="isTransitiveProperty" type="basicObjectPropertyAsk"/>
            <xs:element name="symmetricProperties" type="basicAsk"/>
            <xs:element name="isSymmetricProperty" type="basicObjectPropertyAsk"/>
            <xs:element name="antiSymmetricProperties" type="basicAsk"/>
            <xs:element name="isAntiSymmetricProperty" type="basicObjectPropertyAsk"/>
            <xs:element name="functionalProperties" type="basicAsk"/>
            <xs:element name="isFunctionalProperty" type="basicObjectPropertyAsk"/>
            <xs:element name="inverseFunctionalProperties" type="basicAsk"/>
            <xs:element name="isInverseFunctionalProperty" type="basicObjectPropertyAsk"/>
            <xs:element name="reflexiveProperties" type="basicAsk"/>
            <xs:element name="isReflexiveProperty" type="basicObjectPropertyAsk"/>
            <xs:element name="irreflexiveProperties" type="basicAsk"/>
            <xs:element name="isIrreflexiveProperty" type="basicObjectPropertyAsk"/>
            
        </xs:choice>
        <xs:attributeGroup ref="kbIdentificationAttributes"/>
    </xs:complexType>

    <xs:element name="asks" type="asks"/>
    
    
</xs:schema>
