This repository was archived by the owner on May 21, 2019. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathindex.js
99 lines (78 loc) · 2.61 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
var rdf = require('rdf-ext')
var inherits = require('inherits')
var DomParser = require('rdf-parser-dom')
var RDFaProcessor = require('green-turtle').RDFaProcessor
var RdfaParser = function () {
DomParser.call(this, rdf)
}
inherits(RdfaParser, DomParser)
RdfaParser.prototype.process = function (data, callback, base, filter, done) {
var self = this
return new Promise(function (resolve, reject) {
base = base || 'http://localhost/'
filter = filter || function () { return true }
done = done || function () {}
try {
var blankNodeMap = {}
var createNode = function (value) {
if (!value) {
return null
}
if (typeof value === 'string') {
if (value.substring(0, 2) === '_:') {
if (!(value in blankNodeMap)) {
blankNodeMap[value] = rdf.createBlankNode()
}
return blankNodeMap[value]
} else {
return rdf.createNamedNode(value)
}
} else {
if (value.type === 'http://www.w3.org/1999/02/22-rdf-syntax-ns#HTML') {
if (value.value.length === 0) {
return rdf.createLiteral('', null, rdf.createNamedNode(value.type))
}
return rdf.createLiteral(value.value[0].parentNode.textContent, value.language, rdf.createNamedNode(value.type))
}
if (value.type === 'http://www.w3.org/1999/02/22-rdf-syntax-ns#object') {
return createNode(value.value)
} else {
var datatype = createNode(value.type)
return rdf.createLiteral(value.value, value.language, datatype)
}
}
}
var processor = new RDFaProcessor()
processor.finishedHandlers.push(
function () {
done()
resolve()
}
)
processor.addTriple = function (greenOrigin, greenSubject, greenPredicate, greenObject) {
var subject = createNode(greenSubject)
var predicate = createNode(greenPredicate)
var object = createNode(greenObject)
if (subject && predicate && object) {
var triple = rdf.createTriple(subject, predicate, object)
if (filter(triple)) {
callback(triple)
}
}
}
if (typeof data === 'string') {
data = self.parseHtmlDom(data, base)
}
processor.process(data, {baseURI: base})
} catch (error) {
done(error)
reject(error)
}
})
}
// add singleton methods to class
var instance = new RdfaParser()
for (var property in instance) {
RdfaParser[property] = instance[property]
}
module.exports = RdfaParser