or
or
By clicking below, you agree to our terms of service.
New to HackMD? Sign up
Syntax | Example | Reference | |
---|---|---|---|
# Header | Header | 基本排版 | |
- Unordered List |
|
||
1. Ordered List |
|
||
- [ ] Todo List |
|
||
> Blockquote | Blockquote |
||
**Bold font** | Bold font | ||
*Italics font* | Italics font | ||
~~Strikethrough~~ | |||
19^th^ | 19th | ||
H~2~O | H2O | ||
++Inserted text++ | Inserted text | ||
==Marked text== | Marked text | ||
[link text](https:// "title") | Link | ||
 | Image | ||
`Code` | Code |
在筆記中貼入程式碼 | |
```javascript var i = 0; ``` |
|
||
:smile: | ![]() |
Emoji list | |
{%youtube youtube_id %} | Externals | ||
$L^aT_eX$ | LaTeX | ||
:::info This is a alert area. ::: |
This is a alert area. |
On a scale of 0-10, how likely is it that you would recommend HackMD to your friends, family or business associates?
Please give us some advice and help us improve HackMD.
Do you want to remove this version name and description?
Syncing
xxxxxxxxxx
Semantic Markdown Spec (Alpha Draft)
Introduction
What is Semantic Markdown?
Semantic Markdown is a plain-text format
for writing documents that embed machine-readable data.
The documents are easy to author and both human and machine-readable,
so that the structured data contained within these documents
is available to tools and applications.
Technically speaking,
Semantic Markdown is "RDFa Lite for Markdown"
and aims at enhancing the HTML generated from Markdown
with RDFa Lite attributes.
Design Rationale:
About this document
This document is in early draft stage!
Providing feedback
Interested in joining the idea or providing feedback?
Semantic Markdown at a glance
Semantic annotations are declared within curly braces
{...}
.Annotation types
Semantic Markdown provides 3 types of annotations:
Annotation starting with a
.
indicates a type/class,and generate RDFa
typeof
attribute:{.foaf:Person}
Annotation without leading marker indicates a property,
and generate RDFa
property
attribute:{foaf:name}
Annotation starting with a
=
indicates an IRI of a known entity,and generate RDF
resource
attribute:{=wdt:Q42}
Paragraph example
Would produce the following HTML+RDFa:
Notice how IRI namespace "schema" is implicitly resolved
from its listing at RDFa Core Initial Context
Title and list example
Would produce the following HTML+RDFa:
Annotation syntax
Semantic Markdown is declared as sets of hints.
Each set of hints is declared either directly where applied
or indirectly tied to links.
Hints may use shortened CURIE notation,
where uncommon vocabularies need to be defined.
Hint syntax
Semantic Markdown id written
as a set of zero or more whitespace delimited hints,
wrapped with curly braces
{...}
.Each hint consists of a type identifier and an address.
Type identifier is either
.
or=
or none.Address is either a IRI wrapped with angle brackets
<...>
,or an RDFa CURIE.
All CURIEs must use
either an explicitly defined prefix
or a prefix listed in RDFa Core Initial Context.
Link definition syntax
- The image file may be corrupted
- The server hosting the image is unavailable
- The image path is incorrect
- The image format is not supported
Learn More →Prefix definition syntax
- The image file may be corrupted
- The server hosting the image is unavailable
- The image path is incorrect
- The image format is not supported
Learn More →Annotation scopes
Semantic Markdown is applied to content in different ways:
Span scope
Hints immediately following an explicitly confined span of text
apply to the span;
i.e. bare spans (square brackets:
[...]
),underline (underscore:
_..._
),emphasis (asterisk:
*...*
),strong emphasis (double asterisk:
**...**
),inline code (backticks: `…`),
or link (square brackets + parenthesis:
[...](...)
).Would produce the following HTML+RDFa:
Notice how third sentence above has no hints
immediately following the span,
and fourth sentence has no explicit span.
Block scope
Hints not immediately following an explicit span,
in a block with non-whitespace characters
before the hints and none after,
applies to the block.
Would produce the following HTML+RDFa:
Notice how second paragraph has punctuation after the hints.
List
Similarly for a list:
Would produce the following HTML+RDFa:
Block-tree scope
Hints in a block with non-whitespace characters
after the hints and none before,
applies to the block and any descendant blocks.
If the resulting scope does not correspond
to already generated html scope,
then a div is added.
In particular, when the resulting scope is the whole Markdown context
then a Markdown parser targeting a full html document
(not only a subset of body part as Markdown generally does)
may apply the hints to the
<html>
tag.Would produce the following HTML+RDFa:
Notice how second header and succeeding paragraph is wrapped
with a div tag,
whereas third header is omitted
because it is not a descendant but a sibling.
Block-siblings scope
Hints in a header or list block
with no non-whitespace characters before or after the hints,
followed by a block of same type and level,
applies individually to each following block of same type and level,
until any block of a lower level.
Would produce the following HTML+RDFa:
List
Similarly for a list:
Is equivalent to
And would produce the following HTML+RDFa:
Block-cluster scope
Hints in a block
with no non-whitespace characters before or after the hints,
followed by a different type or level of block,
applies to the following block
and any contained or descendant blocks;
or followed by a non-header non-list block,
applies to the following block and any following siblings
and any contained or descendant blocks of any of them.
For the context of this definition,
a paragraph or any container block
(block which can contain other blocks)
is considered to be descendent of a leaf block
(block which cannot contain other blocks,
e.g. a header or horisontal ruler).
If the resulting scope does not correspond
to already generated html scope,
then a div is added.
In particular, when the resulting scope is the whole Markdown context
then a Markdown parser targeting a full html document
(not only a subset of body part as Markdown generally does)
may apply the hints to the
<html>
tag.Would produce the following HTML+RDFa:
Link definition scope
Hints not immediately following an explicit span,
in a link definition block
with no non-whitespace characters after the hints,
applies to all references to that definition,
even if no link is defined.
Similar to Markdown link definitions,
source markup of this kind does not in itself result
in any output html markup:
It only affects other markup, and if unused it simply is ignored.
Would produce the following HTML+RDFa:
Semantic Markdown and other Markdown extensions
Attributes extension
See PHP Markdown extra special attributes
and Pandoc's header attributes:
Semantic Markdown uses similar syntax,
but either with different leading character "="
or "keywords" containing a colon.
Extract from PHP Markdown extra documentation:
spans
See Pandoc bracketed spans
span example
Would produce the following HTML+RDFa:
blocks
block example
Annotations declared as a an initial separate block
applies to all siblings by introducing a surrounding
<div>
tag.Would produce the following HTML+RDFa:
As per Block scope,
Annotations declared at the end of a block (modulo whitespace)
applies to that one block.
Would produce the following HTML+RDFa:
Extend the extensions: use attributes at other places
Set attributes on lists
Set attributes on list items
Set attributes on inlines
Define a "property attribute"
An attribute without
.
, without#
and that is not a key-value pairshould be recognized as a property name, e.g.
{foaf:name}
.Define a "subject attribute"
An attribute beginning with the
=
sign indicates a subject IRI,equivalent to an
resource=xxx
property,e.g.
{=wdt:Q42}
is equivalent to<sometag resource="wdt:Q42">
Annotate properties (RDFa "property" attribute)
Inline properties
Properties on inline delimiters
Should yield
Same with
_
,*
or**
.Annotate with 2 properties
It should be possible to annotate with 2 properties
Should yield
Annotate the subject of properties
Use a class attribute (RDFa "typeof" attribute)
Would produce the following HTML+RDFa:
As per Block scope,
above hints applies to an existing block
which serves as placeholder for the semantic hints,
and there is therefore no need for adding a wrapper
<div>
tag.Would produce the following HTML+RDFa:
(Note that the
typeof
RDFa attribute used alonegenerates an anonymous node
as the current subject of inner
property
attributes.In other words, further property annotations
will refer to an entity of the provided type.)
Use an ID attribute (RDFa "resource" attribute)
Use an annotation starting with "="
- The image file may be corrupted
- The server hosting the image is unavailable
- The image path is incorrect
- The image format is not supported
Learn More →FIXME: Undecided if leading character
=
should be replacedwith e.g.
@
or#
.Combine ID + class
It should be possible to combine an ID and a type attribute
Should produce the following HTML+RDFa
But beware that if one hint is broken
then the whole annotation is passed through as-is,
e.g. if using an undefined prefix:
Should produce the following HTML+RDFa
Where to find the current subject?
RDFa relies on a mechanism
to indicate the current subject of the annotation.
Semantic Markdown aims at having an equivalent mechanism.
Intuitively, the current subject is the resource
annotated in the "closest ancestor" of a property annotation.
Current span subject
Used to indicate
that a certain inline portion of a sentence is about an entity.
Should yield
Current paragraph subject
Used to indicate
that a whole paragraph is about an entity.
The annotation is at the end of the paragraph for readability.
Should yield
Current list subject
Used to indicate that a whole list describes an entity.
The annotation should be sought
at the end of the line preceding the list.
Should yield
Paragraph preceding a list
If an annotation is between a paragraph and a list,
then it applies to the list
when standalone with double newlines
same as writing a separate paragraph:
Should yield
Indented lists
Indented lists are key
because they could make plain Markdown lists look like JSON-LD trees;
Plain Markdown list:
Annotated version:
- The image file may be corrupted
- The server hosting the image is unavailable
- The image path is incorrect
- The image format is not supported
Learn More →FIXME: Either replace this section with JSON-LD like style
or drop this section
Current blockquote subject
Used to indicate that a blockquote describes an entity
- The image file may be corrupted
- The server hosting the image is unavailable
- The image path is incorrect
- The image format is not supported
Learn More →FIXME: Either document how or drop this section
Current header subject
Used to indicate
that a certain section of a document describes an entity.
The following annotated MD:
Should produce the following HTML+RDFa:
Similarly
Should produce the following HTML+RDFa:
Current div subject
Should yield
As per Block-cluster scope,
hints applies until next descendant block or sibling paragraph.
To limit without introducing new content,
use an empty hint:
Should yield
Declaring prefixes
Declare prefix definitions,
anywhere in the document,
preferably at the end to ease readability.
Should yield
Prefix and link definitions have similar but separate syntax
Prefixes mimic the syntax for links,
but using curly brackets instead of angle brackets:
Specifying the default prefix
Declaring a prefix as the default generates a
vocab
attributeinstead of a prefix on the outermost block of the text,
adding a div if no such block exists already.
All uses of that default prefix is then generated without a prefix.
Would produce the following HTML+RDFa:
FIXME : The default namespace should make it possible
to annotate the document without using a prefix at all.
Instead of giving the default
both a prefix name and a special annotation,
I suggest using
@default
as the prefix itself.Would produce the following HTML+RDFa:
Common prefixes are implicitly defined
All prefixes predefined in RDFa Core Initial Context can be used
without explicitly defining them.
Would produce the following HTML+RDFa:
Referring to a IRI
Absolute IRI reference with <>
Meeting with [Bob]{.<http://xmlns.com/foaf/0.1/Person>}
CURIE (with a declared prefix)
Parallel Idea: Indented Lists using Link References (JSON-LD or YAML-like lists).
Link can optionally be made clickable
by adding a link to its definition at the bottom.
See also
http://rdfa.info/
Whereas the scope of this project is limited
to authoring a specification
and maybe developing proof-of-concept parsers for it,
some projects doing similar or more than that
can be of inspiration.
Roam-research
Org-roam
TiddlyRoam
There is also some experimentations
on how to use those specifications:
SemanticMarkdown use cases studies
Other references :
RDFa Lite
RDFa CURIE
RDFa Core
RDFa Core Initial Context
Deprecated Stuff
Attributes on a word without inline delimiters?
Properties on word without delimiters
If a property annotation immediately follows a word
with no explicit inline delimiters,
it should be applied to this word only.
(Is it really possible in terms of parsing? don't know).
Should yield
IRI written directly as key
Should yield
Omit list item leading key and trailing repetition punctuation
If the list item contains
:
or=
,the annotation is applied to the string after this character.
If final non-space non-annotation character of the list item
is
,
or;
,the annotation is applied to the string before this character.
Should yield (note how semi-colons are excluded from last annotations):