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 <namespace> Class <Class Name> : <instances>*; (one or more)
+ Strategy <strategy>
+ Policy (one or more)
+ {
+ Declaration {
+ <List of constant definition> (Optional)
+ <List of macro definitions> (Optional)
+ }
+ Condition { (Optional)
+ <If Condition> /* java-like boolean expression */
+ }
+ Decision { (Required)
+ <Then Decision > /* sequence of actions */
+ /* invocations */
+ }
+ } <priority>;
+
+
+ </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 <qualifier> Class <classname> <instance>,...;</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> <constant> = <expression> </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 = <string expression>;
+ type = <type constant>;
+ argument = <argumentname:argumenttype>,...;
+ procedure = <expression with type same as the one declared in the type field of Macro>
+ }
+ // 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 "if" "then" style rule. The "if" is specified using
+ the <em>Condition</em> Statement and the "then" 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 < 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><instancename>.<method name>(<expression>[,<expression>]*) <boolean operator> <numeric return code></p>
+ <source>
+ // Example of invoke method action
+ anchorInstance1.method1("xx", 2) == 0
+
+ </source>
+
+ </li>
+ <li>
+ Modify the properties of the imported anchor class instance.
+ <p> Set(<instanceName>.<argument name>=<expression>[,<argument name> = <expression>]*)</p>
+ <source>
+ //Example of set property action
+ Set(anchorInstance1.property1 = 2, anchorInstance1.property2 = "x")
+ </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> <custom action name>(<expression>[,<expression>]*) </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> <action block1> -> <action block2> </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 "some semantics " 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> <action block1> || <action block2> </p>
+ <source>
+ // Concurrency some semantics action
+ Decision { //Clean up the system and send out an email
+ system.cleanup() || SendMail(...)
+ }
+
+ </source>
+
+ </li>
+ <li>
+ <p> Concurrency "all semantics " 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> <action block1> && <action block2> </p>
+ <source>
+ // Concurrency all semantics action
+ Decision { //Clean up the system and send out an email
+ system.cleanup() && 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> <action block1> | <action block2> </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>(<numeric expression1> + <numeric expression2> )</td>
+ <td> 2 + 4 </td>
+ </tr>
+ <tr>
+ <td><strong>/</strong></td>
+ <td>Returns the result of dividing two numeric expressions</td>
+ <td>(<numeric expression1> / <numeric expression2> )</td>
+ <td> 4 / 2 </td>
+ </tr>
+ <tr>
+ <td><strong>*</strong></td>
+ <td>Returns the product of numeric expression1 and numeric expression2 </td>
+ <td>(<numeric expression1> * <numeric expression2>)</td>
+ <td> (2*2) </td>
+ </tr>
+ <tr>
+ <td><strong>-</strong></td>
+ <td>Subtracts numeric argument 2 from numeric argument 1 </td>
+ <td>(<numeric expression1> - <numeric expression2>)</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( <numeric expression> )</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(<numeric expression>)</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(<numeric expression>)</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(<numeric expression>)</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(<numeric expression>)</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(<numeric expression>)</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>(<numeric expression1> % <numeric expression2>)</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(<numeric expression1> , <numeric expression2>)</td>
+ <td> Power(2,2) </td>
+ </tr>
+ <tr>
+ <td><strong>Rint</strong></td>
+ <td>Rounds to the closest integer </td>
+ <td>Rint(<numeric expression>)</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(<numeric expression>)</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(<numeric expression>)</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>( <expression1> == <expression2> )</td>
+ <td> 2 == 2 </td>
+ </tr>
+ <tr>
+ <td><strong>></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>( <expression1> > <expression2> )</td>
+ <td> 5 > 4 </td>
+ </tr>
+ <tr>
+ <td><strong>>=</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>( <expression1> >= <expression2> )</td>
+ <td> 5 >= 5 </td>
+ </tr>
+ <tr>
+ <td><strong><</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>( <expression1> < <expression2> )</td>
+ <td> 3 < 4 </td>
+ </tr>
+ <tr>
+ <td><strong><=</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>( <expression1> <= <expression2> )</td>
+ <td> 3 <= 4 </td>
+ </tr>
+ <tr>
+ <td><strong>!=</strong></td>
+ <td>Returns true if the given two comparable expressions are not equal</td>
+ <td>( <expression1> != <expression2> )</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>&&</strong></td>
+ <td>Returns the result of a logical and on the two given boolean expressions</td>
+ <td>( <boolean expression1> && <boolean expression2> )</td>
+ <td> true && true </td>
+ </tr>
+ <tr>
+ <td><strong>!</strong></td>
+ <td>Returns the result of a logical not on the given boolean expression</td>
+ <td>!(<boolean expression> )</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>(<boolean expression1> || <boolean expression2> )</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>(<boolean expression1> ^ <boolean expression2> )</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( <string expression1>, <string expression2> )</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( <string expression1>, <string expression2> )</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( <string expression1>)</td>
+ <td> ContainsOnlyDigits("100") </td>
+ </tr>
+ <tr>
+ <td><strong>ContainsOnlyLetters</strong></td>
+ <td>Returns true if string expression1 only contains letters</td>
+ <td>ContainsOnlyLetters( <string expression1>)</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( <string expression1>)</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( <string expression1>,<string expression2>)</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
+ "LeftToRight" or "RightToLeft". 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 "RightToLeft", the offset indicates the number of characters to skip from the end of
+ the string. For example, leftSubstring("Mississippi", 4, "LeftToRight") returns "Miss", and
+ leftSubstring("Mississippi", 4, "RightToLeft") returns "Mississ".
+ 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( <string expression1>,<numeric expression2>,<string expression3>)</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( <string expression1>,<string expression2>)</td>
+ <td> MatchesRegExp("cat","cat") </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 "LeftToRight" or "RightToLeft".
+ 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( <string expression1>,<expression2>,<expression1>,<string expression1>)</td>
+ <td> middleSubstring("Mississippi", 4, 5, "LeftToRight") = "issip"
+ middleSubstring("Mississippi", 4, 5, "RightToLeft") = "ippi"
+ middleSubstring("Mississippi", "ss", 5, "LeftToRight") = "issip"
+ middleSubstring("Mississippi", "ss", 5, "RightToLeft") = "ippi"
+ middleSubstring("Mississippi", 4, "ss", "LeftToRight") = "i"
+ middleSubstring("Mississippi", 4, "ss", "RightToLeft") = ""
+ middleSubstring("Mississippi", "ss", "ip", "LeftToRight") = "iss"
+ middleSubstring("Mississippi", "ss", "ip", "RightToLeft") = "Missi"
+ </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( <string expression1>,<from string expression>,<to string expression>)</td>
+ <td> ReplaceSubString(name,"cat","dog") </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 "LeftToRight" or "RightToLeft".
+ 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 "RightToLeft", the offset indicates the number of characters to return as a suffix.
+ If the direction is "LeftToRight", 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( <string expression1>,<numeric expression2>,<string expression3>)</td>
+ <td> RightSubString("StateSymbolAndZip",2, "LefToRight") //get the zip </td>
+ </tr>
+ <tr>
+ <td><strong>StartsWith</strong></td>
+ <td>Returns true if string expression1 starts with string expression2</td>
+ <td>StartsWith( <string expression1>,<string expression2>)</td>
+ <td> StartsWith("just a test","just") </td>
+ </tr>
+ <tr>
+ <td><strong>StringLength</strong></td>
+ <td>Returns the string length</td>
+ <td>StringLength( <string expression1>)</td>
+ <td> StringLength("string") //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( <string expression1>,<numeric expression2>,[<numeric expression2>])</td>
+ <td> SubString("Robert Hancock", 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( <string expression1>,<seperator string expression>,<numeric expression>)</td>
+ <td> Word("alpha"," ",3) </td>
+ </tr>
+ <tr>
+ <td><strong>ToUpper</strong></td>
+ <td>Converts the argument string to uppercase </td>
+ <td>ToUpper( <string expression1>)</td>
+ <td> ToUpper("alpha") // returns "ALPHA" </td>
+ </tr>
+ <tr>
+ <td><strong>ToLower</strong></td>
+ <td>Converts the argument string to lowercase </td>
+ <td>ToLower( <string expression1>)</td>
+ <td> ToLower("ALPHA") // returns "alpha" </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
+ "OR", "AND", "XOR", "NOT_EQUAL", "EQUAL", "LESS", "GREATER",
+ "LESS_OR_EQUAL", "GREATER_OR_EQUAL"</td>
+ <td>AllInCollection( <expression1>, <boolean or relational operator constant string> <collection>)</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
+ "OR", "AND", "XOR", "NOT_EQUAL", "EQUAL", "LESS", "GREATER",
+ "LESS_OR_EQUAL", "GREATER_OR_EQUAL"</td>
+ <td>AnyInCollection( <expression1>, <boolean or relational operator constant string> <collection>)</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
+ "PLUS ","MINUS ","MULTIPLY","DIVIDE",
+ </td>
+ <td>ApplyToCollection( <expression1>, <arithmetic operator constant string> <numeric collection>)</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( <numeric collection>)</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( <numeric collection>)</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( <collection1>,<collection2>)</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( <expression>,<collection>)</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( <numeric collection>)</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( <numeric collection>)</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( <numeric collection>)</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( <numeric collection>)</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( <collection1>,<collection2>)</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( <collection1>,<collection2>)</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(<datetime>)</td>
+ <td> GetDayOfMonth("20071013143920.000000-300") //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(<datetime>)</td>
+ <td> GetDayOfMonth("20081013143920.000000-300") //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(<datetime>)</td>
+ <td> GetDayOfWeekInMonth("20081013143920.000000-300") //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(<datetime>)</td>
+ <td> GetDayOfMonth("20080113143920.000000-300") //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(<datetime>)</td>
+ <td> GetHour12("20080113143920.000000-300") //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(<datetime>)</td>
+ <td> GetHour12("20080113143920.000000-300") //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(<datetime>)</td>
+ <td> GetHour12("20080113143920.000234-300") //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(<datetime>)</td>
+ <td> GetMinute("20080113143920.000234-300") //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(<datetime>)</td>
+ <td> GetMonth("20080113143920.000234-300") //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(<datetime>)</td>
+ <td> GetSecond("20080113143920.000234-300") //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(<datetime>)</td>
+ <td> GetWeekOfMonth("20080113143920.000234-300") //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(<datetime>)</td>
+ <td> GetWeekOfYear("20080113143920.000234-300") //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(<datetime>)</td>
+ <td> GetYear("20080113143920.000234-300") //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(<datetime1>,<datetime2>)</td>
+ <td> IsAfter("20080113143920.000234-300","20070113143920.000234-300") //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(<datetime1>,<datetime2>)</td>
+ <td> IsBefore("20080113143920.000234-300","20070113143920.000234-300") //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(<datetime1>,<datetime2>,<datetime3>)</td>
+ <td>IsWithin("20070113143920.000234-300","20060113143920.000234-300","20080113143920.000234-300") //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>-(<expression>)</td>
+ <td> -(2+4)</td>
+ </tr>
+ <tr>
+ <td><strong>Unary Plus operator</strong></td>
+ <td>Leaves a numeric expression unchanged</td>
+ <td>+(<expression>)</td>
+ <td> +(2+4)</td>
+ </tr>
+ <tr>
+ <td><strong>Unary Not operator</strong></td>
+ <td>Negates a boolean expression</td>
+ <td>!(<boolean expression>)</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(<expression>)</td>
+ <td> ToBoolean("true") // returns true</td>
+ </tr>
+ <tr>
+ <td><strong>ToREAL32</strong></td>
+ <td>Converts an expression to float</td>
+ <td>ToReal32(<expression>)</td>
+ <td> ToReal32(4) // returns 4.0</td>
+ </tr>
+ <tr>
+ <td><strong>ToREAL64</strong></td>
+ <td>Converts an expression to double</td>
+ <td>ToReal64(<expression>)</td>
+ <td> ToReal64(4) // returns 4.0</td>
+ </tr>
+ <tr>
+ <td><strong>ToSINT16</strong></td>
+ <td>Converts an expression to short</td>
+ <td>ToSINT16(<expression>)</td>
+ <td> ToSINT16(4) // returns 4</td>
+ </tr>
+ <tr>
+ <td><strong>ToSINT32</strong></td>
+ <td>Converts an expression to int</td>
+ <td>ToSINT32(<expression>)</td>
+ <td> ToSINT32(4.0) // returns 4</td>
+ </tr>
+ <tr>
+ <td><strong>ToSINT64</strong></td>
+ <td>Converts an expression to long</td>
+ <td>ToSINT64(<expression>)</td>
+ <td> ToSINT64(4) // returns 4</td>
+ </tr>
+ <tr>
+ <td><strong>ToSINT8</strong></td>
+ <td>Converts an expression to byte</td>
+ <td>ToSINT8(<expression>)</td>
+ <td> ToSINT8(4) // returns 4</td>
+ </tr>
+ <tr>
+ <td><strong>ToString</strong></td>
+ <td>Converts an expression to string</td>
+ <td>ToString(<expression>)</td>
+ <td> ToString(4) // returns "4"</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(<expression>,[<expression>]*)</td>
+ <td> ReturnValues("xx") // returns String "xx"</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(<from address string expression>,<to address string expression>,<subject string expression>,<message body string expression>)</td>
+ <td> SendMail("from@mail.com","to@mail.com","hi","whaddup?") </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(<string command expression>)</td>
+ <td> CommandLineExecution("cleanmgr /sagerun:128") </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