[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [hyades-dev] More XML choices

Each of Andy's examples uses an XML style where each parameter is its own 
element, and the value of the parameter is held in the "content" part of 
the element. I think maybe we can be more streamlined than that. What 
about this?

<command
        header="1"
        dest="101"
        source="100"
        session="1"
        context="1001">
    <agentMgr_registerAgent id="100" pid="4067" name="
org.eclipse.hyades.processControllerAgent"/>
</command>

The important parts of this example are:
        1. The command you want to perform is separate from the routing 
information. This is like the first of Andy's examples but unlike the 
rest.
        2. The "interface id" and "command id" are string values, not 
numbers. Together, separated by an underscore, they form the inner element 
name.
        3. The parameters are all attributes of the command element. This 
is more compact then <agentID>100</agentID>.

I think this style for commands and parameters is well-suited to the usual 
kind of command, which has flat set of parameters. It's not well suited 
for those commands or responses that contain structured data: a list of 
processes, or a tree that describes variable grouping.

What do you think?

-- Allan Pratt, apratt@xxxxxxxxxx
Rational software division of IBM




"Kaylor, Andrew" <andrew.kaylor@xxxxxxxxx> 
Sent by: hyades-dev-admin@xxxxxxxxxxx
10/14/2004 04:15 PM
Please respond to
hyades-dev


To
<hyades-dev@xxxxxxxxxxx>
cc

Subject
[hyades-dev] More XML choices






As discussed in this morning's meeting, here are a few possibilities for 
XML encoding of the HCE protocol.  Obviously, we can mix and match things 
we like about each group.

What do you think?

--------------------------------------------------
Option 1: Heavily SOAP influenced
--------------------------------------------------
This is basically what I sent out yesterday.  The command header is 
represented as an element with attributes, and the command itself is a 
single element within the command header.  The command uses an XML 
namespace to fill the role of identifying the interface.

The primary advantage of this representation is that if you strip off the 
command header your left with something that is exactly SOAP-compatible. 
Thus, it is a known solution that will be familiar to those who know SOAP.

On the other hand, it is a bit verbose.


Definition
-----------
<xsd:complexType name="CommandType">
      <xsd:sequence>
            <xsd:any minOccurs="1" maxOccurs="1">
      </xsd:sequence>
      <xsd:attribute name="headerID" type="xsd:int">
      <xsd:attribute name="destination" type="xsd:int"> 
      <xsd:attribute name="source" type="xsd:int"> 
      <xsd:attribute name="session" type="xsd:int"> 
      <xsd:attribute name="context" type="xsd:int"> 
</xsdComplexType>

<xsd:complexType name="RegisterAgentType">
      <xsd:element name="agentID" type="xsd:int>
      <xsd:element name="processID" type="xsd:int>
      <xsd:element name="agentName" type="xsd:string>
</xsd:complexType>

Example
-----------
<Command 
   headerID="1"
   destination="101"
   source="100"
   session="1"
   context="10001">
      <agentMgr:registerAgent 
xmlns:agentMgr="org.eclipse.hyades.agentMgr">
         <agentID>100</agentID>
             <processID>4067</processID>
 <agentName>org.eclipse.hyades.processControllerAgent</agentName>
      </agentMgr:registerAgent> 
</Command>


--------------------------------------------------
Option 2: Interface and command IDs as attributes
--------------------------------------------------
This second variation moves the command ID and interface ID into the 
command header (as pure IDs, no longer names).  The command header then 
contains a standardized element, parameters.  The contents of the 
"parameters" element are command-specific, and continue to use standard 
XML Schema type definitions.

Definition
-----------
<xsd:complexType name="CommandType">
      <xsd:sequence>
            <xsd:element name="parameters" type="ParamListType" 
minOccurs="1" maxOccurs="1">
      </xsd:sequence>
      <xsd:attribute name="headerID" type="xsd:int">
      <xsd:attribute name="destination" type="xsd:int"> 
      <xsd:attribute name="source" type="xsd:int"> 
      <xsd:attribute name="session" type="xsd:int"> 
      <xsd:attribute name="context" type="xsd:int"> 
      <xsd:attribute name="interfaceID" type="xsd:int"> 
      <xsd:attribute name="comandID" type="xsd:int"> 
</xsdComplexType>

<xsd:complexType name="ParamListType">
      <xsd:any minOccurs="0" maxOccurs="unbound">
</xsd:complexType>

Example
-----------
<Command 
   headerID="1"
   destination="101"
   source="100"
   session="1"
   context="10001"
   interfaceID="1001"
   commandID="1">
      <parameters>
         <agentID>100</agentID>
             <processID>4067</processID>
 <agentName>org.eclipse.hyades.processControllerAgent</agentName>
      </parameters> 
</Command>


--------------------------------------------------
Option 3: Element-oriented command header
--------------------------------------------------
This option moves the command header members into the position of elements 
rather than attributes of the command element.  This adds some flexibility 
in the command header format.

Definition
-----------
<xsd:complexType name="CommandType">
      <xsd:sequence>
            <xsd:element name="headerID" type="xsd:int">
            <xsd:element name="destination" type="xsd:int"> 
            <xsd:element name="source" type="xsd:int"> 
            <xsd:element name="session" type="xsd:int"> 
            <xsd:element name="context" type="xsd:int"> 
            <xsd:element name="interfaceID" type="xsd:int"> 
            <xsd:element name="comandID" type="xsd:int"> 
            <xsd:element name="parameters" type="ParamListType" 
minOccurs="1" maxOccurs="1">
      </xsd:sequence>
</xsdComplexType>

<xsd:complexType name="ParamListType">
      <xsd:any minOccurs="0" maxOccurs="unbound">
</xsd:complexType>

Example
-----------
<Command 
   <headerID>1<headerID>
   <destination>101<destination>
   <source>100<source>
   <session>1<session>
   <context>10001<context>
   <interfaceID>1001<interfaceID>
   <commandID>1<commandID>
   <parameters>
      <agentID>100</agentID>
      <processID>4067</processID>
      <agentName>org.eclipse.hyades.processControllerAgent</agentName>
   </parameters> 
</Command>


--------------------------------------------------
Option 4: Short names
--------------------------------------------------
Finally, this option follows the format in Option 3 (though it could be 
done with any of the above options) but shortens all the names to reduce 
the size of the data on the wire.  The tradeoff is that it becomes 
significantly less human-readable.

Definition
-----------
<xsd:complexType name="CommandType">
      <xsd:sequence>
            <xsd:element name="HID" type="xsd:int">
            <xsd:element name="dest" type="xsd:int"> 
            <xsd:element name="src" type="xsd:int"> 
            <xsd:element name="ses" type="xsd:int"> 
            <xsd:element name="ctxt" type="xsd:int"> 
            <xsd:element name="IID" type="xsd:int"> 
            <xsd:element name="CID" type="xsd:int"> 
            <xsd:element name="parms" type="ParamListType" minOccurs="1" 
maxOccurs="1">
      </xsd:sequence>
</xsdComplexType>

<xsd:complexType name="ParamListType">
      <xsd:any minOccurs="0" maxOccurs="unbound">
</xsd:complexType>

Example
-----------
<Command 
   <HID>1</HID>
   <dest>101</dest>
   <src>100</src>
   <sess>1</sess>
   <ctxt>10001</ctxt>
   <IID>1001</IID>
   <CID>1</CID>
   <parms>
      <AID>100</AID>
      <PID>4067</PID>
      <name>org.eclipse.hyades.processControllerAgent</name>
   </parms> 
</Command>