Re: [mmox] Example of what could be a real XML LLSD

eh2th-mmox@yahoo.com Wed, 25 February 2009 04:19 UTC

Return-Path: <eh2th-mmox@yahoo.com>
X-Original-To: mmox@core3.amsl.com
Delivered-To: mmox@core3.amsl.com
Received: from localhost (localhost [127.0.0.1]) by core3.amsl.com (Postfix) with ESMTP id 99E663A69D7 for <mmox@core3.amsl.com>; Tue, 24 Feb 2009 20:19:12 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -2.474
X-Spam-Level:
X-Spam-Status: No, score=-2.474 tagged_above=-999 required=5 tests=[AWL=0.124, BAYES_00=-2.599, HTML_MESSAGE=0.001]
Received: from mail.ietf.org ([64.170.98.32]) by localhost (core3.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id qybUEP3gJiWe for <mmox@core3.amsl.com>; Tue, 24 Feb 2009 20:19:11 -0800 (PST)
Received: from web65709.mail.ac4.yahoo.com (web65709.mail.ac4.yahoo.com [76.13.9.101]) by core3.amsl.com (Postfix) with SMTP id 3E35E3A67CF for <mmox@ietf.org>; Tue, 24 Feb 2009 20:19:11 -0800 (PST)
Received: (qmail 95745 invoked by uid 60001); 25 Feb 2009 04:19:30 -0000
DomainKey-Signature: a=rsa-sha1; q=dns; c=nofws; s=s1024; d=yahoo.com; h=X-YMail-OSG:Received:X-Mailer:References:Date:From:Subject:To:MIME-Version:Content-Type:Message-ID; b=bE1kKH/nNtEwvmx4eY+gfW5CV9vAXinYh+TPwLigbf5KzO5ERlgz5JGkOtptNYfuMYEQaT+ESpQSEqAg3YnFt4fR0RBDIUTGZfBt44cEyU9xLRePRQfjNZgWYGa8SGnlvCcbMuhF7MSmxXdypEZUn4CT6xuYbpTxPwS65+pa6hI=;
X-YMail-OSG: 6kZqIsYVM1kLAh5WRIBXmBA52fTZ0Tv4hCf2P_lLlEq23Yf_g6sj9jVslOPE3giIKQl2iUmENpDDgS14Zm5I7cxcWWJjkbx3KVuyDrJJFd0s6lyxgx982lGVfOruSx_iX.evr.SU83CZsrmUBWPG6Vi3a.9yLSmBbKepwjcGasfmCQ6oKYPpJgH5XQV_Q_GAot2BZnr61yoweUcuW9Wh40cp6A--
Received: from [72.220.236.152] by web65709.mail.ac4.yahoo.com via HTTP; Tue, 24 Feb 2009 20:19:30 PST
X-Mailer: YahooMailRC/1155.45 YahooMailWebService/0.7.260.1
References: <ebe4d1860902241724s537a2d4dv1fd5014b50b6e085@mail.gmail.com>
Date: Tue, 24 Feb 2009 20:19:30 -0800
From: eh2th-mmox@yahoo.com
To: Catherine Pfeffer <cathypfeffer@gmail.com>, mmox@ietf.org
MIME-Version: 1.0
Content-Type: multipart/alternative; boundary="0-1580952824-1235535570=:94038"
Message-ID: <256728.94038.qm@web65709.mail.ac4.yahoo.com>
Subject: Re: [mmox] Example of what could be a real XML LLSD
X-BeenThere: mmox@ietf.org
X-Mailman-Version: 2.1.9
Precedence: list
List-Id: Massively Multi-participant Online Games and Applications <mmox.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/listinfo/mmox>, <mailto:mmox-request@ietf.org?subject=unsubscribe>
List-Archive: <http://www.ietf.org/mail-archive/web/mmox>
List-Post: <mailto:mmox@ietf.org>
List-Help: <mailto:mmox-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/mmox>, <mailto:mmox-request@ietf.org?subject=subscribe>
X-List-Received-Date: Wed, 25 Feb 2009 04:19:12 -0000

Apologies if I missed the answer if it was in an earlier message...

The "XML way" message appears to be loosly typed. How could a parser create an object from that XML data and know the difference between an integer and a float, or a UUID and a string? 

--Tom



________________________________
From: Catherine Pfeffer <cathypfeffer@gmail.com>
To: mmox@ietf.org
Sent: Tuesday, February 24, 2009 5:24:40 PM
Subject: [mmox] Example of what could be a real XML LLSD

Hello,

Here is a real LLSD packet. Below I'll show how it could look like if we would abandon the 1:1 mapping to binary serialization.

If transposing 1:1 the binary encoding, the packet is 2688 bytes long. If doing it in a more xml-ish way, the packet is 1065 bytes long. That's 40 % of the length the current LLSD proposal generates. It's also more legible by humans, easier to validate and easier to parse. Those figures include 2 spaces of indentation at each tag level, and all the newline characters.

First the "transposition of binary serialization" way:

<llsd>
  <map>
    <key>AgentData</key>
    <map>
      <key>AgentId</key>
      <uuid>81466fc7-276f-455d-9b72-8316e9712535</uuid>
      <key>GroupId</key>
      <uuid/>
      <key>SessionId</key>
      <uuid>4bbb6fa9-e649-4507-a709-8831c237c4ee</uuid>
    </map>
    <key>ObjectData</key>
    <map>
      <key>BypassRaycast</key>
      <boolean>1</boolean>
      <key>EveryoneMask</key>
      <binary encoding="base64">AAAAAA==</binary>
      <key>Flags</key>
      <binary encoding="base64">AAAAAg==</binary>
      <key>GroupMask</key>
      <binary encoding="base64">AAAAAA==</binary>
      <key>Material</key>
      <integer>3</integer>
      <key>NextOwnerMask</key>
      <binary encoding="base64">AAjAAA==</binary>
      <key>PCode</key>
      <integer>9</integer>
      <key>Path</key>
      <map>
        <key>Begin</key>
        <integer>0</integer>
        <key>Curve</key>
        <integer>16</integer>
        <key>End</key>
        <integer>0</integer>
        <key>RadiusOffset</key>
        <integer>0</integer>
        <key>Revolutions</key>
        <integer>0</integer>
        <key>ScaleX</key>
        <integer>100</integer>
        <key>ScaleY</key>
        <integer>100</integer>
        <key>ShearX</key>
        <integer>0</integer>
        <key>ShearY</key>
        <integer>0</integer>
        <key>Skew</key>
        <integer>0</integer>
        <key>TaperX</key>
        <integer>0</integer>
        <key>TaperY</key>
        <integer>0</integer>
        <key>Twist</key>
        <integer>0</integer>
        <key>TwistBegin</key>
        <integer>0</integer>
      </map>
      <key>Profile</key>
      <map>
        <key>Begin</key>
        <integer>0</integer>
        <key>Curve</key>
        <integer>1</integer>
        <key>End</key>
        <integer>0</integer>
        <key>Hollow</key>
        <integer>0</integer>
      </map>
      <key>RayEnd</key>
      <array>
        <real>42.9329986572265625</real>
        <real>29.6600322723388671875</real>
        <real>31.399318695068359375</real>
      </array>
      <key>RayEndIsIntersection</key>
      <boolean>0</boolean>
      <key>RayStart</key>
      <array>
        <real>48.281482696533203125</real>
        <real>32.063152313232421875</real>
        <real>34.092010498046875</real>
      </array>
      <key>RayTargetId</key>
      <uuid/>
      <key>Rotation</key>
      <array>
        <real>0</real>
        <real>0</real>
        <real>0</real>
        <real>1</real>
      </array>
      <key>Scale</key>
      <array>
        <real>0.5</real>
        <real>0.5</real>
        <real>0.5</real>
      </array>
      <key>State</key>
      <integer>0</integer>
    </map>
  </map>
</llsd>

Now the "XML" way:

<llsd>
  <AgentData
      AgentId="81466fc7-276f-455d-9b72-8316e9712535"
      GroupId=""
      SessionId="4bbb6fa9-e649-4507-a709-8831c237c4ee" />
    <ObjectData
        BypassRaycast="1"
        EveryoneMask="0x00000000"
        Flags="0x00000002"
        GroupMask="0x00000000"
        Material="3"
        NextOwnerMask="0x0008C000"
        PCode="9">
      <Path
          Begin="0"
          Curve="16"
          End="0"
          RadiusOffset="0"
          Revolutions="0"
          ScaleX="100"
          ScaleY="100"
          ShearX="0"
          ShearY="0"
          Skew="0"
          TaperX="0"
          TaperY="0"
          Twist="0"
          TwistBegin="0" />
        <Profile
           Begin="0"
           Curve="1"
            End="0"
            Hollow="0" />
      <RayEnd
            x="42.9329986572265625"
            y="29.6600322723388671875"
            z="31.399318695068359375"
            IsIntersection="0" />
      <RayStart
            x="48.281482696533203125"
            y="32.063152313232421875"
            z="34.092010498046875" />
      <RayTargetId uuid="" />
      <Rotation x="0" y="0" z="0" s="1" />
      <Scale x="0.5" y="0.5" z="0.5" />
      <State bool="0" />
    </ObjectData>
</llsd>

Even better results could be achieved by using default values for some attributes.

-- 
Cathy