<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:parties="https://www.omg.org/spec/Parties/"
            xmlns:ppmn="https://www.omg.org/spec/PPMN/"
            xmlns:sce="https://www.omg.org/spec/SCE/"
            xmlns:xsd="http://www.w3.org/2001/XMLSchema"
            elementFormDefault="qualified"
            targetNamespace="https://www.omg.org/spec/Parties/">
   
   <xsd:import namespace="https://www.omg.org/spec/SCE/"
      schemaLocation="SCE.xsd"/>
   
   
<xsd:element name="ElementReference" type="parties:tElementReference"/>
   <xsd:complexType name="tElementReference">
      <xsd:attribute name="href" type="xsd:anyURI" use="required"/>
   </xsd:complexType>

<xsd:element name="PhysicalAddress" type="parties:tPhysicalAddress"/>
   <xsd:complexType name="tPhysicalAddress">
      <xsd:complexContent>
         <xsd:extension base="parties:tLocation">
            <xsd:sequence/>
         </xsd:extension>
      </xsd:complexContent>
   </xsd:complexType>

<xsd:element name="SpaceTime" type="parties:tSpaceTime"/>
   <xsd:complexType name="tSpaceTime">
      <xsd:complexContent>
         <xsd:extension base="parties:tLocation">
            <xsd:sequence>
               <xsd:element name="location" type="parties:tElementReference"/>
            </xsd:sequence>
            <xsd:attribute name="startTime" type="xsd:dateTime"/>
            <xsd:attribute name="endTime" type="xsd:dateTime"/>
         </xsd:extension>
      </xsd:complexContent>
   </xsd:complexType>

<xsd:element name="Location" type="parties:tLocation"/>
   <xsd:complexType name="tLocation">
      <xsd:complexContent>
         <xsd:extension base="sce:tTypedElement">
            <xsd:sequence>
               <xsd:element name="type" minOccurs="0" type="parties:tElementReference"/>
            </xsd:sequence>
            <xsd:attribute name="description" use="optional" type="xsd:string"/>
         </xsd:extension>
      </xsd:complexContent>
   </xsd:complexType>

<xsd:element name="Area" type="parties:tArea"/>
   <xsd:complexType name="tArea">
      <xsd:complexContent>
         <xsd:extension base="parties:tLocation">
            <xsd:sequence/>
         </xsd:extension>
      </xsd:complexContent>
   </xsd:complexType>

<xsd:element name="Path" type="parties:tPath"/>
   <xsd:complexType name="tPath">
      <xsd:complexContent>
         <xsd:extension base="parties:tLocation">
            <xsd:sequence>
               <xsd:element name="locations"
                            maxOccurs="unbounded"
                            type="parties:tElementReference"/>
            </xsd:sequence>
         </xsd:extension>
      </xsd:complexContent>
   </xsd:complexType>

<xsd:element name="GeospatialExtent" type="parties:tGeospatialExtent"/>
   <xsd:complexType name="tGeospatialExtent">
      <xsd:complexContent>
         <xsd:extension base="parties:tLocation">
            <xsd:sequence/>
         </xsd:extension>
      </xsd:complexContent>
   </xsd:complexType>

<xsd:element name="NetworkAddress" type="parties:tNetworkAddress"/>
   <xsd:complexType name="tNetworkAddress">
      <xsd:complexContent>
         <xsd:extension base="parties:tLocation">
            <xsd:sequence/>
         </xsd:extension>
      </xsd:complexContent>
   </xsd:complexType>

<xsd:element name="VolumeType" type="parties:tVolumeType"/>
   <xsd:complexType name="tVolumeType">
      <xsd:complexContent>
         <xsd:extension base="parties:tLocationType">
            <xsd:sequence/>
         </xsd:extension>
      </xsd:complexContent>
   </xsd:complexType>

<xsd:element name="SpaceTimeType" type="parties:tSpaceTimeType"/>
   <xsd:complexType name="tSpaceTimeType">
      <xsd:complexContent>
         <xsd:extension base="parties:tLocationType">
            <xsd:sequence/>
         </xsd:extension>
      </xsd:complexContent>
   </xsd:complexType>

<xsd:element name="LocationType" type="parties:tLocationType"/>
   <xsd:complexType name="tLocationType">
      <xsd:complexContent>
         <xsd:extension base="sce:tElementType">
            <xsd:sequence/>
         </xsd:extension>
      </xsd:complexContent>
   </xsd:complexType>

<xsd:element name="PointType" type="parties:tPointType"/>
   <xsd:complexType name="tPointType">
      <xsd:complexContent>
         <xsd:extension base="parties:tLocationType">
            <xsd:sequence/>
         </xsd:extension>
      </xsd:complexContent>
   </xsd:complexType>

<xsd:element name="AreaType" type="parties:tAreaType"/>
   <xsd:complexType name="tAreaType">
      <xsd:complexContent>
         <xsd:extension base="parties:tLocationType">
            <xsd:sequence/>
         </xsd:extension>
      </xsd:complexContent>
   </xsd:complexType>

<xsd:element name="PathType" type="parties:tPathType"/>
   <xsd:complexType name="tPathType">
      <xsd:complexContent>
         <xsd:extension base="parties:tLocationType">
            <xsd:sequence/>
         </xsd:extension>
      </xsd:complexContent>
   </xsd:complexType>

<xsd:element name="NetworkAddressType" type="parties:tNetworkAddressType"/>
   <xsd:complexType name="tNetworkAddressType">
      <xsd:complexContent>
         <xsd:extension base="parties:tLocationType">
            <xsd:sequence/>
         </xsd:extension>
      </xsd:complexContent>
   </xsd:complexType>

<xsd:element name="Position" type="parties:tPosition"/>
   <xsd:complexType name="tPosition">
      <xsd:complexContent>
         <xsd:extension base="parties:tParty">
            <xsd:sequence>
               <xsd:element name="positionAssignment"
                            maxOccurs="unbounded"
                            minOccurs="0"
                            type="parties:tElementReference"/>
            </xsd:sequence>
         </xsd:extension>
      </xsd:complexContent>
   </xsd:complexType>

<xsd:element name="PartyRelationship" type="parties:tPartyRelationship"/>
   <xsd:complexType name="tPartyRelationship">
      <xsd:complexContent>
         <xsd:extension base="sce:tElementRelationship">
            <xsd:sequence>
               <xsd:element name="type" minOccurs="0" type="parties:tElementReference"/>
            </xsd:sequence>
            <xsd:attribute name="startDate" use="optional" type="xsd:dateTime"/>
            <xsd:attribute name="endDate" use="optional" type="xsd:dateTime"/>
         </xsd:extension>
      </xsd:complexContent>
   </xsd:complexType>

<xsd:element name="Organization" type="parties:tOrganization"/>
   <xsd:complexType name="tOrganization">
      <xsd:complexContent>
         <xsd:extension base="parties:tParty">
            <xsd:sequence>
               <xsd:element name="childRelationships"
                            maxOccurs="unbounded"
                            minOccurs="0"
                            type="parties:tElementReference"/>
            </xsd:sequence>
         </xsd:extension>
      </xsd:complexContent>
   </xsd:complexType>

<xsd:element name="NonHumanAgent" type="parties:tNonHumanAgent"/>
   <xsd:complexType name="tNonHumanAgent">
      <xsd:complexContent>
         <xsd:extension base="parties:tParty">
            <xsd:sequence>
               <xsd:element name="kind" type="parties:tElementReference"/>
            </xsd:sequence>
         </xsd:extension>
      </xsd:complexContent>
   </xsd:complexType>

<xsd:element name="Delegation" type="parties:tDelegation"/>
   <xsd:complexType name="tDelegation">
      <xsd:complexContent>
         <xsd:extension base="parties:tPositionAssignment">
            <xsd:sequence>
               <xsd:element name="authority" minOccurs="0" type="parties:tElementReference"/>
            </xsd:sequence>
         </xsd:extension>
      </xsd:complexContent>
   </xsd:complexType>

<xsd:element name="Party" type="parties:tParty"/>
   <xsd:complexType name="tParty">
      <xsd:complexContent>
         <xsd:extension base="sce:tTypedElement">
            <xsd:sequence>
               <xsd:element name="location"
                            maxOccurs="unbounded"
                            minOccurs="0"
                            type="parties:tElementReference"/>
               <xsd:element name="primaryLocation"
                            minOccurs="0"
                            type="parties:tElementReference"/>
               <xsd:element name="assignment"
                            maxOccurs="unbounded"
                            minOccurs="0"
                            type="parties:tElementReference"/>
               <xsd:element name="type" minOccurs="0" type="parties:tElementReference"/>
               <xsd:element name="relationships"
                            maxOccurs="unbounded"
                            minOccurs="0"
                            type="parties:tElementReference"/>
               <xsd:element name="playsRole"
                            maxOccurs="unbounded"
                            minOccurs="0"
                            type="parties:tElementReference"/>
               <xsd:element name="parentRelationship"
                            minOccurs="0"
                            type="parties:tElementReference"/>
            </xsd:sequence>
            <xsd:attribute name="description" use="optional" type="xsd:string"/>
            <xsd:attribute name="startDate" use="optional" type="xsd:dateTime"/>
            <xsd:attribute name="endDate" use="optional" type="xsd:dateTime"/>
            <xsd:attribute name="officialName" use="optional" type="xsd:string"/>
            <xsd:attribute name="purpose" use="optional" type="xsd:string"/>
         </xsd:extension>
      </xsd:complexContent>
   </xsd:complexType>

<xsd:element name="OrganizationStructureRelationship"
                type="parties:tOrganizationStructureRelationship"/>
   <xsd:complexType name="tOrganizationStructureRelationship">
      <xsd:complexContent>
         <xsd:extension base="parties:tPartyRelationship">
            <xsd:sequence/>
         </xsd:extension>
      </xsd:complexContent>
   </xsd:complexType>

<xsd:element name="PositionAssignment" type="parties:tPositionAssignment"/>
   <xsd:complexType name="tPositionAssignment">
      <xsd:complexContent>
         <xsd:extension base="parties:tPartyRelationship">
            <xsd:sequence/>
            <xsd:attribute name="isUnique" type="xsd:boolean"/>
         </xsd:extension>
      </xsd:complexContent>
   </xsd:complexType>

<xsd:element name="PartyRole" type="parties:tPartyRole"/>
   <xsd:complexType name="tPartyRole">
      <xsd:complexContent>
         <xsd:extension base="parties:tParty">
            <xsd:sequence>
               <xsd:element name="party"
                            maxOccurs="unbounded"
                            minOccurs="0"
                            type="parties:tElementReference"/>
               <xsd:element name="context" minOccurs="0" type="parties:tElementReference"/>
            </xsd:sequence>
         </xsd:extension>
      </xsd:complexContent>
   </xsd:complexType>

<xsd:element name="Person" type="parties:tPerson"/>
   <xsd:complexType name="tPerson">
      <xsd:complexContent>
         <xsd:extension base="parties:tParty">
            <xsd:sequence/>
         </xsd:extension>
      </xsd:complexContent>
   </xsd:complexType>

<xsd:element name="PartyType" type="parties:tPartyType"/>
   <xsd:complexType name="tPartyType">
      <xsd:complexContent>
         <xsd:extension base="sce:tElementType">
            <xsd:sequence>
               <xsd:element name="relatedPartyType"
                            maxOccurs="unbounded"
                            minOccurs="0"
                            type="parties:tElementReference"/>
               <xsd:element name="partyRole"
                            maxOccurs="unbounded"
                            minOccurs="0"
                            type="parties:tElementReference"/>
               <xsd:element name="locationType"
                            maxOccurs="unbounded"
                            minOccurs="0"
                            type="parties:tElementReference"/>
            </xsd:sequence>
         </xsd:extension>
      </xsd:complexContent>
   </xsd:complexType>

<xsd:element name="PartyRelationshipType" type="parties:tPartyRelationshipType"/>
   <xsd:complexType name="tPartyRelationshipType">
      <xsd:complexContent>
         <xsd:extension base="sce:tElementRelationshipType">
            <xsd:sequence>
               <xsd:element name="source" type="parties:tElementReference"/>
               <xsd:element name="target" type="parties:tElementReference"/>
               <xsd:element name="relationshipKind" type="parties:tElementReference"/>
            </xsd:sequence>
         </xsd:extension>
      </xsd:complexContent>
   </xsd:complexType>

<xsd:element name="OrganizationType" type="parties:tOrganizationType"/>
   <xsd:complexType name="tOrganizationType">
      <xsd:complexContent>
         <xsd:extension base="parties:tPartyType">
            <xsd:sequence/>
         </xsd:extension>
      </xsd:complexContent>
   </xsd:complexType>

<xsd:element name="PositionType" type="parties:tPositionType"/>
   <xsd:complexType name="tPositionType">
      <xsd:complexContent>
         <xsd:extension base="parties:tPartyType">
            <xsd:sequence>
               <xsd:element name="assigneeType"
                            maxOccurs="unbounded"
                            type="parties:tElementReference"/>
            </xsd:sequence>
         </xsd:extension>
      </xsd:complexContent>
   </xsd:complexType>

<xsd:element name="IndividualType" type="parties:tIndividualType"/>
   <xsd:complexType name="tIndividualType">
      <xsd:complexContent>
         <xsd:extension base="parties:tPartyType">
            <xsd:sequence>
               <xsd:element name="kind" type="parties:tElementReference"/>
            </xsd:sequence>
         </xsd:extension>
      </xsd:complexContent>
   </xsd:complexType>

<xsd:element name="PositionAssignmentType" type="parties:tPositionAssignmentType"/>
   <xsd:complexType name="tPositionAssignmentType">
      <xsd:complexContent>
         <xsd:extension base="parties:tPartyRelationshipType">
            <xsd:sequence>
               <xsd:element name="kind" type="parties:tElementReference"/>
            </xsd:sequence>
         </xsd:extension>
      </xsd:complexContent>
   </xsd:complexType>

<xsd:element name="PartyRoleType" type="parties:tPartyRoleType"/>
   <xsd:complexType name="tPartyRoleType">
      <xsd:complexContent>
         <xsd:extension base="parties:tPartyType">
            <xsd:sequence>
               <xsd:element name="expectedPartyType"
                            maxOccurs="unbounded"
                            type="parties:tElementReference"/>
               <xsd:element name="expectedContext"
                            maxOccurs="unbounded"
                            minOccurs="0"
                            type="parties:tElementReference"/>
            </xsd:sequence>
         </xsd:extension>
      </xsd:complexContent>
   </xsd:complexType>

<xsd:element name="PartyRelationshipKind" type="parties:tPartyRelationshipKind"/>
   <xsd:complexType name="tPartyRelationshipKind">
      <xsd:complexContent>
         <xsd:extension base="sce:tRelationshipKind">
            <xsd:sequence/>
         </xsd:extension>
      </xsd:complexContent>
   </xsd:complexType>

<xsd:element name="IndividualKind" type="parties:tIndividualKind"/>
   <xsd:complexType name="tIndividualKind">
      <xsd:complexContent>
         <xsd:extension base="sce:tKind">
            <xsd:sequence/>
         </xsd:extension>
      </xsd:complexContent>
   </xsd:complexType>

<xsd:element name="NonHumanKind" type="parties:tNonHumanKind"/>
   <xsd:complexType name="tNonHumanKind">
      <xsd:complexContent>
         <xsd:extension base="parties:tIndividualKind">
            <xsd:sequence/>
         </xsd:extension>
      </xsd:complexContent>
   </xsd:complexType>

<xsd:element name="DelegationType" type="parties:tDelegationType"/>
   <xsd:complexType name="tDelegationType">
      <xsd:complexContent>
         <xsd:extension base="parties:tPositionAssignmentType">
            <xsd:sequence>
               <xsd:element name="authority" minOccurs="0" type="parties:tElementReference"/>
               <xsd:element name="delegatee" type="parties:tElementReference"/>
            </xsd:sequence>
         </xsd:extension>
      </xsd:complexContent>
   </xsd:complexType>

<xsd:element name="DateTime" type="parties:tDateTime"/>
   <xsd:complexType name="tDateTime">
      <xsd:sequence/>
   </xsd:complexType>

<xsd:element name="PartyModel" type="parties:tPartyModel"/>
   <xsd:complexType name="tPartyModel">
      <xsd:complexContent>
         <xsd:extension base="sce:tModel">
            <xsd:sequence>
               <xsd:element name="partyDefinitions"
                            maxOccurs="unbounded"
                            minOccurs="0"
                            type="parties:tPartyDefinitions"/>
               <xsd:element name="parties"
                            maxOccurs="unbounded"
                            minOccurs="0"
                            type="parties:tPartyInstances"/>
               <xsd:element name="partiesVocabulary"
                            maxOccurs="unbounded"
                            minOccurs="0"
                            type="parties:tPartyKindSet"/>
            </xsd:sequence>
         </xsd:extension>
      </xsd:complexContent>
   </xsd:complexType>

<xsd:element name="PartyInstances" type="parties:tPartyInstances"/>
   <xsd:complexType name="tPartyInstances">
      <xsd:complexContent>
         <xsd:extension base="parties:tPackage">
            <xsd:sequence>
               <xsd:element name="definitions"
                            maxOccurs="unbounded"
                            minOccurs="0"
                            type="parties:tElementReference"/>
               <xsd:element name="parties"
                            maxOccurs="unbounded"
                            minOccurs="0"
                            type="parties:tParty"/>
               <xsd:element name="locations"
                            maxOccurs="unbounded"
                            minOccurs="0"
                            type="parties:tLocation"/>
               <xsd:element name="partyRelationships"
                            maxOccurs="unbounded"
                            minOccurs="0"
                            type="parties:tPartyRelationship"/>
            </xsd:sequence>
         </xsd:extension>
      </xsd:complexContent>
   </xsd:complexType>

<xsd:element name="PartyDefinitions" type="parties:tPartyDefinitions"/>
   <xsd:complexType name="tPartyDefinitions">
      <xsd:complexContent>
         <xsd:extension base="parties:tPackage">
            <xsd:sequence>
               <xsd:element name="partyTypes"
                            maxOccurs="unbounded"
                            minOccurs="0"
                            type="parties:tPartyType"/>
               <xsd:element name="partyRelationshipTypes"
                            maxOccurs="unbounded"
                            minOccurs="0"
                            type="parties:tPartyRelationshipType"/>
               <xsd:element name="locationTypes"
                            maxOccurs="unbounded"
                            minOccurs="0"
                            type="parties:tLocationType"/>
            </xsd:sequence>
         </xsd:extension>
      </xsd:complexContent>
   </xsd:complexType>

<xsd:element name="Package" type="parties:tPackage"/>
   <xsd:complexType name="tPackage">
      <xsd:complexContent>
         <xsd:extension base="sce:tPackage">
            <xsd:sequence/>
         </xsd:extension>
      </xsd:complexContent>
   </xsd:complexType>

<xsd:element name="PartyKindSet" type="parties:tPartyKindSet"/>
   <xsd:complexType name="tPartyKindSet">
      <xsd:complexContent>
         <xsd:extension base="sce:tKindSet">
            <xsd:sequence/>
         </xsd:extension>
      </xsd:complexContent>
   </xsd:complexType>

<xsd:element name="IndividualKindSet" type="parties:tIndividualKindSet"/>
   <xsd:complexType name="tIndividualKindSet">
      <xsd:complexContent>
         <xsd:extension base="parties:tPartyKindSet">
            <xsd:sequence>
               <xsd:element name="term"
                            maxOccurs="unbounded"
                            minOccurs="0"
                            type="parties:tIndividualKind"/>
            </xsd:sequence>
         </xsd:extension>
      </xsd:complexContent>
   </xsd:complexType>

<xsd:element name="PartyRelationshipKindSet"
                type="parties:tPartyRelationshipKindSet"/>
   <xsd:complexType name="tPartyRelationshipKindSet">
      <xsd:complexContent>
         <xsd:extension base="parties:tPartyKindSet">
            <xsd:sequence>
               <xsd:element name="term"
                            maxOccurs="unbounded"
                            minOccurs="0"
                            type="parties:tPartyRelationshipKind"/>
            </xsd:sequence>
         </xsd:extension>
      </xsd:complexContent>
   </xsd:complexType>

</xsd:schema>
