在Markdown格式的文章中嵌入元数据(例如发布日期或帖子作者),以便渲染器进行条件呈现,是否有标准或常规做法?
看起来Yaml元数据格式可能是其中之一。
有各种策略,例如伴随文件mypost.meta.edn
,但我希望将所有内容都保留在一个文件中。
有两种常见的格式看起来非常相似,但实际上在某些非常具体的方面是不同的。还有一种非常不同的格式。
Jekyll静态网站生成器推广了YAML前置元数据,其由YAML部分标记分隔。是的,破折号实际上是YAML语法的一部分。并且可以使用任何有效的YAML语法定义元数据。这里是一个来自Jekyll文档的示例:
---
layout: post
title: Blogging Like a Hacker
---
请注意,YAML前置内容不会被Markdown解析器解析,但在Jekyll(或您使用的任何工具)解析之前将其删除,并且实际上可以用于请求与该页面的默认Markdown解析器不同的解析器(我不记得Jekyll是否这样做,但我已经看到一些工具这样做)。
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标题块。它有非常不同的语法,不容易与其他两个混淆。据我所知,它仅由Pandoc(如果启用)支持,并且仅支持三种类型的数据:标题、作者和日期。以下是来自Pandoc文档的示例:
% title
% author(s) (separated by semicolons)
% date
一种解决方法,使用标准语法并与所有其他查看器兼容。
我也在寻找一种方法,可以向markdown文件添加特定于应用程序的元数据,同时确保现有的查看器(如vscode和github页面)将忽略添加的元数据。另外,使用扩展的markdown语法不是一个好主意,因为我想确保我的文件在不同的查看器上可以正确呈现。
所以这是我的解决方案:在markdown文件开始处使用以下语法来添加元数据:
[_metadata_:author]:- "daveying" [_metadata_:tags]:- "markdown metadata"
这是链接引用的标准语法,它们不会被呈现,而您的应用程序可以提取这些数据。
在:
之后的-
只是url的占位符,我不使用url作为值,因为url中不能有空格,但我有需要数组值的场景。
#
代替-
,以避免链接到不存在的页面。对于标识符,我们应该附加到当前标准,如html本身。例如:[head.title]:# "My Site Title"
、[head.script.1]:https://..... "Jquery version ...."
和[head.style.1]:https://.... "css style for my site"
等。 - DiegoJArg大多数Markdown渲染器似乎支持在文件顶部使用这种YAML格式来添加元数据:
---
layout: post
published-on: 1 January 2000
title: Blogging Like a Boss
---
Content goes here.
我发现在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的平台上尝试此操作。
正确。
使用yaml
前置语法的键值对形式,就像MultiMarkdown支持的那样,但(滥用)官方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
不会被包含在内,它仅出现在 .md
中。[:author]: # "JohnDoe"
。 - v.nivuahc*[blog-date]: 2018-04-27
*[blog-tags]: foo,bar
^\*\[blog-date\]:\s*(.+)\s*$
我在这里或在各种讨论此主题的博客中没有看到这个提到,但在我的个人网站项目中,我决定在每个markdown文件的顶部使用一个简单的JSON对象来存储元数据。与上面一些更文本化的格式相比,它打字起来有点麻烦,但解析起来非常容易。基本上,我只需执行正则表达式,例如^\s*({.*?})\s*(.*)$
(使用s
选项将.
视为\n
),以捕获json和markdown内容,然后使用语言的标准方法解析json。它允许任意元字段相当容易。
---
layout: post
title: Blogging Like a Hacker
---
Pandoc
标题块中的自问链接怎么了?另外,%title
等示例对我不起作用。 - isomorphismes