xmlsquishsource. compose. build.
English

XML DSL 与项目指南

先定义契约,再执行展开

宏拥有命名空间限定名称与显式参数。展开解析固定目标,并创建隔离的调用帧。

跳转到章节
本页目录

显式调用契约

调用时先在调用方求值 arg 与 fill;随后宏体在定义位置运行,只能看到显式输入。

<xs:entry xmlns:xs="https://xmlsquish.moesegfault.dev/ns"
          xmlns:app="urn:example:app">
  <xs:import src="./macros.xml"/>
  <xs:expand ref="app:greeting">
    <xs:arg name="name" value="Klee"/>
  </xs:expand>
</xs:entry>

字符串参数

在 callee frame 创建前于调用方求值。

  • value="literal"
  • get="arg.other"
  • 只产生文本的求值正文

结构化内容

用 xs:insert 把标量作为转义文本输出;它绝不会把 <、> 或 & 重新解析成标记。需要保留结构时使用 xs:fill/xs:slot。

<xs:macro name="app:panel">
  <Panel><xs:slot name="body" required="true"/></Panel>
</xs:macro>

<xs:expand ref="app:panel">
  <xs:fill name="body"><Message>Hello</Message></xs:fill>
</xs:expand>