You are viewing a plain text version of this content. The canonical link for it is here.
Posted to imperius-commits@incubator.apache.org by jn...@apache.org on 2008/02/05 19:29:04 UTC

svn commit: r618755 [2/2] - in /incubator/imperius/site: build/site/en/ build/site/en/community/ build/site/en/docs/ build/site/en/download/ build/tmp/ build/tmp/cocoon-work/cache-dir/ src/documentation/ src/documentation/content/xdocs/ src/documentati...

Added: incubator/imperius/site/src/documentation/content/xdocs/docs/spl_reference.xml
URL: http://svn.apache.org/viewvc/incubator/imperius/site/src/documentation/content/xdocs/docs/spl_reference.xml?rev=618755&view=auto
==============================================================================
--- incubator/imperius/site/src/documentation/content/xdocs/docs/spl_reference.xml (added)
+++ incubator/imperius/site/src/documentation/content/xdocs/docs/spl_reference.xml Tue Feb  5 11:28:59 2008
@@ -0,0 +1,1153 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You under the Apache License, Version 2.0
+  (the "License"); you may not use this file except in compliance with
+  the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+-->
+<!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V2.0//EN" "http://forrest.apache.org/dtd/document-v20.dtd">
+<document>
+  <header>
+    <title>SPL Language Reference</title>
+     <abstract>
+      This document provides a reference to the SPL language detailing the language syntax, built-in operators and actions
+      It is aimed as providing a quick reference for users authoring SPL policies. Please refer to the 
+      CIM-SPL specification for more details.
+    </abstract>
+  </header>
+  <body>
+    <section id="intro">
+      <title>Introduction</title>
+        <p>  Imperius (Simple Policy Language) or SPL - Is a simple standards based 
+        object-oriented policy language that allows expression of management policies 
+        using condition-action rules. Imperius provides an extensible set of over 
+        100 operations for expressing conditions and actions.Imperius is a generalization
+        of the CIM-SPL language. Conversely, CIM-SPL can be thought of as Imperius 
+        with CIM binding. Imperius can be extended to create similar bindings for 
+        other environments. JavaSPL (Imperius with Java binding) is another such example.
+        
+        </p>
+     </section>   
+	<section id="language_structure">
+		<title>SPL Language Structure </title>
+		<p> An SPL Policy is actually a group of one or more sub policies. 
+      Each sub policy	is a simple condition - action pair. An import statement
+      declares one or more anchor classes and instances that are referenced throughout the
+      policy.
+		</p>
+		<p> <strong> Canonical Policy syntax </strong> </p>
+		<source>
+      Import  Qualifier &lt;namespace&gt; Class &lt;Class Name&gt; : &lt;instances&gt;*;	(one or more)	 
+      Strategy &lt;strategy&gt;
+      Policy  (one or more)
+      { 
+        Declaration {
+          &lt;List of constant definition&gt;   (Optional)
+          &lt;List of macro definitions&gt; (Optional)
+        } 
+        Condition {		(Optional)
+          &lt;If Condition&gt;  /* java-like boolean expression */
+        } 
+        Decision {		(Required)
+          &lt;Then Decision &gt;  /* sequence of actions */
+           /*   invocations                      */
+        }
+      } &lt;priority&gt;;
+	
+		
+		</source>
+		<p> <strong> A Sample Policy</strong> </p>
+		<source>
+		Import Class org.apache.imperius.javaspl.samples.windowscomputersystem.WindowsComputerSystem:system1;
+
+    Strategy Execute_All_Applicable;
+
+    Declaration   {
+
+      from = "johndoe@us.ibm.com";
+      to = "johndoe@us.ibm.com";
+    }
+    Policy {
+      Declaration 	{
+      supportedJavaVersion = "1.5" ; 
+    	subject = "Java version noncompliance";
+      message = Concatenate( "IBM does not support java :", system1.javaVersion );
+    }
+
+    Condition 	{
+
+      system1.javaVersion != supportedJavaVersion 
+
+    }   
+
+    Decision  	{  
+ 
+       		SendMail( from, to, subject, message )
+  
+    }
+  }:1;
+		
+		</source>
+		
+		
+    <section id="import_stmt">
+      <title> Import Statement </title>
+      <p> Declares the anchor classes and the instances of these 
+      classes which are referenced throughout the policy. An anchor class encapsulates the state of the
+      system managed using policies</p>
+      <p> <strong>Syntax: </strong> Import &lt;qualifier&gt; Class &lt;classname&gt; &lt;instance&gt;,...;</p>
+      <p>The Qualifier is unused by JavaSPL and there can be more than one Import statements</p>
+      
+    </section>        
+    <section id="strgy_stmt">
+      <title> Strategy Statement </title>
+      <p> Allows the policy author to specify which of the sub-policies will be executed at execution time</p>
+      <ul>
+        <li> <em>Execute_All_Applicable:</em> This strategy specifies that all polices with  condition evaluating
+        to true should be executed. The policies are evaluated in the descending order of their priorities. This strategy is useful
+        in conditions when several actions based on several different conditions need to be performed</li>
+        <li><em>Execute_First_Applicable:</em> This strategy specifies that only the policy with the highest priority with its
+        condition evaluating to true should be executed.</li>
+      </ul>
+    
+    </section>
+    <section id="decl_stmt">
+      <title><strong>Declaration Statement</strong>  </title>
+      <p> Allows the policy author to declare constants and macros that can be referenced later on in the policy. Declarations
+       support the paradigm of  <em>declare once and use anywhere</em>. The constants and macros declared are visible
+       within the current policy and other embedded policies. The constants declared in the Declaration section after 
+       the <em>Strategy </em> Statement are visible throughout the policy</p>
+       
+      <p> <strong> Constant Declaration: </strong> As the name suggests declares a constant. The syntax is as follows: </p>
+       <source> &lt;constant&gt; = &lt;expression&gt; </source>
+       <p> The data type of the LHS is determined at compile time as being same as the RHS. During evaluation of a policy the 
+       RHS expression is evaluated and its result populated in the symbol table entry for the LHS.</p>
+       <source> //Example constant declaration
+       Declaration {
+        x = 2;
+       }
+       </source>
+      
+      <p>  <strong> Macro Declaration: </strong> Macros are actually user defined functions that can be called from within the policy. The Macros
+      can take one or more parameters and return exactly one value. Macros help in simplifying a policy by hiding the complexity of a function
+      in the declaration section. </p>
+      
+      <source> Macro {
+               
+               Name = &lt;string expression&gt;;
+               type = &lt;type constant&gt;;
+               argument = &lt;argumentname:argumenttype&gt;,...;
+               procedure = &lt;expression with type same as the one declared in the type field of Macro&gt;
+               }
+               // type constants of SPL are : Sint8, Sint16, Sint32, Sint64, Real32, Real64, String, DateTime, Boolean, Char16
+      </source>
+      
+      <source>
+        //Example of a Macro Declaration
+        Declaration {
+            Macro   /* macro that calculates avrg of 2 nos */
+            {
+             Name = GetAverage; /* Name of the macro */
+             type = Real64; /* Return type */
+             argument = number1:Sint64,number2:Sint64; /* Input parameters and types */
+             procedure = (number1 + number2) / 2 /* Actual code */
+            }
+        
+        // Sample invocation
+        
+        ...
+        Condition {
+          2 > GetAverage(8,4)
+        }
+        
+        }
+      
+      </source>
+      
+      
+    
+    </section>
+    <section id="pol_stmt">
+      <title> <strong>Policy Statement</strong> </title>
+      <p> Consists of a &quot;if&quot; &quot;then&quot; style rule. The &quot;if&quot; is specified using
+      the <em>Condition</em> Statement and the &quot;then&quot; specified using the <em>Decision</em> Statement</p>
+      <p> <strong> Condition Statement:</strong> Consists of a boolean expression. If the Condition statement is absent it is assumed
+      to be true. </p>
+      <source>
+          // Condition example
+          Condition {
+              freeMemory &lt; freememorythreshold
+          
+          }
+      
+      
+      </source>
+      
+      <p> <strong> Decision Statement: </strong> Is a required statement that consists of one or more actions
+      arranged in a sequence using the decision operators. </p>
+      
+      <p> <strong> Types of Actions:</strong></p>
+      <ul>
+        <li> Invoke a method on the imported anchor class instance. 
+            <p>&lt;instancename&gt;.&lt;method name&gt;(&lt;expression&gt;[,&lt;expression&gt;]*) &lt;boolean operator&gt; &lt;numeric return code&gt;</p>
+             <source>
+              // Example of invoke method action
+              anchorInstance1.method1(&quot;xx&quot;, 2) == 0
+
+             </source>
+
+        </li>
+        <li>
+          Modify the properties of the imported anchor class instance.
+          <p> Set(&lt;instanceName&gt;.&lt;argument name&gt;=&lt;expression&gt;[,&lt;argument name&gt; = &lt;expression&gt;]*)</p>
+          <source>
+              //Example of set property action
+              Set(anchorInstance1.property1 = 2, anchorInstance1.property2 = &quot;x&quot;)
+          </source>
+        
+        </li>
+        <li>
+          Invoke a custom action. Custom actions are user created actions that are made available to the policy runtime as a jar.
+          The ability to define custom actions enables the SPL language to be extended or customized for a user's environment.
+          <p> &lt;custom action name&gt;(&lt;expression&gt;[,&lt;expression&gt;]*)      </p>
+          <source>
+            //Example of a custom action
+            SendMail("xxx@mail.com","yyy@mail.com","hello","hi how are you?")
+          
+          </source>
+          
+          
+        
+        </li>
+      
+      
+      </ul>
+      <p> <strong>Ordering the Actions:</strong></p>
+      <ul>
+        <li> 
+          <p> If-Then action ordering. </p>
+          <p> Execute action block1 if that succeeds then execute action block2. The result of executing the action block2
+          will be returned. If action block1 execution fails return without execution action block2 with failure. </p>
+          <p> &lt;action block1&gt; -&gt; &lt;action block2&gt; </p>
+          <source>
+            // If-Then action
+            Decision { //Clean up the system and if that succeeds send out an email
+               system.cleanup() -> SendMail(...)
+            }
+            
+          </source>
+          <note> An action is deemed a success if no exceptions are thrown and if the returned value satisfies
+          the constant boolean expression.</note>  
+        </li>
+        <li> 
+          <p> Concurrency &quot;some semantics &quot; action ordering. </p>
+          <p> Both action blocks are executed concurrently. If either of the action blocks executes successfully the 
+          entire execution is deemed successful.</p>
+          <p> &lt;action block1&gt; || &lt;action block2&gt; </p>
+          <source>
+            // Concurrency some semantics action
+            Decision { //Clean up the system and send out an email
+               system.cleanup() || SendMail(...)
+            }
+            
+          </source>
+          
+        </li>
+        <li> 
+          <p> Concurrency &quot;all semantics &quot; action ordering. </p>
+          <p> Both action blocks are executed concurrently. Both action blocks should execute successfully for 
+          entire execution to be deemed successful.</p>
+          <p> &lt;action block1&gt; &amp;&amp; &lt;action block2&gt; </p>
+          <source>
+            // Concurrency all semantics action
+            Decision { //Clean up the system and send out an email
+               system.cleanup() &amp;&amp; SendMail(...)
+            }
+            
+          </source>
+         
+        </li>
+        <li> 
+          <p> Conditional action ordering. </p>
+          <p> Action block1 is executed first if that fails only then action block2 is executed. If action block1 succeeds then
+          the block returns with success, if block 1 fails then the result of execution will be whatever block2 returns.</p>
+          <p> &lt;action block1&gt; | &lt;action block2&gt; </p>
+          <source>
+            // Conditional action
+            Decision { //Clean up the system if that fials send out an email
+               system.cleanup() | SendMail(...)
+            }
+            
+          </source>
+         
+        </li>
+       
+      </ul>
+      
+      <p> <strong> Priority: </strong> Priority is an integral value assigned to each policy that determines the relative
+      order of execution among subpolicies. Higher number implies higher priority</p>
+      <source>
+        Policy {
+        ...
+        }1;
+      
+      </source>
+    </section>  
+    
+	</section>
+	<section id="datatypes">
+	<title> SPL Data Types </title>
+	<p> SPL supports all the basic Java data types along with the arrays of the data types </p>
+	<table>
+    <caption> SPL and Java data types comparison</caption>
+          <tr>
+            <th>SPL Data Type</th>
+            <th>Java Data Type</th>
+            <th>Notes </th>
+          </tr>
+          <tr>
+            <td><strong>Sint8</strong></td>
+            <td>byte</td>
+            <td></td>
+          </tr>
+          <tr>
+            <td><strong>Sint16</strong></td>
+            <td>short</td>
+            <td></td>
+          </tr>
+          <tr>
+            <td><strong>Sint32</strong></td>
+            <td>int</td>
+            <td></td>
+          </tr>
+          <tr>
+            <td><strong>Sint64</strong></td>
+            <td>long</td>
+            <td></td>
+          </tr>
+          <tr>
+            <td><strong>Real32</strong></td>
+            <td>float</td>
+            <td></td>
+          </tr>
+          <tr>
+            <td><strong>Real64</strong></td>
+            <td>double</td>
+            <td></td>
+          </tr>
+          <tr>
+            <td><strong>Char16</strong></td>
+            <td>char</td>
+            <td></td>
+          </tr>
+          <tr>
+            <td><strong>String</strong></td>
+            <td>String</td>
+            <td></td>
+          </tr>
+          <tr>
+            <td><strong>DateTime</strong></td>
+            <td>Calendar</td>
+            <td></td>
+          </tr>
+          <tr>
+            <td><strong>Reference</strong></td>
+            <td>Java object</td>
+            <td>Any Java object</td>
+          </tr>
+          <tr>
+            <td><strong>Boolean</strong></td>
+            <td>boolean</td>
+            <td></td>
+          </tr>
+	
+	
+	</table>
+	<!--<ul>
+    <li> Is equivalent to a Java byte</li>
+    <li><strong>Sint16</strong> Is equvalent to a Java short</li>
+    <li><strong>Sint32</strong> </li>
+    <li><strong>Sint64</strong></li>
+    <li><strong>Real32</strong></li>
+    <li><strong>Real64</strong></li>
+    <li><strong>Char16</strong></li>
+    <li><strong>String</strong></li>
+    <li><strong>DateTime</strong></li>
+    <li><strong>Reference</strong></li>
+
+	</ul>-->
+	
+	</section>
+	<section id="builtin_ops">
+	<title>SPL Built-in Operators</title>
+	    <p> SPL ships with over a 100 core Operators. These operators are especially useful
+	    while defining complex conditions within a policy. New custom operators can be added to
+	    enhance SPL to work with a user's specific need. </p>
+	    <section id="numeric_ops">
+	    <title> Numeric Operators </title>
+	    <p> These operators perform numeric calculations on numeric operands. The implementation is largely
+	    the encapsulation of the Java Math operations.</p>
+	    <table>
+          <caption> Numeric Operators</caption>
+          <tr>
+            <th>Name</th>
+            <th>Description</th>
+            <th>Syntax</th>
+            <th>Example</th>
+          </tr>
+          <tr>
+            <td><strong>+</strong></td>
+            <td>Returns the sum of two given numeric expressions</td>
+            <td>(&lt;numeric expression1&gt; + &lt;numeric expression2&gt; )</td>
+            <td> 2 + 4 </td>
+          </tr>
+          <tr>
+            <td><strong>/</strong></td>
+            <td>Returns the result of dividing two numeric expressions</td>
+            <td>(&lt;numeric expression1&gt; / &lt;numeric expression2&gt; )</td>
+            <td> 4 / 2 </td>
+          </tr>
+          <tr>
+            <td><strong>*</strong></td>
+            <td>Returns the product of numeric expression1 and numeric expression2 </td>
+            <td>(&lt;numeric expression1&gt; * &lt;numeric expression2&gt;)</td>
+            <td> (2*2) </td>
+          </tr>
+          <tr>
+            <td><strong>-</strong></td>
+            <td>Subtracts numeric argument 2 from numeric argument 1 </td>
+            <td>(&lt;numeric expression1&gt; - &lt;numeric expression2&gt;)</td>
+            <td> (4 - 2) </td>
+          </tr>
+          <tr>
+            <td><strong>Abs</strong></td>
+            <td>Returns the absolute value of the given numeric expression</td>
+            <td>Abs( &lt;numeric expression&gt; )</td>
+            <td> Abs(2.4) </td>
+          </tr>
+          
+          <tr>
+            <td><strong>Ceiling</strong></td>
+            <td>Returns the closest integer greater than or equal to the given numeric expressions</td>
+            <td>Ceiling(&lt;numeric expression&gt;)</td>
+            <td> Ceiling(2.4) </td>
+          </tr>
+          
+          <tr>
+            <td><strong>Exp</strong></td>
+            <td>Returns the exponential value of the given numeric expressions</td>
+            <td>Exp(&lt;numeric expression&gt;)</td>
+            <td> Exp(2) </td>
+          </tr>
+          <tr>
+            <td><strong>Floor</strong></td>
+            <td>Returns the closest integer smaller than or equal to the given numeric expressions</td>
+            <td>Floor(&lt;numeric expression&gt;)</td>
+            <td> Floor(2.4) </td>
+          </tr>
+          <tr>
+            <td><strong>Ln</strong></td>
+            <td>Returns the natural log of the given numeric expressions</td>
+            <td>Ln(&lt;numeric expression&gt;)</td>
+            <td> Ln(2.4) </td>
+          </tr>
+          <tr>
+            <td><strong>Log10</strong></td>
+            <td>Returns the log to the base 10 of the given numeric expressions</td>
+            <td>Log10(&lt;numeric expression&gt;)</td>
+            <td> Log10(2.4) </td>
+          </tr>
+          <tr>
+            <td><strong>Mod</strong></td>
+            <td>Returns the remainder after diving numeric expression1 with numeric expression2</td>
+            <td>(&lt;numeric expression1&gt; % &lt;numeric expression2&gt;)</td>
+            <td> (4%2) </td>
+          </tr>
+          <tr>
+            <td><strong>Power</strong></td>
+            <td>Returns the numeric value after raising numeric expression1 to the power of numeric expression2 </td>
+            <td>Power(&lt;numeric expression1&gt; , &lt;numeric expression2&gt;)</td>
+            <td> Power(2,2) </td>
+          </tr>
+          <tr>
+            <td><strong>Rint</strong></td>
+            <td>Rounds to the closest integer </td>
+            <td>Rint(&lt;numeric expression&gt;)</td>
+            <td> Rint(2.4) </td>
+          </tr>
+          <tr>
+            <td><strong>Round</strong></td>
+            <td>Adds 0.5 to the argument and returns the closest integer </td>
+            <td>Round(&lt;numeric expression&gt;)</td>
+            <td> Round(2.4) </td>
+          </tr>
+          <tr>
+            <td><strong>SquareRoot</strong></td>
+            <td>Returns the square root of the given numeric expressions </td>
+            <td>SquareRoot(&lt;numeric expression&gt;)</td>
+            <td> SquareRoot(4) </td>
+          </tr>
+          
+          
+	   </table>
+	   </section>
+	   
+	   <section id="Comp_ops">
+	   <title> Comparison Operators </title>
+	   <p> As the name suggests these operators perform comparisons among type comparable
+	   operands. The return value is always Boolean. </p>
+	   
+	   <table>
+          <caption> Comparison Operators</caption>
+          <tr>
+            <th>Name</th>
+            <th>Description</th>
+            <th>Syntax</th>
+            <th>Example</th>
+          </tr>
+          <tr>
+            <td><strong>==</strong></td>
+            <td>Returns true if the given two comparable expressions are equal</td>
+            <td>( &lt;expression1&gt; == &lt;expression2&gt; )</td>
+            <td> 2 == 2 </td>
+          </tr>
+          <tr>
+            <td><strong>&gt;</strong></td>
+            <td>Returns true if the value of expression1 is greater than the value of expression2. The given two expressions need to be comparable</td>
+            <td>( &lt;expression1&gt; &gt; &lt;expression2&gt; )</td>
+            <td> 5 &gt; 4 </td>
+          </tr>
+          <tr>
+            <td><strong>&gt;=</strong></td>
+            <td>Returns true if the value of expression1 is greater than or equal to the value of expression2. The given two expressions need to be comparable
+            Only permitted on String, numeric or calendar types</td>
+            <td>( &lt;expression1&gt; &gt;= &lt;expression2&gt; )</td>
+            <td> 5 &gt;= 5 </td>
+          </tr>
+          <tr>
+            <td><strong>&lt;</strong></td>
+            <td>Returns true if the value of expression1 is less than the value of expression2. The given two expressions need to be comparable
+            Only permitted on String, numeric or calendar types</td>
+            <td>( &lt;expression1&gt; &lt; &lt;expression2&gt; )</td>
+            <td> 3 &lt; 4 </td>
+          </tr>
+          <tr>
+            <td><strong>&lt;=</strong></td>
+            <td>Returns true if the value of expression1 is less than or equal to the value of expression2. The given two expressions need to be comparable
+            Only permitted on String, numeric or calendar types</td>
+            <td>( &lt;expression1&gt; &lt;= &lt;expression2&gt; )</td>
+            <td> 3 &lt;= 4 </td>
+          </tr>
+          <tr>
+            <td><strong>!=</strong></td>
+            <td>Returns true if the given two comparable expressions are not equal</td>
+            <td>( &lt;expression1&gt; != &lt;expression2&gt; )</td>
+            <td> 2 != 4 </td>
+          </tr>
+
+	   </table>
+	   </section>
+	   <section id="bool_ops">
+	   <title> Boolean Operators </title>
+	   <p>These operators perform Logical operations like And, Or, Xor on Boolean operands.</p>
+	   	   
+	   <table>
+          <caption> Boolean Operators</caption>
+          <tr>
+            <th>Name</th>
+            <th>Description</th>
+            <th>Syntax</th>
+            <th>Example</th>
+          </tr>
+          <tr>
+            <td><strong>&amp;&amp;</strong></td>
+            <td>Returns the result of a logical and on the two given boolean expressions</td>
+            <td>( &lt;boolean expression1&gt; &amp;&amp; &lt;boolean expression2&gt; )</td>
+            <td> true &amp;&amp; true </td>
+          </tr>
+          <tr>
+            <td><strong>!</strong></td>
+            <td>Returns the result of a logical not on the given boolean expression</td>
+            <td>!(&lt;boolean expression&gt; )</td>
+            <td> !(false) </td>
+          </tr>
+          <tr>
+            <td><strong>||</strong></td>
+            <td>Returns the result of a logical Or on the given two boolean expressions</td>
+            <td>(&lt;boolean expression1&gt; || &lt;boolean expression2&gt; )</td>
+            <td> (false || true) </td>
+          </tr>
+          <tr>
+            <td><strong>^</strong></td>
+            <td>Returns the result of a logical XOr on the given two boolean expressions</td>
+            <td>(&lt;boolean expression1&gt; ^ &lt;boolean expression2&gt; )</td>
+            <td> (false ^ true) </td>
+          </tr>
+     </table> 
+     
+     </section>
+     
+     <section id="string_ops">
+     <title> String Operators</title>
+     <p> A group of operators that deal with string operands. These include operators to manipulate strings
+     or test strings for specific patterns. </p>
+     
+     <table>
+          <caption> String Operators</caption>
+          <tr>
+            <th>Name</th>
+            <th>Description</th>
+            <th>Syntax</th>
+            <th>Example</th>
+          </tr>
+          <tr>
+            <td><strong>Concatenate</strong></td>
+            <td>Returns the result of concatenating the two given string expressions</td>
+            <td>Concatenate( &lt;string expression1&gt;, &lt;string expression2&gt; )</td>
+            <td> Concatenate("x","y") </td>
+          </tr>
+          <tr>
+            <td><strong>Contains</strong></td>
+            <td>Returns true if string expression1 contains string expression2</td>
+            <td>Contains( &lt;string expression1&gt;, &lt;string expression2&gt; )</td>
+            <td> Contains("xyz","y") </td>
+          </tr>
+          <tr>
+            <td><strong>ContainsOnlyDigits</strong></td>
+            <td>Returns true if string expression1 only contains digits</td>
+            <td>ContainsOnlyDigits( &lt;string expression1&gt;)</td>
+            <td> ContainsOnlyDigits("100") </td>
+          </tr>
+          <tr>
+            <td><strong>ContainsOnlyLetters</strong></td>
+            <td>Returns true if string expression1 only contains letters</td>
+            <td>ContainsOnlyLetters( &lt;string expression1&gt;)</td>
+            <td> ContainsOnlyLetters("abc") </td>
+          </tr>
+          <tr>
+            <td><strong>ContainsOnlyLettersOrDigits</strong></td>
+            <td>Returns true if string expression1 only contains letters or digts</td>
+            <td>ContainsOnlyLettersOrDigits( &lt;string expression1&gt;)</td>
+            <td> ContainsOnlyLettersOrDigits("abc12") </td>
+          </tr>
+          <tr>
+            <td><strong>EndsWith</strong></td>
+            <td>Returns true if string expression1 ends with string expression2</td>
+            <td>EndsWith( &lt;string expression1&gt;,&lt;string expression2&gt;)</td>
+            <td> EndsWith("abc12","12") </td>
+          </tr>
+          <tr>
+            <td><strong>LeftSubString</strong></td>
+            <td>The LeftSubstring operator returns a prefix of a given string argument by taking three arguments. 
+            How to compute the prefix is determined by the arguments. The first argument MUST be a string and 
+            it indicates the given string, the second argument MUST be either an integer or a string indicating 
+            an offset, and the third argument MUST be a string indicating a direction and is either 
+            &quot;LeftToRight&quot; or &quot;RightToLeft&quot;. When the offset is given by a number, the prefix is determined by 
+            counting the character position by the offset from either left to right (from the beginning of the string) 
+            or from right to left (from the end of the string). In particular, if the direction is "LeftToRight", 
+            the offset indicates the number of characters to return from the beginning of the string. 
+            If the direction is &quot;RightToLeft&quot;, the offset indicates the number of characters to skip from the end of 
+            the string.  For example, leftSubstring(&quot;Mississippi&quot;, 4, &quot;LeftToRight&quot;) returns &quot;Miss&quot;, and 
+            leftSubstring(&quot;Mississippi&quot;, 4, &quot;RightToLeft&quot;) returns &quot;Mississ&quot;. 
+            When the offset is given by a string, the prefix is determined by searching for the offset string in the 
+            original string in the direction specified by the third parameter. The returned substring consists of the 
+            characters on the left side of the offset string</td>
+            <td>LeftSubString( &lt;string expression1&gt;,&lt;numeric expression2&gt;,&lt;string expression3&gt;)</td>
+            <td> LeftSubString("StateSymbolAndZip",2, "LefToRight") //get the state</td>
+          </tr>
+          <tr>
+            <td><strong>MatchesRegExp</strong></td>
+            <td>Returns true if string expression1 matches the regular expression defined by string expression2</td>
+            <td>MatchesRegExp( &lt;string expression1&gt;,&lt;string expression2&gt;)</td>
+            <td> MatchesRegExp(&quot;cat&quot;,&quot;cat&quot;) </td>
+          </tr>
+          <tr>
+            <td><strong>MiddleSubString</strong></td>
+            <td>The MiddleSubstring operator returns a middle portion of a given string using various arguments as filters.
+             How to compute the suffix is determined by the arguments. MiddleSubstring takes four arguments: 
+             original string, first offset, second offset, and direction string. The first and second offsets MUST 
+             be specified either by a number or a string. The direction string can be either &quot;LeftToRight&quot; or &quot;RightToLeft&quot;. 
+             The meaning of the first offset is similar to that in the rightSubstring: it indicates where the resulting 
+             substring starts scanning, either from the left or from the right based on the direction string. The meaning 
+             of the second offset is as follows: if it is a number, it simply indicates the number of characters to return; 
+             if it is a string, it specifies where the substring should end.</td>
+            <td>MiddleSubString( &lt;string expression1&gt;,&lt;expression2&gt;,&lt;expression1&gt;,&lt;string expression1&gt;)</td>
+            <td> middleSubstring(&quot;Mississippi&quot;, 4, 5, &quot;LeftToRight&quot;) = &quot;issip&quot;
+                 middleSubstring(&quot;Mississippi&quot;, 4, 5, &quot;RightToLeft&quot;) = &quot;ippi&quot;
+                 middleSubstring(&quot;Mississippi&quot;, &quot;ss&quot;, 5, &quot;LeftToRight&quot;) = &quot;issip&quot;
+                 middleSubstring(&quot;Mississippi&quot;, &quot;ss&quot;, 5, &quot;RightToLeft&quot;) = &quot;ippi&quot;
+                 middleSubstring(&quot;Mississippi&quot;, 4, &quot;ss&quot;, &quot;LeftToRight&quot;) = &quot;i&quot;
+                 middleSubstring(&quot;Mississippi&quot;, 4, &quot;ss&quot;, &quot;RightToLeft&quot;) = &quot;&quot;
+                 middleSubstring(&quot;Mississippi&quot;, &quot;ss&quot;, &quot;ip&quot;, &quot;LeftToRight&quot;) = &quot;iss&quot;
+                 middleSubstring(&quot;Mississippi&quot;, &quot;ss&quot;, &quot;ip&quot;, &quot;RightToLeft&quot;) = &quot;Missi&quot;
+           </td>
+          </tr>
+           <tr>
+            <td><strong>ReplaceSubString</strong></td>
+            <td>Returns a string resulting from replacing all instances of the
+               fromSubstring with toSubstring in a given string.</td>
+            <td>MatchesRegExp( &lt;string expression1&gt;,&lt;from string expression&gt;,&lt;to string expression&gt;)</td>
+            <td> ReplaceSubString(name,&quot;cat&quot;,&quot;dog&quot;) </td>
+          </tr>
+          <tr>
+            <td><strong>RightSubString</strong></td>
+            <td>The RightSubstring operator returns a suffix of a given string argument by taking three arguments. 
+            How to compute the suffix is determined by the arguments. The first argument MUST be a string and it indicates 
+            the given string, the second argument MUST be either an integer or a string indicating an offset, 
+            and the third argument MUST be a string indicating a direction and is either &quot;LeftToRight&quot; or &quot;RightToLeft&quot;. 
+            When the offset is given by a number, the suffix is determined by simply counting the character position by the 
+            offset from either left to right (from the beginning of the string) or from right to left (from the end of the string). 
+            In particular, if the direction &quot;RightToLeft&quot;, the offset indicates the number of characters to return as a suffix.
+            If the direction is &quot;LeftToRight&quot;, the offset indicates the number of characters to skip from the beginning of the string.
+            Refer the CIM-SPL specification for more details.</td>
+            <td>RightSubString( &lt;string expression1&gt;,&lt;numeric expression2&gt;,&lt;string expression3&gt;)</td>
+            <td> RightSubString(&quot;StateSymbolAndZip&quot;,2, &quot;LefToRight&quot;) //get the zip </td>
+          </tr>
+          <tr>
+            <td><strong>StartsWith</strong></td>
+            <td>Returns true if string expression1 starts with string expression2</td>
+            <td>StartsWith( &lt;string expression1&gt;,&lt;string expression2&gt;)</td>
+            <td> StartsWith(&quot;just a test&quot;,&quot;just&quot;) </td>
+          </tr>
+          <tr>
+            <td><strong>StringLength</strong></td>
+            <td>Returns the string length</td>
+            <td>StringLength( &lt;string expression1&gt;)</td>
+            <td> StringLength(&quot;string&quot;) //6 </td>
+          </tr>
+          <tr>
+            <td><strong>SubString</strong></td>
+            <td>The substring operator takes either two or three arguments. The first and second arguments of this operator 
+            are REQUIRED while the third argument is OPTIONAL. The first argument of this operator MUST be a string argument, 
+            while the second and third argument MUST be integer argument. This operator MUST return the substring of the first
+            string argument, starting at the position indicated by the second numeric argument and going to the end of the 
+            string or the position indicated by the third numeric argument - 1. The position of a character is determined as 
+            follows: The first character is at position 0, the second character is at position 1, and so on.
+            The second numeric argument MUST be greater than or equal to 0. The third numeric argument MUST be greater 
+            than the second numeric argument if the third argument is present. If the starting position given by the second 
+            numeric argument greater than the length of the string, an empty string SHALL be returned. If the third numeric 
+            position is not present, the string starting at the second numeric position until the end of the string SHALL be returned.
+            Refer the CIM-SPL specification for more details.
+            </td>
+            <td>SubString( &lt;string expression1&gt;,&lt;numeric expression2&gt;,[&lt;numeric expression2&gt;])</td>
+            <td> SubString(&quot;Robert Hancock&quot;, 2, 8) //returns bert H </td>
+          </tr>
+          <tr>
+            <td><strong>Word</strong></td>
+            <td>This operator MUST take three argument. The first two argument MUST be of type string and the third 
+            argument MUST be of type number. This operator MUST extracts n words from the first string argument where 
+            the third argument specifies the number n.  Words are defined as text between the separator 
+            substring given by the second argument. Refer the CIM-SPL specification for more details.</td>
+            <td>Word( &lt;string expression1&gt;,&lt;seperator string expression&gt;,&lt;numeric expression&gt;)</td>
+            <td> Word(&quot;alpha&quot;,&quot; &quot;,3) </td>
+          </tr>
+          <tr>
+            <td><strong>ToUpper</strong></td>
+            <td>Converts the argument string to uppercase </td>
+            <td>ToUpper( &lt;string expression1&gt;)</td>
+            <td> ToUpper(&quot;alpha&quot;) // returns &quot;ALPHA&quot; </td>
+          </tr>
+          <tr>
+            <td><strong>ToLower</strong></td>
+            <td>Converts the argument string to lowercase </td>
+            <td>ToLower( &lt;string expression1&gt;)</td>
+            <td> ToLower(&quot;ALPHA&quot;) // returns &quot;alpha&quot; </td>
+          </tr>
+     </table>    
+     
+     </section>    
+     
+     <section id="coll_ops">
+     <title> Collection Operators </title>
+     <p> These are array manipulation and comparison operators. These operators encapsulate the complexity of 
+     traditional programming language constructs like loops and make the language more readable and maintainable.</p>
+     
+     <table>
+          <caption> Collection Operators</caption>
+          <tr>
+            <th>Name</th>
+            <th>Description</th>
+            <th>Syntax</th>
+            <th>Example</th>
+          </tr>
+          <tr>
+            <td><strong>AllInCollection</strong></td>
+            <td>Checks whether all objects in a collection have a given property. The valid operator constant strings are
+            &quot;OR&quot;, &quot;AND&quot;, &quot;XOR&quot;, &quot;NOT_EQUAL&quot;, &quot;EQUAL&quot;, &quot;LESS&quot;, &quot;GREATER&quot;, 
+            &quot;LESS_OR_EQUAL&quot;, &quot;GREATER_OR_EQUAL&quot;</td>
+            <td>AllInCollection( &lt;expression1&gt;, &lt;boolean or relational operator constant string&gt; &lt;collection&gt;)</td>
+            <td> AllInCollection(2,"LESS",arr) //where arr = [5,6,7] returns true</td>
+          </tr> 
+          <tr>
+            <td><strong>AnyInCollection</strong></td>
+            <td>Checks whether any object in a collection has a given property. The valid operator constant strings are
+            &quot;OR&quot;, &quot;AND&quot;, &quot;XOR&quot;, &quot;NOT_EQUAL&quot;, &quot;EQUAL&quot;, &quot;LESS&quot;, &quot;GREATER&quot;, 
+            &quot;LESS_OR_EQUAL&quot;, &quot;GREATER_OR_EQUAL&quot;</td>
+            <td>AnyInCollection( &lt;expression1&gt;, &lt;boolean or relational operator constant string&gt; &lt;collection&gt;)</td>
+            <td> AnyInCollection(2,"LESS",arr) //where arr = [1,6,7] returns true</td>
+          </tr> 
+          <tr>
+            <td><strong>ApplyToCollection</strong></td>
+            <td>Applies an arithmetic operation to each element in a collection. The valid operator constant strings are
+            &quot;PLUS &quot;,&quot;MINUS &quot;,&quot;MULTIPLY&quot;,&quot;DIVIDE&quot;,
+            </td>
+            <td>ApplyToCollection( &lt;expression1&gt;, &lt;arithmetic operator constant string&gt; &lt;numeric collection&gt;)</td>
+            <td> ApplyToCollection(2,"PLUS",arr) //where arr = [1,6,7]  returns arr ] [3,8,9]</td>
+          </tr> 
+          <tr>
+            <td><strong>AvrgInCollection</strong></td>
+            <td>Calculates the average of a numeric collection. </td>
+            <td>AvrgInCollection( &lt;numeric collection&gt;)</td>
+            <td> AvrgInCollection(arr) //where arr = [2,3]  returns 2.5</td>
+          </tr>
+          <tr>
+            <td><strong>CollectionSize</strong></td>
+            <td>Returns the size of the collection </td>
+            <td>CollectionSize( &lt;numeric collection&gt;)</td>
+            <td> CollectionSize(arr) //where arr = [2,3,4]  returns 3</td>
+          </tr> 
+          <tr>
+            <td><strong>EqCollection</strong></td>
+            <td>Returns true if two collections of comparable types are equal </td>
+            <td>EqCollection( &lt;collection1&gt;,&lt;collection2&gt;)</td>
+            <td> EqCollection(arr1,arr2) //where arr1 = [2,3,4] and arr2 = [2,3,4]  returns true</td>
+          </tr> 
+          <tr>
+            <td><strong>InCollection</strong></td>
+            <td>Returns true if the given value is a member of the collection (of compatible type) </td>
+            <td>InCollection( &lt;expression&gt;,&lt;collection&gt;)</td>
+            <td> EqCollection(2,arr1) //where arr1 = [2,3,4]  returns true</td>
+          </tr> 
+          <tr>
+            <td><strong>Max</strong></td>
+            <td>Returns greatest value in a numeric collection </td>
+            <td>Max( &lt;numeric collection&gt;)</td>
+            <td> Max(arr1) //where arr1 = [2,3,4]  returns 4</td>
+          </tr> 
+          <tr>
+            <td><strong>Min</strong></td>
+            <td>Returns smallest value in a numeric collection </td>
+            <td>Min( &lt;numeric collection&gt;)</td>
+            <td> Min(arr1) //where arr1 = [2,3,4]  returns 2</td>
+          </tr> 
+          <tr>
+            <td><strong>MedianInCollection</strong></td>
+            <td>Calculates the median of a numeric collection. </td>
+            <td>MedianInCollection( &lt;numeric collection&gt;)</td>
+            <td> MedianInCollection(arr) //where arr = [2,3,4]  returns 3</td>
+          </tr>
+          <tr>
+            <td><strong>SdInCollection</strong></td>
+            <td>Calculates the standard deviation of a numeric collection. </td>
+            <td>SdInCollection( &lt;numeric collection&gt;)</td>
+            <td> SdInCollection(arr) //where arr = [2,3,4]  returns 0.81</td>
+          </tr>
+          <tr>
+            <td><strong>SubCollection</strong></td>
+            <td>Checks whether collection2 is a subset of collection1</td>
+            <td>SubCollection( &lt;collection1&gt;,&lt;collection2&gt;)</td>
+            <td> SubCollection(arr,arr2) //where arr = [2,3,4] and arr2 = [3,4]  returns true</td>
+          </tr>
+          <tr>
+            <td><strong>Union</strong></td>
+            <td>Creates a union of 2 collections</td>
+            <td>Union( &lt;collection1&gt;,&lt;collection2&gt;)</td>
+            <td> Union(arr,arr2) //where arr = [2,3,4] and arr2 = [5,6]  returns [2,3,4,5,6]</td>
+          </tr>
+      </table>   
+      
+      </section>
+      
+      <section id="calendar_ops">
+      <title> Calendar Operators</title>      
+      <p> These operators allow comparison and retrieval of Date-Time related attributes.</p>
+      <table>
+          <caption> Calendar Operators</caption>
+          <tr>
+            <th>Name</th>
+            <th>Description</th>
+            <th>Syntax</th>
+            <th>Example</th>
+          </tr>
+          <tr>
+            <td><strong>GetCurrentTime</strong></td>
+            <td>Returns the current system date time</td>
+            <td>GetCurrentTime()</td>
+            <td> GetCurrentTime() </td>
+          </tr> 
+          <tr>
+            <td><strong>GetDayOfMonth</strong></td>
+            <td>Returns the day of month for the given datetime argument. The argument must be either
+            a string of the form yyyymmddHHMMSS.mmmmmmsUUU or a java.util.Calendar</td>
+            <td>GetDayOfMonth(&lt;datetime&gt;)</td>
+            <td> GetDayOfMonth(&quot;20071013143920.000000-300&quot;) //returns 13</td>
+          </tr>  
+          <tr>
+            <td><strong>GetDayOfWeek</strong></td>
+            <td>Returns the day of week for the given datetime argument. Sunday = 1, Monday = 2 etc
+             The argument must be eithera string of the form yyyymmddHHMMSS.mmmmmmsUUU or a java.util.Calendar</td>
+            <td>GetDayOfMonth(&lt;datetime&gt;)</td>
+            <td> GetDayOfMonth(&quot;20081013143920.000000-300&quot;) //returns 2</td>
+          </tr>    
+          <tr>
+            <td><strong>GetDayOfWeekInMonth</strong></td>
+            <td>MUST return the day of the week in month of the REQUIRED DATETIME argument as a numeric value, e.g., 
+            the DAY_OF_MONTH 1 through 7 always correspond to DAY_OF_WEEK_IN_MONTH 1; 8 through 14 correspond 
+            to DAY_OF_WEEK_IN_MONTH 2, and so on. DAY_OF_WEEK_IN_MONTH 0 indicates the week before DAY_OF_WEEK_IN_MONTH 1. 
+            Negative values count back from the end of the month, so the last Sunday of a month is specified as 
+            DAY_OF_WEEK = SUNDAY, DAY_OF_WEEK_IN_MONTH = -1.
+             The argument must be eithera string of the form yyyymmddHHMMSS.mmmmmmsUUU or a java.util.Calendar</td>
+            <td>GetDayOfWeekInMonth(&lt;datetime&gt;)</td>
+            <td> GetDayOfWeekInMonth(&quot;20081013143920.000000-300&quot;) //returns 2</td>
+          </tr>  
+          <tr>
+            <td><strong>GetDayOfYear</strong></td>
+            <td>Returns the day of year for the given datetime argument. 
+             The argument must be eithera string of the form yyyymmddHHMMSS.mmmmmmsUUU or a java.util.Calendar</td>
+            <td>GetDayOfMonth(&lt;datetime&gt;)</td>
+            <td> GetDayOfMonth(&quot;20080113143920.000000-300&quot;) //returns 13</td>
+          </tr>
+          <tr>
+            <td><strong>GetHour12</strong></td>
+            <td>Returns the hour for the given datetime argument in 12 hr format. 
+             The argument must be eithera string of the form yyyymmddHHMMSS.mmmmmmsUUU or a java.util.Calendar</td>
+            <td>GetHour12(&lt;datetime&gt;)</td>
+            <td> GetHour12(&quot;20080113143920.000000-300&quot;) //returns 2</td>
+          </tr>
+          <tr>
+            <td><strong>GetHour24</strong></td>
+            <td>Returns the hour for the given datetime argument in 24 hr format. 
+             The argument must be eithera string of the form yyyymmddHHMMSS.mmmmmmsUUU or a java.util.Calendar</td>
+            <td>GetHour12(&lt;datetime&gt;)</td>
+            <td> GetHour12(&quot;20080113143920.000000-300&quot;) //returns 14</td>
+          </tr>
+          <tr>
+            <td><strong>GetMillisecond</strong></td>
+            <td>Returns the millisecond for the given datetime argument. 
+             The argument must be eithera string of the form yyyymmddHHMMSS.mmmmmmsUUU or a java.util.Calendar</td>
+            <td>GetHour12(&lt;datetime&gt;)</td>
+            <td> GetHour12(&quot;20080113143920.000234-300&quot;) //returns 234</td>
+          </tr>
+          <tr>
+            <td><strong>GetMinute</strong></td>
+            <td>Returns the minute for the given datetime argument. 
+             The argument must be eithera string of the form yyyymmddHHMMSS.mmmmmmsUUU or a java.util.Calendar</td>
+            <td>GetMinute(&lt;datetime&gt;)</td>
+            <td> GetMinute(&quot;20080113143920.000234-300&quot;) //returns 39</td>
+          </tr>
+          <tr>
+            <td><strong>GetMonth</strong></td>
+            <td>Returns the month for the given datetime argument. 
+             The argument must be eithera string of the form yyyymmddHHMMSS.mmmmmmsUUU or a java.util.Calendar</td>
+            <td>GetMonth(&lt;datetime&gt;)</td>
+            <td> GetMonth(&quot;20080113143920.000234-300&quot;) //returns 1</td>
+          </tr>
+          <tr>
+            <td><strong>GetSecond</strong></td>
+            <td>Returns the second for the given datetime argument. 
+             The argument must be eithera string of the form yyyymmddHHMMSS.mmmmmmsUUU or a java.util.Calendar</td>
+            <td>GetSecond(&lt;datetime&gt;)</td>
+            <td> GetSecond(&quot;20080113143920.000234-300&quot;) //returns 20</td>
+          </tr>
+          <tr>
+            <td><strong>GetWeekOfMonth</strong></td>
+            <td>Returns the week within the month for the given datetime argument. 
+             The argument must be eithera string of the form yyyymmddHHMMSS.mmmmmmsUUU or a java.util.Calendar</td>
+            <td>GetWeekOfMonth(&lt;datetime&gt;)</td>
+            <td> GetWeekOfMonth(&quot;20080113143920.000234-300&quot;) //returns 2</td>
+          </tr>
+          <tr>
+            <td><strong>GetWeekOfYear</strong></td>
+            <td>Returns the week of the year for the given datetime argument. 
+             The argument must be eithera string of the form yyyymmddHHMMSS.mmmmmmsUUU or a java.util.Calendar</td>
+            <td>GetWeekOfYear(&lt;datetime&gt;)</td>
+            <td> GetWeekOfYear(&quot;20080113143920.000234-300&quot;) //returns 2</td>
+          </tr>
+          <tr>
+            <td><strong>GetYear</strong></td>
+            <td>Returns the year for the given datetime argument. 
+             The argument must be eithera string of the form yyyymmddHHMMSS.mmmmmmsUUU or a java.util.Calendar</td>
+            <td>GetYear(&lt;datetime&gt;)</td>
+            <td> GetYear(&quot;20080113143920.000234-300&quot;) //returns 2008</td>
+          </tr>
+          <tr>
+            <td><strong>IsAfter</strong></td>
+            <td>Returns true if date argument1 is after date argument2. 
+             The argument must be eithera string of the form yyyymmddHHMMSS.mmmmmmsUUU or a java.util.Calendar</td>
+            <td>IsAfter(&lt;datetime1&gt;,&lt;datetime2&gt;)</td>
+            <td> IsAfter(&quot;20080113143920.000234-300&quot;,&quot;20070113143920.000234-300&quot;) //returns true</td>
+          </tr>
+          <tr>
+            <td><strong>IsBefore</strong></td>
+            <td>Returns true if date argument1 is before date argument2. 
+             The argument must be eithera string of the form yyyymmddHHMMSS.mmmmmmsUUU or a java.util.Calendar</td>
+            <td>IsBefore(&lt;datetime1&gt;,&lt;datetime2&gt;)</td>
+            <td> IsBefore(&quot;20080113143920.000234-300&quot;,&quot;20070113143920.000234-300&quot;) //returns false</td>
+          </tr>
+          <tr>
+            <td><strong>IsWithin</strong></td>
+            <td>Returns true if date argument1 is within date argument2 and argument3. 
+             The arguments must be eithera string of the form yyyymmddHHMMSS.mmmmmmsUUU or a java.util.Calendar</td>
+            <td>IsWithin(&lt;datetime1&gt;,&lt;datetime2&gt;,&lt;datetime3&gt;)</td>
+            <td>IsWithin(&quot;20070113143920.000234-300&quot;,&quot;20060113143920.000234-300&quot;,&quot;20080113143920.000234-300&quot;) //returns false</td>
+          </tr>
+      </table>  
+      
+      </section>
+      
+      <section id="Unary_ops">
+      <title> Unary Operators</title>
+      <p> As the name suggests these operators require only a single operand.</p>
+      <table>
+          <caption> Unary Operators</caption>
+          <tr>
+            <th>Name</th>
+            <th>Description</th>
+            <th>Syntax</th>
+            <th>Example</th>
+          </tr>
+          <tr>
+            <td><strong>Unary Minus operator</strong></td>
+            <td>Negates a numeric expression</td>
+            <td>-(&lt;expression&gt;)</td>
+            <td> -(2+4)</td>
+          </tr> 
+          <tr>
+            <td><strong>Unary Plus operator</strong></td>
+            <td>Leaves a numeric expression unchanged</td>
+            <td>+(&lt;expression&gt;)</td>
+            <td> +(2+4)</td>
+          </tr>  
+          <tr>
+            <td><strong>Unary Not operator</strong></td>
+            <td>Negates a boolean expression</td>
+            <td>!(&lt;boolean expression&gt;)</td>
+            <td> !(true)</td>
+          </tr> 
+      </table>   
+      
+      </section>
+      
+      <section id="Cast_ops">
+      <title> Cast Operators </title>
+      <p> These are transformation operators that allow legal conversions between
+      different data types. Note: General rules of widening and shortening conversions apply. </p>
+      <table>
+          <caption> Cast Operators</caption>
+          <tr>
+            <th>Name</th>
+            <th>Description</th>
+            <th>Syntax</th>
+            <th>Example</th>
+          </tr>
+          <tr>
+            <td><strong>ToBoolean</strong></td>
+            <td>Converts an expression to boolean</td>
+            <td>ToBoolean(&lt;expression&gt;)</td>
+            <td> ToBoolean(&quot;true&quot;) // returns true</td>
+          </tr>
+          <tr>
+            <td><strong>ToREAL32</strong></td>
+            <td>Converts an expression to float</td>
+            <td>ToReal32(&lt;expression&gt;)</td>
+            <td> ToReal32(4) // returns 4.0</td>
+          </tr> 
+          <tr>
+            <td><strong>ToREAL64</strong></td>
+            <td>Converts an expression to double</td>
+            <td>ToReal64(&lt;expression&gt;)</td>
+            <td> ToReal64(4) // returns 4.0</td>
+          </tr> 
+          <tr>
+            <td><strong>ToSINT16</strong></td>
+            <td>Converts an expression to short</td>
+            <td>ToSINT16(&lt;expression&gt;)</td>
+            <td> ToSINT16(4) // returns 4</td>
+          </tr>
+          <tr>
+            <td><strong>ToSINT32</strong></td>
+            <td>Converts an expression to int</td>
+            <td>ToSINT32(&lt;expression&gt;)</td>
+            <td> ToSINT32(4.0) // returns 4</td>
+          </tr>
+          <tr>
+            <td><strong>ToSINT64</strong></td>
+            <td>Converts an expression to long</td>
+            <td>ToSINT64(&lt;expression&gt;)</td>
+            <td> ToSINT64(4) // returns 4</td>
+          </tr>
+          <tr>
+            <td><strong>ToSINT8</strong></td>
+            <td>Converts an expression to byte</td>
+            <td>ToSINT8(&lt;expression&gt;)</td>
+            <td> ToSINT8(4) // returns 4</td>
+          </tr>
+          <tr>
+            <td><strong>ToString</strong></td>
+            <td>Converts an expression to string</td>
+            <td>ToString(&lt;expression&gt;)</td>
+            <td> ToString(4) // returns &quot;4&quot;</td>
+          </tr>
+       </table>  
+       </section>  
+	    
+	</section>
+	<section id="builtin_actions">
+    <title>Built in Actions </title>
+    <p> SPL comes out of the box with a set of Actions. Users can extend the SPL action set by adding
+    their own custom actions. </p>
+    <table>
+          <caption> Core SPL Actions</caption>
+          <tr>
+            <th>Name</th>
+            <th>Description</th>
+            <th>Syntax</th>
+            <th>Example</th>
+          </tr>
+          <tr>
+            <td><strong>ReturnValues</strong></td>
+            <td>Allows the objects to be returned after policy execution.</td>
+            <td>ReturnValues(&lt;expression&gt;,[&lt;expression&gt;]*)</td>
+            <td> ReturnValues(&quot;xx&quot;) // returns String &quot;xx&quot;</td>
+          </tr>
+          <tr>
+            <td><strong>SendMail</strong></td>
+            <td>Sends an email to the given email address with the given subject and message body.
+            Note: SendMail is not a core action but is provided as an example of a custom action.
+            </td>
+            <td>SendMail(&lt;from address string expression&gt;,&lt;to address string expression&gt;,&lt;subject string expression&gt;,&lt;message body string expression&gt;)</td>
+            <td> SendMail(&quot;from@mail.com&quot;,&quot;to@mail.com&quot;,&quot;hi&quot;,&quot;whaddup?&quot;) </td>
+          </tr>
+          <tr>
+            <td><strong>CommandLineExecution</strong></td>
+            <td>Executes a shell or batch command.
+            Note: CommandLineExecution is not a core action but is provided as an example of a custom action.
+            </td>
+            <td>CommandLineExecution(&lt;string command expression&gt;)</td>
+            <td> CommandLineExecution(&quot;cleanmgr /sagerun:128&quot;) </td>
+          </tr>
+    </table>
+	
+	</section>	
+	<section id="refs">
+	<title> References </title>
+	<ul>
+    <li><a href="http://www.dmtf.org/standards/published_documents/DSP0231.pdf">CIM-SPL Specification</a> The CIM-SPL specification</li>
+	</ul>
+	
+	</section>
+      
+  
+    
+  </body>
+</document>

Propchange: incubator/imperius/site/src/documentation/content/xdocs/docs/spl_reference.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: incubator/imperius/site/src/documentation/content/xdocs/site.xml
URL: http://svn.apache.org/viewvc/incubator/imperius/site/src/documentation/content/xdocs/site.xml?rev=618755&r1=618754&r2=618755&view=diff
==============================================================================
--- incubator/imperius/site/src/documentation/content/xdocs/site.xml (original)
+++ incubator/imperius/site/src/documentation/content/xdocs/site.xml Tue Feb  5 11:28:59 2008
@@ -50,6 +50,7 @@
 </download>
   <documentation label="Documentation" href="docs/" tab="documentation">
       <gettingstarted label="Getting Started" href="getting_started.html" description="Get Started"/>
+      <splreference label="SPL Language Reference" href="spl_reference.html" description="SPL Language Reference"/>
       <usersguide label="JavaSPL User Guide" href="javaspl_user_guide.html" description="User Guide"/>
       <editorguide label="SPL Editor Guide" href="spl_editor_guide.html" description="Editor Guide"/>
   </documentation>

Modified: incubator/imperius/site/src/documentation/content/xdocs/tabs.xml
URL: http://svn.apache.org/viewvc/incubator/imperius/site/src/documentation/content/xdocs/tabs.xml?rev=618755&r1=618754&r2=618755&view=diff
==============================================================================
--- incubator/imperius/site/src/documentation/content/xdocs/tabs.xml (original)
+++ incubator/imperius/site/src/documentation/content/xdocs/tabs.xml Tue Feb  5 11:28:59 2008
@@ -32,6 +32,8 @@
   -->
   <tab id="" label="Home" dir="" indexfile="index.html"/>
   <tab id="download" label="Download" dir="download" indexfile="download.html"/>
+  <tab id="documentation" label="Documentation" dir="docs" indexfile="getting_started.html"/>
+  <tab id="community" label="Community" dir="community" indexfile="contribute.html"/>
  
   
 <!-- Add new tabs here, eg:

Modified: incubator/imperius/site/src/documentation/resources/images/Thumbs.db
URL: http://svn.apache.org/viewvc/incubator/imperius/site/src/documentation/resources/images/Thumbs.db?rev=618755&r1=618754&r2=618755&view=diff
==============================================================================
Binary files - no diff available.

Modified: incubator/imperius/site/src/documentation/skinconf.xml
URL: http://svn.apache.org/viewvc/incubator/imperius/site/src/documentation/skinconf.xml?rev=618755&r1=618754&r2=618755&view=diff
==============================================================================
--- incubator/imperius/site/src/documentation/skinconf.xml (original)
+++ incubator/imperius/site/src/documentation/skinconf.xml Tue Feb  5 11:28:59 2008
@@ -112,7 +112,7 @@
   @location ("page","menu","page,menu", "none")
    Where to show the TOC.
   -->
-  <toc max-depth="2" min-sections="1" location="page"/>
+  <toc max-depth="3" min-sections="1" location="page"/>
 <!-- Heading types can be clean|underlined|boxed  -->
   <headings type="boxed"/>
 <!-- The optional feedback element will be used to construct a