第四十五章 开发自定义标签 - 规则和操作
CSP
允许你开发自定义的HTML
标签用于CSP
文件。CSP
标记语言本身是使用自定义标记机制实现的。自定义标签提供了一种方式:
- 使用熟悉的语法为HTML作者提供附加功能
- 为
web
应用程序开发可重用的组件
规则和操作
CSP
编译器将带标记的HTML
文档转换成Caché
类(参见“CSP
编译器”)。CSP
编译器的一些功能来自于它能够
- 识别
CSP
文档中嵌入的#()#
表达式,以及 - 识别
HTML
(或XML
)文档中的某些标签或标签组合,并用开发人员提供的动作替换它们。这被称为标签匹配,在本章中有所描述。
如果熟悉XML
的XSL
技术,会认识到CSP
是XSL
的一种变体,添加了额外的特性来为应用程序生成HTML
。
以下CSP
页面示例包含一个自定义标记<my:COMPANY>
,该标记在HTML页面中显示公司名称:
<html>
<body>
<my:COMPANY>
</body>
</html>
处理该页面时,望CSP
编译器用合适的HTML
文本替换<my:COMPANY>
标记,例如:
<html>
<body>
<b>Octoglomerate</b>
</body>
</html>
CSP
编译器对<my:COMPANY>
标记采取的操作是在带有<csr:action>
标记的规则文件中定义的。规则文件是带有.csr
(Caché Server Rule)文件扩展名的XML
文档,它定义了识别标签的规则以及找到这些标签时要执行的操作。它还可以包括附加信息,例如规则的描述。
<my:COMPANY>
标记的规则文件可能如下所示,并可能被命名为company.csr
:
<csr:rule name="myCOMPANY" match="my:COMPANY" empty>
<csr:action>
<b>Octoglomerate</b>
</csr:action>
</csr:rule>
这个规则文件规定:
使用<csr:rule>
标记,该文件定义了一个名为myCOMPANY
的规则。
属性empty
指定<my:COMPANY>
标记没有结束标记。
规则名具有与Caché
类相同的命名限制。
规则只在定义它的Caché
名称空间中活动,以%
开头的规则除外,这些规则定义在%SYS
名称空间中,并且对所有其他名称空间可见。
<csr:action>
标记指定要采取的操作。
<csr:action>
标签的内容必须是HTML
和以下任何一种:
#()#
表达式##()##
表达式<script>
标签- 附加的
<csr:>
标记(稍后讨论)。 <csr:action>
标签不能包含CSP
标签;
也就是说,CSP
编译器不对操作的内容执行标记转换。
Do $System.CSP.LoadRuleFile("company.csr")
这会将指定文件中的规则定义加载到当前名称空间中。还可以使用Studio
的File > New > Caché Server Page
来加载和编译规则文件。将文件保存在/csp/user
目录中。可以使用csp
示例提供的rulemgr.csp
页面来观察哪些规则是有效的。
CSP
的大部分是使用规则文件实现的。可以在Studio
、%SYS
命名空间、工作区窗口、命名空间选项卡中的CSP文件下查看系统规则文件。