<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="../../util/onvif-wsdl-viewer.xsl"?>
<!--
	Copyright (c) 2008-2020 by ONVIF: Open Network Video Interface Forum. All rights reserved.
	
	Recipients of this document may copy, distribute, publish, or display this document so long as this copyright notice, license and disclaimer are retained with all copies of the document. No license is granted to modify this document.
	
	THIS DOCUMENT IS PROVIDED "AS IS," AND THE CORPORATION AND ITS MEMBERS AND THEIR AFFILIATES, MAKE NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO, WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NON-INFRINGEMENT, OR TITLE; THAT THE CONTENTS OF THIS DOCUMENT ARE SUITABLE FOR ANY PURPOSE; OR THAT THE IMPLEMENTATION OF SUCH CONTENTS WILL NOT INFRINGE ANY PATENTS, COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS.
	IN NO EVENT WILL THE CORPORATION OR ITS MEMBERS OR THEIR AFFILIATES BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL, PUNITIVE OR CONSEQUENTIAL DAMAGES, ARISING OUT OF OR RELATING TO ANY USE OR DISTRIBUTION OF THIS DOCUMENT, WHETHER OR NOT (1) THE CORPORATION, MEMBERS OR THEIR AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES, OR (2) SUCH DAMAGES WERE REASONABLY FORESEEABLE, AND ARISING OUT OF OR RELATING TO ANY USE OR DISTRIBUTION OF THIS DOCUMENT.  THE FOREGOING DISCLAIMER AND LIMITATION ON LIABILITY DO NOT APPLY TO, INVALIDATE, OR LIMIT REPRESENTATIONS AND WARRANTIES MADE BY THE MEMBERS AND THEIR RESPECTIVE AFFILIATES TO THE CORPORATION AND OTHER MEMBERS IN CERTAIN WRITTEN POLICIES OF THE CORPORATION.
-->
<wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap12/" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:tan="http://www.onvif.org/ver20/analytics/wsdl" targetNamespace="http://www.onvif.org/ver20/analytics/wsdl">
	<wsdl:types>
		<xs:schema targetNamespace="http://www.onvif.org/ver20/analytics/wsdl" xmlns:tt="http://www.onvif.org/ver10/schema" elementFormDefault="qualified" version="20.12">
			<xs:import namespace="http://www.onvif.org/ver10/schema" schemaLocation="../../../ver10/schema/onvif.xsd"/>
			<xs:import namespace="http://www.onvif.org/ver10/schema" schemaLocation="../../../ver10/schema/metadatastream.xsd"/>
			<!--  Message Request/Responses elements  -->
			<!--===============================-->
			<xs:element name="GetServiceCapabilities">
				<xs:complexType>
					<xs:sequence/>
				</xs:complexType>
			</xs:element>
			<xs:element name="GetServiceCapabilitiesResponse">
				<xs:complexType>
					<xs:sequence>
						<xs:element name="Capabilities" type="tan:Capabilities">
							<xs:annotation>
								<xs:documentation>The capabilities for the analytics service is returned in the Capabilities element.</xs:documentation>
							</xs:annotation>
						</xs:element>
					</xs:sequence>
				</xs:complexType>
			</xs:element>
			<!--===============================-->
			<xs:complexType name="Capabilities">
				<xs:sequence>
					<xs:any namespace="##any" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>		   <!-- first Vendor then ONVIF -->
				</xs:sequence>
				<xs:attribute name="RuleSupport" type="xs:boolean">
					<xs:annotation>
						<xs:documentation>Indication that the device supports the rules interface and the rules syntax.</xs:documentation>
					</xs:annotation>
				</xs:attribute>
				<xs:attribute name="AnalyticsModuleSupport" type="xs:boolean">
					<xs:annotation>
						<xs:documentation>Indication that the device supports the scene analytics module interface.</xs:documentation>
					</xs:annotation>
				</xs:attribute>
				<xs:attribute name="CellBasedSceneDescriptionSupported" type="xs:boolean">
					<xs:annotation>
						<xs:documentation>Indication that the device produces the cell based scene description</xs:documentation>
					</xs:annotation>
				</xs:attribute>
				<xs:attribute name="RuleOptionsSupported" type="xs:boolean">
					<xs:annotation>
						<xs:documentation>Indication that the device supports the GetRuleOptions operation on the rules interface</xs:documentation>
					</xs:annotation>
				</xs:attribute>
				<xs:attribute name="AnalyticsModuleOptionsSupported" type="xs:boolean">
					<xs:annotation>
						<xs:documentation>Indication that the device supports the GetAnalyticsModuleOptions operation on the analytics interface</xs:documentation>
					</xs:annotation>
				</xs:attribute>
				<xs:attribute name="SupportedMetadata" type="xs:boolean">
					<xs:annotation>
						<xs:documentation>Indication that the device supports the GetSupportedMetadata operation.</xs:documentation>
					</xs:annotation>
				</xs:attribute>
				<xs:attribute name="ImageSendingType" type="tt:StringList">
					<xs:annotation>
						<xs:documentation>Indication what kinds of method that the device support for sending image, acceptable values are defined in tt:ImageSendingType.</xs:documentation>
					</xs:annotation>
				</xs:attribute>
				<xs:anyAttribute processContents="lax"/>
			</xs:complexType>
			<xs:element name="Capabilities" type="tan:Capabilities"/>
			<!--===============================-->
			<xs:element name="GetSupportedRules">
				<xs:complexType>
					<xs:sequence>
						<xs:element name="ConfigurationToken" type="tt:ReferenceToken">
							<xs:annotation>
								<xs:documentation>
									References an existing Video Analytics configuration. The list of available tokens can be obtained
									via the Media service GetVideoAnalyticsConfigurations method.
								</xs:documentation>
							</xs:annotation>
						</xs:element>
					</xs:sequence>
				</xs:complexType>
			</xs:element>
			<xs:element name="GetSupportedRulesResponse">
				<xs:complexType>
					<xs:sequence>
						<xs:element name="SupportedRules" type="tt:SupportedRules"/>
					</xs:sequence>
				</xs:complexType>
			</xs:element>
			<!--===============================-->
			<xs:element name="CreateRules">
				<xs:complexType>
					<xs:sequence>
						<xs:element name="ConfigurationToken" type="tt:ReferenceToken">
							<xs:annotation>
								<xs:documentation>Reference to an existing VideoAnalyticsConfiguration.</xs:documentation>
							</xs:annotation>
						</xs:element>
						<xs:element name="Rule" type="tt:Config" minOccurs="1" maxOccurs="unbounded"/>
					</xs:sequence>
				</xs:complexType>
			</xs:element>
			<xs:element name="CreateRulesResponse">
				<xs:complexType/>
			</xs:element>
			<!--===============================-->
			<xs:element name="DeleteRules">
				<xs:complexType>
					<xs:sequence>
						<xs:element name="ConfigurationToken" type="tt:ReferenceToken">
							<xs:annotation>
								<xs:documentation>Reference to an existing VideoAnalyticsConfiguration.</xs:documentation>
							</xs:annotation>
						</xs:element>
						<xs:element name="RuleName" type="xs:string" minOccurs="1" maxOccurs="unbounded">
							<xs:annotation>
								<xs:documentation>References the specific rule to be deleted (e.g. "MyLineDetector"). </xs:documentation>
							</xs:annotation>
						</xs:element>
					</xs:sequence>
				</xs:complexType>
			</xs:element>
			<xs:element name="DeleteRulesResponse">
				<xs:complexType/>
			</xs:element>
			<!--===============================-->
			<xs:element name="ModifyRules">
				<xs:complexType>
					<xs:sequence>
						<xs:element name="ConfigurationToken" type="tt:ReferenceToken">
							<xs:annotation>
								<xs:documentation>Reference to an existing VideoAnalyticsConfiguration.</xs:documentation>
							</xs:annotation>
						</xs:element>
						<xs:element name="Rule" type="tt:Config" minOccurs="1" maxOccurs="unbounded"/>
					</xs:sequence>
				</xs:complexType>
			</xs:element>
			<xs:element name="ModifyRulesResponse">
				<xs:complexType/>
			</xs:element>
			<!--===============================-->
			<xs:element name="GetRules">
				<xs:complexType>
					<xs:sequence>
						<xs:element name="ConfigurationToken" type="tt:ReferenceToken">
							<xs:annotation>
								<xs:documentation>Reference to an existing VideoAnalyticsConfiguration.</xs:documentation>
							</xs:annotation>
						</xs:element>
					</xs:sequence>
				</xs:complexType>
			</xs:element>
			<xs:element name="GetRulesResponse">
				<xs:complexType>
					<xs:sequence>
						<xs:element name="Rule" type="tt:Config" minOccurs="0" maxOccurs="unbounded"/>
					</xs:sequence>
				</xs:complexType>
			</xs:element>
			<!--===============================-->
			<xs:element name="GetRuleOptions">
				<xs:complexType>
					<xs:sequence>
						<xs:element name="RuleType" type="xs:QName" minOccurs="0">
							<xs:annotation>
								<xs:documentation>Reference to an SupportedRule Type returned from GetSupportedRules.</xs:documentation>
							</xs:annotation>
						</xs:element>
						<xs:element name="ConfigurationToken" type="tt:ReferenceToken">
							<xs:annotation>
								<xs:documentation>Reference to an existing analytics configuration.</xs:documentation>
							</xs:annotation>
						</xs:element>
					</xs:sequence>
				</xs:complexType>
			</xs:element>
			<xs:element name="GetRuleOptionsResponse">
				<xs:complexType>
					<xs:sequence>
						<xs:element name="RuleOptions" type="tan:ConfigOptions" minOccurs="0" maxOccurs="unbounded">
							<xs:annotation>
								<xs:documentation>A device shall provide respective ConfigOptions.RuleType for each RuleOption if the request does not specify RuleType. The response Options shall not contain any AnalyticsModule attribute.</xs:documentation>
							</xs:annotation>							
						</xs:element>
					</xs:sequence>
				</xs:complexType>
			</xs:element>
			<!--===============================-->
			<xs:complexType name="ConfigOptions">
				<xs:sequence>
					<xs:any namespace="##any">
						<xs:annotation>
							<xs:documentation>
								XML tree containing the element value as defined in the Type attribute.
							</xs:documentation>
						</xs:annotation>
					</xs:any>
				</xs:sequence>
				<xs:attribute name="RuleType" type="xs:QName">
					<xs:annotation>
						<xs:documentation>
							The RuleType the ConfigOptions applies to if the Name attribute is ambiguous.
						</xs:documentation>
					</xs:annotation>
				</xs:attribute>
				<xs:attribute name="Name" type="xs:string" use="required">
					<xs:annotation>
						<xs:documentation>
							The Name of the SimpleItemDescription/ElementItemDescription
							the ConfigOptions applies to.
						</xs:documentation>
					</xs:annotation>
				</xs:attribute>
				<xs:attribute name="Type" type="xs:QName">
					<xs:annotation>
						<xs:documentation>
							Type of the Rule Options represented by a unique QName. 
							The Type defines the element contained in this structure.
							This attribute is deprecated since its value must be identical to the embedded element.
						</xs:documentation>
					</xs:annotation>
				</xs:attribute>
				<xs:attribute name="AnalyticsModule" type="xs:QName">
					<xs:annotation>
						<xs:documentation>
							Optional name of the analytics module this constraint applies to. This option is only necessary in cases where different constraints for elements with the same Name exist.
						</xs:documentation>
					</xs:annotation>
				</xs:attribute>
				<xs:attribute name="minOccurs" type="xs:int">
					<xs:annotation>
						<xs:documentation>
							Minimal number of occurrences. Defaults to one.
						</xs:documentation>
					</xs:annotation>
				</xs:attribute>
				<xs:attribute name="maxOccurs" type="xs:int">
					<xs:annotation>
						<xs:documentation>
							Maximum number of occurrences. Defaults to one.
						</xs:documentation>
					</xs:annotation>
				</xs:attribute>
				<xs:anyAttribute processContents="lax"/>
			</xs:complexType>
			
			<!--===============================-->
			<xs:element name="GetSupportedAnalyticsModules">
				<xs:complexType>
					<xs:sequence>
						<xs:element name="ConfigurationToken" type="tt:ReferenceToken">
							<xs:annotation>
								<xs:documentation>Reference to an existing VideoAnalyticsConfiguration.</xs:documentation>
							</xs:annotation>
						</xs:element>
					</xs:sequence>
				</xs:complexType>
			</xs:element>
			<xs:element name="GetSupportedAnalyticsModulesResponse">
				<xs:complexType>
					<xs:sequence>
						<xs:element name="SupportedAnalyticsModules" type="tt:SupportedAnalyticsModules"/>
					</xs:sequence>
				</xs:complexType>
			</xs:element>
			<!--===============================-->
			<xs:element name="CreateAnalyticsModules">
				<xs:complexType>
					<xs:sequence>
						<xs:element name="ConfigurationToken" type="tt:ReferenceToken">
							<xs:annotation>
								<xs:documentation>Reference to an existing VideoAnalyticsConfiguration.</xs:documentation>
							</xs:annotation>
						</xs:element>
						<xs:element name="AnalyticsModule" type="tt:Config" maxOccurs="unbounded"/>
					</xs:sequence>
				</xs:complexType>
			</xs:element>
			<xs:element name="CreateAnalyticsModulesResponse">
				<xs:complexType/>
			</xs:element>
			<!--===============================-->
			<xs:element name="DeleteAnalyticsModules">
				<xs:complexType>
					<xs:sequence>
						<xs:element name="ConfigurationToken" type="tt:ReferenceToken">
							<xs:annotation>
								<xs:documentation>Reference to an existing Video Analytics configuration.</xs:documentation>
							</xs:annotation>
						</xs:element>
						<xs:element name="AnalyticsModuleName" type="xs:string" maxOccurs="unbounded">
							<xs:annotation>
								<xs:documentation>Name of the AnalyticsModule to be deleted.</xs:documentation>
							</xs:annotation>
						</xs:element>
					</xs:sequence>
				</xs:complexType>
			</xs:element>
			<xs:element name="DeleteAnalyticsModulesResponse">
				<xs:complexType/>
			</xs:element>
			<!--===============================-->
			<xs:element name="ModifyAnalyticsModules">
				<xs:complexType>
					<xs:sequence>
						<xs:element name="ConfigurationToken" type="tt:ReferenceToken">
							<xs:annotation>
								<xs:documentation>Reference to an existing VideoAnalyticsConfiguration.</xs:documentation>
							</xs:annotation>
						</xs:element>
						<xs:element name="AnalyticsModule" type="tt:Config" maxOccurs="unbounded"/>
					</xs:sequence>
				</xs:complexType>
			</xs:element>
			<xs:element name="ModifyAnalyticsModulesResponse">
				<xs:complexType/>
			</xs:element>
			<!--===============================-->
			<xs:element name="GetAnalyticsModules">
				<xs:complexType>
					<xs:sequence>
						<xs:element name="ConfigurationToken" type="tt:ReferenceToken">
							<xs:annotation>
								<xs:documentation>Reference to an existing VideoAnalyticsConfiguration.</xs:documentation>
							</xs:annotation>
						</xs:element>
					</xs:sequence>
				</xs:complexType>
			</xs:element>
			<xs:element name="GetAnalyticsModulesResponse">
				<xs:complexType>
					<xs:sequence>
						<xs:element name="AnalyticsModule" type="tt:Config" minOccurs="0" maxOccurs="unbounded"/>
					</xs:sequence>
				</xs:complexType>
			</xs:element>
			<!--===============================-->
			<xs:element name="GetAnalyticsModuleOptions">
				<xs:complexType>
					<xs:sequence>
						<xs:element name="Type" type="xs:QName" minOccurs="0">
							<xs:annotation>
								<xs:documentation>Reference to an SupportedAnalyticsModule Type returned from GetSupportedAnalyticsModules.</xs:documentation>
							</xs:annotation>
						</xs:element>
						<xs:element name="ConfigurationToken" type="tt:ReferenceToken">
							<xs:annotation>
								<xs:documentation>Reference to an existing AnalyticsConfiguration.</xs:documentation>
							</xs:annotation>
						</xs:element>
					</xs:sequence>
				</xs:complexType>
			</xs:element>
			<xs:element name="GetAnalyticsModuleOptionsResponse">
				<xs:complexType>
					<xs:sequence>
						<xs:element name="Options" type="tan:ConfigOptions" minOccurs="0" maxOccurs="unbounded">
							<xs:annotation>
								<xs:documentation>List of options for the specified analytics module. The response Options shall not contain any RuleType attribute.</xs:documentation>
							</xs:annotation>
						</xs:element>
					</xs:sequence>
				</xs:complexType>
			</xs:element>
			<!--===============================-->
			<xs:element name="GetSupportedMetadata">
				<xs:complexType>
					<xs:sequence>
						<xs:element name="Type" type="xs:QName" minOccurs="0">
							<xs:annotation>
								<xs:documentation>Optional reference to an AnalyticsModule Type returned from GetSupportedAnalyticsModules.</xs:documentation>
							</xs:annotation>
						</xs:element>
					</xs:sequence>
				</xs:complexType>
			</xs:element>
			<xs:element name="GetSupportedMetadataResponse">
				<xs:complexType>
					<xs:sequence>
						<xs:element name="AnalyticsModule" type="tan:MetadataInfo" minOccurs="0" maxOccurs="unbounded">
						</xs:element>
					</xs:sequence>
				</xs:complexType>
			</xs:element>
			<xs:complexType name="MetadataInfo">
				<xs:sequence>
					<xs:element name="SampleFrame" type="tt:Frame">
						<xs:annotation><xs:documentation>Sample frame content starting with the tt:Frame node.</xs:documentation></xs:annotation>
					</xs:element>
					<xs:any namespace="##any" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>   <!-- first ONVIF then Vendor -->
				</xs:sequence>
				<xs:attribute name="Type" type="xs:QName" use="required">
					<xs:annotation>
						<xs:documentation>Reference to an AnalyticsModule Type.</xs:documentation>
					</xs:annotation>
				</xs:attribute>
				<xs:anyAttribute/>
			</xs:complexType>
			<!--===============================-->
		</xs:schema>
	</wsdl:types>
	<wsdl:message name="GetServiceCapabilitiesRequest">
		<wsdl:part name="parameters" element="tan:GetServiceCapabilities"/>
	</wsdl:message>
	<wsdl:message name="GetServiceCapabilitiesResponse">
		<wsdl:part name="parameters" element="tan:GetServiceCapabilitiesResponse"/>
	</wsdl:message>
	<wsdl:message name="GetSupportedRulesRequest">
		<wsdl:part name="parameters" element="tan:GetSupportedRules"/>
	</wsdl:message>
	<wsdl:message name="GetSupportedRulesResponse">
		<wsdl:part name="parameters" element="tan:GetSupportedRulesResponse"/>
	</wsdl:message>
	<wsdl:message name="CreateRulesRequest">
		<wsdl:part name="parameters" element="tan:CreateRules"/>
	</wsdl:message>
	<wsdl:message name="CreateRulesResponse">
		<wsdl:part name="parameters" element="tan:CreateRulesResponse"/>
	</wsdl:message>
	<wsdl:message name="DeleteRulesRequest">
		<wsdl:part name="parameters" element="tan:DeleteRules"/>
	</wsdl:message>
	<wsdl:message name="DeleteRulesResponse">
		<wsdl:part name="parameters" element="tan:DeleteRulesResponse"/>
	</wsdl:message>
	<wsdl:message name="GetRulesRequest">
		<wsdl:part name="parameters" element="tan:GetRules"/>
	</wsdl:message>
	<wsdl:message name="GetRulesResponse">
		<wsdl:part name="parameters" element="tan:GetRulesResponse"/>
	</wsdl:message>
	<wsdl:message name="GetRuleOptionsRequest">
		<wsdl:part name="parameters" element="tan:GetRuleOptions"/>
	</wsdl:message>
	<wsdl:message name="GetRuleOptionsResponse">
		<wsdl:part name="parameters" element="tan:GetRuleOptionsResponse"/>
	</wsdl:message>
	<wsdl:message name="GetSupportedAnalyticsModulesResponse">
		<wsdl:part name="parameters" element="tan:GetSupportedAnalyticsModulesResponse"/>
	</wsdl:message>
	<wsdl:message name="GetSupportedAnalyticsModulesRequest">
		<wsdl:part name="parameters" element="tan:GetSupportedAnalyticsModules"/>
	</wsdl:message>
	<wsdl:message name="CreateAnalyticsModulesRequest">
		<wsdl:part name="parameters" element="tan:CreateAnalyticsModules"/>
	</wsdl:message>
	<wsdl:message name="CreateAnalyticsModulesResponse">
		<wsdl:part name="parameters" element="tan:CreateAnalyticsModulesResponse"/>
	</wsdl:message>
	<wsdl:message name="DeleteAnalyticsModulesRequest">
		<wsdl:part name="parameters" element="tan:DeleteAnalyticsModules"/>
	</wsdl:message>
	<wsdl:message name="DeleteAnalyticsModulesResponse">
		<wsdl:part name="parameters" element="tan:DeleteAnalyticsModulesResponse"/>
	</wsdl:message>
	<wsdl:message name="GetAnalyticsModulesRequest">
		<wsdl:part name="parameters" element="tan:GetAnalyticsModules"/>
	</wsdl:message>
	<wsdl:message name="GetAnalyticsModulesResponse">
		<wsdl:part name="parameters" element="tan:GetAnalyticsModulesResponse"/>
	</wsdl:message>
	<wsdl:message name="ModifyRulesRequest">
		<wsdl:part name="parameters" element="tan:ModifyRules"/>
	</wsdl:message>
	<wsdl:message name="ModifyRulesResponse">
		<wsdl:part name="parameters" element="tan:ModifyRulesResponse"/>
	</wsdl:message>
	<wsdl:message name="ModifyAnalyticsModulesRequest">
		<wsdl:part name="parameters" element="tan:ModifyAnalyticsModules"/>
	</wsdl:message>
	<wsdl:message name="ModifyAnalyticsModulesResponse">
		<wsdl:part name="parameters" element="tan:ModifyAnalyticsModulesResponse"/>
	</wsdl:message>
	<wsdl:message name="GetAnalyticsModuleOptionsRequest">
		<wsdl:part name="parameters" element="tan:GetAnalyticsModuleOptions"/>
	</wsdl:message>
	<wsdl:message name="GetAnalyticsModuleOptionsResponse">
		<wsdl:part name="parameters" element="tan:GetAnalyticsModuleOptionsResponse"/>
	</wsdl:message>
	<wsdl:message name="GetSupportedMetadataRequest">
		<wsdl:part name="parameters" element="tan:GetSupportedMetadata"/>
	</wsdl:message>
	<wsdl:message name="GetSupportedMetadataResponse">
		<wsdl:part name="parameters" element="tan:GetSupportedMetadataResponse"/>
	</wsdl:message>
	<wsdl:portType name="RuleEnginePort">
		<wsdl:operation name="GetSupportedRules">
			<wsdl:documentation>
				List all rules that are supported by the given VideoAnalyticsConfiguration.
			</wsdl:documentation>
			<wsdl:input message="tan:GetSupportedRulesRequest"/>
			<wsdl:output message="tan:GetSupportedRulesResponse"/>
		</wsdl:operation>
		<wsdl:operation name="CreateRules">
			<wsdl:documentation>
				Add one or more rules to an existing VideoAnalyticsConfiguration.
				The available supported types can be retrieved via <a href="#op.GetSupportedRules">GetSupportedRules</a>, 
				where the Name of the supported rule correspond to the type of an rule instance.<br/>
				Pass unique module names which can be later used as reference. 
				The Parameters of the rules must match those of the corresponding description.
				<br/>
				Although this method is mandatory a device implementation must not support adding rules. 
				Instead it can provide a fixed set of predefined configurations via the media service function 
				<a href="media.wsdl#op.GetCompatibleVideoAnalyticsConfigurations">GetCompatibleVideoAnalyticsConfigurations</a>.
			</wsdl:documentation>
			<wsdl:input message="tan:CreateRulesRequest"/>
			<wsdl:output message="tan:CreateRulesResponse"/>
		</wsdl:operation>
		<wsdl:operation name="DeleteRules">
			<wsdl:documentation>
				Remove one or more rules from a VideoAnalyticsConfiguration.
			</wsdl:documentation>
			<wsdl:input message="tan:DeleteRulesRequest"/>
			<wsdl:output message="tan:DeleteRulesResponse"/>
		</wsdl:operation>
		<wsdl:operation name="GetRules">
			<wsdl:documentation>
				List the currently assigned set of rules of a VideoAnalyticsConfiguration.
			</wsdl:documentation>
			<wsdl:input message="tan:GetRulesRequest"/>
			<wsdl:output message="tan:GetRulesResponse"/>
		</wsdl:operation>
		<wsdl:operation name="GetRuleOptions">
			<wsdl:documentation>
				Return the options for the supported rules that specify an Option attribute.
			</wsdl:documentation>
			<wsdl:input message="tan:GetRuleOptionsRequest"/>
			<wsdl:output message="tan:GetRuleOptionsResponse"/>
		</wsdl:operation>
		<wsdl:operation name="ModifyRules">
			<wsdl:documentation>
				Modify one or more rules of a VideoAnalyticsConfiguration. The rules are referenced by their names.
			</wsdl:documentation>
			<wsdl:input message="tan:ModifyRulesRequest"/>
			<wsdl:output message="tan:ModifyRulesResponse"/>
		</wsdl:operation>
	</wsdl:portType>
	<wsdl:portType name="AnalyticsEnginePort">
		<wsdl:operation name="GetServiceCapabilities">
			<wsdl:documentation>Returns the capabilities of the analytics service. The result is returned in a typed answer.</wsdl:documentation>
			<wsdl:input message="tan:GetServiceCapabilitiesRequest"/>
			<wsdl:output message="tan:GetServiceCapabilitiesResponse"/>
		</wsdl:operation>
		<wsdl:operation name="GetSupportedAnalyticsModules">
			<wsdl:documentation>
				List all analytics modules that are supported by the given VideoAnalyticsConfiguration.
			</wsdl:documentation>
			<wsdl:input message="tan:GetSupportedAnalyticsModulesRequest"/>
			<wsdl:output message="tan:GetSupportedAnalyticsModulesResponse"/>
		</wsdl:operation>
		<wsdl:operation name="GetAnalyticsModuleOptions">
			<wsdl:documentation>
				Return the options for the supported analytics modules that specify an Option attribute.
			</wsdl:documentation>
			<wsdl:input message="tan:GetAnalyticsModuleOptionsRequest"/>
			<wsdl:output message="tan:GetAnalyticsModuleOptionsResponse"/>
		</wsdl:operation>
		<wsdl:operation name="CreateAnalyticsModules">
			<wsdl:documentation>
				Add one or more analytics modules to an existing VideoAnalyticsConfiguration.
				The available supported types can be retrieved via <a href="#op.GetSupportedAnalyticsModules">GetSupportedAnalyticsModules</a>, 
				where the Name of the supported AnalyticsModules correspond to the type of an AnalyticsModule instance.<br/>
				Pass unique module names which can be later used as reference. The Parameters of the analytics module must match those of the corresponding AnalyticsModuleDescription.
				<br/>
				Although this method is mandatory a device implementation may not support adding modules. 
				Instead it can provide a fixed set of predefined configurations via the media service functions 
				<a href="../../../ver10/media/wsdl/media.wsdl#op.GetCompatibleVideoAnalyticsConfigurations">GetCompatibleVideoAnalyticsConfigurations</a> and 
				<a href="../../media/wsdl/media.wsdl#op.GetAnalyticsConfigurations">GetAnalyticsConfigurations</a>.
				<br/>
				The device shall ensure that a corresponding analytics engine starts operation when a client
				subscribes directly or indirectly for events produced by the analytics or rule engine or when a
				client requests the corresponding scene description stream.
				An analytics module must be attached to a Video source using the media profiles before it can be used.
				In case differing analytics configurations are attached to the same profile it is undefined which
				of the analytics module configuration becomes active if no stream is activated or multiple streams
				with different profiles are activated at the same time.
			</wsdl:documentation>
			<wsdl:input message="tan:CreateAnalyticsModulesRequest"/>
			<wsdl:output message="tan:CreateAnalyticsModulesResponse"/>
		</wsdl:operation>
		<wsdl:operation name="DeleteAnalyticsModules">
			<wsdl:documentation>
				Remove one or more analytics modules from a VideoAnalyticsConfiguration referenced by their names.<br/>
			</wsdl:documentation>
			<wsdl:input message="tan:DeleteAnalyticsModulesRequest"/>
			<wsdl:output message="tan:DeleteAnalyticsModulesResponse"/>
		</wsdl:operation>
		<wsdl:operation name="GetAnalyticsModules">
			<wsdl:documentation>
				List the currently assigned set of analytics modules of a VideoAnalyticsConfiguration.
			</wsdl:documentation>
			<wsdl:input message="tan:GetAnalyticsModulesRequest"/>
			<wsdl:output message="tan:GetAnalyticsModulesResponse"/>
		</wsdl:operation>
		<wsdl:operation name="ModifyAnalyticsModules">
			<wsdl:documentation>
				Modify the settings of one or more analytics modules of a VideoAnalyticsConfiguration. The modules are referenced by their names.
				It is allowed to pass only a subset to be modified.
			</wsdl:documentation>
			<wsdl:input message="tan:ModifyAnalyticsModulesRequest"/>
			<wsdl:output message="tan:ModifyAnalyticsModulesResponse"/>
		</wsdl:operation>
		<wsdl:operation name="GetSupportedMetadata">
			<wsdl:documentation>
				This method provides a computer readable description of the metadata that the selected analytics modules can generate. 
				The type parameter allows to select a single analytics module. By default the output shall relate to all analytics modules that exist in the device.<br/> 
				The response shall provide a sample XML frame. 
				The sample frame shall include all potentially generated elements by the selected analytics modules. 
				Note that this e.g. does not need to include all possible class type enumerations.
			</wsdl:documentation>
			<wsdl:input message="tan:GetSupportedMetadataRequest"/>
			<wsdl:output message="tan:GetSupportedMetadataResponse"/>
		</wsdl:operation>
	</wsdl:portType>
	<wsdl:binding name="RuleEngineBinding" type="tan:RuleEnginePort">
		<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
		<wsdl:operation name="GetSupportedRules">
			<soap:operation soapAction="http://www.onvif.org/ver20/analytics/wsdl/GetSupportedRules"/>
			<wsdl:input>
				<soap:body use="literal"/>
			</wsdl:input>
			<wsdl:output>
				<soap:body use="literal"/>
			</wsdl:output>
		</wsdl:operation>
		<wsdl:operation name="CreateRules">
			<soap:operation soapAction="http://www.onvif.org/ver20/analytics/wsdl/CreateRules"/>
			<wsdl:input>
				<soap:body use="literal"/>
			</wsdl:input>
			<wsdl:output>
				<soap:body use="literal"/>
			</wsdl:output>
		</wsdl:operation>
		<wsdl:operation name="DeleteRules">
			<soap:operation soapAction="http://www.onvif.org/ver20/analytics/wsdl/DeleteRules"/>
			<wsdl:input>
				<soap:body use="literal"/>
			</wsdl:input>
			<wsdl:output>
				<soap:body use="literal"/>
			</wsdl:output>
		</wsdl:operation>
		<wsdl:operation name="GetRules">
			<soap:operation soapAction="http://www.onvif.org/ver20/analytics/wsdl/GetRules"/>
			<wsdl:input>
				<soap:body use="literal"/>
			</wsdl:input>
			<wsdl:output>
				<soap:body use="literal"/>
			</wsdl:output>
		</wsdl:operation>
		<wsdl:operation name="GetRuleOptions">
			<soap:operation soapAction="http://www.onvif.org/ver20/analytics/wsdl/GetRuleOptions"/>
			<wsdl:input>
				<soap:body use="literal"/>
			</wsdl:input>
			<wsdl:output>
				<soap:body use="literal"/>
			</wsdl:output>
		</wsdl:operation>
		<wsdl:operation name="ModifyRules">
			<soap:operation soapAction="http://www.onvif.org/ver20/analytics/wsdl/ModifyRules"/>
			<wsdl:input>
				<soap:body use="literal"/>
			</wsdl:input>
			<wsdl:output>
				<soap:body use="literal"/>
			</wsdl:output>
		</wsdl:operation>
	</wsdl:binding>
	<wsdl:binding name="AnalyticsEngineBinding" type="tan:AnalyticsEnginePort">
		<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
		<wsdl:operation name="GetServiceCapabilities">
			<soap:operation soapAction="http://www.onvif.org/ver20/analytics/wsdl/GetServiceCapabilities"/>
			<wsdl:input>
				<soap:body use="literal"/>
			</wsdl:input>
			<wsdl:output>
				<soap:body use="literal"/>
			</wsdl:output>
		</wsdl:operation>
		<wsdl:operation name="GetSupportedAnalyticsModules">
			<soap:operation soapAction="http://www.onvif.org/ver20/analytics/wsdl/GetSupportedAnalyticsModules"/>
			<wsdl:input>
				<soap:body use="literal"/>
			</wsdl:input>
			<wsdl:output>
				<soap:body use="literal"/>
			</wsdl:output>
		</wsdl:operation>
		<wsdl:operation name="CreateAnalyticsModules">
			<soap:operation soapAction="http://www.onvif.org/ver20/analytics/wsdl/CreateAnalyticsModules"/>
			<wsdl:input>
				<soap:body use="literal"/>
			</wsdl:input>
			<wsdl:output>
				<soap:body use="literal"/>
			</wsdl:output>
		</wsdl:operation>
		<wsdl:operation name="DeleteAnalyticsModules">
			<soap:operation soapAction="http://www.onvif.org/ver20/analytics/wsdl/DeleteAnalyticsModules"/>
			<wsdl:input>
				<soap:body use="literal"/>
			</wsdl:input>
			<wsdl:output>
				<soap:body use="literal"/>
			</wsdl:output>
		</wsdl:operation>
		<wsdl:operation name="GetAnalyticsModules">
			<soap:operation soapAction="http://www.onvif.org/ver20/analytics/wsdl/GetAnalyticsModules"/>
			<wsdl:input>
				<soap:body use="literal"/>
			</wsdl:input>
			<wsdl:output>
				<soap:body use="literal"/>
			</wsdl:output>
		</wsdl:operation>
		<wsdl:operation name="GetAnalyticsModuleOptions">
			<soap:operation soapAction="http://www.onvif.org/ver20/analytics/wsdl/GetAnalyticsModuleOptions"/>
			<wsdl:input>
				<soap:body use="literal"/>
			</wsdl:input>
			<wsdl:output>
				<soap:body use="literal"/>
			</wsdl:output>
		</wsdl:operation>
		<wsdl:operation name="ModifyAnalyticsModules">
			<soap:operation soapAction="http://www.onvif.org/ver20/analytics/wsdl/ModifyAnalyticsModules"/>
			<wsdl:input>
				<soap:body use="literal"/>
			</wsdl:input>
			<wsdl:output>
				<soap:body use="literal"/>
			</wsdl:output>
		</wsdl:operation>
		<wsdl:operation name="GetSupportedMetadata">
			<soap:operation soapAction="http://www.onvif.org/ver20/analytics/wsdl/GetSupportedMetadata"/>
			<wsdl:input>
				<soap:body use="literal"/>
			</wsdl:input>
			<wsdl:output>
				<soap:body use="literal"/>
			</wsdl:output>
		</wsdl:operation>
	</wsdl:binding>
</wsdl:definitions>
