<?xml version="1.0" encoding="UTF-8"?>
<!-- Tara Metamodeling Ontology Schema  -->
<schema xmlns="http://www.w3.org/2001/XMLSchema" 
  targetNamespace="urn:semantion:names:vbpmp:xsd:tara:1.2" 
  xmlns:tns="urn:semantion:names:vbpmp:xsd:tara:1.2" 
  xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
  attributeFormDefault="unqualified" 
  elementFormDefault="qualified">
  
  <annotation>
    <documentation>
	Tara Metamodeling Ontology Schema
	Author: Goran Zugic, CTO Semantion Inc.
	Date: 30 November, 2009
	Version: 1.2
	
	Please read http://www.semantion.com/documentation/SBP/metamodeling/TaraOntologyLanguage_V1.2.pdf for more 
	information abut Tara metamodeling ontology.
    </documentation>
  </annotation>

  <!--************************** Tara Metamodeling Ontology Document Declaration *******************************-->
	<!-- This Root element contains the actual definition of the objects required to  -->
	<!-- define a Tara metamodel (ontology). (Element name: "Metamodel".) --> 

  <element name="Root">
    <complexType>
      <sequence>
        <element name="Metamodel">
          <complexType>
            <complexContent>
              <extension base="tns:BasicEntityType">          
                <sequence>
                  <!-- Scheme of Concepts -->
                  <element name="ConceptScheme" type="tns:SchemeType" use="optional" />
                  <!-- Scheme of Associations -->
                  <element name="AssociationScheme" type="tns:SchemeType" use="optional" />
                  <!-- A list of Schemes of options -->
                  <element name="OptionSchemes" type="tns:SchemeListType" use="optional" />
                  <!-- Scheme of Attribute types -->
                  <element name="TypeScheme" type="tns:SchemeType" use="optional" />                  
                  <!-- Scheme of types of Documents -->
                  <element name="DocumentScheme" type="tns:SchemeType" use="optional" />                  
                  <!-- Concepts -->
                  <element name="Concepts" type="tns:ConceptListType" use="optional" />
                  <!-- Associations -->
                  <element name="Associations" type="tns:AssociationListType" use="optional" />
                </sequence> 
              </extension>
            </complexContent>
          </complexType>
        </element>
      </sequence>
    </complexType>
  </element>
  
  
  <!--************************** Simple Type Declarations *******************************-->
  <simpleType name="String256">
    <restriction base="string">
      <maxLength value="256" />
    </restriction>
  </simpleType>
  
  
  <!--************************** Complex Type Declarations ******************************-->
  <complexType name="LocalizedStringType">
    <attribute name="lang" default="en-US" />
    <attribute default="UTF-8" name="charset" />
    <attribute name="value" type="string" use="required" />
  </complexType>

  <complexType name="LocalizedString256Type">
    <attribute name="lang" default="en-US" />
    <attribute default="UTF-8" name="charset" />
    <attribute name="value" type="tns:String256" use="required" />
  </complexType>

  <element name="LocalizedString" type="tns:LocalizedStringType" />
  <element name="LocalizedString256" type="tns:LocalizedString256Type" />

  <complexType name="InternationalStringType">
    <sequence minOccurs="0" maxOccurs="unbounded">
      <element ref="tns:LocalizedString" />
    </sequence>
  </complexType>

  <complexType name="InternationalString256Type">
    <sequence minOccurs="0" maxOccurs="unbounded">
      <element ref="tns:LocalizedString256" />
    </sequence>
  </complexType>

  <element name="Name" type="tns:InternationalString256Type" />
  <element name="Description" type="tns:InternationalStringType" />

  <complexType name="String256ListType">
    <sequence minOccurs="0" maxOccurs="unbounded">
      <element name="Reference" type="tns:String256" />
    </sequence>
  </complexType>
  
  <complexType name="StringListType">
    <sequence minOccurs="0" maxOccurs="unbounded">
      <element name="Value" type="string" />
    </sequence>
  </complexType>  

  <complexType name="BasicEntityType">
    <sequence minOccurs="0" maxOccurs="1">      
      <element ref="tns:Name" minOccurs="1" maxOccurs="1" />
      <element ref="tns:Description" minOccurs="0" maxOccurs="1" />      
    </sequence>
  </complexType>

  <complexType name="SchemeType">
    <complexContent>
      <extension base="tns:BasicEntityType">          
        <sequence>
          <element name="Node" type="tns:NodeType" minOccurs="0" maxOccurs="unbounded" />          
        </sequence>
        <attribute name="type" use="required">
          <simpleType>
            <restriction base="NMTOKEN">
              <enumeration value="Association" />
              <enumeration value="Concept" />
              <enumeration value="Option" />
              <enumeration value="Type" />
              <enumeration value="Document" />
            </restriction>
          </simpleType>
        </attribute>        
      </extension>
    </complexContent>
  </complexType>
  
  <element name="Scheme" type="tns:SchemeType" />
  
  <complexType name = "SchemeListType">
      <sequence minOccurs = "0" maxOccurs = "unbounded">
        <element ref = "tns:Scheme"/>
      </sequence>
  </complexType>  	
  
  <complexType name="NodeType">
    <complexContent>
      <extension base="tns:BasicEntityType" >
        <attribute name="parent" type="xsd:IDREF" use="optional" />
      </extension>
    </complexContent>
  </complexType>
  
  <complexType name="ConceptType">
    <complexContent>
      <extension base="tns:BasicEntityType" >  
        <sequence>
          <element name="Attributes" type="tns:AttributeListType" use="optional" />
          <element name="ConceptRules" type="tns:ConceptRuleListType" use="optional" />
        </sequence>
        <attribute name="node" type="xsd:IDREF" use="required" />
      </extension>
    </complexContent>        
  </complexType> 
  
  <element name="Concept" type="tns:ConceptType" />
  
  <complexType name = "ConceptListType">
      <sequence minOccurs = "0" maxOccurs = "unbounded">
        <element ref = "tns:Concept"/>
      </sequence>
  </complexType>  	  
  
  <complexType name="AssociationType">
    <complexContent>
      <extension base="tns:BasicEntityType" >    
        <sequence>      
          <element name="AssociationRules" type="tns:AssociationRuleListType" use="required" />
        </sequence>
        <attribute name="node" type="xsd:IDREF" use="required" />
      </extension>
    </complexContent>        
  </complexType> 
  
  <element name="Association" type="tns:AssociationType" />
  
  <complexType name = "AssociationListType">
      <sequence minOccurs = "0" maxOccurs = "unbounded">
        <element ref = "tns:Association"/>
      </sequence>
  </complexType> 
  
  <complexType name="AssociationRuleType">
    <complexContent>
      <extension base="tns:BasicEntityType" >
        <sequence>
          <element name="reference" type="tns:InformationalReferenceType" use="optional" />
        </sequence>
        <attribute name="type" type="xsd:IDREF" use="required" />
        <attribute name="content" type="tns:LocalizedStringType" use="optional" />
        <attribute name="sourceType" type="xsd:IDREF" use="optional" />
        <attribute name="sourceAttribute" type="xsd:IDREF" use="optional" />
        <attribute name="sourceValues" type="tns:StringListType" use="optional" />
        <attribute name="targetType" type="xsd:IDREF" use="optional" />
        <attribute name="targetAttribute" type="xsd:IDREF" use="optional" />  
        <attribute name="targetValues" type="tns:StringListType" use="optional" />
      </extension>
    </complexContent>
  </complexType>
  
  <element name="AssociationRule" type="tns:AssociationRuleType" />  

  <complexType name = "AssociationRuleListType">
      <sequence minOccurs = "0" maxOccurs = "unbounded">
        <element ref = "tns:AssociationRule"/>
      </sequence>
  </complexType>  
  
  <complexType name="InformationalReferenceType">
    <complexContent>
      <extension base="tns:BasicEntityType" >
        <attribute name="document" type="xsd:IDREF" use="required" />
        <attribute name="type" type="xsd:IDREF" use="optional" />
        <attribute name="value" type="xsd:anyURI" use="optional" />
        <attribute name="version" type="tns:String16" use="required" />
        <attribute name="time" type="xsd:dateTime" use="optional" /> 
        <attribute name="author" type="tns:String256" use="optional" />
        <attribute name="title" type="tns:LocalizedStringType" use="optional" />
      </extension>
    </complexContent>
  </complexType>  
  
  <element name="InformationalReference" type="tns:InformationalReferenceType" />   
  
  <complexType name="ConceptRuleType">
    <complexContent>
      <extension base="tns:BasicEntityType" >
        <sequence minOccurs = "0" maxOccurs = "unbounded">
          <element name="reference" type="tns:InformationalReferenceType" use="optional" />
        </sequence>
        <attribute name="type" type="xsd:IDREF" use="required" />
        <attribute name="content" type="tns:LocalizedStringType" use="optional" />          
      </extension>
    </complexContent>
  </complexType>
  
  <element name="ConceptRule" type="tns:ConceptRuleType" />  

  <complexType name = "ConceptRuleListType">
      <sequence minOccurs = "0" maxOccurs = "unbounded">
        <element ref = "tns:ConceptRule"/>
      </sequence>
  </complexType>    

  <complexType name="AttributeType">
    <complexContent>
      <extension base="tns:BasicEntityType">  
        <attribute name="type" type="xsd:IDREF" use="optional" />
        <attribute name="option" type="xsd:IDREF" use="optional" />
        <attribute name="required" use="optional">
          <simpleType>
            <restriction base="NMTOKEN">
              <enumeration value="yes" />
              <enumeration value="no" />
            </restriction>
          </simpleType>
        </attribute>                
      </extension>
    </complexContent>
  </complexType>
  
  <element name="Attribute" type="tns:AttributeType" />
  
  <complexType name = "AttributeListType">
    <sequence minOccurs = "0" maxOccurs = "unbounded">
      <element ref = "tns:Attribute"/>
    </sequence>
  </complexType>   

  <complexType name="SemanticDescriptionType">
    <complexContent>
      <extension base="tns:BasicEntityType" >
        <sequence>
          <element name="reference" type="tns:InformationalReferenceType" use="optional" />
        </sequence>      
        <attribute name="type" type="xsd:IDREF" use="required" />
        <attribute name="content" type="tns:LocalizedStringType" use="optional" />
      </extension>
    </complexContent>
  </complexType>
  
  <element name="SemanticDescription" type="tns:SemanticDescriptionType" />
  
  <complexType name="ClassificationType">
    <complexContent>
      <extension base="tns:BasicEntityType">    
        <attribute name="node" type="xsd:IDREF" use="optional" />
        <attribute name="concept" type="xsd:IDREF" use="optional" />
      </extension>
    </complexContent>        
  </complexType>  
  
  <element name="Classification" type="tns:ClassificationType" />  

</schema>
