POML 空白控制(White Space Control)

POML 空白控制(White Space Control)

参考官方文档:

注意:该特性为"实验性(experimental)",未来版本可能变更,请谨慎使用。


概览

  • whiteSpace / white-space 属性 可用于大多数 POML 组件,用来精细控制文本空白(空格、换行、缩进)的处理方式。
  • 常见使用场景:精确排版、与不同"目标语法(Markdown/JSON/XML 等)"配合时的空白稳定性。

取值与默认行为(White Space Options)

  • 可用取值:
    • pre:原样保留所有空白(空格、Tab、换行)。
    • filter:移除首尾空白;在元素之间的空白做"标准化"(比如连续换行归并为空格)。
    • trim:仅移除内容开头与结尾的空白。
  • 默认值:
    • syntax="text" 时,默认是 pre
    • 其他语法默认是 filter
  • 作用范围:仅作用于"当前组件本身",不影响其子组件。若要批量应用,请考虑使用 <stylesheet>(见下文)。

基本示例(Example Usage)

poml 复制代码
<poml>
  <!-- 原样保留(pre) -->
  <p whiteSpace="pre" syntax="markdown">
    This   text    has multiple   spaces and indentation preserved.
    You can also include endless new lines.
  </p>

  <!-- 归并空白(filter) -->
  <p whiteSpace="filter">
    This   text will   have normalized spacing.
    New lines will also be reduced to a space.
  </p>

  <!-- 去首尾空白(trim) -->
  <p whiteSpace="trim">
     This text will have leading and trailing spaces removed.  
  </p>
</poml>

渲染后的整体文本(概念示意):

vbnet 复制代码
This text has multiple spaces and indentation preserved.
You can also include endless new lines.
This text will have normalized spacing. New lines will also be reduced to a space.
This text will have leading and trailing spaces removed.

  • whiteSpace 仅控制渲染到 IR(中间表示) 时的空白处理。
  • 当 IR 再被写出为 Markdown/JSON/XML 等具体格式时,生成器可能按目标语法规则进一步影响空白。

示例(Markdown 语法对空白的影响):

poml 复制代码
<poml syntax="markdown" whiteSpace="pre">
  Marker 0
  Marker 1
  <p>
    The first paragraph.
  </p>
  Marker 2
  <p>
    The second paragraph.
  </p>
  Marker 3
</poml>

可能写出为(单行示意):

sql 复制代码
Marker 0 Marker 1 The first paragraph. Marker 2 The second paragraph. Marker 3

若你需要"完全按字面保留空白",建议:

  • 使用 syntax="text"whiteSpace="pre"
  • 但注意:在 syntax="text" 下不能使用如 <p> 这类标签组件。

示例:

poml 复制代码
<poml syntax="text" whiteSpace="pre">
Line 1
  Line 2 (indented)
Line 3
</poml>

用样式表批量应用空白策略(Stylesheet)

当需要对多处/多类元素统一设置空白规则时,可使用 <stylesheet>

poml 复制代码
<poml>
  <stylesheet>
    { "p": { "whiteSpace": "pre" } }
  </stylesheet>

  <p> A    B     C </p>
  <p> D\n\nE </p>
</poml>

上例将对所有 <p> 应用 whiteSpace="pre"


实践建议与常见坑

  • 仅影响当前组件whiteSpace 不会递归影响子节点;需要全局/批量请用 <stylesheet>
  • 目标语法影响:即使 IR 中保留了空白,写出到 Markdown/JSON/XML 时仍可能被目标语法再次规整。
  • 与 syntax 配合 :追求"字面保持"时优先 syntax="text" + pre;但不能混用结构化标签(如 <p>)。
  • 属性别名 :同时支持 whiteSpacewhite-space 两种写法;风格上建议统一。
  • 实验性特性:未来可能变更,升级 POML 后应回归测试关键模板。

参考与下一步

POML 空白控制(White Space Control)

参考官方文档:

注意:该特性为"实验性(experimental)",未来版本可能变更,请谨慎使用。


概览

  • whiteSpace / white-space 属性 可用于大多数 POML 组件,用来精细控制文本空白(空格、换行、缩进)的处理方式。
  • 常见使用场景:精确排版、与不同"目标语法(Markdown/JSON/XML 等)"配合时的空白稳定性。

取值与默认行为(White Space Options)

  • 可用取值:
    • pre:原样保留所有空白(空格、Tab、换行)。
    • filter:移除首尾空白;在元素之间的空白做"标准化"(比如连续换行归并为空格)。
    • trim:仅移除内容开头与结尾的空白。
  • 默认值:
    • syntax="text" 时,默认是 pre
    • 其他语法默认是 filter
  • 作用范围:仅作用于"当前组件本身",不影响其子组件。若要批量应用,请考虑使用 <stylesheet>(见下文)。

基本示例(Example Usage)

poml 复制代码
<poml>
  <!-- 原样保留(pre) -->
  <p whiteSpace="pre" syntax="markdown">
    This   text    has multiple   spaces and indentation preserved.
    You can also include endless new lines.
  </p>

  <!-- 归并空白(filter) -->
  <p whiteSpace="filter">
    This   text will   have normalized spacing.
    New lines will also be reduced to a space.
  </p>

  <!-- 去首尾空白(trim) -->
  <p whiteSpace="trim">
     This text will have leading and trailing spaces removed.  
  </p>
</poml>

渲染后的整体文本(概念示意):

vbnet 复制代码
This text has multiple spaces and indentation preserved.
You can also include endless new lines.
This text will have normalized spacing. New lines will also be reduced to a space.
This text will have leading and trailing spaces removed.

  • whiteSpace 仅控制渲染到 IR(中间表示) 时的空白处理。
  • 当 IR 再被写出为 Markdown/JSON/XML 等具体格式时,生成器可能按目标语法规则进一步影响空白。

示例(Markdown 语法对空白的影响):

poml 复制代码
<poml syntax="markdown" whiteSpace="pre">
  Marker 0
  Marker 1
  <p>
    The first paragraph.
  </p>
  Marker 2
  <p>
    The second paragraph.
  </p>
  Marker 3
</poml>

可能写出为(单行示意):

sql 复制代码
Marker 0 Marker 1 The first paragraph. Marker 2 The second paragraph. Marker 3

若你需要"完全按字面保留空白",建议:

  • 使用 syntax="text"whiteSpace="pre"
  • 但注意:在 syntax="text" 下不能使用如 <p> 这类标签组件。

示例:

poml 复制代码
<poml syntax="text" whiteSpace="pre">
Line 1
  Line 2 (indented)
Line 3
</poml>

用样式表批量应用空白策略(Stylesheet)

当需要对多处/多类元素统一设置空白规则时,可使用 <stylesheet>

poml 复制代码
<poml>
  <stylesheet>
    { "p": { "whiteSpace": "pre" } }
  </stylesheet>

  <p> A    B     C </p>
  <p> D\n\nE </p>
</poml>

上例将对所有 <p> 应用 whiteSpace="pre"


实践建议与常见坑

  • 仅影响当前组件whiteSpace 不会递归影响子节点;需要全局/批量请用 <stylesheet>
  • 目标语法影响:即使 IR 中保留了空白,写出到 Markdown/JSON/XML 时仍可能被目标语法再次规整。
  • 与 syntax 配合 :追求"字面保持"时优先 syntax="text" + pre;但不能混用结构化标签(如 <p>)。
  • 属性别名 :同时支持 whiteSpacewhite-space 两种写法;风格上建议统一。
  • 实验性特性:未来可能变更,升级 POML 后应回归测试关键模板。

参考与下一步

相关推荐
皇族崛起9 小时前
金融 - 搭建 图谱挖掘工作流 调研
金融·llm·知识图谱·neo4j·多智能体·findpaper
字节跳动安全中心10 小时前
MCP 安全“体检” | 基于 AI 驱动的 MCP 安全扫描系统
安全·llm·mcp
聚客AI10 小时前
🌈提示工程已过时?上下文工程从理论到实践的完整路线图
人工智能·llm·agent
大模型教程12 小时前
AI Agent竞争的下半场:决胜关键不在模型,而在系统架构
程序员·llm·agent
dundunmm13 小时前
【数据集】WebQuestions
人工智能·llm·数据集·知识库问答·知识库
大模型教程13 小时前
基于DeepSeek-R1手搓AI Agent智能体(手把手,个人电脑也能玩)
程序员·llm·agent
AI大模型13 小时前
基于Qwen千问实现自然语言数据分析AI Agent智能体(手把手,个人电脑也能玩哦)
程序员·llm·agent
智泊AI15 小时前
有什么技巧可以提升RAG召回率?
llm
风雨中的小七17 小时前
解密prompt系列61. 手搓代码沙箱与FastAPI-MCP实战
llm·nlp
AI大模型1 天前
斩获59.4K星!一款本地部署的开源私人知识库工具!
程序员·llm·agent