0

我认为,CSS 语法和基本原则非常有用,而且不仅适用于样式。是否有任何 PARSE 引擎可以使用类似 CSS 的规则进行操作,例如 XML 的规则?


例如,我们可以创建类似框架的东西(是的,另一个),在其中我们以 xml 样式定义页面(只是示例,可能非常愚蠢或两个复杂):

<page id="index" url="/" controller="staticpage" />
<page id="about" url="/" controller="staticpage" action="about" />
<page id="post" url="/post/(\d+)" type="regex" controller="post" class="">
     <param id="1" name="post_id" />
</page>
<page id="post_comment" url="/comment/(\d+)" type="regex" controller="post" action="comment" class="authneeded">
     <param id="1" name="post_id" />
</page>
<page id="post_write" url="/write" type="regex" controller="staticpage" action="write" class="authneeded" />

然后为它写一个“CSS”:

* {
     layout: "layout.html"; // default layout
}
*[action=''] {
     action: "index"; // default action
}
#post_write {
     layout: "adminlayout.html";
}
.authneeded {
     redirect: "/";
}
.authneeded:loggedin {  // pseudoclass which is set only if the user logged in. 
                        // (maybe POSTS:loggedin .authneeded to apply only one
                        // pseudoclass)

     redirect: false;   // no, we don't need to redirect then the user logged in
}

这不是一种有趣的配置方式吗?更好的是,我们可以创建一个管理脚本(受 jquery 启发;)

./admin #about addClass authneeded 
./admin "#post PARAM" attr id param_post

那么,是否有任何引擎可以使用类似 CSS 的规则进行操作?

4

3 回答 3

0

我看过一个用于 Mac 的 HTML/CSS 编辑器的演示,它使用 CSS 选择器生成 HTML 标记。不记得程序的名称,但它似乎是一种非常优雅和高效的 HTML 编写方式。

为了让您了解它是如何工作的,假设您在编辑器中编写了以下代码:

ul#navigation li a.active

并按一些神奇的快捷键(或只是Enter)将其转换为:

<ul id="navigation">
    <li><a class="active"></a></li>
</ul>

对我来说,这似乎是 CSS 的合乎逻辑的用途。如您所述,将其用于元数据可能很有用,如果您想将其分开。

但是,在您的示例中,两者非常密切相关。在 XML 中设置默认值和条件才有意义(就像param标签一样)。

于 2009-12-01T20:37:53.363 回答
0

不完全是 CSS,但既然你提到了 XML,总是有XSLT,它可以用来以不同的方式转换 XML。例如,您可以从一个简单的 XML 文件等构建一个 HTML 列表。

于 2009-12-01T19:21:29.470 回答
-1

我说它已经完成了?以下是 grails 和 django 中的一些 urlmappings。它不是 CSS,但话说回来,CSS 应该包含样式而不是动作,并且语法没有那么不同。

在 grails 中,UrlMapping.groovy 可能类似于:

class UrlMappings {
    static mappings = {
      "/$controller/$action?/$id?"{
        constraints {
       // apply constraints here
      }
    }
    "/"(controller:"static")
    "500"(view:'/error')
    "/product/" (controller:"myController", action:"show")
    "/old/**" (view:"/index")
    "/uploads/$requestedFile**" (controller:"processFile")
  }
}

在蟒蛇中:

urlpatterns = patterns('',
    # Example:
    (r'^$', direct_to_template, {'template': 'pages/front.html' }),
    (r'^about/',direct_to_template, {'template': 'pages/about.html' }),
    (r'^demo/',direct_to_template, {'template':'pages/demo.html'}),
    (r'^accounts/', include('apps.accounts.urls')),
    (r'^forms/', include('apps.forms.urls')),
    (r'^admin/doc/', include('django.contrib.admindocs.urls')),
    (r'^admin/(.*)', admin.site.root),
    {'document_root': settings.MEDIA_ROOT}),
)

我个人偏爱 Grails,它恰好更类似于您提供的脚本。在 grails 中,大多数 urls/actions 将由您的控制器自动生成,因此您不需要配置,但它适用于世界不太完美的情况;)。

于 2009-12-01T19:28:19.640 回答