<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns="http://www.pwg.org/schemas/2012/12/sm" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:pwg="http://www.pwg.org/schemas/2012/12/sm" xmlns:wsse="http://schemas.xmlsoap.org/ws/2002/04/secext" xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion" xmlns:xenc="http://www.w3.org/2001/04/xmlenc#" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" targetNamespace="http://www.pwg.org/schemas/2012/12/sm" elementFormDefault="qualified" attributeFormDefault="qualified" version="1.184">
	<xs:include schemaLocation="PwgCommon.xsd"/>
	<xs:import namespace="http://www.w3.org/2001/04/xmlenc#" schemaLocation="xenc-schema.xsd"/>
	<xs:import namespace="http://www.w3.org/2000/09/xmldsig#" schemaLocation="xmldsig-core-schema.xsd"/>
	<xs:import namespace="urn:oasis:names:tc:SAML:2.0:assertion" schemaLocation="saml-schema-assertion-2.0.xsd"/>
	<!-- 
	<xs:import namespace="urn:oasis:names:tc:SAML:2.0:assertion" schemaLocation="saml-schema-assertion-2.0.xsd"/>
<xs:import namespace="http://schemas.xmlsoap.org/ws/2002/04/secext" schemaLocation="http://schemas.xmlsoap.org/ws/2002/04/secext/secext.xsd"/> -->
	<!--05/26/11  PJZ Added Joe Murdock's ids-security-20110402.xsd-->
	<xs:annotation>
		<xs:documentation xml:lang="en">
   PWG Semantic Model v2   

Copyright 2002-2011, IEEE Industry Standards and Technology Organization/PWG - MFD Working Group. 
All rights reserved  

   Editors:  Peter Zehler, Ira McDonald, Joe Murdock 
</xs:documentation>
	</xs:annotation>
	<!--                                 -->
	<!---->
	<xs:element name="SecurityTicket" type="SecurityTicketType"/>
	<xs:complexType name="SecurityTicketType">
		<xs:annotation>
			<xs:documentation>Core security ticket defintion for PWG services </xs:documentation>
		</xs:annotation>
		<xs:sequence>
			<xs:element name="Signature" type="ds:SignatureType" minOccurs="1" maxOccurs="1"/>
			<xs:element name="SecurityId" type="SecurityIdentificationType"/>
			<xs:element name="SecurityAttributes" type="SecurityAttributesType"/>
			<xs:element name="RequestedSecurityAttributes" type="SecurityAttributesType"/>
			<xs:element name="ProvidedSecurityAttributes" type="SecurityAttributesType"/>
			<xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="SecurityIdentificationType">
		<xs:annotation>
			<xs:documentation>
            Generic container typef or identification
            </xs:documentation>
		</xs:annotation>
		<xs:sequence>
			<xs:element name="UserIdentification" type="UserIdentificationType" minOccurs="0"/>
			<xs:element name="OrganizationIdentification" type="OrganizationIdentificationType" minOccurs="0"/>
			<xs:element name="DeviceIdentification" type="DeviceIdentificationType" minOccurs="0"/>
			<xs:element name="ServiceIdentification" type="ServiceIdentificationType" minOccurs="0"/>
			<xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="SecurityAttributesType">
		<xs:annotation>
			<xs:documentation>
            Generic container type for current security attributes
            </xs:documentation>
		</xs:annotation>
		<xs:sequence>
			<xs:element name="SecurityDescription" type="SecurityDescriptionType" minOccurs="1"/>
			<xs:element name="UserSecurity" type="UserSecurityType" minOccurs="0"/>
			<xs:element name="OrganizationSecurity" type="OrganizationSecurityType" minOccurs="0"/>
			<xs:element name="DeviceSecurity" type="DeviceSecurityType" minOccurs="0"/>
			<xs:element name="ServiceSecurity" type="ServiceSecurityType" minOccurs="0"/>
			<xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
		</xs:sequence>
	</xs:complexType>
	<xs:element name="UserSecurity" type="UserSecurityType"/>
	<xs:complexType name="UserSecurityType">
		<xs:sequence>
			<xs:element name="UserIdentification" type="UserIdentificationType" maxOccurs="1"/>
			<xs:element name="UserAuthentication" type="AuthenticationInfoType" minOccurs="0"/>
			<xs:element name="UserAuthorization" type="AuthorizationType" minOccurs="0"/>
			<xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
		</xs:sequence>
	</xs:complexType>
	<xs:element name="OrganizationalSecurity" type="OrganizationSecurityType"/>
	<xs:complexType name="OrganizationSecurityType">
		<xs:sequence>
			<xs:element name="OrganizationIdentification" type="OrganizationIdentificationType" maxOccurs="1"/>
			<xs:element name="OrganizationAuthentication" type="AuthenticationInfoType" minOccurs="0"/>
			<xs:element name="OrganizationAuthorization" type="AuthorizationType" minOccurs="0"/>
			<xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
		</xs:sequence>
	</xs:complexType>
	<xs:element name="DeviceSecurity" type="DeviceSecurityType"/>
	<xs:complexType name="DeviceSecurityType">
		<xs:sequence>
			<xs:element name="DeviceIdentification" type="DeviceIdentificationType" maxOccurs="1"/>
			<xs:element name="DeviceAuthentication" type="AuthenticationInfoType" minOccurs="0"/>
			<xs:element name="DeviceAuthorization" type="AuthorizationType" minOccurs="0"/>
			<xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
		</xs:sequence>
	</xs:complexType>
	<xs:element name="ServiceSecurity" type="ServiceSecurityType"/>
	<xs:complexType name="ServiceSecurityType">
		<xs:sequence>
			<xs:element name="ServiceIdentification" type="ServiceIdentificationType" maxOccurs="1"/>
			<xs:element name="ServiceAuthentication" type="AuthenticationInfoType" minOccurs="0"/>
			<xs:element name="ServiceAuthorization" type="AuthorizationType" minOccurs="0"/>
			<xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="SecurityDescriptionType">
		<xs:annotation>
			<xs:documentation>
            Describes and define all the various security requirements - requested or actually used
            </xs:documentation>
		</xs:annotation>
		<xs:sequence>
			<xs:element name="AuthenticationTypesAvailable" type="AuthenticationListType" minOccurs="0"/>
			<xs:element name="EncryptionTypesAvailable" type="EncryptionListType" minOccurs="0"/>
			<xs:element name="AuthorizationTypesAvailable" type="AuthorizationListType" minOccurs="0"/>
			<xs:element name="AuthenticationUsed" type="AuthenticationInfoType" minOccurs="0"/>
			<xs:element name="EncryptionUsed" type="EncryptionInfoType" minOccurs="0"/>
			<xs:element name="SecurityClasificationLevel" type="xs:string" minOccurs="0"/>
			<xs:element name="CertAuthority" type="xs:string" minOccurs="0"/>
			<xs:element name="Federation" type="xs:string" minOccurs="0"/>
			<xs:element name="Location" type="LocationType" minOccurs="0"/>
			<xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
		</xs:sequence>
		<xs:attribute name="mustHonor" type="xs:boolean" use="optional"/>
	</xs:complexType>
	<xs:complexType name="AuthenticationInfoType">
		<xs:annotation>
			<xs:documentation>
            Authentication information. Includes tokens used, federation lists, etc.
            </xs:documentation>
		</xs:annotation>
		<xs:sequence>
			<xs:element name="AuthenticationType" type="AuthenticationTypesType"/>
			<!-- extend ther AuthenticationTypeType values to include federations, etc... -->
			<xs:choice>
				<xs:element name="Token" type="xs:base64Binary"/>
				<xs:element name="Cert" type="xs:base64Binary"/>
				<xs:element name="AuthUri" type="xs:anyURI"/>
				<xs:element name="AuthString" type="xs:string"/>
				<xs:element name="UsernamePassword" type="UsernameTokenType"/>
				<xs:element name="KeyInfo" type="SecurityKeyType" minOccurs="0"/>
				<xs:element name="Federation" type="xs:string" minOccurs="0"/>
				<xs:any namespace="##other" minOccurs="0" maxOccurs="unbounded"/>
			</xs:choice>
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="EncryptionInfoType">
		<xs:annotation>
			<xs:documentation>
            Encryption information. Includes tokens used, federation lists, etc.
            </xs:documentation>
		</xs:annotation>
		<xs:sequence>
			<xs:element name="EncryptionType" type="EncryptionTypesType"/>
			<xs:choice>
				<xs:element name="xmlEncryptionInfo" type="xenc:EncryptedType"/>
				<xs:element name="samlEncryptionInfo" type="saml:EncryptedElementType"/>
				<!-- add other encryption info element (xacml, saml, etc.) -->
			</xs:choice>
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="AuthorizationType">
		<xs:annotation>
			<xs:documentation>
            Authorization information used
            </xs:documentation>
		</xs:annotation>
		<xs:sequence/>
	</xs:complexType>
	<xs:complexType name="UserIdentificationType">
		<xs:sequence>
			<xs:element name="UserUuid" type="Uuid" minOccurs="1"/>
			<xs:element name="UserSecurityKey" type="SecurityKeyType" minOccurs="0"/>
			<xs:element name="UsernameToken" type="UsernameTokenType" minOccurs="0"/>
			<xs:element name="UserID" type="xs:string" minOccurs="0"/>
			<xs:element name="UserRole" type="UserRoleWKV" minOccurs="0"/>
			<xs:element name="UserGroup" type="xs:string" minOccurs="0"/>
			<xs:element name="EmailId" type="xs:string" minOccurs="0"/>
			<xs:element name="UserLocation" type="LocationType" minOccurs="0"/>
			<xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="OrganizationIdentificationType">
		<xs:sequence>
			<xs:element name="OrganizationKey" type="SecurityKeyType" minOccurs="0"/>
			<xs:element name="DNSName" type="xs:string" minOccurs="0"/>
			<xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="DeviceIdentificationType">
		<xs:sequence>
			<xs:element name="DeviceUuid" type="UrnUuid" minOccurs="1"/>
			<xs:element name="DeviceSecurityKey" type="SecurityKeyType" minOccurs="0"/>
			<xs:element name="DNSName" type="xs:string" minOccurs="0"/>
			<xs:element name="IPAddr" type="xs:string" minOccurs="0"/>
			<xs:element name="DeviceLocation" type="LocationType" minOccurs="0"/>
			<xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="ServiceIdentificationType">
		<xs:sequence>
			<xs:element name="ServiceUuid" type="UrnUuid" minOccurs="1"/>
			<xs:element name="ServiceSecurityKey" type="SecurityKeyType" minOccurs="0"/>
			<xs:element name="DNSName" type="xs:string" minOccurs="0"/>
			<xs:element name="ServiceUri" type="xs:string" minOccurs="0"/>
			<xs:element name="ServiceLocation" type="LocationType" minOccurs="0"/>
			<xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="SecurityKeyType">
		<xs:annotation>
			<xs:documentation>
            Security key specifications from various oither standards inlcude XML DigitalSignature and WS-Security.
            </xs:documentation>
		</xs:annotation>
		<xs:choice>
			<xs:element name="dsKeyInfo" type="ds:KeyInfoType" minOccurs="0"/>
			<xs:element name="Token" type="xs:base64Binary"/>
			<xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
		</xs:choice>
	</xs:complexType>
	<xs:complexType name="LocationType">
		<xs:annotation>
			<xs:documentation>
			Location information
			</xs:documentation>
		</xs:annotation>
		<xs:sequence>
			<xs:element name="LocationString" type="LocalizedStringType"/>
			<xs:element name="GeoLocation" type="xs:anyURI" minOccurs="0"/>
		</xs:sequence>
	</xs:complexType>
	<!-- move the uuid defintions to pwgCommon? -->
	<xs:simpleType name="Uuid">
		<xs:restriction base="xs:string">
			<xs:pattern value="[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:simpleType name="UrnUuid">
		<xs:restriction base="xs:string">
			<xs:pattern value="urn:uuid:[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:complexType name="UsernameTokenType">
		<xs:annotation>
			<xs:documentation>
				Converted from WS-Security UsernameTokenType element.
			</xs:documentation>
		</xs:annotation>
		<xs:sequence>
			<xs:element name="Username" type="UsernameType"/>
			<xs:element name="Password" type="PasswordType" minOccurs="0"/>
		</xs:sequence>
		<xs:attribute name="Id" type="xs:ID"/>
		<xs:anyAttribute namespace="##other"/>
	</xs:complexType>
	<xs:complexType name="UsernameType">
		<xs:annotation>
			<xs:documentation>
				Converted from WS-Security UsernameTokenType element.
			</xs:documentation>
		</xs:annotation>
		<xs:simpleContent>
			<xs:extension base="xs:string">
				<xs:anyAttribute namespace="##other"/>
			</xs:extension>
		</xs:simpleContent>
	</xs:complexType>
	<xs:complexType name="PasswordType">
		<xs:annotation>
			<xs:documentation>
				Converted from WS-Security UsernameTokenType element.
			</xs:documentation>
		</xs:annotation>
		<xs:simpleContent>
			<xs:extension base="xs:string">
				<xs:attribute name="Type" type="xs:QName"/>
				<xs:anyAttribute namespace="##other"/>
			</xs:extension>
		</xs:simpleContent>
	</xs:complexType>
	<xs:complexType name="AuthenticationListType">
		<xs:annotation>
			<xs:documentation>
				A value list of supported authentication types 
			</xs:documentation>
		</xs:annotation>
		<xs:sequence>
			<xs:element name="Value" type="AuthenticationTypesType"/>
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="EncryptionListType">
		<xs:annotation>
			<xs:documentation>
				A value list of supported encryption methods 
			</xs:documentation>
		</xs:annotation>
		<xs:sequence>
			<xs:element name="Value" type="EncryptionTypesType"/>
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="AuthorizationListType">
		<xs:annotation>
			<xs:documentation>
				A value list of supported authorization types and methods 
			</xs:documentation>
		</xs:annotation>
		<xs:sequence>
			<xs:element name="Value" type="AuthorizationTypesType"/>
		</xs:sequence>
	</xs:complexType>
	<xs:simpleType name="AuthenticationTypesType">
		<xs:union memberTypes="AuthenticationTypeWKV pwg:KeywordNsExtensionPattern"/>
	</xs:simpleType>
	<xs:simpleType name="EncryptionTypesType">
		<xs:union memberTypes="EncryptionTypeWKV pwg:KeywordNsExtensionPattern"/>
	</xs:simpleType>
	<xs:simpleType name="AuthorizationTypesType">
		<xs:union memberTypes="AuthorizationTypeWKV pwg:KeywordNsExtensionPattern"/>
	</xs:simpleType>
	<!-- Move this to PwgWellKnownValues.xsd? -->
	<xs:simpleType name="AuthenticationTypeWKV">
		<xs:restriction base="xs:NMTOKEN">
			<xs:maxLength value="255"/>
			<xs:enumeration value="Basic"/>
			<xs:enumeration value="Certificate"/>
			<xs:enumeration value="Digest"/>
			<xs:enumeration value="Token"/>
			<xs:enumeration value="KerberosToken"/>
			<xs:enumeration value="RequestingUserName"/>
			<xs:enumeration value="UsernamePassword"/>
			<xs:enumeration value="Federation"/>
			<xs:enumeration value="Key"/>
			<xs:enumeration value="None"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:simpleType name="EncryptionTypeWKV">
		<xs:restriction base="xs:NMTOKEN">
			<xs:maxLength value="255"/>
			<xs:enumeration value="AES"/>
			<xs:enumeration value="ECC"/>
			<xs:enumeration value="Md2"/>
			<xs:enumeration value="Md4"/>
			<xs:enumeration value="Md5"/>
			<xs:enumeration value="None"/>
			<xs:enumeration value="Sha"/>
			<xs:enumeration value="TripleDES"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:simpleType name="AuthorizationTypeWKV">
		<xs:restriction base="xs:NMTOKEN">
			<xs:maxLength value="255"/>
			<xs:enumeration value="Network"/>
			<xs:enumeration value="SAML"/>
			<xs:enumeration value="XACML"/>
			<xs:enumeration value="AccessList"/>
			<xs:enumeration value="None"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:simpleType name="UserRoleWKV">
		<xs:restriction base="xs:NMTOKEN">
			<xs:enumeration value="Administrator"/>
			<xs:enumeration value="Operator"/>
			<xs:enumeration value="User"/>
			<xs:enumeration value="JobOwner"/>
			<xs:enumeration value="GroupMember"/>
			<xs:enumeration value="Normal"/>
			<xs:enumeration value="end-user"/>
			<xs:enumeration value="ServiceTechnition"/>
			<xs:enumeration value="FieldTechnition"/>
			<xs:enumeration value="NetworkAdministrator"/>
			<!-- PWG Semantic Model 2.x; IPP -->
			<!-- PWG Semantic Model 2.x; IPP -->
			<!-- PWG Semantic Model 2.x -->
			<!-- PWG Semantic Model 2.x -->
			<!-- PWG Semantic Model 2.x -->
			<!-- P.2600 -->
			<!-- IPP -->
		</xs:restriction>
	</xs:simpleType>
	<xs:complexType name="LocalizedStringType">
		<xs:simpleContent>
			<xs:extension base="xs:string">
				<xs:attribute name="lang" type="NaturalLanguageType" use="required"/>
			</xs:extension>
		</xs:simpleContent>
	</xs:complexType>
</xs:schema>
