Gibt es eine Norm oder Konvention für die Einbettung von Metadaten in eine Markdown formatiert posten, wie das Datum der Veröffentlichung oder post Autor für bedingtes rendering durch den renderer?
Sieht wie folgt aus Yaml Metadaten format werden könnten.
Gibt es alle Arten von Strategien, z.B. einer begleitenden Datei mypost.meta.edn
, aber ich bin der Hoffnung, es zu halten alles in einer Datei.
Gibt es zwei gängige Formate, die sehr ähnlich Aussehen, aber tatsächlich Verschieden sind in einigen sehr spezifischen Weise. Und eine Dritte, die ist sehr unterschiedlich.
YAML Front Matter
Dem Jekyll statische Website-generator popularisiert YAML front matter die deliminated von YAML Abschnitt Marker. Ja, die Striche sind tatsächlich Teil des YAML-syntax. Und die Metadaten definiert, die mithilfe eines beliebigen gültigen YAML syntax. Hier ist ein Beispiel aus der Jekyll docs:
Beachten Sie, dass YAML front matter wird nicht geparst, indem die Markdown-parser, sondern entfernt vor der Analyse durch Jekyll (oder was auch immer Werkzeug, das Sie verwenden) und könnte tatsächlich verwendet werden, zu verlangen, einen anderen parser als die Standard-Markdown-parser für die Seite (ich erinnere mich nicht, wenn Jekyll das tut, aber ich habe gesehen, einige tools, die das tun).
MultiMarkdown Metadaten
Die ältere und einfachere MultiMarkdown Metadaten ist eigentlich eingebaut in ein paar Markdown-Parser. Während es hat mehr vor kurzem aktualisiert worden und unterstützt nun wahlweise auch YAML deliminators, dass traditionell die Metadaten endet und die Markdown-Dokument beginnt auf die erste leere Zeile (wenn die erste Zeile leer ist, dann werden keine Metadaten). Und während die syntax sehr ähnlich sieht YAML, nur Schlüssel-Wert-Paare unterstützt keine implizite Typen. Hier ist ein Beispiel aus der MultiMarkdown docs:
Den MultiMarkdown-parser enthält eine Reihe von zusätzlichen Optionen, die einzigartig sind, dass parser, aber die Schlüssel-Wert-Metadaten verwendet wird, über mehrere Parser. Leider, ich habe nie gesehen, die zwei verhielten sich genau gleich. Ohne die Markdown-Regeln definieren, die solch einem format jeder hat Ihre eigene, etwas andere interpretation, was eine Menge Abwechslung.
Die eine Sache, die häufiger ist die Unterstützung für YAML deliminators und grundlegende Schlüssel-Wert-Definitionen.
Pandoc Title Block
Vollständigkeit halber gibt es auch die Pandoc Title Block. Wenn, hat eine ganz andere syntax und ist nicht leicht zu verwechseln mit den anderen zwei. Meines Wissens ist es nur unterstützt von Pandoc (wenn aktiviert), und es unterstützt nur drei Arten von Daten: Titel, Autor und Datum. Hier ist ein Beispiel aus der Pandoc-Dokumentation:
Beachten Sie, dass Pandoc Title Blocks sind eine von zwei Stil unterstützt von Pandoc. Pandoc unterstützt auch YAML Metadaten wie oben beschrieben. Weder extension ist standardmäßig aktiviert.
Pandoc title block
? Auch die%title
etc Beispiel funktioniert bei mir nicht.Meisten Markdown-Renderer scheinen dies zu unterstützen YAML-format für Metadaten am Anfang der Datei:
Eine Problemumgehung verwenden Sie standard-syntax und kompatibel mit allen anderen Zuschauern.
Ich war auch auf der Suche nach einer Möglichkeit zum hinzufügen von anwendungsspezifischen Metadaten, um markdown-Dateien und stellen Sie sicher, dass die vorhandenen Zuschauer wie vscode und github-Seite ignoriert die zusätzlichen Metadaten. Auch die erweiterte markdown-syntax ist nicht eine gute Idee, weil ich möchte, dass meine Dateien renderred korrekt auf unterschiedliche Betrachter.
So, hier ist meine Lösung: zu Beginn des markdown-Datei, verwenden Sie folgende syntax, um Metadaten hinzuzufügen:
Dies ist die standard-syntax für Referenzen, und Sie werden nicht renderred, während Ihre Anwendung können diese extrahieren Daten aus.
Den
-
nach:
ist nur ein Platzhalter für die url, ich habe keine url als Wert, weil Sie nicht Platz haben, in der URL, aber ich habe Szenarien erfordern array-Werte.Dies ist nicht ein standard-Weg, sondern arbeitet mit Markdown Extra.
Ich wollte etwas, das funktionierte in den parser, aber auch nicht hinterlassen keine Unordnung, wenn ich durchsuchen Sie die Dateien auf Bitbucket, wo ich die Dateien speichern.
Also ich benutze Abkürzungen aus der Markdown-Extra syntax.
ich dann analysieren Sie mit regexp:
Solange ich nicht Schreibe die keywords in den text, lassen Sie keine Spur. So verwenden einige Präfix obskur genug, Sie zu verstecken.
Ich habe nicht gesehen, diese an anderer Stelle erwähnt hier oder in diversen blogs diskutiert das Thema, aber in einem Projekt für meine persönliche website, ich habe beschlossen, um eine einfache JSON-Objekt an der Spitze jeder markdown-Datei zum speichern von Metadaten. Es ist ein wenig umständlich zu geben im Vergleich zu einigen der mehr textorientierten Formaten vor, aber es ist super einfach zu analysieren. Im Grunde habe ich nur eine regex wie
^\s*({.*?})\s*(.*)$
(mit ders
option zur Behandlung von.
als\n
) zu erfassen, die json-und markdown-Inhalte, dann Parsen der json mit der Sprache der standard-Methode. Es ermöglicht sehr einfach, für beliebige meta-Felder.Die konsequenteste form von Metadaten, die ich gefunden habe für Markdown ist eigentlich ein HTML-meta-tags, da die meisten Markdown-Dolmetscher erkennen von HTML-tags und werden nicht gerendert, meta-tags, was bedeutet, dass Metadaten gespeichert werden können in einer Weise, die nicht zeigen, bis in den gerenderten HTML.
Können Sie versuchen, diese in etwas wie GitHub Gist oder StackEdit.