JBJ RDFa is a JBJ module to generate HTML + RDFa from a JSON-LD.
$ npm install jbj-rdfa
This JBJ module cannot be used alone. JBJ has to be installed.
var JBJ = require('jbj');
JBJ.use(require('jbj-rdfa'));
But, the first aim of this JBJ module is to be used as a template engine filter:
<li>Label: {{_content.jsonld|getJsonLdField(["http://www.w3.org/2004/02/skos/core#prefLabel","fr"])}}</li>
In the above example, a template variable _content
, containing a jsonld
key, pointing to a JSON-LD object, can be filtered using the JBJ actions
getJsonLdField
, here.
You can pipe several JBJ filters: {{_content.jsonld | getJsonLdField(["http://www.w3.org/2004/02/skos/core#prefLabel", "fr"]) | style({"color": "red"}) | class("label") | tag("p")}}
which should give, using nunjucks or ejs:
<p property="http://www.w3.org/2004/02/skos/core#prefLabel" lang="fr" style="color: red" class="label">Le libellé préférentiel en question</p>
You can see a complete example in the LODEX project.
Use mocha to run the tests.
$ npm install
$ npm test
Once the module is declared as used for JBJ, you can use the following actions:
Get the value of the field which URI is given in parameter, and declared in the
@content
part of the JSON-LD.
Input:
{
"@id": "http://article-type.lod.istex.fr/=/research-article",
"@context": {
"c2": {
"@id": "http://www.w3.org/2008/05/skos-xl#prefLabel",
"@language": "en"
},
"c3": {
"@id": "http://www.w3.org/2008/05/skos-xl#prefLabel",
"@language": "fr"
},
"c4": {
"@id": "http://www.w3.org/2004/02/skos/core#definition",
"@language": "en"
},
"c5": {
"@id": "http://www.w3.org/2004/02/skos/core#definition",
"@language": "fr"
},
"_wid": {
"@id": "http://purl.org/dc/elements/1.1/identifier",
"@language": null
}
},
"c2": "research article",
"c3": "papier de recherche",
"c4": "Article reporting on primary research (The related value “review-article” describes a literature review, research summary, or state-of-the-art article.)",
"c5": "Article relatif à une recherche initiale",
"_wid": "research-article"
}
Stylesheet:
{
"getJsonLdField": "http://www.w3.org/2004/02/skos/core#definition"
}
Output:
{
"uri": "http://www.w3.org/2004/02/skos/core#definition",
"content": "Article reporting on primary research (The related value “review-article” describes a literature review, research summary, or state-of-the-art article.)",
"language": "en"
}
When the language
is given, only the matching value will be returned.
Input:
{
"@id": "http://article-type.lod.istex.fr/=/research-article",
"@context": {
"c2": {
"@id": "http://www.w3.org/2008/05/skos-xl#prefLabel",
"@label": "Libellé anglais",
"@language": "en"
},
"c3": {
"@id": "http://www.w3.org/2008/05/skos-xl#prefLabel",
"@label": "Libellé français",
"@language": "fr"
}
},
"c2": "research article",
"c3": "papier de recherche"
}
Stylesheet:
{
"getJsonLdField": [
"http://www.w3.org/2008/05/skos-xl#prefLabel",
"fr"
]
}
Output:
{
"uri": "http://www.w3.org/2008/05/skos-xl#prefLabel",
"content": "papier de recherche",
"language": "fr"
}
Add inline CSS style.
Input:
{
"tag": "p"
}
Stylesheet:
{
"style": {
"font-weight": "bold"
}
}
Output:
{
"tag": "p",
"style": "font-weight: bold"
}
Add one or several classes.
Input:
{
"tag": "div"
}
Stylesheet:
{
"class": "figure"
}
Output:
{
"tag": "div",
"classes": "figure"
}
Add a tag over the content.
Input:
{
"content": "Any string value"
}
Stylesheet:
{
"tag": "name"
}
Output:
{
"tag": "name",
"content": "Any string value"
}
Serializes the input to HTML+RDFa.
Used keys: uri
, content
, language
, style
, and tag
.
Input:
{
"uri": "http://www.w3.org/2004/02/skos/core#definition",
"content": "Any string value",
"language": "en",
"style": {
"font-weight": "bold"
},
"class": ["show", "center"],
"tag": "menu"
}
Stylesheet:
{
"toHtml": true
}
Output:
"<menu property=\"http://www.w3.org/2004/02/skos/core#definition\" lang=\"en\" style=\"font-weight: bold\" class=\"show center\">Any string value</menu>"
See unit tests : https://github.com/Inist-CNRS/node-jbj-rdfa/tree/master/test
http://Inist-CNRS.github.io/jbj-playground/
(don't forget to click on RDFa button -- when it will exist)