Velocity模板是否有XSD Schema目录?VTL与DITA合并验证需求
解决VTL标签无法通过DITA Schema验证的问题
不存在官方提供的默认XSD Schema可直接添加到主目录,让包含#foreach、#if等VTL标签的文件直接通过DITA验证。你可以通过以下几种方式解决:
方案1:用CDATA块包裹VTL指令
将VTL指令放在CDATA块中,XML解析器会将其视为纯文本,不会触发Schema验证错误,同时Velocity通常能正常解析CDATA内的指令。示例代码:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE topic PUBLIC "-//OASIS//DTD DITA Topic//EN" "technicalContent/dtd/topic.dtd"> <section id="sample"> <title>samplelist</title> <ol><![CDATA[#foreach($issue in $issues)]]> <li>$issue.fields.summary ($issue.Key)</li> <![CDATA[#end]]> </ol> </section>
方案2:用DITA原生元素标记VTL内容
使用DITA合法的<ph>元素包裹VTL指令,并添加自定义属性标记这是VTL内容,无需修改Schema即可通过验证。示例:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE topic PUBLIC "-//OASIS//DTD DITA Topic//EN" "technicalContent/dtd/topic.dtd"> <section id="sample"> <title>samplelist</title> <ol> <ph class="- topic/ph vtl-instruction">#foreach($issue in $issues)</ph> <li>$issue.fields.summary ($issue.Key)</li> <ph class="- topic/ph vtl-instruction">#end</ph> </ol> </section>
方案3:自定义扩展DITA Schema
如果必须通过Schema直接验证包含VTL指令的内容,可以基于官方DITA XSD进行扩展:
- 找到对应元素(如
<ol>、<li>)的内容模型定义 - 修改其complexType为
mixed="true",并添加允许VTL指令的文本约束;或者自定义一个<vtl>元素,将其加入DITA元素的内容模型中,把VTL指令放在该元素内。
这种方式需要维护自定义Schema,适合有严格Schema验证要求的场景。
内容的提问来源于stack exchange,提问作者tarini sunil
相关产品推荐
相关产品推荐

