Markdown元数据格式

Pet*_*ron 29 markdown metadata

是否存在在Markdown格式的帖子中嵌入元数据的标准或约定,例如发布日期或作者是否由渲染器进行条件渲染?

看起来像这样的Yaml元数据格式可能就是这样.

有各种策略,例如附带的文件mypost.meta.edn,但我希望将它们全部保存在一个文件中.

Way*_*lan 46

有两种常见的格式看起来非常相似,但在某些非常具体的方面实际上是不同的.第三个是非常不同的.

YAML Front Matter

Jekyll静态站点生成器推广了YAML前端物质,该物质由YAML部分标记消除.是的,破折号实际上是YAML语法的一部分.并且使用任何有效的YAML语法定义元数据.以下是Jekyll文档中的一个示例:

---
layout: post
title: Blogging Like a Hacker
---
Run Code Online (Sandbox Code Playgroud)

请注意,Markdown解析器不会解析YAML前端问题,但会在Jekyll(或您正在使用的任何工具)解析之前将其删除,并且实际上可以用于请求与该页面的默认Markdown解析器不同的解析器(I不要记得Jekyll是否这样做,但我已经看到了一些工具.)

MultiMarkdown元数据

较旧且更简单的MultiMarkdown Metadata实际上已合并到一些Markdown解析器中.虽然它最近更新为可选支持YAML分隔符,但传统上,元数据结束,Markdown文档从第一个空行开始(如果第一行是空白,则没有元数据).虽然语法看起来与YAML非常相似,但只支持键值对而没有隐含类型.以下是MultiMarkdown文档中的示例:

Title:    A Sample MultiMarkdown Document  
Author:   Fletcher T. Penney  
Date:     February 9, 2011  
Comment:  This is a comment intended to demonstrate  
          metadata that spans multiple lines, yet  
          is treated as a single value.  
CSS:      http://example.com/standard.css
Run Code Online (Sandbox Code Playgroud)

MultiMarkdown解析器包含一组对该解析器唯一的附加选项,但键值元数据用于多个解析器.不幸的是,我从未见过任何两个行为完全相同的人.如果没有定义这种格式的Markdown规则,每个人都会做出自己略有不同的解释,从而导致种类繁多.

更常见的一件事是对YAML分隔符和基本键值定义的支持.

Pandoc标题栏

为了完整起见,还有Pandoc Title Block.如果有一个非常不同的语法,并不容易与其他两个混淆.据我所知,它只受Pandoc支持(如果启用),它只支持三种类型的数据:标题,作者和日期.以下是Pandoc文档中的示例:

% title
% author(s) (separated by semicolons)
% date
Run Code Online (Sandbox Code Playgroud)

请注意,Pandoc Title Blocks是Pandoc支持的两种样式之一.Pandoc还支持如上所述的YAML元数据.默认情况下,两个扩展都未启用.


小智 22

一种解决方法是使用标准语法并与所有其他查看器兼容。

我也在寻找一种方法来将特定于应用程序的元数据添加到 Markdown 文件,同时确保现有的查看器(如 vscode 和 github 页面)将忽略添加的元数据。使用扩展的 Markdown 语法也不是一个好主意,因为我想确保我的文件可以在不同的查看器上正确呈现。

所以这是我的解决方案:在降价文件的开头,使用以下语法添加元数据:

  [_metadata_:author]:- "daveying"
  [_metadata_:tags]:-“降价元数据”

这是链接引用的标准语法,当您的应用程序可以提取这些数据时,它们不会被呈现。

-经过:仅仅是网址的预留位置,我没有使用网址为价值,因为你不能在URL中的空间,但我有场景需要数组值。


Rav*_*ine 9

我为 Markdown 找到的最一致的元数据形式实际上是 HTML 元标记,因为大多数 Markdown 解释器都识别 HTML 标记并且不会呈现元标记,这意味着元数据可以以不会显示在呈现的 HTML 中的方式存储。

<title>Hello World</title>
<meta name="description" content="The quick brown fox jumped over the lazy dog.">
<meta name="author" content="John Smith">

## Heading
Markdown content begins here
Run Code Online (Sandbox Code Playgroud)

您可以在 GitHub Gist 或 StackEdit 等中尝试此操作。


Pet*_*ron 7

大多数 Markdown 渲染器似乎都支持这种 YAML 格式的文件顶部元数据:

---
layout: post
published-on: 1 January 2000
title: Blogging Like a Boss
---

Content goes here.
Run Code Online (Sandbox Code Playgroud)


Row*_*use 6

正确的。

\n

使用yaml前面的键值语法 \xe2\x80\x94 ,就像 MultiMarkdown 支持 \xe2\x80\x94 一样,但 (ab) 使用官方 Markdown URL 语法来添加元数据。

\n

\xe2\x80\xa6 我的解决方法如下所示:

\n
---\n[//]: # (Title: My Awesome Title)\n[//]: # (Author: Alan Smithee)\n[//]: # (Date: 2018-04-27)\n[//]: # (Comment: This is my awesome comment. Oh yah.) \n[//]: # (Tags: #foo, #bar)  \n[//]: # (CSS: https://path-to-css)  \n---\n
Run Code Online (Sandbox Code Playgroud)\n

将此块放在文档的顶部.md,文档顶部和第一个 之间没有空行---

\n

当您渲染为 HTML 等时,您的假货yaml不会被包含在内。 \xe2\x80\xa6 它仅出现在.md.

\n

您还可以使用此技术在 Markdown 文档正文中添加注释。

\n

  • 这是 @DavidDa 答案的变体,使用 Markdown 参考链接。我喜欢混合使用两种语法:`[:author]: # "JohnDoe"`。 (7认同)