├── 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 | ![transformation principles](graphml2rdf_Principles.png) 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 --------------------------------------------------------------------------------