@@ -4,14 +4,16 @@ import rdf = require('rdf-ext')
4
4
import RdfGraphArray = require( 'rdf-graph-array' )
5
5
import { Predicates } from 'bioterms'
6
6
7
- export default function changeURIPrefix ( graph :Graph , topLevels :Set < string > , newPrefix :string ) {
7
+ export default function changeURIPrefix ( graph :Graph , topLevels :Set < string > , newPrefix :string ) : Map < string , string > {
8
8
9
9
let triples = graph . graph . _graph
10
10
11
11
let newGraph = new RdfGraphArray . Graph ( [ ] )
12
12
13
13
let prefixes = new Set ( )
14
14
15
+ let identityMap = new Map ( )
16
+
15
17
for ( let triple of triples ) {
16
18
17
19
if ( triple . predicate . nominalValue === Predicates . a ) {
@@ -35,7 +37,9 @@ export default function changeURIPrefix(graph:Graph, topLevels:Set<string>, newP
35
37
36
38
for ( let prefix of prefixes ) {
37
39
if ( subject . nominalValue . indexOf ( prefix ) === 0 ) {
38
- subject = rdf . createNamedNode ( newPrefix + subject . nominalValue . slice ( prefix . length ) )
40
+ let newSubject = rdf . createNamedNode ( newPrefix + subject . nominalValue . slice ( prefix . length ) )
41
+ identityMap . set ( subject . nominalValue , newSubject . nominalValue )
42
+ subject = newSubject
39
43
matched = true
40
44
break
41
45
}
@@ -49,7 +53,9 @@ export default function changeURIPrefix(graph:Graph, topLevels:Set<string>, newP
49
53
if ( object . interfaceName === 'NamedNode' ) {
50
54
for ( let prefix of prefixes ) {
51
55
if ( object . nominalValue . indexOf ( prefix ) === 0 ) {
52
- object = rdf . createNamedNode ( newPrefix + object . nominalValue . slice ( prefix . length ) )
56
+ let newObject = rdf . createNamedNode ( newPrefix + object . nominalValue . slice ( prefix . length ) )
57
+ identityMap . set ( object . nominalValue , newObject . nominalValue )
58
+ object = newObject
53
59
break
54
60
}
55
61
}
@@ -63,6 +69,8 @@ export default function changeURIPrefix(graph:Graph, topLevels:Set<string>, newP
63
69
64
70
graph . graph = newGraph
65
71
72
+ return identityMap
73
+
66
74
// TODO currently only works for compliant URIs
67
75
//
68
76
function prefix ( uri :string ) {
0 commit comments