🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: cn.bbs.comp.xml
Article #206

ΪǶ��ʽ�豸������ִ�еĴ���ģ��(ת��)

#206
From: <Test/>
Date: Sun, 18 Apr 2010 13:49
635 lines
44256 bytes
��飺 Ƕ��ʽϵͳ�ܹ�ʦ�������ٵ���ȫ�ԡ��ɿ��Ժ�����ɷ����Է�����������������ĸ��������������η��Ȼ��ͨ��ʹ�õĹ��ߣ�һ�����������˴��ģ����������Ҳ��ܹ�����ϸ�豸���������ϵͳ��ͼ֮��ƽ����ɡ�����ѧϰ���ʹ�ÿ�Դ��׼������ DITA �� PHP���͹��ߣ����� blob ��ʾ��������һ��ϵͳ����Ļ�������������Щ����

Darwin ��Ϣ���ͻ���ϵ�ṹ��Darwin Information Typing Architecture��DITA��Ϊ��ơ���д������ͳ�������ӡˢ�� Web �ϵĺܶ�����Ϣ������һ�� XML ��ϵ�ṹ�����ṩһ�ַ�ʽ����������֯���κ������֪ʶ��֯��һ��һ�µġ�������ʶ������������Ľṹ�С���������֯��֪ʶ�����ǻ�е��װ��˵�����ͻ��ĸ������̻�ѧ�ܼ����䷽�ȡ�
�������
    DITA��Darwin ��Ϣ���ͻ���ϵ�ṹ
    DOM���ĵ�����ģ��
    JAUS������ϵͳ������ϵ�ṹ
    URI��ͳһ��Դ��ʶ��
    XML������չ�������

    DITA ��һ�� XML ���켯�ϣ���Щ��������ֿ����ڹ���ʹ洢֪ʶ������Ϊ�ı����ķ�ʽ����Щ����������⣨topic���� ��һ����Ϣ��Ԫ������Ϣ���԰�ģ����ҿ��Իش𵥸����⣩����������Щ��������һϵ������֮�䵼���� DITA     ��ͼ��map�� ���ĵ�������֮������໥������
�Ը��concept������Ϊ��ʹ�ø�������Ϊ�����ڲ�Ʒ�����̵���Ҫ��Ϣ�ṩ����֪ʶ���嵥 1 չʾ��������һ�������еĸ������⡣

�嵥 1. �����еĸ�������
                                
<concept id="bearing"> 
     <title>Bearings</title> 
       <conbody> 
          <p>Bearings are a mechanism to minimize friction and 
               loss of rotational energy</p> 
          <example> 
               <p>Common bearings mechanisms</p> 
               <ul> 
                    <li>Ball bearing</li> 
                    <li>Roller bearing</li> 
                    <li>Needle bearing</li> 
               </ul> 
          </example> 
          <p>Fully mechanical bearings require lubrication</p> 
          <example> 
               <p>Common lubricants</p> 
               <ul> 
                    <li>oil</li> 
                    <li>lithium grease</li> 
               </ul> 
          </example> 
     </conbody> 
</concept>

�кü���������ã����DZ����и���Ȥ��������task�����⡣

���� DITA ��������
    DITA ������������������һ����̣���ʵ���ض���Ŀ�ꡣ���仰˵����ش� ������ô�������� ���͵����⡣��Ĺؼ����У�
<prereq>���ṩ��ʼһ������������Ϣ��
<context>���ṩִ��������ı�����Ϣ��
<steps>�����һ���������ִ�е��ض���������������һ����������� <cmd>��Ԫ�أ�����������ɵľ����������
<result>�������Ԥ�ڽ��
<example>��һ����ѡ�����ӣ���ʾ�����ʹ�á�
<postreq>���ɹ���ɸ�����֮�����ִ�е�һЩ��ѡ������

�嵥 2. ʾ����������
                                
<task id='add_auto_oil'>
     <title>Adding oil to an auto engine </title>
     <taskbody>
          <prereq>Oil container with optional opener</prereq>
          <context>Dashboard oil light on or set amount of 
                                      mileage elapsed</context>
          <steps>
               <step id='open_hood'>
                    <cmd>Locate 'Open hood' lever.</cmd>
                    <cmd>Operate 'Open hood' lever.</cmd>
                    <cmd>Raise and retain hood in open position.</cmd>
               </step>
               <step id='open_oil_reserve'>
                    <cmd>Locate oil reserve cap.</cmd>
                    <cmd>Twist open oil reserve cap over
                                           oil reserve opening
                    </cmd> 
               </step>
               <step id='fill_oil_reserve'>
                    <cmd>Locate oil container</cmd>
                    <cmd>Open oil container</cmd>
                    <cmd>Place oil container spout over oil 
                                           reserve opening
                    </cmd>
                    <cmd>Remove oil container when empty</cmd>
               </step>
               <step id='close_oil_reserve'>
                    <cmd>Locate oil reserve cap.</cmd>
                    <cmd>Twist close oil reserve cap over oil 
                                           reserve opening
                    </cmd>
               </step>
               <step id='close_hood'>
                    <cmd>Close and lock hood</cmd>
               </step>
          </steps>
          <result>Dashboard light off or engine running quietly</result>
     </taskbody>
</task>

�ڱ����У����񱻸ı�������һ��ϵͳ��Ȼ��ת����һ�����õĿ�ִ�еı?���÷����Ĺؼ�����ʹ���˹�ϵ��ݿ��е� blob ��ʾ����

���� blob

�ڹ�ϵ��ݿ��У�һ�� blob ��һ�������ƴ���󣬿��Դ��пɱ���������ݣ��������ֵ�����������ƻ���˵�ֽڡ��ַ� �� ʵ�������κ��ֽ����У�ֵ�����Ǵ� 0x00 �� 0xFF��
���磬������һ�� blob �д洢һ��ͼ�����һ�����������������У�����Сͨ�������� 65,536 �ֽڡ������Դ�һ����ַ�洢���ʵ����к���ʱ�ᱻ�ضϡ��ڱ����У����� PHP �� DITA ����� blob �ģ�������ӳ�䵽һ�ֶ����Ƹ�ʽ��

PHP ������

ǰ���ᵽ��DITA �� XML ������ɣ�����һ�������� DITA �������⡣��Ҫ����һ����ˮ�߻��Ĺ��ߣ�������������ṹ������ PHP ���� DOM �����ࡣ������ת����һ�����õĽṹ��ͨ�������� PHP �ű���ǿ������ DOM ��������ɵġ�

�ۺ�

��Ȼ�ؼ�Ԫ�ض��߱��ˣ����ھ͸ý��ܰ�һ���ۺ������ķ����ˡ���Ҫ��˵��DITA ������������ݱ�����Ϊһ�ּ�����ʶ��Ľṹ�������䷽���죨recipe construct����Ȼ��ʹ��һ���䷽����֧�ֵ���ݿ��һ�������������䷽����ת���ɿ�ִ�еĸ�ʽ��

��ǿ DITA ��������

��ǿ����ĵ�һ�����Ǵ��� DITA ��������Ԫ�ص����ݡ��ص� �嵥 2��Ԫ�ص�����ʹ�������ı���ʽ�����뽫�ø�ʽ��Ϊ�ṹ���ġ�������ʶ��ĸ�ʽ��һ�������μ� �嵥 3��

�嵥 3. �����ɸ�ʽ���Ϊ�ṹ����ʽ
                                
<task> 
     <title>[resourceURI]</title> 
     <taskbody>
          <context>[cont_iteration_yes_no]</context>
          <prereq> [resource_list]</prereq>
          <steps>
               <step id=��[stepID]��>
                    <cmd>[precondition]|[action_list]</cmd>
                    ................................
                    <cmd>[precondition]|[action_list]</cmd>
               </step>
               ....................................
               <step id=��[stepID]��>
                    <cmd>[precondition]|[action_list]</cmd>
                    ................................
                    <cmd>[precondition]|[action_list]</cmd>
               </step>
          </steps>
          <result>[resourceURI]</result>
     </taskbody>
</task>

[resource_list] = [resourceURI],[qty] {| [resource_list]} 
[precondition] = [action]([parm_list]) 
[condition] = [action]([parm_list]) 
[action_list] = [condition]->[action]([parm_list]) {;  [action_list]} 
[parm_list] = [parm]{,[parm_list]}               
[parm] = [resourceURI] or [stepID] or [literal] 
[literal] = text or number 
[resourceURI] = URN 
[stepID] = label 
[action] = label  
[qty] = number 
[cont_iteration_yes_no] = iterate or oneshot
iterate = repeat the steps in the sequence they appear continually
oneshot = repeat the steps in the sequence they appear only once

{...} = optional element(s)

ʵ���ϣ������еIJ���ʹ�� <prereq> Ԫ�����г�����Դ����������ָ����˳��ִ�С�<result> ָ�����Դ������ǣ�����������Ľ��� <context> �������ִ�еĴ����йأ�һ�λ��߲���ִ�У���

ʹ�� <cmd> Ԫ���е� precondition �������⣬��ִ����������ಿ��֮ǰ���Ƿ��Ѿ��߱�ij�������������
    if [precondition] is true then perform [action_list]

    ���[action_list] ֻ��һ�����ṹ��������Щ���򣬴��ڷ�ţ�>����ߵIJ�������һ�� Boolean ֵ��true �� false�������ò������� true ֵ����ô���ڷ�ţ�>���ұߵIJ�����ִ�С�
    ����˵ �嵥 2 �����������һ���֣���ת������ �嵥 3 һ�µĸ�ʽʱ���ͱ���� �嵥 4 �еĴ��롣

�嵥 4. �����ң�ؿ��ص��䷽����
                                
<task> 
     <title>urn:auto:oil:access</title> 
     <taskbody> 
          <context>oneshot</context> 
          <prereq>
               urn:robot:sense:image, 1 |
               urn:robot:arm, 2 |
               urn:auto:dashboard:hood_lever, 1 |
               urn:auto:engine:hood, 1 |
               urn:auto:engine:hood_lock, 1 |
               urn:auto:engine:oil_reserve_cap, 1 |
               urn:auto:engine:oil_reserve_intake, 1 |
               urn:robot:storage_pocket, 1
          </prereq> 
          <steps> 
               <step id='open_hood'> 
                    <cmd>
                    always() | always() ->
                         locate(urn:robot:sense:image,
                                urn:auto:dashboard:hood_lever)
                    </cmd>
                    <cmd>
                    always() | always() ->
                    activate(urn:robot:arm,
                              urn:auto:dashboard:hood_lever);
                         locate(urn:robot:sense:image,
                              urn:auto:engine:hood);
                    activate(urn:robot:arm,urn:auto:engine:hood)
                    </cmd>
                    <cmd>
                    fault_detected(urn:robot:sense:image) |
                    always() ->
                    report(urn:robot:sense:image);
                    always() -> shutdown(urn:robot);
                    </cmd> 
                    <cmd>
                    fault_detected(urn:robot:arm) |
                         status(urn:auto:engine:hood, "closed") ->
                         report(urn:robot:arm);
                         always() -> shutdown(urn:robot);
                    </cmd>
                    <cmd>
                    fault_detected(urn:robot:arm)|always() ->
                         lock(urn:robot:arm)
                    </cmd>
               </step>
          </steps>
          <result>urn:auto:engine:oil_reserve</result>
     </taskbody> 
</task>

����
always() = ���Ƿ���һ��ֵ True��
locate(resourceURI, resourceURI) = ʹ�õ�һ����Դ��λ�ڶ�����Դ��
activate(resourceURI, resourceURI) = ʹ�õ�һ����Դ����ڶ�����Դ��
fault_detected(resourceURI) = ���һ����Դ�м�⵽�����������򷵻� True��
report(resourceURI) = �㲥һ����Ϣ��ָ����Դ��״̬��
shutdown(resourceURI) = �ر���Դ��
lock(resourceURI) = ����Դ�IJ��������ڵ�ǰ״̬��
move(resourceURI, resourceURI, resource URI) = ʹ�õ�һ����Դ URI ���ڶ�����Դ URI �ƶ����������Դ URI����������
turn(resourceURI, direction, final_state) = ����һ������˳ʱ�����ʱ�룩��ת��Դ��ֱ����������״̬���򿪻�رգ���
�嵥 4 �������һ���Զ��豸�������ˣ�������ִ�� auto oil filling ����IJ������г��ĺ�����Щ��������һ��֧�ֵ���ݿ��У����ǽ�����ת���ɿ�ִ�б?ʱʹ�õ��Ǹ���ݿ⡣
�ô���չʾ��һ���������񣬼���������ǣ�open_hood��������ǣ�open_oil_reserve������һ�����򿪷�����ǣ��е������ǣ�
ʹ�û����˵�ͼ�񴫸����������ض�λ���Ƹˣ��Դ򿪷�����ǣ�locate ����
ʹ�û����˵��ֱ�����������Ƹˣ�activate ����Ȼ��ʹ��ͼ�񴫸�����λ�������ڷ�������ϵ�λ�ã�locate ����
ʹ�û������ֱ۴򿪷�����ǡ�
�����������������ͼ�񴫸������ֱ۵Ĵ�����Ϊ����������¶��ᱨ�����report ��������ֱ۳����������ֱ۱���е�����ڵ�ǰ״̬��lock �����ڸ�֪��������ʲô����֮ǰ������ʹ�� fault_detected ������ȷ���������Ƿ��ڳ���״̬��
����ʹ�� DITA �������������ı�汾�������κ�Ҳ�漰żȻ���أ������쳣���лָ�����ѭ����̡�����ı�汾Ҳ���䷽����Ļ�
����ȥ��һ�� �嵥 4������������͵Ĺ��������Ĺ�̣��򿪷�����ǡ�������ǡ����͡��ر�����ǡ��رշ�����ǣ�������������ÿһ�������԰����쳣����Ĺ�̡�
��Ҫ��˵������һ���䷽���� �� ��һ����Ԫ�����ݿɱ�����ɿ�ִ�б?�� DITA �������⡣�����䷽���죬��Ҫע��һЩ�������飺
�䷽����������첽��ʽ������һ���䷽���� �� ����˵��һ���䷽��������ڵ�����ִ���߳���������һ���䷽�����ִ�С�
��ˣ�����䷽�������������һ�������񻷾��С�
�����䷽������ͨ�� Uniform Resource Name (URN) Ѱַ�����õģ�����һ���䷽�������Զ�̵�����һ���䷽���� �� ����˵�������õ��䷽������ͨ������Ѱַ�ġ�
��ˣ��䷽�����ִ�пռ�����漰�豸���磬��������Ϊ�������ϵ��첽������в�����

���䷽Ϊ���ĵ����
�䷽�����ǽ���������ת�������ڸ߶ˣ����磬32λ��΢�����������ж����񻷾��Ŀ�ִ�б?��̵Ļ��䷽����������ı��༭������ר�����ڿ����䷽����Ĺ�����������
�䷽���������ڲ��ף����������õ��˸���ԭ���ϣ����в�����밴һ�µ�˳��ִ�У���������װ����ɡ��ڱ����У��䷽����ʹ��һ��ȷ������Դ�Ͳ������ﵽ��Ҫ�Ľ�� �� ����ػ����е�һ����Ʒ���ġ�
��ʼ�䷽������ƹ�̣����г�һ�齫�Լ��ֽ�Ϊ <task> ����ĸ߶˲��������磬һ�����ں決������������������������������������Ϳ�������ͨ�������� �嵥 4 ���ݵ� <task> ���죬ָ�����ԵĻ�ϡ����Ⱥ�ͿĨװ�ò��� �� �Լ���ص�װ����ϡ�
���� �嵥 4 �������ģ��г��ĺ���洢���䷽���쿪����ݿ��С�����ݿ����һ���䷽�����������������䷽���쿪�������ĺ��ġ����ǣ����ȱ����˽��ѱ����䷽�����Ŀ�껷����
RecipeJAUS
����ϵͳ������ϵ�ṹ��Joint Architecture for Autonomous Systems��JAUS��������������U.S. Department of Defense��������һ����׼��Ŀ����������ϵͳ����Ҫ���������֮���ṩһ��һ�µ���Ϣ���ݿ�ܡ����� OpenJAUS���μ� �ο����� �е����ӣ��˽�����Ϣ����������JAUS �Ѿ��ݱ��һ�ֿ�Դ������
JAUS ���ڸ��䷽�����йأ����Զ�����һ������ṹ����΢�������ĵͼ����������еIJ�������һ��һЩ JAUS �����Ѿ����ı����ṩ�䷽�����Ŀ��ƽ̨������ RecipeJAUS������һ����������һ��ִ���̹߳��������ɣ�ǰ�����ڴ����䷽�����������������������ڴ������Ϊ������ִ�е��䷽����Ԫ�ء����ͨ��һ������������ص�֧����ݿ⣬�䷽����ת����һ�� RecipeJAUS �������С�
�����
�䷽Ϊ���ĵ������recipe-centered software��RCS����ݿ�ͨ���䷽������������ʹ�õĺ���ת������Ӧ�� RecipeJAUS �������У�֧���䷽����ı����̡��嵥 5 �ṩ�� RCS ��ݿ��Ԫ��ݽṹ��

�嵥 5. RCS ��ݿ�Ԫ��ݽṹ
                                
# 
#       RC support database schema 
# 
# 

DROP DATABASE IF EXISTS RCSDB; 
CREATE DATABASE RCSDB; 
USE RCSDB; 

# 
#     Source for a recipe using DITA task format 
# 
#     NOTES - 
# 
#          (1) DITARecipeID - resource URI assigned to the recipe 
# 

CREATE TABLE DITATaskRecipe 
( 
       DITARecipeID     VARCHAR(50) NOT NULL, 
     TaskRecipeBody     TEXT,      
     PRIMARY KEY (DITARecipeID ASC) 
}; 
 
# 
#     Compilation of a DITA recipe into RecipeJAUS code 
# 
#     NOTES - 
# 
#          (1) JAUSRecipeID - DITARecipeID + ":" + date-time stamp (YYYYMMDDHHMMSS) 
# 

CREATE TABLE JAUSRecipe 
( 
       JAUSRecipeID     VARCHAR(60)     NOT NULL, 
       DITARecipeID      VARCHAR(50)     NOT NULL, 
     JAUSPackage          BLOB,
     PRIMARY KEY     (JAUSRecipeID ASC) 
}; 

#
#     Catalog of all possible actions that can be incorporated in a recipe source
#     organized by domain and action ID
#
#     NOTES -
#
#          (1) DomainURI - URI for the domain of this action
#          (2) ActionID - label for this action
#          (3) ParmList - comma-delimited list of arguments for this action with
#                      each argument in resourceURI format. Position in
#                      the list is important since the position index
#                      is used in the JAUSMapping below
#          (4) JAUSMapping - parametrized code for this action with links 
#                      to ParmList entries. These links are in inserted
#                       as a hex byte in the appropriate parameter position
#                      of a JAUS opcode. The value of this byte
#                      is the position index (0x00 - 0xFF) in the ParmList
#                      above
#

CREATE TABLE ActionCatalog 
( 
       DomainURI               VARCHAR(50) NOT NULL, 
       ActionID             VARCHAR(50) NOT NULL, 
       ParmList          TEXT, 
       JAUSMapping            BLOB, 
       PRIMARY KEY (DomainURI ASC, ActionID ASC) 
}; 

# 
#     Catalog of all possible resource URIs that can be incorporated in a recipe source 
#     organized by domain and action ID 
# 
#     NOTES - 
# 
#          (1) DomainURI - URI for the domain of this action 
#          (2) ResourceID - URI for this parameter type 
#          (3) Units - measurement units for this resource 
#          [4] JAUSEncoding - target JAUS reference for this resource 
# 

CREATE TABLE ResourceCatalog 
( 
       DomainURI                 VARCHAR(50) NOT NULL, 
       ResourceID                  VARCHAR(50) NOT NULL, 
       Units               VARCHAR(22), 
     JAUSEncoding     BLOB, 
       PRIMARY KEY (DomainURI ASC, ResourceID ASC) 
}; 

DITARecipe �����ڴ洢�䷽����Դ�����죬�� JAUSRecipe �����ڴ洢�䷽�����������Ϣ�����С���ˣ��䷽��������������䷽���켰���ѱ��������һ�ݹ鵵���Ա����û��߽��䷽�������ӳ�䵽һ���������������������䷽���졣
ActionCatalog ���䷽���첽�躯���һ������� RecipeJAUS �������С�����������ض����������磬һ����Ի���������urn:robot����Դ�Ľ��� lock �ĺ�����������Ƶ�����Զ�����������urn:access:door���ĺ�����᲻��ͬ��
    ���Ƶأ�ResourceCatalog ����Ӧ�ó���������ʹ�õ���Դ�� URI����Ҳ�� RecipeJAUS ƽ̨�ṩ����Դ��һ���ڲ���ַ���ã�JAUSEncoding���������ö�Ӧ������ RecipeJAUS ƽ̨��Ӳ��ƽ̨�з��ʸ���Դ���������ӡ�

RCS ������

RCS ��������һ�� PHP �ű��������� DOM �༰�䷽���������䷽�����������ͼ��� RecipeJAUS ��Ϣ�����С��ýű������ṩ���μ� ���أ���������ʹ�� PHP �����н��� (CLI) ���е��ã�������ʾ��
php RCC.php <RC>.xml

<RC> �ǰ��䷽�����������Դ�ļ�����ơ����� RecipeJAUS ������Ϣ�����е�����ļ���Ϊһ�� JAUSRecipe ���¼�洢�� RCS ��ݿ��У��ü�¼�ļ�ֵ�ڱ������ʱ��ʾ�ڿ���̨�С�
RCS ��������һ��ԭ�Ͱ汾����ͨ�� RCS ��ݿ�� ResourceCatalog �� ActionCatalog ��ת���� RecipeJAUS ����֮ǰ������ RecipeJAUS ���С���ǰ�ڱ������һ����������ļ���

һ�������䷽����Ӧ�ó���

Ϊ����ʾ������䷽����ת����̣�����һ������Ӧ�ó��������Ϊһ���䷽�����Լ�ת���� RecipeJAUS ��������֮ǰ���м������
�嵥 6 �ṩ��һ�������Զ������������񣨻��䷽���죩���������ǵ�ǰ�¶ȡ���ǰʪ�Ⱥ͵�ǰ���ڣ��Ա�Ϊ����ӵ�����ȷ�����Ȼ�յ����á�

�嵥 6. �����Զ��������䷽����
                                
<task> 
     <title>urn:hvac:thermo>/title> 
     <taskbody> 
          <context>iterate</context> 
          <prereq> 
               urn:hvac:settings_lib,1| 
               urn:hvac:season_setting,1| 
               urn:hvac:tod_setting,1| 
               urn:hvac:temp_setting,1| 
               urn:hvac:hum_setting,1| 
               urn:hvac:temp_reading,1|
               urn:hvac:hum_reading,1| 
               urn:hvac:h_trigger,1| 
               urn:hvac:v_trigger,1|urn:hvac:ac_trigger,1 
          </prereq> 
          <steps> 
               <step id='S0'> 
                    <cmd>always() | always()->
                    get_setting(urn:hvac:settings_lib, 
                              urn:hvac:tod_setting,
                              urn:hvac:season_setting)
                    </cmd> 
                    <cmd> setting_set(urn:hvac:settings_lib,
                    urn:hvac:season_setting,urn:hvac:tod_setting) | 
                    always()-> 
                    set_setting(urn:hvac:settings_lib,
                              urn:hvac:temp_setting,
                              urn:hvac:hum_setting) 
                    </cmd> 
               </step> 
               <step id='S1'> 
                    <cmd> 
                    step_OK("S0") | always() ->
                    get_reading(urn:hvac:temp_reading,
                              urn:hvac:hum_reading) 
                    </cmd> 
                    <cmd> 
                    setting_at(urn:hvac:season_setting,"Fall") | 
                    reading(urn:hvac:hum_reading,A,
                         urn:hvac:hum_setting)->
                    set_trigger(urn:hvac:v_trigger);
                    reading(urn:hvac:hum_reading,B,
                         urn:hvac:hum_setting)->
                    reset_trigger(urn:hvac:v_trigger); 
                    reading(urn:hvac:temp_reading,B,
                         urn:hvac:temp_setting)->
                    set_trigger(urn:hvac:h_trigger); 
                    </cmd> 
               </step> 
               <step id='S2'> 
                    <cmd>
                    step_OK("S0") | always()->
                    get_reading(urn:hvac:temp_reading,
                         urn:hvac:hum_reading)
                    </cmd> 
                    <cmd>
                    setting_at(urn:hvac:season_setting,"Winter") | 
                    reading(urn:hvac:hum_reading,A,
                         urn:hvac:hum_setting)->
                    set_trigger(urn:hvac:v_trigger); 
                    reading(urn:hvac:hum_reading,B,
                         urn:hvac:hum_setting)->
                    reset_trigger(urn:hvac:v_trigger); 
                    reading(urn:hvac:temp_reading,B,
                         urn:hvac:temp_setting)->
                    set_trigger(urn:hvac:h_trigger); 
                    </cmd> 
               </step> 
               <step id='S3'> 
                    <cmd>step_OK("S0") | always()->
                    get_reading(urn:hvac:temp_reading,urn:hvac:hum_reading)
                    </cmd> 
                    <cmd> 
                    setting_at(urn:hvac:season_setting,"Spring") | 
                    reading(urn:hvac:hum_reading,A,
                         urn:hvac:hum_setting)->
                    set_trigger(urn:hvac:v_trigger);
                    reading(urn:hvac:hum_reading,B,
                         urn:hvac:hum_setting)->
                    reset_trigger(urn:hvac:v_trigger); 
                    reading(urn:hvac:temp_reading,A,
                         urn:hvac:temp_setting)->
                    set_trigger(urn:hvac:v_trigger); 
                    reading(urn:hvac:temp_reading,B,
                         urn:hvac:temp_setting)->
                    reset_trigger(urn:hvac:v_trigger) 
                    </cmd> 
               </step> 
               <step id='S4'> 
                    <cmd>
                    step_OK("S0") | always()->
                    get_reading(urn:hvac:temp_reading,urn:hvac:hum_reading)
                    </cmd> 
                    >cmd> 
                    setting_at(urn:hvac:season_setting,"Summer") | 
                    reading(urn:hvac:hum_reading,A,
                         urn:hvac:hum_setting)->
                    set_trigger(urn:hvac:v_trigger);
                    reading(urn:hvac:hum_reading,B,
                         urn:hvac:hum_setting)->
                    reset_trigger(urn:hvac:v_trigger); 
                    reading(urn:hvac:temp_reading,A,
                         urn:hvac:temp_setting)->
                    set_trigger(urn:hvac:ac_trigger); 
                       reading(urn:hvac:temp_reading,B,
                         urn:hvac:temp_setting)->
                    reset_trigger(urn:hvac:v_trigger) 
                    </cmd> 
               </step> 
          </steps> 
          <result>urn:hvac:comfort_setting</result> 
     </taskbody> 
</task>

����
always() = ���Ƿ���һ��ֵ True��
get_setting(resourceURI, resourceURI, resourceURI) = �ӵ�һ����Դ���ο��ṹ���õ��ڶ����͵������Դ�����á�
setting_set(resourceURI, resourceURI, resourceURI) = ����ݵ�һ����Դ�еڶ����͵������Դ�����ã���ô���� True��
step_OK(step_ID) = ���һ�����������ȷ���򷵻� True��
get_reading(resourceURI, resourceURI) = �õ�������Դ�����Ǵ��������Ķ���
reading(resourceURI, comparator, resourceURI) = ʹ�ñȽϲ�����B = ���ڣ�A = ���ڣ�������һ����Դ�Ķ�����ڶ�����Դ���ο�ֵ�����бȽϡ�
set_trigger(resourceURI) = ���� resourceURI���̵���������Ϊ����
reset_trigger(resourceURI) = ���� resourceURI���̵���������Ϊ����
������ʹ�� HVAC �����е�������Դ���� prereq Ԫ�����г���һ��
һ�����ÿ⣬���ǰʱ�䣨tod_setting������ǰ���ڣ�season_setting�����¶����õ㣨temp_setting����ʪ�����õ㣨hum_setting����

һ����֪�����¶ȶ���temp_reading����
һ����֪����ʪ�ȶ���hum_reading����
�����ÿ����Զ��������еĴ洢��ʩ����ֵ���ⲿ���ã����Բ����ֶ���ʽ��Ҳ����ͨ��һ������Դ���ɸ�����֮ǰ����һ���������á�
������ͨ������������裬���ϵص���������Ԫ���е�ÿ��ֵ�����õ���� �� HVAC ������ʵ����ã�
�������ش����ÿ��õ�ǰʱ��ͼ������ã�ʹ�� setting_set ��������ѯ���ú����õ�Ŀ����ԣ�ʹ�� set_setting ������ã���
�������ػ�������¶Ⱥ�ʪ�ȴ������������^�������������������ⲿͨ����ȣ�
���ʪ�Ȳ������õ��ڣ���ô���ⲿͨ�硣
����¶ȶ���������õ㣬��ô�򿪹��ȡ�
�������ػ�������¶Ⱥ�ʪ�ȴ����������ڶ����������������������ⲿͨ����ȣ�
���ʪ�Ȳ������õ��ڣ���ô���ⲿͨ�硣
����¶ȶ���������õ㣬��ô�򿪹��ȡ�
�������ػ�������¶Ⱥ�ʪ�ȴ����������ڴ����������������������ȡ����ⲿͨ�磺
���ʪ�ȸ������õ㣬��ô���ⲿͨ�硣
���ʪ�ȵ������õ㣬��ô�ر��ⲿͨ�硣
����¶ȶ���������õ㣬��ô���ⲿͨ�硣
����¶ȶ���������õ㣬��ô�ر��ⲿͨ�硣
�������ػ�������¶Ⱥ�ʪ�ȴ������������ļ��������������������ⲿͨ���յ���
���ʪ�Ȳ������õ��ڣ���ô���ⲿͨ�硣
����¶ȶ���������õ㣬��ô�򿪿յ���
����¶ȶ���������õ㣬��ô���ⲿͨ�硣
����IJ����Ϊ�������л�����Ϊ���̵߳��������С�
���������Զ��������䷽����
�����������������
cd <source_file_path>
php RCC.php Thermo.xml

Thermo.xml �ǰ����ݵ�Դ�ļ�����ơ������Զ���������Ϣ�����յ� RecipeJAUS ������Ϣ��֧���ļ��� �嵥 7 �С�ʹ�øô��������� RecipeJAUS ��Ϣ�����С�
RecipeJAUS ��Ϣ�������� 6 ��������֯�ɣ�ÿ������ǰ�涼��һ���ֽڼ��������� 6 �������ǣ�
�嵥 7 �� __URI__ ���ֵ����ݱ�ת���� �嵥 6 ��ÿ�� ResourceCatalog ��� JAUSEncoding��
�嵥 7 �� __CTX__ �����е����ñ�ת���� 0x00 (iterate) �� 0x01 (oneshot)��
�嵥 7 �� __RES__ ���ֵ����ݱ�ת���� �嵥 6 ��ÿ�� ResourceCatalog ��� JAUSEncoding��
�嵥 7 �� __RSC__ ���ֵ����ݱ���֯Ϊһ�����ֽڵ��Ȼ�����ÿ����Դ����Դ URN����ת���� �嵥 6 ��ÿ�� ResourceCatalog ��� JAUSEncoding��
�嵥 7 �� __THR__ ���ֵ����ݱ���֯��һϵ�ж�Ӧ�ڲ��� ID �����ֽ��޷��ʮ����������� 0xFF ��ʾ������һ���̼߳���
ʹ�� �嵥 6�е� ActionCatalog �?__CMD__ ���ֵ����ݱ�ת������Ӧ�� RecipeJAUS ���롣
RecipeJAUS ����ʱ�������Ͼ���һ���̹߳���������һ�����ڼ��غ�ִ�� RecipeJAUS ��Ϣ�����е� RecipeJAUS �����������

�嵥 7. �����Զ������� RecipeJAUS ��Ϣ��
                                
__URI__ 
urn:hvac:thermo 
__CTX__ 
iterate 
__RES__ 
urn:hvac:comfort_setting 
__RSC__ 
urn:hvac:settings_lib_1 
urn:hvac:season_setting_1 
urn:hvac:tod_setting_1 
urn:hvac:temp_setting_1 
urn:hvac:hum_setting_1 
urn:hvac:temp_reading_1 
urn:hvac:hum_reading_1 
urn:hvac:h_trigger_1 
urn:hvac:v_trigger_1 
urn:hvac:ac_trigger_1 
__CMD__ 
always()_always()_get_setting(urn:hvac:settings_lib, 
urn:hvac:tod_setting, urn:hvac:season_setting)_S0:0 
setting_set(urn:hvac:settings_lib,urn:hvac:season_setting,urn:hvac:tod_setting)
_always()
_get_setting(urn:hvac:settings_lib,urn:hvac:temp_setting,urn:hvac:hum_setting)_S0:1 
step_OK("S0")_always()_get_reading(urn:hvac:temp_reading,urn:hvac:hum_reading)_S1:0 
setting_at(urn:hvac:season_setting,"Fall")
_reading(urn:hvac:hum_reading,A,urn:hvac:hum_setting)
_set_trigger(urn:hvac:v_trigger)_S1:1 
setting_at(urn:hvac:season_setting,"Fall")
_reading(urn:hvac:hum_reading,B,urn:hvac:hum_setting)
_reset_trigger(urn:hvac:v_trigger)_S1:2 
setting_at(urn:hvac:season_setting,"Fall")
_reading(urn:hvac:temp_reading,B,urn:hvac:temp_setting)
_set_trigger(urn:hvac:h_trigger)_S1:3 
setting_at(urn:hvac:season_setting,"Fall")
_reading(urn:hvac:hum_reading,A,urn:hvac:temp_setting)
_reset_trigger(urn:hvac:h_trigger)_S1:4 
step_OK("S0")_always()_get_reading(urn:hvac:temp_reading,urn:hvac:hum_reading)_S2:0 
setting_at(urn:hvac:season_setting,"Winter")
_reading(urn:hvac:hum_reading,A,urn:hvac:hum_setting)
_set_trigger(urn:hvac:v_trigger)_S2:1 
setting_at(urn:hvac:season_setting,"Winter")
_reading(urn:hvac:hum_reading,B,urn:hvac:hum_setting)
_reset_trigger(urn:hvac:v_trigger)_S2:2 
setting_at(urn:hvac:season_setting,"Winter")
_reading(urn:hvac:temp_reading,B,urn:hvac:temp_setting)
_set_trigger(urn:hvac:h_trigger)_S2:3 
setting_at(urn:hvac:season_setting,"Winter")
_reading(urn:hvac:hum_reading,A,urn:hvac:temp_setting)
_reset_trigger(urn:hvac:h_trigger)_S2:4 
step_OK("S0")_always()_get_reading(urn:hvac:temp_reading,urn:hvac:hum_reading)_S3:0 
setting_at(urn:hvac:season_setting,"Spring")
_reading(urn:hvac:hum_reading,A,urn:hvac:hum_setting)
_set_trigger(urn:hvac:v_trigger)_S3:1 
setting_at(urn:hvac:season_setting,"Spring")
_reading(urn:hvac:hum_reading,B,urn:hvac:hum_setting)
_reset_trigger(urn:hvac:v_trigger)_S3:2 
setting_at(urn:hvac:season_setting,"Spring")
_reading(urn:hvac:temp_reading,A,urn:hvac:temp_setting)
_set_trigger(urn:hvac:v_trigger)_S3:3 
setting_at(urn:hvac:season_setting,"Spring")
_reading(urn:hvac:hum_reading,B,urn:hvac:temp_setting)
_reset_trigger(urn:hvac:v_trigger)_S3:4 
step_OK("S0")_always()_get_reading(urn:hvac:temp_reading,urn:hvac:hum_reading)_S4:0 
setting_at(urn:hvac:season_setting,"Summer")
_reading(urn:hvac:hum_reading,A,urn:hvac:hum_setting)
_set_trigger(urn:hvac:v_trigger)_S4:1 
setting_at(urn:hvac:season_setting,"Summer")
_reading(urn:hvac:hum_reading,B,urn:hvac:hum_setting)
_reset_trigger(urn:hvac:v_trigger)_S4:2 
setting_at(urn:hvac:season_setting,"Summer")
_reading(urn:hvac:temp_reading,A,urn:hvac:temp_setting)
_set_trigger(urn:hvac:ac_trigger)_S4:3 
setting_at(urn:hvac:season_setting,"Summer")
_reading(urn:hvac:hum_reading,B,urn:hvac:temp_setting)
_reset_trigger(urn:hvac:ac_trigger)_S4 
__THR__ 
S0 
S1,S2,S3,S4 
__SRD__ 
S0|urn:hvac:settings_lib,urn:hvac:season_setting,urn:hvac:tod_setting,
urn:hvac:temp_setting,urn:hvac:hum_setting 
S1|urn:hvac:season_setting,urn:hvac:temp_setting,urn:hvac:hum_setting,
urn:hvac:temp_reading,urn:hvac:hum_reading,urn:hvac:h_trigger,urn:hvac:v_trigger 
S2|urn:hvac:season_setting,urn:hvac:temp_setting,urn:hvac:hum_setting,
urn:hvac:temp_reading,urn:hvac:hum_reading,urn:hvac:h_trigger,urn:hvac:v_trigger 
S3|urn:hvac:season_setting,urn:hvac:temp_setting,urn:hvac:hum_setting,
urn:hvac:temp_reading,urn:hvac:hum_reading,urn:hvac:v_trigger 
S4|urn:hvac:season_setting,urn:hvac:temp_setting,urn:hvac:hum_setting,
urn:hvac:temp_reading,urn:hvac:hum_reading,urn:hvac:v_trigger,urn:hvac:ac_trigger

���ļ��������²��֣�
__URI__�����䷽�� URN��
__CTX__�����䷽��ִ�������ġ�
__RES__�����䷽�Ľ�� URN�����䷽��������ݴ洢�����С�
__RSC__�����䷽��ʹ�õ���Դ URN ���б?
__CMD__�����䷽�����������     precondition-condition-action ��ά���б?ע�⣬���һ��ָ�����ض���ά����صIJ��裩��
__THR__�����䷽�в���Ķ��߳���
__SRD__��������Դ�����
������ͨ�� RCS ��ݿ��е� ResourceCatalog �?�� __RSC__ �е���Դת����Ŀ�� RecipeJAUS ƽ̨��ע���ַ����Ҳͨ�� ActionCategory �� __CMD__ �еĺ���ת�������ǵ� RecipeJAUS �ȼ�������������ֽ�Ϊ��ת�� __RSC__ �б��е�λ�á�
__THR__ ����չʾ�˿ɶ��߳�ִ�еIJ������С����ԣ��� �嵥 6 �У�ִ���경�� S0 ֮��ִ�в��� S1 �� S4��������ͬ��ִ�еġ�
ԭ�ͱ������� PHP Դ����ɴ� ���� �õ���

������
���Ź����ԡ��ɿ��ԺͰ�ȫ�Է����Ҫ�󲻶�������Ƕ��ʽϵͳ������Ա��Ҫһ�ַ�������׽�߶˺͵Ͷ�ϵͳϸ�ڣ�ͬʱ�ṩϵͳ��������ͼ�����ĸ�Ҫ������һ�ַ�����ʹ�� PHP��һ��֧�ֱ������ݿ⣬����Ϊ���ӵ�Ƕ��ʽϵͳ��ƺͿ����������������� RecipeJAUS��һ�ֿ���ƽ̨��֧�ִ���ϵͳ�IJ��𣩽� DITA ��������ģ��Ϊ�䷽���졣���⣬���Խ��÷�����չ�����ͻ�������ҵ���е�ϵͳ��

--------------------------------------------------------------------
ת�ԣ�http://www.ibm.com/developerworks/cn/xml/x-ditaproc/index.html?ca=drs-cn-0412
--
Happy XMLing


�� ��Դ:��ˮľ���� newsmth.net��[FROM: 114.249.213.*]
Technical Details
Message-ID: <4lQ4fA$FO8@newsmth.net>
Path: arc1-ca.pugleaf.net!g2news2.google.com!news4.google.com!feeder.news-service.com!feeds.phibee-telecom.net!news.byr.edu.cn!news.newsmth.net!NEWSMTH

Show Full Headers
Complete Article Headers
X-Google-Thread: 115571,cf3137847e66a957,start
X-Google-NewGroupId: yes
X-Google-Attributes: gidf7ebf7e2af,domainid0,public,usenet
X-Google-Language: Chinese,GB
Path: arc1-ca.pugleaf.net!g2news2.google.com!news4.google.com!feeder.news-service.com!feeds.phibee-telecom.net!news.byr.edu.cn!news.newsmth.net!NEWSMTH
From: thinkhy@newsmth.net-SPAM.no (<Test/>)
Newsgroups: cn.bbs.comp.xml
Subject: ΪǶ��ʽ�豸������ִ�еĴ���ģ��(ת��)
Date: 18 Apr 2010 13:49:02 GMT
Organization: ˮľ����
Message-ID: <4lQ4fA$FO8@newsmth.net>
Mime-Version: 1.0
Content-Type: text/plain; charset="gb2312"
Content-Transfer-Encoding: 8bit
X-Filename: XML/U/M.1271598010.x0