“插件IDE”jxml语言(js+xml) 类定义

更新时间:2023-07-28 06:46:45 阅读: 评论:0

“插件IDE”jxml语言(js+xml) 类定义
 昨天介绍了我的web插件化构想.在实现中为了底层能和用户编写的代码进行方便的交互.我把面向对象里的类融合进来了.
    最初,面向开发者的编程,打算直接使用js.后来发现底层不能很方便的与开发者写的代码进行交互.
孩子们的诗    思考2天后,我使用xml描述类结构.底层通过类的描述生成动态的js对象.这样就可以很方便的与底层C#交互了.
    最后我把这种编程方式命名为 "jrxml"
<jrxml:class xmlns:jrxml="tmp">
价格管控    <jrxml:method access="private" name="loadTpl" modifier="readonly"/>
    <jrxml:method access="internal" name="render" modifier="fixed">
        //<![CDATA[
        return '<div id="root">render</div>';
        //]]>
    </jrxml:method>
    <jrxml:method access="internal" name="domReady" params="htmlDoc" modifier="fixed">
        //<![CDATA[
        ElementById('root').innerHTML='domReady<br/>--------------<br/>---------- by jaws';
        Create.fire();
        //]]>
    </jrxml:method>
    <jrxml:method access="internal" name="ctor" modifier="fixed">
        this.width=100;
    </jrxml:method>
    <jrxml:method name="update" modifier="readonly"/>
    <jrxml:event name="onCreate"/>
    <jrxml:prop name="width"/>
    <jrxml:prop name="config">
        <jrxml:tter>
            return value+100;
        </jrxml:tter>
        <jrxml:getter>
            return value;
太级        </jrxml:getter>
    </jrxml:prop>
</jrxml:class>
 
上面是一个完整的类结构
期待明天xml元素: 
    <class 根节点
    <method 方法定义
    <prop 属性定义 属性可以在method节点里,,可以t和get
    <event 事件  事件可以在method节点力,subscribe(function(){});进行订阅,和调用fire();
xml节点属性: 
    name="" 类成员名
    access="public|private|internal" 访问控制, 公共|私有|内部
    modifier="none|fixed|readonly" 修饰符, 无|固定|只读
    因为本身只是简单的类结构模拟,所以没有考虑结构,抽象类,继承. 所以加入fixed和readonly特性,对于标示2个特性的成员,开发者不可对此成员进行修改. 
上面是对类结构的描述,接下来需要有一个编译过程.
    在C#代码中要初始化一个类的顺序为:
    验证类结构兼怀子由->js运行时->编译->创建js object
    验证类结构:
    其实就是验证xml,对于class的xml结构定义了一个xsd,验证的话直接C#用xsd验证xml结构即可.
    下面是class_schema.xsd
 
View Code
春来<xs:schema xmlns:xs="www.w3/2001/XMLSchema" xmlns:xs2="tmp" targetNamespace="tmp">

    <xs:attributeGroup name="attr_typeb">
凑巧拼音        <xs:attribute name="access" default="public">
            <xs:simpleType>
                <xs:restriction ba="xs:string">
                    <xs:enumeration value="public"/>
                    <xs:enumeration value="private"/>
                    <xs:enumeration value="internal"/>
                </xs:restriction>
            </xs:simpleType>
        </xs:attribute>
        <xs:attribute name="modifier" default="none">
            <xs:simpleType>
                <xs:restriction ba="xs:string">
                    <xs:enumeration value="none"/>
                    <xs:enumeration value="fixed"/>
                    <xs:enumeration value="readonly"/>
                </xs:restriction>
            </xs:simpleType>
        </xs:attribute>
    </xs:attributeGroup>

    <xs:attributeGroup name="attr_name">
        <xs:attribute name="name" u="required">
            <xs:simpleType>
                <xs:restriction ba="xs:string">
                    <xs:pattern value="[a-zA-Z_][a-zA-Z0-9_]{0,49}" />
                </xs:restriction>
            </xs:simpleType>
        </xs:attribute>
    </xs:attributeGroup>

    <xs:complexType name="tget">
        <xs:simpleContent>
            <xs:extension ba="xs:string">
                <xs:attributeGroup ref="xs2:attr_typeb"/>
            </xs:extension>
        </xs:simpleContent>
    </xs:complexType>

    <xs:element name="class">
        <xs:complexType>
            <xs:choice minOccurs="0" maxOccurs="unbounded">
                <xs:element name="prop" minOccurs="0" maxOccurs="unbounded">企业档案工作规范
                    <xs:complexType>
                        <xs:all>
                            <xs:element name="tter" type="xs2:tget" minOccurs="0" maxOccurs="1"/>
                            <xs:element name="getter" type="xs2:tget" minOccurs="0" maxOccur
s="1"/>
                        </xs:all>
                        <xs:attributeGroup ref="xs2:attr_name"/>
                        <xs:attributeGroup ref="xs2:attr_typeb"/>
                    </xs:complexType>
                </xs:element>
                <xs:element name="event" minOccurs="0" maxOccurs="unbounded">
                    <xs:complexType>
                        <xs:attributeGroup ref="xs2:attr_name"/>
                        <xs:attributeGroup ref="xs2:attr_typeb"/>
                    </xs:complexType>
                </xs:element>
                <xs:element name="method" minOccurs="0" maxOccurs="unbounded">
                    <xs:complexType>
                        <xs:simpleContent>
                            <xs:extension ba="xs:string">
                                <xs:attributeGroup ref="xs2:attr_name"/>
                                <xs:attribute name="params">
                                    <xs:simpleType>
                                        <xs:restriction ba="xs:string">
                                            <xs:pattern value="([a-zA-Z_][a-zA-Z0-9_]{0,45}|[a-zA-Z_][a-zA-Z0-9_]{0,45}, )+[^, ]"/>
                                        </xs:restriction>
                                    </xs:simpleType>
                                </xs:attribute>
                                <xs:attributeGroup ref="xs2:attr_typeb"/>
                            </xs:extension>
                        </xs:simpleContent>
                    </xs:complexType>
                </xs:element>
            </xs:choice>
        </xs:complexType>
    </xs:element>
</xs:schema>

本文发布于:2023-07-28 06:46:45,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/89/1099643.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:结构   进行   底层   开发者   描述   属性   编程   成员
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图