XML enhanced Object Notation

 自分の言ったネタを投げっぱなしにするのもなんなので、ちょっと遊んでみました。

<?xml version="1.0" ?>


    <var name="count" value="0" />
    
    for ( var i=0; i < arguments.length; i++ )
    {
        this.count += arguments[i];
    }
    return this.count;
    

以下に生成関数

// XML enhanced Object Notation Sample

// require "XenON.js";

var doc = new ActiveXObject("MSXML.DOMDocument");

if ( doc.load("TestObject.xml") )
{
    var obj = CreateXmlObject(doc.documentElement);
    if ( obj != null )
    {
        WScript.Echo(obj.Count(1, 2, 3));
    }
    else
    {
        WScript.Echo("Failed to create object.");
    }
}
else
{
    WScript.Echo("Failed to load xml.");
}

function CreateXmlObject(dom_elem)
{
    if ( dom_elem == null ) return null;
    if ( dom_elem.tagName != 'object' )
    {
        WScript.Echo("XML Root element is not object [ " + dom_doc.documentElement.name + "].");
        return null;
    }

    /// オブジェクト作成
    var obj_id = dom_elem.getAttribute('id');
    var obj_name = dom_elem.getAttribute('name');
    var obj_string = 'function ' + obj_id + "()\n";
    obj_string += "{\n";
    if ( obj_name != null )
    {
        obj_string += "this.name = '" + obj_name + "';\n";
    }
    else
    {
        obj_string += "this.name = '" + obj_id + "';\n";
    }

    var variables = dom_elem.getElementsByTagName("var");
    if ( variables != null )
    {
//        WScript.Echo("Variable : " + variables.length);
        for ( var i=0; i

 Windows の WScript で実行すると、ちゃんと 6 が表示されます。
 DTD は簡素に

<!-- XenON : XML enhanced Object Notation
  -->
<!ELEMENT object (var|function|object)*>
<!ATTLIST object
    id          CDATA    #REQUIRED
    name        CDATA    #IMPLIED
    visibility  (public|private)    'public'>

<!ELEMENT var EMPTY>
<!ELEMENT var
    name     CDATA    #REQUIRED
    value    CDATA    #IMPLIED>

<!ELEMENT function (#PCDATA)>
<!ATTLIST function
    name          CDATA    #REQUIRED
    visibility    (public|protected|private)    'private'>

 この程度です。
 あとはこれをやりとりするときに XenON オブジェクトは契約に従っているかどうかをパーサで検出できればいいですね。
 contract.xsd あたりを XMLSchema で作って従っていなければ、エラーとすれば、伝搬オブジェクトの実行可能性は保証できます。

 うーん、意外と JavaScript やるなぁ。