<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:bdc="http://schemas.microsoft.com/office/2006/03/BusinessDataCatalog" targetNamespace="http://schemas.microsoft.com/office/2006/03/BusinessDataCatalog" elementFormDefault="qualified">
  <xs:element name="LobSystem" type="bdc:LobSystem"/>
  <xs:complexType name="MetadataObject" abstract="true">
    <xs:sequence>
      <xs:element name="LocalizedDisplayNames" type="bdc:LocalizedDisplayNames" minOccurs="0" maxOccurs="1"/>
      <xs:element name="Properties" type="bdc:Properties" minOccurs="0" maxOccurs="1"/>
    </xs:sequence>
    <xs:attribute name="Name" type="xs:string" use="required"/>
    <xs:attribute name="DefaultDisplayName" type="xs:string"/>
    <xs:attribute name="IsCached" type="xs:boolean"/>
  </xs:complexType>
  <xs:complexType name="IndividuallySecurableMetadataObject" abstract="true">
    <xs:complexContent>
      <xs:extension base="bdc:MetadataObject">
        <xs:sequence>
          <xs:element name="AccessControlList" type="bdc:AccessControlList" minOccurs="0" maxOccurs="1"/>
        </xs:sequence>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>
  <xs:complexType name="LocalizedDisplayNames">
    <xs:sequence>
      <xs:element name="LocalizedDisplayName" type="bdc:LocalizedDisplayName" minOccurs="1" maxOccurs="unbounded"/>
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="LocalizedDisplayName" mixed="true">
    <xs:attribute name="LCID" type="xs:integer" use="required"/>
  </xs:complexType>
  <xs:complexType name="LobSystem">
    <xs:complexContent>
      <xs:extension base="bdc:IndividuallySecurableMetadataObject">
        <xs:sequence>
          <xs:element name="LobSystemInstances" type="bdc:LobSystemInstances" minOccurs="0" maxOccurs="1"/>
          <xs:element name="Entities" type="bdc:Entities" minOccurs="0" maxOccurs="1"/>
          <xs:element name="Associations" type="bdc:Associations" minOccurs="0" maxOccurs="1"/>
        </xs:sequence>
        <xs:attribute name="Type" type="bdc:LobSystemType"/>
        <xs:attribute name="SystemUtility" type="xs:string" use="optional"/>
        <xs:attribute name="ConnectionManager" type="xs:string" use="optional"/>
        <xs:attribute name="EntityInstance" type="xs:string" use="optional"/>
        <xs:attribute name="Version" type="xs:string" use="required"/>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>
  <xs:simpleType name="LobSystemType">
    <xs:restriction base="xs:string">
      <xs:enumeration value="Database"/>
      <xs:enumeration value="WebService"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:complexType name="LobSystemInstances">
    <xs:sequence>
      <xs:element name="LobSystemInstance" type="bdc:LobSystemInstance" minOccurs="1" maxOccurs="2"/>
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="LobSystemInstance">
    <xs:complexContent>
      <xs:extension base="bdc:MetadataObject"/>
    </xs:complexContent>
  </xs:complexType>
  <xs:complexType name="Entities">
    <xs:sequence>
      <xs:element name="Entity" type="bdc:Entity" minOccurs="1" maxOccurs="unbounded"/>
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name ="Entity">
    <xs:complexContent>
      <xs:extension base="bdc:IndividuallySecurableMetadataObject">
        <xs:sequence>
          <xs:element name="Identifiers" type="bdc:Identifiers" minOccurs="0"/>
          <xs:element name="Methods" type="bdc:Methods" minOccurs="0"/>
          <xs:element name="Actions" type="bdc:Actions" minOccurs="0"/>
        </xs:sequence>
        <xs:attribute name="EstimatedInstanceCount" type="bdc:InstanceCount" default="10000"/>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>
  <xs:complexType name="Identifiers">
    <xs:sequence>
      <xs:element name="Identifier" type="bdc:Identifier" minOccurs="1" maxOccurs="unbounded"/>
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="Identifier">
    <xs:complexContent>
      <xs:extension base="bdc:MetadataObject">
        <xs:attribute name="TypeName" type="xs:string" use="required"/>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>
  <xs:complexType name="Methods">
    <xs:sequence>
      <xs:element name="Method" type="bdc:Method" minOccurs="1" maxOccurs="unbounded"/>
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="Method">
    <xs:complexContent>
      <xs:extension base="bdc:IndividuallySecurableMetadataObject">
        <xs:sequence>
          <xs:element name="FilterDescriptors" type="bdc:FilterDescriptors" minOccurs="0" maxOccurs="1"/>
          <xs:element name="Parameters" type="bdc:Parameters"	minOccurs="0" maxOccurs="1"/>
          <xs:element name ="MethodInstances" type="bdc:MethodInstances" minOccurs="0" maxOccurs="1"/>
        </xs:sequence>
        <xs:attribute name="IsStatic" type="xs:boolean" default="true"/>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>
  <xs:complexType name="FilterDescriptors">
    <xs:sequence>
      <xs:element name="FilterDescriptor" type="bdc:FilterDescriptor" minOccurs="1" maxOccurs="unbounded"/>
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="FilterDescriptor">
    <xs:complexContent>
      <xs:extension base="bdc:MetadataObject">
        <xs:attribute name="Type" type="bdc:FilterDescriptorType" use="required"/>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>
  <xs:simpleType name="FilterDescriptorType">
    <xs:restriction base="xs:string">
      <xs:enumeration value="Limit"/>
      <xs:enumeration value="Wildcard"/>
      <xs:enumeration value="UserContext"/>
      <xs:enumeration value="Username"/>
      <xs:enumeration value="Password"/>
      <xs:enumeration value="LastId"/>
      <xs:enumeration value="SsoTicket"/>
      <xs:enumeration value="UserProfile"/>
      <xs:enumeration value="Comparison"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:complexType name="MethodInstances">
    <xs:sequence>
      <xs:element name="MethodInstance" type="bdc:MethodInstance" minOccurs="1" maxOccurs="unbounded"/>
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="MethodInstance">
    <xs:complexContent>
      <xs:extension base="bdc:IndividuallySecurableMetadataObject">
        <xs:attribute name="Type" type="bdc:MethodInstanceType" use="required"/>
        <xs:attribute name="ReturnParameterName" type="xs:string" use="required"/>
        <xs:attribute name="ReturnTypeDescriptorName" type="xs:string" use="optional"/>
        <xs:attribute name="ReturnTypeDescriptorLevel" type="bdc:ReturnTypeDescriptorLevel" use="optional"/>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>
  <xs:simpleType name="MethodInstanceType">
    <xs:restriction base="xs:string">
      <xs:enumeration value="Finder"/>
      <xs:enumeration value="SpecificFinder"/>
      <xs:enumeration value="ViewAccessor"/>
      <xs:enumeration value="GenericInvoker"/>
      <xs:enumeration value="IdEnumerator"/>
      <xs:enumeration value="Scalar"/>
      <xs:enumeration value="AccessChecker"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:complexType name="Parameters">
    <xs:sequence>
      <xs:element name="Parameter" type="bdc:Parameter" minOccurs="1" maxOccurs="unbounded"/>
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="Parameter">
    <xs:complexContent>
      <xs:extension base="bdc:MetadataObject">
        <xs:sequence>
          <xs:element name="TypeDescriptor" type="bdc:TypeDescriptor"/>
        </xs:sequence>
        <xs:attribute name="Direction" type="bdc:ParameterDirection" use="required"/>
        <xs:attribute name="TypeReflectorTypeName" type="xs:string" use="optional"/>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>
  <xs:simpleType name="ParameterDirection">
    <xs:restriction base="xs:string">
      <xs:enumeration value="In"/>
      <xs:enumeration value="Out"/>
      <xs:enumeration value="InOut"/>
      <xs:enumeration value="Return"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:complexType name="TypeDescriptor">
    <xs:complexContent>
      <xs:extension base="bdc:MetadataObject">
        <xs:sequence>
          <xs:element name="DefaultValues" type="bdc:DefaultValues" minOccurs="0" />
          <xs:element name="TypeDescriptors" type="bdc:TypeDescriptors" minOccurs="0"/>
        </xs:sequence>
        <xs:attribute name="TypeName" type="xs:string" use="required"/>
        <xs:attribute name="IdentifierEntityName" type="xs:string" use="optional"/>
        <xs:attribute name="IdentifierName" type="xs:string" use="optional"/>
        <xs:attribute name="AssociatedFilter" type="xs:string" use="optional"/>
        <xs:attribute name="IsCollection" type="xs:boolean" default="false"/>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>
  <xs:complexType name="DefaultValues">
    <xs:sequence>
      <xs:element name="DefaultValue" type="bdc:DefaultValue" minOccurs="1" maxOccurs="unbounded"/>
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="DefaultValue" mixed="true">
    <xs:attribute name="MethodInstanceName" type="xs:string" use="required"/>
    <xs:attribute name="Type" type="xs:string" use="required"/>
  </xs:complexType>
  <xs:complexType name="TypeDescriptors">
    <xs:sequence>
      <xs:element name="TypeDescriptor" type="bdc:TypeDescriptor" minOccurs="1" maxOccurs="unbounded"/>
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="Actions">
    <xs:sequence>
      <xs:element name="Action" type="bdc:Action" minOccurs="1" maxOccurs="unbounded"/>
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="Action">
    <xs:complexContent>
      <xs:extension base="bdc:MetadataObject">
        <xs:sequence>
          <xs:element name="ActionParameters" type="bdc:ActionParameters" minOccurs="0"/>
        </xs:sequence>
        <xs:attribute name="Position" type="bdc:ActionPosition" use="required"/>
        <xs:attribute name="IsOpenedInNewWindow" type="xs:boolean" default="false"/>
        <xs:attribute name="Url" type="xs:string" use="required"/>
        <xs:attribute name="ImageUrl" type="xs:string"/>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>
  <xs:complexType name="ActionParameters">
    <xs:sequence>
      <xs:element name="ActionParameter" type="bdc:ActionParameter" minOccurs="1" maxOccurs="unbounded"/>
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="ActionParameter">
    <xs:complexContent>
      <xs:extension base="bdc:MetadataObject">
        <xs:attribute name="Index" type="bdc:Ordinal" use="required"/>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>
  <xs:complexType name="Associations">
    <xs:sequence>
      <xs:element name="Association" type="bdc:Association" minOccurs="1" maxOccurs="unbounded"/>
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="Association">
    <xs:complexContent>
      <xs:extension base="bdc:IndividuallySecurableMetadataObject">
        <xs:sequence>
          <xs:element name="SourceEntity" type="bdc:SourceEntity" minOccurs="1" maxOccurs="unbounded"/>
          <xs:element name="DestinationEntity" type="bdc:DestinationEntity" minOccurs="1" maxOccurs="1"/>
        </xs:sequence>
        <xs:attribute name="AssociationMethodEntityName" type="xs:string" use="required"/>
        <xs:attribute name="AssociationMethodName" type="xs:string" use="required"/>
        <xs:attribute name="AssociationMethodReturnParameterName" type="xs:string" use="required"/>
        <xs:attribute name="AssociationMethodReturnTypeDescriptorName" type="xs:string" use="optional"/>
        <xs:attribute name="AssociationMethodReturnTypeDescriptorLevel" type="bdc:ReturnTypeDescriptorLevel" use="optional"/>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>
  <xs:complexType name="SourceEntity">
    <xs:attribute name="Name" type="xs:string" use="required"/>
  </xs:complexType>
  <xs:complexType name="DestinationEntity">
    <xs:attribute name="Name" type="xs:string" use="required"/>
  </xs:complexType>
  <xs:complexType name="Property" mixed="true">
    <xs:attribute name="Name" type="xs:string" use="required"/>
    <xs:attribute name="Type" type="xs:string" use="required"/>
  </xs:complexType>
  <xs:complexType name="Properties">
    <xs:sequence>
      <xs:element name="Property" type="bdc:Property" minOccurs="1" maxOccurs="unbounded"/>
    </xs:sequence>
  </xs:complexType>
  <xs:simpleType name="Ordinal">
    <xs:restriction base="xs:integer">
      <xs:minInclusive value="0"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="InstanceCount">
    <xs:restriction base="xs:integer">
      <xs:minInclusive value="0"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="ReturnTypeDescriptorLevel">
    <xs:restriction base="xs:integer">
      <xs:minInclusive value="0"/>
      <xs:maxInclusive value="9"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="ActionPosition">
    <xs:restriction base="xs:integer">
      <xs:minInclusive value="1"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:complexType name="AccessControlList">
    <xs:sequence>
      <xs:element name="AccessControlEntry" type="bdc:AccessControlEntry" minOccurs="1" maxOccurs="unbounded"/>
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="AccessControlEntry">
    <xs:sequence>
      <xs:element name="Right" type="bdc:Right" minOccurs="1" maxOccurs="unbounded"/>
    </xs:sequence>
    <xs:attribute name="Principal" type="xs:string" use="required"/>
  </xs:complexType>
  <xs:complexType name="Right">
    <xs:attribute name="BdcRight" type="bdc:BdcRightName" use="required"/>
  </xs:complexType>
  <xs:simpleType name="BdcRightName">
    <xs:restriction base="xs:string">
      <xs:enumeration value="None"/>
      <xs:enumeration value="Execute"/>
      <xs:enumeration value="Edit"/>
      <xs:enumeration value="SetPermissions"/>
      <xs:enumeration value="SelectableInClients"/>
    </xs:restriction>
  </xs:simpleType>
</xs:schema>

