最近正在做个b/s的单子;毕竟是网页;老是为了修改一个表格的颜色或者是宽度得跑到代码里不断的查找替换;虽然有css控制但那只是针对式样;我现在想出了一个点子;就是允许用任意的标记来书写html代码;比如说中文的 <链接>www.csdn.net</链接> ,或者是英文的 <linkToCSDN>www.csdn.net</linkToCSDN> ;这个有点象xml的影子;就是不规定标记,而只规定格式;具体的实现可以看看这段代码;
--------------------------------------------------------------
  #WorkScript 的目的就是让设计与编码分开;通过自定义的标记来完成页的基础模版
  #通过WorkScript 可以达到快速更改html页外观,式样;
  #如下是演示,#号表示为注解信息make farouter:a  #创建html 的 a 标记,用farouter替代
make ta:table    #创建ta名称的table 标记
make img:img     #创建图形标记;这里是演示的是源标记的扩展#定义farouter标记的内容,用分号分割,extra 表示标记内所采用的html标记号
farouter { href="http://farouter.oicp.net"; target="_new"; extra=b,small; }  
set goo:farouter BUT { href="http://www.google.com"; }    #goo标记继承于farouter 标记;
ta { cellpadding="0"; cellspacing="0"; border="1"; style="width:100%;background-color:#FFFFCC"; extra=tr,td; }            #ta标记的扩展用法,加入style指定css
img { src="http://google.com/images/logo.gif"; }          #修改源img标记的定义---------------------------------------------------------------
可以看到上面的代码内容的书写格式;和css一样的;但是{...}里面全部的标记都是html标记;当然还可以更灵活;按照上面的格式,那么页面的源码就应该是这样的
---------------------------------------------------------------
<html>
<head>
</head>
<body><ta><!-- 这里的ta 将被定义的进行替换-->
 <img><br>
<farouter title="逐远工作室">本站地址</farouter><br> <!-- 这里的farouter 将被定义的进行替换-->
<goo title="Search Google">Search the web</goo><br> <!-- 这里的goo 将被定义的进行替换-->
<br>
这里是文字信息
</ta>
</body>
</html>
------------------------------------------------------------可以看到页面的源码可以更易懂;程序员在书写页面的时候完全可以书写自己的一套页源码,而不担心无法显示的问题;而这个过程就是,首先书写页代码,规定好要定义的标记名称;然后再编写脚本;可以编写多套脚本来解决页的风格问题;又或者是将解析的脚本保存到库里,在运行期间动态的生成网页的内容;当然,这个东西还只是内部测试版本;只算是本人为了想解决某些方面的问题而开发的;但不可否认的一点就是使用它之后的灵活性;这里是在线的演示地址,速度比较慢,我机器是adsl拨号
http://farouter.oicp.net/vm/test.asp另外,我说明一下;到这里发这个帖子并非宣传,一来这个不是产品,而是一个手写的实验品,不知道它的生命力是多久;二、我没网站,这个地址只是临时的;三、来这里无非是想听听同行们的意见或者批评;至少让我了解一下自己做的这个工作是否有意义;ps:可能到delphi这里发这个帖并不合适;如果版主认为这个帖子不妥,请麻烦转移到非技术吧,谢了
谢谢大家

解决方案 »

  1.   

    差点忘了,程序是delphi写的com对象让asp调用的;不是asp的东西丢到这里摆 :-)_~~
      

  2.   

    主要是一个学习的问题。在J2EE架构上,这样的标签太多了,这就迫使程序员去学习这样那样的标签。太累。
    建议,采用w3c组织提供的标准定义,这样,全世界都会支持,无论j2ee还是.net都支持的标准比较好。
    在转化方面,XSLT是个不错的选择,XQuery也可以,但是XQuery现在还是草本阶段。而XSLT比较成熟了。
      

  3.   

    to chechy,我的脚本命令很简单;只有make set {} 而其中的内容全部都是html的原始标记;那么,在页内容的标记则是书写者自己定义的;目前就只实现了这些功能;也许会再做下去;但还是想先听听你们的意见:)
      

  4.   

    Struts就是这样,提供了一些标签,同时也允许用户自定义。实现机理应该就是通过词法分析和简单的语法分析,然后字符串替换就可以完成。
    我所说的意思是,现在这样的东西太多,没有统一的东西。程序员今天用这个,学这个,明天用那个,学那个。其实都差不多,但又都不一样。要推广难得。不如用用现成的。CSDN就是XSLT做的,典型的数据与显示分离。
      

  5.   


    <script language="WorkScript">
    #这是中文标记的测试
    make 链接:a
    make 表格:table
    make 图象:img
    make 网页:html链接 { href="http://community.csdn.net/Expert/topic/3734/3734923.xml?temp=.1315729"; target="_new"; extra=b,small; }
    set Google:链接 BUT { href="http://www.google.com"; }表格 { cellpadding="0"; cellspacing="0"; border="0"; extra=tr,td; }
    图象 { src="http://community.csdn.net/images/CSDN_logo.GIF"; }
    网页 { extra=body }</script><网页>
    <表格>
     <图象><br>
    <链接>我的帖子</链接><br>
    <Google title="Search Google">web搜索引擎</Google><br>
    </表格>
    </网页>这个是中文的测试;听君一席话,才知道自己所做的无非是走别人走过的老路子;还不知道行不行的通;不过到是真想通过这样做能给自己带来点便利;但是;好象又多增加了道工序来编写这套意义不大的脚本;还不如c++中的模板来的直接和便利;
      

  6.   

    刚看了ibm 的xslt 的介绍;我感觉我写的这个workscript是'孙子';xslt是'祖宗';虽然没什么血缘关系……哈哈
      

  7.   

    直接判断特殊标志也可以偶用%xxx%来表示一个标志%ip%代表IP地址
    <td width="115" height="10">%ip%</td>
    <td width="115" height="10">192.168.1.18</td>
      

  8.   

    如果是多行表格,<tr><td width="640" colspan="2">%rulelist%</td></tr>
    用下面模版
    <tr>
       <td width="50">
       <input type="checkbox" name="selrule%d" value="%s"></td><td width="590">%s
       </td>
    </tr>
    把行替换为模版,最后的html结果是表格一行是
    <tr>
    <td width="50">
    <input type="checkbox" name="selrule0" value="192.168.1.18=TCP|ACCEPT"></td><td width="590">192.168.1.18=TCP|ACCEPT
    </td>
    </tr>
    ......
    跟intraweb学的,仅供参考
      

  9.   

    关于Web开发中的代码和页面的分离,也可以说是程序员和美工的分离,是个老问题,而不是新问题.
    ==========
    解决的办法,最流行得就是模板技术.如php里的PhpLib,Smarty,Asp里没有著名的统一的模板引擎,但网上有很多人写的Lib类.采用标准的html语句+模板关键词,比如:
    <tr>
       <td class="c_title">
       {title}       //{title}定义的标题标签
      </td>
    </tr>
    <tr>
       <td class="c_content">
       {content}    //{content}定义的内容标签
      </td>
    </tr>
    链接的css样式中:
     .c_title
     {
    ........
      }
    .c_content
      {
     ..........
      }
    =====
    通过后台程序进行统一的替换生成静态的html文件,也就是现在很多网站使用的模板生成技术.程序员专注于程序功能本身,美工可以做很多模板,而且不用学习更多的东西.
    ===============
    上边仅仅是说明,实际的开发中,抛弃<table>的布局,采用Div+Css的技术,再配合模板生成,完全可以页面和代码的分离.进一步,用Xml+Css/Xml+Xslt,实现数据和显示的分离.
    ===================
    楼主开发的脚本,再看楼主的标记定义的一个问题:
    ta { cellpadding="0"; cellspacing="0"; border="1"; style="width:100%;background-color:#FFFFCC"; extra=tr,td; }            #ta标记的扩展用法,加入style指定cssta标记翻译成html应该是这样
    <table cellpadding="0"; cellspacing="0"; border="1"; style="width:100%;background-color:#FFFFCC"; >......
    这里talbe中加入style就不是一个推荐的做法,楼主的标记定义不是一个清晰的做法.推荐的做法:
    <table class="t_class">.......
    在css文件里定义:
    .t_class{width:.......}
    =============
    符合W3c标准是很好的。
    =============================================
    楼主说的情况,我看用好了模板和Css就能解决,不过楼主自己创造的能力还是很佩服的。
    ==========================================
    以上的内容涉及很多,这些东西在Web版已经是多次置顶讨论的了,也许我说的不很清楚。楼主可以找找Web版的帖子。
      

  10.   

    to  wzgme(一风一云)
    你说的有道理我的那段实现目的就是为了表示,在被ta所替换的table 标记之内的定义可以是任意格式的;也可以加入class 或者是 onclick 事件,或者是style ;另外我提供的这个演示,其实说白了就如同  chechy(www.qdocuments.net) 这个五星大哥一针见血的指出 "实现机理应该就是通过词法分析和简单的语法分析,然后字符串替换就可以完成。"我这个算是一个相对自由的字符串批量替换的批处理语言罢了,今天又仔细看了看那些支持Template的web开发库,解决问题的结果其实是一样的;只是切入点有点不一样,也许再强化我的这个workscript最终得到的结果只是和基于template开发所做的工作差不多;而编写这个的初衷是为了一个想法;其中起源于 “javascript 星际争霸” 作者‘幻语’的新作品js-elf的影响,他实现的是一套独立的脚本语言,这里是他的官网 http://elf.ivi.cn/ ,js强人一个;另外;chechy 提到的xslt 确实是个好东西,有它,我还做什么做?
      

  11.   

    原来是com调用的。
    我以为是直接写了个象vbscript/javascript类似的脚本解释引擎呢。
    我倒是很想了解一下怎么自己写在ie中能用的脚本解释引擎
      

  12.   

    to cuixiping(无心);这种并非不能实现;只要把解释器用js/vbs重写即可;另外,你可以看看 elf.ivi.cn ,这里就是一个自己写在ie中能用的脚本解释引擎