XML enhanced Object Notation
自分の言ったネタを投げっぱなしにするのもなんなので、ちょっと遊んでみました。
<?xml version="1.0" ?>
以下に生成関数
// 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 やるなぁ。