Markdown元数据格式

时间:2017-05-27 10:45:44

标签: metadata markdown

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

看起来可能是这种Yaml metadata格式。

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

7 个答案:

答案 0 :(得分:36)

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

YAML Front Matter

Jekyll静态站点生成器推广了由YAML section markers消除的YAML前端事务。是的,破折号实际上是YAML语法的一部分。并且使用任何有效的YAML语法定义元数据。以下是Jekyll docs

中的示例
---
layout: post
title: Blogging Like a Hacker
---

请注意,Markdown解析器不会解析YAML前端问题,但会在Jekyll(或您正在使用的任何工具)解析之前将其删除,并且实际上可以用于请求与默认Markdown解析器不同的解析器。页面(我不记得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

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

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

Pandoc Title Block

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

% title
% author(s) (separated by semicolons)
% date

请注意,Pandoc Title Blocks是Pandoc支持的两种样式之一。如上所述,Pandoc还支持YAML Metadata。默认情况下,这两种扩展都不启用。

答案 1 :(得分:3)

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

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

Content goes here.

答案 2 :(得分:1)

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

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

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


  [_metadata_:author]:- "daveying"
  [_metadata_:tags]:- "markdonw metadata"

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

pt.TableRange1.Copy apws.Cells(1, 1).PasteSpecial xlPasteValues 之后的-只是url的占位符,我不使用url作为值,因为你的网址中没有空格,但我有场景需要数组值。

答案 3 :(得分:1)

正确。

使用yaml前项键值语法(例如MultiMarkdown支持),但是(ab)使用官方的markdown URL语法添加元数据。

...我的解决方法如下:

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

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

您的伪造yaml不会显示为HTML等。…它只会出现在.md中。

您还可以使用此技术在降价文档的正文中添加评论。

答案 4 :(得分:0)

这不是标准方式,但适用于Markdown Extra。

我想要一些在解析器中起作用的东西,但是当我浏览Bitbucket上存储文件的文件时,也没有留下任何混乱。

所以我使用了Markdown Extra语法中的Abbreviations

*[blog-date]: 2018-04-27
*[blog-tags]: foo,bar

然后我用regexp解析它们:

 ^\*\[blog-date\]:\s*(.+)\s*$

只要我不在文本中写出确切的关键字,它们就不会留下任何痕迹。所以使用一些模糊的前缀来隐藏它们。

答案 5 :(得分:0)

我在这里没有其他地方或在讨论该主题的各种博客中都提到过这个问题,但是在我个人网站的项目中,我决定在每个markdown文件的顶部使用一个简单的JSON对象来存储元数据。与上面的其他一些文本格式相比,键入起来比较麻烦,但是它解析起来非常容易。基本上,我只是做一个正则表达式,例如^\s*({.*?})\s*(.*)$(启用s选项,将.视为\n)来捕获json和markdown内容,然后使用语言的标准方法。它可以轻松地用于任意元字段。

答案 6 :(得分:0)

我为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

您可以在GitHub Gist或StackEdit之类的系统中尝试此操作。