<xs:schema targetNamespace="urn:oasis:names:tc:xacml:0.15g:context" xmlns:xacml="urn:oasis:names:tc:xacml:0.15g:policy" xmlns:xacmlContext="urn:oasis:names:tc:xacml:0.15g:context" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
	<xs:import namespace="urn:oasis:names:tc:xacml:0.15g:policy" schemaLocation="D:\My Documents\Standards\Xacml\v15\draft-xacml-schema-policy-15g.xsd"/>
	<xs:import namespace="http://www.w3.org/2000/09/xmldsig#" schemaLocation="D:\My Documents\Standards\Xacml\v15\xmldsig-core-schema.xsd"/>
	<!-- -->
	<xs:element name="Request" type="xacmlContext:RequestType"/>
	<xs:element name="Response" type="xacmlContext:ResponseType"/>
	<!-- -->
	<xs:complexType name="RequestType">
		<xs:sequence>
			<xs:element name="Subject" type="xacmlContext:SubjectType" maxOccurs="unbounded"/>
			<xs:element name="Resource" type="xacmlContext:ResourceType"/>
			<xs:element name="Action" type="xs:anyURI"/>
			<xs:element name="Other" type="xacmlContext:OtherType" minOccurs="0" maxOccurs="unbounded"/>
		</xs:sequence>
	</xs:complexType>
	<!-- -->
	<xs:complexType name="ResponseType">
		<xs:sequence>
			<xs:element name="Result" type="xacmlContext:ResultType" maxOccurs="unbounded"/>
		</xs:sequence>
	</xs:complexType>
	<!-- -->
	<xs:complexType name="ResultType">
		<xs:sequence>
			<xs:element name="Decision" type="xacml:DecisionType"/>
			<xs:element name="Resource" type="xacmlContext:ResourceSpecifierType" minOccurs="0"/>
			<xs:element name="Obligations" type="xacml:ObligationsType" minOccurs="0"/>
			<xs:element name="Advice" type="xacmlContext:AdviceType" minOccurs="0" maxOccurs="unbounded"/>
		</xs:sequence>
	</xs:complexType>
	<!-- -->
	<xs:complexType name="SubjectType">
		<xs:sequence>
			<xs:choice>
				<xs:element name="SubjectId" type="xacmlContext:SubjectIdType" minOccurs="0"/>
				<xs:element ref="ds:KeyInfo"/>
			</xs:choice>
			<xs:element name="SubjectAttribute" type="xacmlContext:AttributeType" minOccurs="0" maxOccurs="unbounded"/>
			<xs:element name="AuthenticationInfo" type="xacmlContext:AuthenticationInfoType" minOccurs="0"/>
		</xs:sequence>
		<xs:attribute name="SubjectCategory" type="xs:anyURI" default="urn:oasis:names:tc:xacml:identifiers:AccessSubject"/>
	</xs:complexType>
	<!-- -->
	<xs:complexType name="SubjectIdType">
		<xs:simpleContent>
			<xs:extension base="xs:string">
				<xs:attribute name="Format" type="xs:anyURI" use="required"/>
				<xs:attribute name="NameQualifier" type="xs:string" use="optional"/>
			</xs:extension>
		</xs:simpleContent>
	</xs:complexType>
	<!-- -->
	<xs:complexType name="AuthenticationInfoType">
		<xs:attribute name="Method" type="xs:anyURI" use="optional"/>
		<xs:attribute name="Instant" type="xs:dateTime" use="optional"/>
	</xs:complexType>
	<!-- -->
	<xs:complexType name="AttributeType">
		<xs:sequence>
			<xs:element name="AttributeMetaData" type="xacmlContext:AttributeMetaDataType"/>
			<xs:element ref="xacml:Attribute" maxOccurs="unbounded"/>
		</xs:sequence>
	</xs:complexType>
	<!-- -->
	<xs:complexType name="AttributeMetaDataType">
		<xs:attribute name="Name" type="xs:string" use="required"/>
		<xs:attribute name="Namespace" type="xs:anyURI" use="required"/>
		<xs:attribute name="Issuer" type="xs:anyURI" use="optional"/>
		<xs:attribute name="IssueInstant" type="xs:dateTime" use="optional"/>
	</xs:complexType>
	<!-- -->
	<xs:complexType name="ResourceType">
		<xs:sequence>
			<xs:element name="ResourceSpecifier" type="xacmlContext:ResourceSpecifierType" minOccurs="0"/>
			<xs:element name="ResourceContent" type="xacmlContext:ResourceContentType" minOccurs="0"/>
			<xs:element name="ResourceAttribute" type="xacmlContext:AttributeType" minOccurs="0" maxOccurs="unbounded"/>
		</xs:sequence>
	</xs:complexType>
	<!-- -->
	<!-- ContextOther is used for attributes associated with
         entities that are not involved in making the access
         request -->
	<!-- -->
	<xs:complexType name="ResourceSpecifierType">
		<xs:attribute name="Format" type="xs:anyURI" use="optional"/>
		<xs:attribute name="Scope" type="xacmlContext:SpecifierScopeType" use="optional"/>
		<xs:attribute name="ResourceURI" type="xs:anyURI" use="required"/>
	</xs:complexType>
	<!-- -->
	<xs:simpleType name="SpecifierScopeType">
		<xs:restriction base="xs:string">
			<xs:enumeration value="immediate"/>
			<xs:enumeration value="children"/>
			<xs:enumeration value="descendants"/>
		</xs:restriction>
	</xs:simpleType>
	<!-- -->
	<xs:complexType name="ResourceContentType">
		<xs:sequence>
			<xs:any namespace="##other" processContents="lax"/>
		</xs:sequence>
	</xs:complexType>
	<!-- -->
	<xs:complexType name="OtherType">
		<xs:sequence>
			<xs:element name="OtherAttribute" type="xacmlContext:AttributeType" maxOccurs="unbounded"/>
		</xs:sequence>
	</xs:complexType>
	<!-- -->
	<xs:complexType name="AdviceType">
		<xs:sequence>
			<xs:any minOccurs="0" maxOccurs="unbounded"/>
		</xs:sequence>
		<xs:attribute name="AdviceName" type="xs:anyURI"/>
	</xs:complexType>
</xs:schema>

