├── README.md
├── ex-1.graphml
├── ex-1.rdf
├── ex-lit.graphml
├── ex-lit.rdf
├── graphml2owl.py
├── graphml2rdf.xsl
├── graphml2rdf_Principles.graphml
├── graphml2rdf_Principles.png
└── saxon9he.jar
/README.md:
--------------------------------------------------------------------------------
1 | ## graphml/Entity Relationship to OWL
2 |
3 | This python script takes as input a graphml file, produced with the yEd graph editor,
4 | that contains 'Entity with Attributes' nodes and labelled edges. It translates it
5 | into an OWL ontology in RDF/Turtle format.
6 |
7 | The translation rules are:
8 |
9 | - every 'Entity with Attributes' node with label C is transformed into a OWL class C
10 | - an edge with label 'subClassOf' from C to D ---> an axiom
11 |
12 | :C rdfs:subClassOf :D
13 |
14 | - an edge with label P from C to D ---> an axiom
15 |
16 | :C rdfs:subClassOf [a owl:Restriction ; owl:onProperty :P ; owl:allValuesFrom :D]
17 |
18 | - an edge with a label of the form 'P min 1' from C to D ---> an axiom
19 |
20 | :C rdfs:subClassOf [a owl:Restriction ; owl:onProperty :P ; owl:someValuesFrom :D]
21 |
22 | - the second label (in the attribute box of the node) is considered as a comment. It yields
23 |
24 | :C rdfs:comment Text-of-the-attribute-box
25 |
26 | ### Usage:
27 |
28 | $ python graphml2owl.py graphmlfile
29 |
30 | The OWL ontology is written into graphmlfile_owl.ttl
31 |
32 | !! requires python 3.7 (uses type annotations)
33 |
34 |
35 |
36 | ## graphml2rdf: a Graphml to RDF translator
37 |
38 | This xsl stylesheets transforms a graphml file produced by yEd using the Entity-Relationship elements into an RDF graph.
39 |
40 | The graph must be composed of _Entity with Attributes_ or _Entity_ nodes (from the Entity-Relationship palette in yEd). For _Entity with Attributes_ nodes
41 |
42 | - the Entity field (top) must contain a class name (or empty)
43 | - the Attributes field (bottom) must contain an instance name (or empty)
44 |
45 | See the file _ex-1.graphml_ for an example.
46 |
47 | _Entity_ nodes represent literal values. The node label must contain the value without quotes. Literal types are not supportent yet.
48 |
49 | See the file _ex-lit.graphml_ for an example.
50 |
51 | To run the transformation tool
52 |
53 | 1. Download graphml2rdf.xsl and saxon9he.jar (the Saxon xml library)
54 | 2. Execute the following command:
55 |
56 | java -jar saxon9he.jar -xsl:graphml2rdf.xsl graphml-file > rdf-file
57 |
58 | The output file is an RDF/XML file. It can be directly uploaded into a triple store.
59 |
60 | #### Transformation principles
61 |
62 | 
63 |
64 | The instance names generate "local" URIs, based on the input file name. Thus several generated RDF files can be uploaded to a repository without mixing up the instance names. The class names generate "global" URIs, independent of the source file. So the same class name appearing in different graphml graphs will generate the same URI. In this sense class names are global.
65 |
--------------------------------------------------------------------------------
/ex-1.graphml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 | VGI-Based System
24 | OSM
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 | Geometry Acquisition
44 | ga1
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 | Desktop Computer
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 | Attribute Acquisition
85 | aa1
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 | Map Browsing
105 |
106 |
107 |
108 |
109 |
110 |
111 |
112 |
113 |
114 |
115 |
116 |
117 |
118 |
119 |
120 |
121 |
122 |
123 |
124 |
125 | Data Description
126 | dd1
127 |
128 |
129 |
130 |
131 |
132 |
133 |
134 |
135 |
136 |
137 |
138 |
139 |
140 |
141 |
142 |
143 |
144 |
145 | Geographic Entities
146 |
147 |
148 |
149 |
150 |
151 |
152 |
153 |
154 |
155 |
156 |
157 |
158 |
159 |
160 |
161 |
162 |
163 |
164 |
165 |
166 | Geometry
167 |
168 |
169 |
170 |
171 |
172 |
173 |
174 |
175 |
176 |
177 |
178 |
179 |
180 |
181 |
182 |
183 |
184 |
185 |
186 |
187 | Attribute-Value Pair
188 |
189 |
190 |
191 |
192 |
193 |
194 |
195 |
196 |
197 |
198 |
199 |
200 |
201 |
202 |
203 |
204 |
205 |
206 |
207 |
208 | Smartphone
209 |
210 |
211 |
212 |
213 |
214 |
215 |
216 |
217 |
218 |
219 |
220 |
221 |
222 |
223 |
224 |
225 |
226 |
227 |
228 |
229 |
230 | Sentiment
231 |
232 |
233 |
234 |
235 |
236 |
237 |
238 |
239 |
240 |
241 |
242 |
243 |
244 |
245 |
246 |
247 |
248 |
249 |
250 |
251 |
252 |
253 |
254 |
255 |
256 |
257 |
258 |
259 |
260 |
261 |
262 |
263 |
264 |
265 |
266 |
267 |
268 |
269 |
270 | VGI-Based System
271 | Vienna Sentiment Map
272 |
273 |
274 |
275 |
276 |
277 |
278 |
279 |
280 |
281 |
282 |
283 |
284 |
285 |
286 |
287 |
288 |
289 |
290 | userTask
291 |
292 |
293 |
294 |
295 |
296 |
297 |
298 |
299 |
300 |
301 |
302 |
303 |
304 |
305 |
306 |
307 | userTask
308 |
309 |
310 |
311 |
312 |
313 |
314 |
315 |
316 |
317 |
318 |
319 |
320 |
321 |
322 |
323 |
324 | hasData
325 |
326 |
327 |
328 |
329 |
330 |
331 |
332 |
333 |
334 |
335 |
336 |
337 |
338 |
339 |
340 |
341 | hasData
342 |
343 |
344 |
345 |
346 |
347 |
348 |
349 |
350 |
351 |
352 |
353 |
354 |
355 |
356 |
357 |
358 | dataType
359 |
360 |
361 |
362 |
363 |
364 |
365 |
366 |
367 |
368 |
369 |
370 |
371 |
372 |
373 |
374 |
375 | dataType
376 |
377 |
378 |
379 |
380 |
381 |
382 |
383 |
384 |
385 |
386 |
387 |
388 |
389 |
390 |
391 |
392 | informationType
393 |
394 |
395 |
396 |
397 |
398 |
399 |
400 |
401 |
402 |
403 |
404 |
405 |
406 |
407 |
408 |
409 | informationType
410 |
411 |
412 |
413 |
414 |
415 |
416 |
417 |
418 |
419 |
420 |
421 |
422 |
423 |
424 |
425 |
426 | userTask
427 |
428 |
429 |
430 |
431 |
432 |
433 |
434 |
435 |
436 |
437 |
438 |
439 |
440 |
441 |
442 |
443 | equipment
444 |
445 |
446 |
447 |
448 |
449 |
450 |
451 |
452 |
453 |
454 |
455 |
456 |
457 |
458 |
459 |
460 | sensingEquipment
461 |
462 |
463 |
464 |
465 |
466 |
467 |
468 |
469 |
470 |
471 |
472 |
473 |
474 |
475 |
476 |
477 | equipment
478 |
479 |
480 |
481 |
482 |
483 |
484 |
485 |
486 |
487 |
488 |
489 |
490 |
491 |
492 |
493 |
494 | equipment
495 |
496 |
497 |
498 |
499 |
500 |
501 |
502 |
503 |
504 |
505 |
506 |
507 |
508 |
509 |
510 |
511 |
512 |
513 |
514 |
515 |
516 |
517 |
518 |
519 |
520 |
521 |
522 |
523 |
524 |
525 |
526 |
527 |
528 |
529 |
530 |
531 |
532 |
533 |
534 |
535 |
536 |
537 |
538 |
539 |
540 |
541 |
542 |
543 |
544 |
545 |
546 |
547 |
548 |
549 |
550 |
551 |
552 |
553 |
554 |
555 |
556 |
557 |
558 |
559 |
560 |
561 |
562 |
563 |
564 |
565 |
566 |
567 |
568 |
569 |
570 |
571 |
572 |
573 |
574 |
575 |
576 |
577 |
578 |
579 |
580 |
581 |
582 |
583 | equipment
584 |
585 |
586 |
587 |
588 |
589 |
590 |
591 |
592 |
593 |
594 |
595 |
596 |
597 |
598 |
599 |
600 |
601 |
602 |
603 |
604 |
605 |
606 |
607 |
608 |
609 |
610 |
611 |
612 |
613 |
614 |
615 |
616 |
617 |
618 |
619 |
620 |
621 |
622 |
623 |
624 |
625 |
626 |
627 |
628 |
629 |
630 |
631 |
632 |
633 |
634 |
635 |
636 |
637 |
638 |
639 |
640 |
641 |
642 |
643 |
644 |
645 |
--------------------------------------------------------------------------------
/ex-1.rdf:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 | OSM
9 |
10 |
11 |
12 |
13 |
14 | ga1
15 |
16 |
17 |
18 |
19 |
20 | instance_n2
21 |
22 |
23 |
24 |
25 |
26 | aa1
27 |
28 |
29 |
30 |
31 |
32 | instance_n4
33 |
34 |
35 |
36 |
37 |
38 | dd1
39 |
40 |
41 |
42 |
43 |
44 | instance_n6
45 |
46 |
47 |
48 |
49 |
50 | instance_n7
51 |
52 |
53 |
54 |
55 |
56 | instance_n8
57 |
58 |
59 |
60 |
61 |
62 | instance_n9
63 |
64 |
65 |
66 | Sentiment
67 |
68 |
69 |
70 | intance_n11
71 |
72 |
73 |
74 |
75 |
76 | Vienna Sentiment Map
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
--------------------------------------------------------------------------------
/ex-lit.graphml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 | Phone
25 | my phone
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 | Person
46 | me
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 | Phone
67 | another phone
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 | white
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 | 45
108 |
109 |
110 |
111 |
112 |
113 |
114 |
115 |
116 |
117 |
118 |
119 |
120 |
121 |
122 |
123 |
124 |
125 |
126 |
127 |
128 |
129 |
130 |
131 |
132 |
133 |
134 |
135 |
136 |
137 |
138 |
139 |
140 |
141 |
142 |
143 |
144 |
145 |
146 |
147 |
148 |
149 | Kg
150 |
151 |
152 |
153 |
154 |
155 |
156 |
157 |
158 |
159 |
160 |
161 |
162 |
163 |
164 |
165 |
166 |
167 |
168 |
169 | 0.125
170 |
171 |
172 |
173 |
174 |
175 |
176 |
177 |
178 |
179 |
180 |
181 |
182 |
183 |
184 |
185 |
186 |
187 |
188 |
189 | price
190 |
191 |
192 |
193 |
194 |
195 |
196 |
197 |
198 |
199 |
200 |
201 |
202 |
203 |
204 |
205 |
206 |
207 | owner
208 |
209 |
210 |
211 |
212 |
213 |
214 |
215 |
216 |
217 |
218 |
219 |
220 |
221 |
222 |
223 |
224 |
225 |
226 | color
227 |
228 |
229 |
230 |
231 |
232 |
233 |
234 |
235 |
236 |
237 |
238 |
239 |
240 |
241 |
242 |
243 |
244 |
245 | color
246 |
247 |
248 |
249 |
250 |
251 |
252 |
253 |
254 |
255 |
256 |
257 |
258 |
259 |
260 |
261 |
262 |
263 |
264 | weight
265 |
266 |
267 |
268 |
269 |
270 |
271 |
272 |
273 |
274 |
275 |
276 |
277 |
278 |
279 |
280 |
281 |
282 |
283 | unit
284 |
285 |
286 |
287 |
288 |
289 |
290 |
291 |
292 |
293 |
294 |
295 |
296 |
297 |
298 |
299 |
300 |
301 |
302 | value
303 |
304 |
305 |
306 |
307 |
308 |
309 |
310 |
311 |
312 |
313 |
314 |
315 |
316 |
317 |
318 |
319 |
--------------------------------------------------------------------------------
/ex-lit.rdf:
--------------------------------------------------------------------------------
1 |
2 |
14 |
15 |
16 |
17 | my phone
18 |
19 |
20 |
21 |
22 | me
23 |
24 |
25 |
26 |
27 | another phone
28 |
29 |
30 |
31 | instance_n5
32 |
33 |
34 |
35 | 45
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 | white
44 |
45 |
46 |
47 | white
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 | Kg
56 |
57 |
58 |
59 | 0.125
60 |
61 |
62 |
--------------------------------------------------------------------------------
/graphml2owl.py:
--------------------------------------------------------------------------------
1 | """graphml/Entity Relationship to OWL
2 |
3 | Usage:
4 |
5 | $ python graphml2owl.py graphmlfile
6 |
7 | The OWL ontology is written into graphmlfile_owl.ttl
8 |
9 | !! requires python 3.7 (uses type annotations)
10 |
11 | This scripts takes as input a graphml file produced with the yEd graph editor
12 | that contains 'Entity with Attributes' nodes and labelled edges. It translates it
13 | into an OWL ontology in RDF/Turtle format.
14 |
15 | The translation rules are:
16 |
17 | - every 'Entity with Attributes' node with label C is transformed into a OWL class C
18 | - an edge with label 'subClassOf' from C to D ---> an axiom :C rdfs:subClassOf :D
19 | - an edge with label P from C to D ---> an axiom
20 | :C rdfs:subClassOf [a owl:Restriction ; owl:onProperty :P ; owl:allValuesFrom :D]
21 | - an edge with a label of the form 'P min 1' from C to D ---> an axiom
22 | :C rdfs:subClassOf [a owl:Restriction ; owl:onProperty :P ; owl:someValuesFrom :D]
23 |
24 | G. Falquet 2019
25 |
26 | """
27 | import xml.etree.ElementTree as ET
28 | import re
29 | import sys
30 | import urllib.parse
31 | from typing import List, FrozenSet, Dict
32 |
33 | # usage = python graphml2owl.py -o file.graphml -p URIprefix
34 | if len(sys.argv) < 2 :
35 | sys.exit("Usage: python graphml2owl.py graphml-file [-o ontoloy-file] [-p ontoURI]")
36 | ifileName = sys.argv[1]
37 | ofileName = sys.argv[1]+".ttl"
38 | ontoURI = "http://a.ontology/myonto"
39 | i = 2
40 | imax = len(sys.argv)
41 | while i < imax:
42 | ar = sys.argv[i]
43 | if ar == "-o" :
44 | i = i+1
45 | if i < imax :
46 | ofileName = sys.argv[i]
47 | else:
48 | print("-o ignored")
49 | elif ar == "-p" :
50 | i = i+1
51 | if i < imax :
52 | ontoURI = sys.argv[i]
53 | else:
54 | print("-p ignored")
55 | i = i+1
56 |
57 | print('Output to '+ofileName)
58 | sys.stdout = open(ofileName, 'w')
59 |
60 | ns = {'g': 'http://graphml.graphdrawing.org/xmlns',
61 | 'x': 'http://www.yworks.com/xml/yfiles-common/markup/2.0',
62 | 'y': 'http://www.yworks.com/xml/graphml'}
63 |
64 | root: ET.Element = ET.parse(ifileName).getroot()
65 |
66 | print(f"""
67 | @prefix : <{ontoURI}#> .
68 | @prefix dct: .
69 | @prefix owl: .
70 | @prefix rdf: .
71 | @prefix xml: .
72 | @prefix xsd: .
73 | @prefix rdfs: .
74 | @prefix skos: .
75 |
76 | @base <{ontoURI}> .
77 | """)
78 |
79 | print(f"""
80 | <{ontoURI}> rdf:type owl:Ontology .
81 |
82 | """)
83 |
84 | classNames: FrozenSet[str] = frozenset()
85 | classNameOfNode: Dict[str, str] = {}
86 | annotationOfClass: Dict[str, str] = {}
87 |
88 | for n in root.findall('.//g:node',ns):
89 | nodeLabels: List[ET.Element] = n.findall('./g:data/y:GenericNode[@configuration="com.yworks.entityRelationship.big_entity"]/y:NodeLabel',ns)
90 |
91 | if len(nodeLabels) > 0 :
92 | clsLabel: ET.Element = nodeLabels[0]
93 | nodeId = n.get('id')
94 | clsName = clsLabel.text
95 | if clsName is None : clsName = "noName"
96 | if clsName == "" : clsName = "noName"
97 | clsName = re.sub(r'[^a-z^A-Z^0-9^-^:]', '_', clsName)
98 | classNames = classNames.union({clsName})
99 | classNameOfNode[nodeId] = clsName
100 | if len(nodeLabels) > 1 :
101 | annotLabel = nodeLabels[1]
102 | if annotLabel.text.strip() != "" :
103 | annotationOfClass[clsName] = annotLabel.text
104 | # print(clsName, nodeId)
105 |
106 | print()
107 | print("# Classes")
108 | print()
109 | for c in classNames :
110 | print(":"+c+" a owl:Class .")
111 | if c in annotationOfClass : print(' :'+c+' rdfs:comment """'+annotationOfClass[c]+'""" .')
112 |
113 |
114 | print()
115 | print("# Axioms and Properties")
116 | print()
117 |
118 | propNames: FrozenSet[str] = frozenset()
119 |
120 | for e in root.findall('.//g:edge',ns) :
121 | src = e.get("source")
122 | tgt = e.get("target")
123 | edgeLabel: ET.Element = e.find(".//y:EdgeLabel",ns)
124 | label = "UNDEF_Property"
125 |
126 | if edgeLabel != None : label = edgeLabel.text
127 |
128 | # restrictionType = 'owl:minQualifiedCardinality "0"^^xsd:nonNegativeInteger ; owl:onClass'
129 | # replaced 'owl:allValuesFrom'
130 | restrictionType = 'owl:allValuesFrom'
131 | # edge labels of the form 'propertyName min 1'
132 | if len(re.findall(r' min 1$', label)) > 0 :
133 | label = re.sub(r' min 1$', '', label)
134 | restrictionType = 'owl:someValuesFrom'
135 |
136 | label = re.sub(r'[^a-z^A-Z^0-9^-^:]', '_', label)
137 | #new property name
138 | if (label not in propNames ) :
139 | print(":"+label+" a owl:ObjectProperty .")
140 | propNames = propNames.union({label})
141 |
142 | if ((src in classNameOfNode ) and (tgt in classNameOfNode)) :
143 | if (label.lower() == "subclassof") :
144 | print(":"+classNameOfNode[src]+" rdfs:subClassOf :"+classNameOfNode[tgt]+" .")
145 | else :
146 | print(":"+classNameOfNode[src]+" rdfs:subClassOf ")
147 | print(" [a owl:Restriction ; owl:onProperty :"+label+" ; "+restrictionType+" :"+classNameOfNode[tgt]+"] .")
148 |
149 | else :
150 | print("## edge between non-class nodes: "+label)
151 |
152 | sys.stdout.flush()
153 | sys.stdout.close()
154 |
--------------------------------------------------------------------------------
/graphml2rdf.xsl:
--------------------------------------------------------------------------------
1 |
2 |
21 |
22 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
40 |
41 |
42 |
43 |
44 |
45 | http://vgibox.eu/onto
46 |
47 |
48 |
49 |
52 |
53 |
54 |
55 |
56 |
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 |
102 |
103 |
104 |
105 |
107 |
108 |
110 |
111 |
112 |
113 |
114 |
115 |
116 |
117 |
118 |
119 |
120 |
121 |
122 |
123 |
124 |
125 |
126 |
127 |
128 |
129 |
130 |
131 |
136 |
137 |
138 |
139 | -
140 |
141 |
142 |
143 |
144 |
148 |
149 |
150 |
151 |
152 |
153 |
154 |
155 |
156 |
157 |
158 |
159 |
160 |
161 |
162 |
163 |
164 |
165 |
166 |
167 |
168 |
169 |
170 |
171 |
172 |
173 |
174 |
175 |
176 |
177 |
178 |
179 |
180 |
181 |
182 |
183 |
184 |
185 |
186 |
--------------------------------------------------------------------------------
/graphml2rdf_Principles.graphml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 | Class Name
24 | Instance Name
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 | http://vgibox.eu/filename/Instance_Name
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 | "Instance Name"
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 | http://vgibox.eu/Class_Name
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 | Class Name
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 |
110 |
111 |
112 |
113 |
114 |
115 | http://vgibox.eu/filename/instance_node-id
116 |
117 |
118 |
119 |
120 |
121 |
122 |
123 |
124 |
125 |
126 |
127 |
128 |
129 |
130 |
131 |
132 | "A Name"
133 |
134 |
135 |
136 |
137 |
138 |
139 |
140 |
141 |
142 |
143 |
144 |
145 |
146 |
147 |
148 |
149 |
150 | Any Name
151 |
152 |
153 |
154 |
155 |
156 |
157 |
158 |
159 |
160 |
161 |
162 |
163 |
164 |
165 |
166 |
167 |
168 |
169 | http://vgibox.eu/filename/Any_Name
170 |
171 |
172 |
173 |
174 |
175 |
176 |
177 |
178 |
179 |
180 |
181 |
182 |
183 |
184 |
185 |
186 | "Any Name"
187 |
188 |
189 |
190 |
191 |
192 |
193 |
194 |
195 |
196 |
197 |
198 |
199 |
200 |
201 |
202 |
203 |
204 |
205 |
206 |
207 |
208 |
209 |
210 |
211 |
212 |
213 |
214 |
215 |
216 |
217 |
218 |
219 |
220 |
221 |
222 |
223 |
224 | http://vgibox.eu/filename/instance_node-id
225 |
226 |
227 |
228 |
229 |
230 |
231 |
232 |
233 |
234 |
235 |
236 |
237 |
238 |
239 |
240 |
241 | "gml-node-id"
242 |
243 |
244 |
245 |
246 |
247 |
248 |
249 |
250 |
251 |
252 |
253 |
254 |
255 |
256 |
257 |
258 | URI of node 1
259 |
260 |
261 |
262 |
263 |
264 |
265 |
266 |
267 |
268 |
269 |
270 |
271 |
272 |
273 |
274 |
275 | URI of node 2
276 |
277 |
278 |
279 |
280 |
281 |
282 |
283 |
284 |
285 |
286 |
287 |
288 |
289 |
290 |
291 |
292 | http://vgibox.eu/Class_Name
293 |
294 |
295 |
296 |
297 |
298 |
299 |
300 |
301 |
302 |
303 |
304 |
305 |
306 |
307 |
308 |
309 | node
310 | 1
311 |
312 |
313 |
314 |
315 |
316 |
317 |
318 |
319 |
320 |
321 |
322 |
323 |
324 |
325 |
326 |
327 |
328 |
329 | node
330 | 2
331 |
332 |
333 |
334 |
335 |
336 |
337 |
338 |
339 |
340 |
341 |
342 |
343 |
344 |
345 |
346 |
347 |
348 |
349 |
350 | value
351 |
352 |
353 |
354 |
355 |
356 |
357 |
358 |
359 |
360 |
361 |
362 |
363 |
364 |
365 |
366 |
367 |
368 |
369 | "value"
370 |
371 |
372 |
373 |
374 |
375 |
376 |
377 |
378 |
379 |
380 |
381 |
382 |
383 |
384 |
385 |
386 | rdfs:label
387 |
388 |
389 |
390 |
391 |
392 |
393 |
394 |
395 |
396 |
397 |
398 |
399 |
400 |
401 |
402 |
403 | rdf:type
404 |
405 |
406 |
407 |
408 |
409 |
410 |
411 |
412 |
413 |
414 |
415 |
416 |
417 |
418 |
419 |
420 | rdfs:label
421 |
422 |
423 |
424 |
425 |
426 |
427 |
428 |
429 |
430 |
431 |
432 |
433 |
434 |
435 |
436 |
437 | rdfs:label
438 |
439 |
440 |
441 |
442 |
443 |
444 |
445 |
446 |
447 |
448 |
449 |
450 |
451 |
452 |
453 |
454 | rdfs:label
455 |
456 |
457 |
458 |
459 |
460 |
461 |
462 |
463 |
464 |
465 |
466 |
467 |
468 |
469 |
470 |
471 | Property Name
472 |
473 |
474 |
475 |
476 |
477 |
478 |
479 |
480 |
481 |
482 |
483 |
484 |
485 |
486 |
487 |
488 | http://vgibox.eu/Property_Name
489 |
490 |
491 |
492 |
493 |
494 |
495 |
496 |
497 |
498 |
499 |
500 |
501 |
502 |
503 |
504 |
505 | rdf:type
506 |
507 |
508 |
509 |
510 |
511 |
512 |
513 |
514 |
515 |
516 |
517 |
518 |
519 |
520 |
521 |
--------------------------------------------------------------------------------
/graphml2rdf_Principles.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cui-ke/graphml2rdf/17b9954dac14d6e0d55a975cc8390802a94aabfb/graphml2rdf_Principles.png
--------------------------------------------------------------------------------
/saxon9he.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cui-ke/graphml2rdf/17b9954dac14d6e0d55a975cc8390802a94aabfb/saxon9he.jar
--------------------------------------------------------------------------------