<?xml version="1.0" encoding="UTF-8"?>
<xs:schema targetNamespace="http://www.oasis-open.org/committees/xacml/docs/draft-xacml-schema-policy-10.xsd" xmlns:saml="http://www.oasis-open.org/committees/security/docs/draft-sstc-schema-assertion-24.xsd" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xacml="http://www.oasis-open.org/committees/xacml/docs/draft-xacml-schema-policy-10.xsd" elementFormDefault="qualified" attributeFormDefault="unqualified">
	<xs:import namespace="http://www.oasis-open.org/committees/security/docs/draft-sstc-schema-assertion-24.xsd" schemaLocation="D:\My Documents\Standards\Xacml\v10 schema\draft-sstc-schema-assertion-24.xsd"/>
	<xs:element name="policyStatement" type="xacml:PolicyStatementType"/>
	<xs:element name="ruleStatement" type="xacml:RuleStatementType"/>
	<xs:complexType name="PolicyStatementType">
		<xs:complexContent>
			<xs:extension base="saml:StatementAbstractType">
				<xs:sequence>
					<xs:element name="comment" type="xs:string" minOccurs="0"/>
					<xs:element name="target" type="xacml:TargetType"/>
					<xs:element name="rule" type="xacml:RuleRefType" maxOccurs="unbounded"/>
				</xs:sequence>
				<xs:attribute name="policyId" type="xs:anyURI" use="required"/>
				<xs:attribute name="policyName" type="xs:string" use="optional"/>
				<xs:attribute name="metaPolicyRef" type="xs:anyURI" use="required"/>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="RuleStatementType">
		<xs:complexContent>
			<xs:extension base="saml:StatementAbstractType">
				<xs:sequence>
					<xs:element name="comment" type="xs:string" minOccurs="0"/>
					<xs:element name="target" type="xacml:TargetType"/>
					<xs:element name="effect" type="xacml:EffectType"/>
					<xs:element name="condition" type="xacml:PredicateExpressionType" minOccurs="0"/>
				</xs:sequence>
				<xs:attribute name="ruleId" type="xs:anyURI" use="required"/>
				<xs:attribute name="ruleName" type="xs:string" use="optional"/>
				<xs:attribute name="metaPolicyRef" type="xs:anyURI" use="required"/>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="TargetType">
		<xs:sequence>
			<xs:element name="subjects" type="xacml:SubjectsType"/>
			<xs:element name="resources" type="xacml:ResourcesType"/>
			<xs:element name="actions" type="xacml:ActionsType"/>
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="SubjectsType">
		<xs:sequence maxOccurs="unbounded">
			<xs:element ref="saml:Attribute"/>
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="ResourcesType">
		<xs:sequence maxOccurs="unbounded">
			<xs:element ref="saml:Attribute"/>
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="ActionsType">
		<xs:sequence>
			<xs:element ref="saml:Actions"/>
		</xs:sequence>
	</xs:complexType>
	<xs:simpleType name="EffectType">
		<xs:restriction base="xs:string">
			<xs:enumeration value="permitIf"/>
			<xs:enumeration value="permitOnlyIf"/>
			<xs:enumeration value="denyIf"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:complexType name="PredicateExpressionType">
		<xs:choice>
			<xs:element ref="xacml:predicateExpression"/>
			<xs:element ref="xacml:predicate"/>
		</xs:choice>
	</xs:complexType>
	<xs:element name="predicateExpression" type="xacml:PredicateExpressionAbstractType" abstract="true"/>
	<xs:complexType name="PredicateExpressionAbstractType"/>
	<xs:element name="and" type="xacml:AndType" substitutionGroup="xacml:predicateExpression"/>
	<xs:element name="or" type="xacml:OrType" substitutionGroup="xacml:predicateExpression"/>
	<xs:element name="orderedOr" type="xacml:OrderedOrType" substitutionGroup="xacml:predicateExpression"/>
	<xs:element name="nOf" type="xacml:NOfType" substitutionGroup="xacml:predicateExpression"/>
	<xs:element name="not" type="xacml:NotType" substitutionGroup="xacml:predicateExpression"/>
	<xs:complexType name="AndType">
		<xs:sequence minOccurs="0" maxOccurs="unbounded">
			<xs:choice>
				<xs:element ref="xacml:predicateExpression"/>
				<xs:element ref="xacml:predicate"/>
			</xs:choice>
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="OrType">
		<xs:sequence minOccurs="0" maxOccurs="unbounded">
			<xs:choice>
				<xs:element ref="xacml:predicateExpression"/>
				<xs:element ref="xacml:predicate"/>
			</xs:choice>
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="OrderedOrType">
		<xs:sequence minOccurs="0" maxOccurs="unbounded">
			<xs:choice>
				<xs:element ref="xacml:predicateExpression"/>
				<xs:element ref="xacml:predicate"/>
			</xs:choice>
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="NOfType">
		<xs:sequence minOccurs="0" maxOccurs="unbounded">
			<xs:choice>
				<xs:element ref="xacml:predicateExpression"/>
				<xs:element ref="xacml:predicate"/>
			</xs:choice>
		</xs:sequence>
		<xs:attribute name="quorum" type="xs:positiveInteger"/>
	</xs:complexType>
	<xs:complexType name="NotType">
		<xs:choice>
			<xs:element ref="xacml:predicateExpression" minOccurs="0"/>
			<xs:element ref="xacml:predicate" minOccurs="0"/>
		</xs:choice>
	</xs:complexType>
	<xs:element name="predicate" type="xacml:PredicateAbstractType" abstract="true"/>
	<!--This is an XACML extensibility point.  New predicates may be added in the
		substitution group of "predicate"-->
	<xs:complexType name="PredicateAbstractType"/>
	<xs:element name="present" type="xacml:PresentType" substitutionGroup="xacml:predicate"/>
	<xs:element name="equal" type="xacml:CompareType" substitutionGroup="xacml:predicate"/>
	<xs:element name="greaterOrEqual" type="xacml:CompareType" substitutionGroup="xacml:predicate"/>
	<xs:element name="lessOrEqual" type="xacml:CompareType" substitutionGroup="xacml:predicate"/>
	<xs:element name="subset" type="xacml:CompareType" substitutionGroup="xacml:predicate"/>
	<xs:element name="superset" type="xacml:CompareType" substitutionGroup="xacml:predicate"/>
	<xs:element name="patternMatch" type="xacml:CompareType" substitutionGroup="xacml:predicate"/>
	<xs:element name="nonNullSetIntersection" type="xacml:CompareType" substitutionGroup="xacml:predicate"/>
	<xs:complexType name="PresentType">
		<xs:complexContent>
			<xs:extension base="xacml:PredicateAbstractType">
				<xs:sequence>
					<xs:element ref="saml:AttributeDesignator"/>
				</xs:sequence>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="CompareType">
		<xs:complexContent>
			<xs:extension base="xacml:PredicateAbstractType">
				<xs:sequence>
					<xs:element ref="saml:AttributeDesignator"/>
					<xs:choice>
						<xs:element ref="saml:AttributeDesignator"/>
						<xs:element ref="saml:Attribute"/>
					</xs:choice>
				</xs:sequence>
			</xs:extension>
		</xs:complexContent>
		<!-- XML operands in "set" operations MUST be of type xs:list -->
		<!-- XML operands in "inequality" operations MUST contain an xsi:type attribute for which
	XACML defines a comparison algorithm -->
	</xs:complexType>
	<xs:complexType name="RuleRefType">
		<xs:attribute name="ruleID" type="xs:anyURI"/>
		<xs:attribute name="authority" type="xs:anyURI"/>
	</xs:complexType>
</xs:schema>

