configurationengine/doc/plugins/ruleml-plugin/ruleplugin.rst
author terytkon
Thu, 11 Mar 2010 17:04:37 +0200
changeset 0 2e8eeb919028
child 3 e7e0ae78773e
permissions -rw-r--r--
Adding EPL version of configurationengine.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
     1
User guide for Rule Plugin usage in ConE
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
     2
----------------------------------------
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
     3
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
     4
Introduction
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
     5
'''''''''''''
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
     6
This page describes how to use ConE Rule plugin. With rule plugin one may set rule configuration 
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
     7
for the values in the confml. So for ex. one may have a case where is one confml value is been setted
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
     8
and one may create a rule configuration that if this value is for ex. 'foo' then some other value is
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
     9
'bar'. Value may be required or configures. 
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    10
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    11
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    12
Creating a rule configuration file
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    13
''''''''''''''''''''''''''''''''''
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    14
Create a new file a example.ruleml and set it's file encoding to UTF-8.
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    15
Place the file in the impml folder in configuration project.
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    16
The file is a XML base file. 
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    17
First set the encoding tag 
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    18
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    19
.. code-block:: xml
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    20
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    21
  <?xml version="1.0" encoding="UTF-8"?>* 
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    22
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    23
and then create a root tag
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    24
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    25
.. code-block:: xml
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    26
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    27
  <ruleml xmlns="http://www.s60.com/xml/ruleml/1">*
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    28
 
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    29
give a set of rules for ex. 
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    30
 
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    31
.. code-block:: xml
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    32
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    33
  <rule>mms.imagesize == 'large' configures pd.ref1 = True and pd.ref2 = True</rule>*
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    34
 
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    35
and close the ruleml tag.
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    36
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    37
One may say use several boolean operators for the configuration rule like for ex.
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    38
 
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    39
.. code-block:: xml
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    40
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    41
  and, or, ==, !=* 
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    42
 
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    43
Like for ex.
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    44
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    45
.. code-block:: xml
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    46
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    47
  <rule>mms.imagesize == 'large' configures pd.ref1 = True and pd.ref2 = True</rule>*
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    48
 
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    49
means that if reference link mms/imagesize  in some confml file is set to large then reference 
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    50
link pd/ref1 value is true and pd/ref2 value is set to true also.
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    51
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    52
**All in all one may create a dependency like project configuration with ruleml files.**  
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    53
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    54
Ruleml version 2 adds support for calling `Python <http://www.python.org/doc/2.5/>`_ expressions from rules. Python expression are defined between ``{%`` and ``%}``:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    55
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    56
.. code-block:: xml
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    57
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    58
  <rule>feat1.setting2 == True configures feat2.setting2 = {% ${feat3.setting2} %}</rule>
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    59
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    60
Expression return a result, that can be used in rule e.g. to set a value to some setting in configuration. These expression can be used to create more complex logic into rules that is not possible with standard rule expressions. Inside eval expressions features and feature's values can be accessed by following syntax:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    61
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    62
Accesses to the value::
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    63
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    64
  ${Feature.Setting}
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    65
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    66
Accesses to the feature object::
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    67
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    68
  @{Feature.Setting}
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    69
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    70
Python functions or constants that can be accessed inside expressions can be defined by ``<eval_globals>`` elements:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    71
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    72
.. code-block:: xml
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    73
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    74
  <eval_globals>
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    75
  def my_function1(attribute):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    76
      return attribute + 1
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    77
  </eval_globals>
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    78
  
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    79
  <eval_globals>CONST_1 = "my constant"</eval_globals>
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    80
  
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    81
  <eval_globals file=".scripts/evals_in_file.py"/>
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    82
  
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    83
Definitions can be inside <eval_globals> elements or definitions can be in separate file referenced with ``file`` attribute.
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    84
The path specified in this attribute is relative to the RuleML implementation file. So, for example, if your implementation
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    85
file's location is ``some/layer/implml/my_rules.ruleml``, the actual path specified in the above example would be
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    86
``some/layer/implml/.scripts/evals_in_file.py``. It is recommended to place the scripts under a directory beginning
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    87
with a dot, so that the plug-in loader does not attempt to load the .py file as an implementation (files and directories beginning
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    88
with a dot are ignored in the implementation loading phase).
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    89
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    90
Running
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    91
'''''''''''''''''''''
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    92
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    93
::
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    94
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    95
  cone generate -p someproject.cpf -o c:/temp/coneoutput -i rulemlfile.ruleml
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    96
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    97
Generates files out of configuration file and takes the implementation rulemlfile.ruleml in concern,
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    98
and the output is to been set to -o given folder 
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    99
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   100
for more example see the cone documentation
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   101
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   102
Examples
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   103
'''''''''
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   104
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   105
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   106
**Ruleml version 1 file example**
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   107
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   108
.. code-block:: xml
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   109
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   110
  <?xml version="1.0" encoding="UTF-8"?>
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   111
  <ruleml xmlns="http://www.s60.com/xml/ruleml/1">
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   112
  <rule>imaker.imagetarget configures imakerapi.outputLocation = imaker.imagetarget</rule>
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   113
  <rule>mms.imagesize == 'large' configures pd.ref1 = True and pd.ref2 = True</rule>
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   114
  <rule>mms.imagesize == 'small' configures pd.ref1 = False and pd.ref2 = True</rule>
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   115
  <rule>mms.imagesize == 'extrasmall' configures pd.ref1 = False and pd.ref2 = False</rule>
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   116
  <rule>mms.imagesize == 'extralarge' configures pd.ref1 = True and pd.ref2 = False</rule>
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   117
  </ruleml>
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   118
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   119
**What do the example ruleml file means**
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   120
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   121
The example file set the values upon the image size. First it sets the iMaker output
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   122
location target and then it starts to set the mms message image size settings. So if for ex.
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   123
*mms/imagesize* refence link value in confml file is set to *extralarge* then the value of
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   124
*pd/ref1* is set to *true* and the value *pd/ref2* is set to false.
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   125
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   126
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   127
**Ruleml version 2 file example**
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   128
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   129
.. code-block:: xml
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   130
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   131
  <?xml version="1.0" encoding="UTF-8"?>
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   132
  <ruleml xmlns="http://www.s60.com/xml/ruleml/2">
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   133
  <rule>feat1.setting1 == 'somevalue' configures feat2.setting1 = {% len( ${feat3.setting1} ) %}</rule>
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   134
  <rule>feat1.setting2 == True configures feat2.setting2 = {% my_function1( ${feat3.setting2} ) %}</rule>
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   135
  <rule>feat1.setting3 == True configures feat2.setting3 = {% CONST_1 %}</rule>
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   136
  <rule>{% my_function2( ${feat1.setting4} ) %} configures feat2.setting4 = False</rule>
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   137
  <rule>{% @{feat1.setting5}.get_type() %} == 'int' configures feat2.setting5 = 'integer'</rule>
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   138
  <rule>feat1.setting6 == True configures feat2.setting6 = {% '0x%08X' % ${feat2.setting6} %}</rule>
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   139
  <eval_globals>
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   140
  def my_function1(attribute):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   141
      return attribute + 1
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   142
  def my_function2(attribute):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   143
      if attribute == 'abc':
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   144
          return True
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   145
      else:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   146
          return False
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   147
  </eval_globals>
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   148
  <eval_globals>
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   149
  CONST_1 = "my constant"
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   150
  </eval_globals>
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   151
  <eval_globals file=".scripts/evals_in_file.py"/>
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   152
  </ruleml>
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   153
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   154
XSD
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   155
'''''''''
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   156
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   157
Ruleml version 1: :download:`ruleml.xsd </xsd/ruleml.xsd>`
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   158
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   159
Ruleml version 2: :download:`ruleml2.xsd </xsd/ruleml2.xsd>`
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   160
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   161
FAQ
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   162
'''''''''
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   163
This will be updated based on the questions.