# HG changeset patch
# User dwinter
# Date 1343029703 -7200
# Node ID 8190d724dc0175d20e37eca688b124eb0f1794f2
first release
diff -r 000000000000 -r 8190d724dc01 .project
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/.project Mon Jul 23 09:48:23 2012 +0200
@@ -0,0 +1,17 @@
+
+
+ graphML2RDF
+
+
+
+
+
+ org.python.pydev.PyDevBuilder
+
+
+
+
+
+ org.python.pydev.pythonNature
+
+
diff -r 000000000000 -r 8190d724dc01 .pydevproject
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/.pydevproject Mon Jul 23 09:48:23 2012 +0200
@@ -0,0 +1,10 @@
+
+
+
+
+
+/graphML2RDF
+
+python 2.7
+Default
+
diff -r 000000000000 -r 8190d724dc01 .settings/org.eclipse.core.resources.prefs
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/.settings/org.eclipse.core.resources.prefs Mon Jul 23 09:48:23 2012 +0200
@@ -0,0 +1,3 @@
+eclipse.preferences.version=1
+encoding//dottoxml/src/dot.py=latin1
+encoding//dottoxml/src/dottoxml.py=latin1
diff -r 000000000000 -r 8190d724dc01 examples/5.5_Numerical_roots.graphml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/examples/5.5_Numerical_roots.graphml Mon Jul 23 09:48:23 2012 +0200
@@ -0,0 +1,238 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Numerical roots of equations
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Numerical roots of
+avulsed equations
+(Section c)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Numerical roots of
+negatively affected equations
+(Section b)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Numerical roots of
+positively affected equations
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Notes on finding
+roots
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ List of equations
+and their roots
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff -r 000000000000 -r 8190d724dc01 examples/5.7.3_cubics_other.graphml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/examples/5.7.3_cubics_other.graphml Mon Jul 23 09:48:23 2012 +0200
@@ -0,0 +1,510 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Some other work on cubic equations
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Add MS
+6783
+f. 231
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Add MS
+6783
+f. 72
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Add MS
+6783
+f. 228
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Add MS
+6783
+f. 226
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Add MS
+6783
+f. 227
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Add MS
+6783
+f. 73
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Add MS
+6783
+f. 74
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Add MS
+6783
+f. 75v
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Add MS
+6783
+f. 75
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Add MS
+6783
+f. 226v
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1.2
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1.2.3
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff -r 000000000000 -r 8190d724dc01 examples/Manuscripts_3.graphml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/examples/Manuscripts_3.graphml Mon Jul 23 09:48:23 2012 +0200
@@ -0,0 +1,458 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff -r 000000000000 -r 8190d724dc01 graphML2RDF.py
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/graphML2RDF.py Mon Jul 23 09:48:23 2012 +0200
@@ -0,0 +1,628 @@
+# Dieses Tool konvertiert graphMl Files erzeugt mit yED in einen graphen, entweder im dot, Format oder als RDF
+# TODO: lots of ... Zuordnung graphenTyp zu Ontologie sollte konfiurierbar sein.
+from lxml import etree
+import os.path
+import os
+
+
+namespaces={'graphML':'http://graphml.graphdrawing.org/xmlns',
+ 'y':'http://www.yworks.com/xml/graphml'
+ }
+
+# Alle wesentlichen Informstionrn fuer einen Knoten
+class Node:
+
+ label="" #Label in yED, wird auch gebraucht um gleiche Knoten zu identifizieren, wenn mehr als ein Graph zusammengefuehrt werden soll.
+ #Es muss also beim Erstellen auf Konsistenz der Label geachtet werden.
+ internalID="" #InternalID eine Knotens innerhalb eines Graphen, dieses sind nur pro Graph eindeutig-
+ externalRef="" # Referenzen auf externe Weseiten (key="d4")
+ internalRef="" # Referenzen auf andere Graphen (key="d4"), unterscheidung zwischen externer und interner, ob Pfad mit http beginnt.
+ numId=0 #Id des Knotens sollte eindeutig fuer alle Knoten sein.
+ nodeType=-1
+
+ def __init__(self,numId):
+ self.numId=numId
+
+ #Kante
+class Edge:
+ src=None
+ target=None
+ edgeType=-1
+
+ def __init__(self,src,target):
+ self.src=src
+ self.target=target
+
+
+# Erzeugt Ids fuer die Knoten
+class IDDispensor:
+ currentID=0
+ def getID(self):
+ self.currentID+=1
+ return self.currentID
+
+# Der eigentliche Graph
+class Graph:
+ label2Ids={} # Zuweisung labels zu den Ids des Knoten
+ #id2nodes={} #Zuweisung id zu den Knoten
+ internalId2nodesID={} #Zuweisung interneID zur allgemeinen ID
+ edges=set() # Menger der Kanten
+ id2label={} # Zuweisung id zu den Labeln
+ edgeStyles={}
+ edgeDescription={}
+ graphURI=""
+ nodeStyles={}
+ nodeDescription={}
+
+ def __init__(self,dispensor):
+ self.dispensor=dispensor;
+ self.id2nodes={};
+ self.edges=set();
+
+
+ def convertGrahml(self,filename):
+ """Konvertiert ein Grahphml-File in ein Netzwerk mit Knoten und Kanten.
+ Die Abbildung von Layout auf Knoten- und Kantentypen erfolgt durch den Vergleich des Layout mit einer Palette
+ """
+ tree = etree.parse(filename)
+
+ nodes=tree.xpath("//graphML:node",namespaces=namespaces)
+
+ for node in nodes:
+ nodeIDs=node.xpath("@id",namespaces=namespaces)
+ labels=node.xpath(".//y:NodeLabel",namespaces=namespaces)
+ for nodeID in nodeIDs:
+ nodeIDString=unicode(nodeID)
+
+ labelString=None
+ for label in labels:
+ labelString=unicode(label.text).lstrip().rstrip()
+
+
+ newNode = Node(self.dispensor.getID())
+ newNode.label=labelString
+ newNode.internalID=nodeIDString
+
+ nodeRefs=node.xpath('./graphML:data[@key="d4"]',namespaces=namespaces)
+ #nodeRefs=node.xpath("./graphML:data",namespaces=namespaces)
+ for nodeRef in nodeRefs:
+ nodeRefString=nodeRef.text
+ if nodeRefString is None:
+ continue
+
+ #hack dw, scheinbar falsche urs drin
+ if nodeRefString.find("http")>0:
+ continue
+ if nodeRefString.lstrip().startswith("http:") or nodeRefString.startswith("https:") or nodeRefString.startswith("ftp:"):
+ newNode.externalRef=nodeRefString
+ else:
+ newNode.internalRef=nodeRefString
+
+ #--
+
+ #read styles
+ typeID=None
+ #fall 1 Generic Node
+ gns = node.xpath('./graphML:data[@key="d6"]/y:GenericNode',namespaces=namespaces)
+ for gn in gns:
+ style="g"
+ fills=gn.xpath('./y:Fill',namespaces=namespaces)
+ fs=None
+ for fill in fills:
+ fs=fill.attrib
+
+ borderstyles=gn.xpath('./y:BorderStyle',namespaces=namespaces)
+ bs=None
+ for borderstyle in borderstyles:
+ bs=borderstyle.attrib
+
+
+ config=gn.attrib.get("configuration")
+
+
+ typeID=self.getNodeTypeFromPalette(style,fs,bs,config)
+
+
+ #fall 2 shape Node
+ gns = node.xpath('./graphML:data[@key="d6"]/y:ShapeNode',namespaces=namespaces)
+ for gn in gns:
+ style="s"
+ fills=gn.xpath('./y:Fill',namespaces=namespaces)
+ fs=None
+ for fill in fills:
+ fs=fill.attrib
+
+ borderstyles=gn.xpath('./y:BorderStyle',namespaces=namespaces)
+ bs=None
+ for borderstyle in borderstyles:
+ bs=borderstyle.attrib
+
+
+ shapes=gn.xpath('./y:Shape',namespaces=namespaces)
+ shapeType=None
+ for shape in shapes:
+ shapeType=shape.attrib.get("type")
+
+
+ typeID=self.getNodeTypeFromPalette(style,fs,bs,shapeType)
+
+
+ #---
+ if typeID is None:
+ typeID=-1
+ newNode.nodeType=typeID
+ self.id2nodes[newNode.numId]=newNode
+ if labelString!=None:
+ self.label2Ids[labelString]=newNode.numId
+
+
+ self.internalId2nodesID[newNode.internalID]=newNode.numId
+
+ edges=tree.xpath("//graphML:edge",namespaces=namespaces)
+
+ for edge in edges:
+ srcIDs=edge.xpath("@source",namespaces=namespaces)
+ tarIDs=edge.xpath("@target",namespaces=namespaces)
+ for srcID in srcIDs:
+ source=unicode(srcID)
+
+ for tarID in tarIDs:
+ target=unicode(tarID)
+
+ #read styles
+
+ #lineStyles=edge.xpath('./graphML:data[@key="d10"]/y:GenericEdge/y:LineStyle',namespaces=namespaces)
+ lineStyles=edge.xpath('./graphML:data[@key="d10"]/.//y:LineStyle',namespaces=namespaces)
+ ls=None
+ for lineStyle in lineStyles:
+ ls=lineStyle.attrib
+
+ #arrows=edge.xpath('./graphML:data[@key="d10"]/y:GenericEdge/y:Arrows',namespaces=namespaces)
+ arrows=edge.xpath('./graphML:data[@key="d10"]/.//y:Arrows',namespaces=namespaces)
+ ars=None
+ for arrow in arrows:
+ ars=arrow.attrib
+
+ typeID=self.getTypeFromPalette(ls,ars)
+
+ newEdge=Edge(self.internalId2nodesID.get(source),self.internalId2nodesID.get(target))
+ newEdge.edgeType=typeID
+
+
+ self.edges.add(newEdge)
+
+
+ def getNodeTypeFromPalette(self,style,fs,bs,config):
+ for key,value in self.nodeStyles.items():
+ styleVorlage,fsVorlage,bsVorlage,configVorlage=value
+ if style!=styleVorlage:
+ continue
+
+ if config!=configVorlage:
+ continue
+
+
+ if self.cmpDict(fs,fsVorlage) and self.cmpDict(bs,bsVorlage):
+ print key
+ return key
+
+ return -1
+
+
+
+ def getTypeFromPalette(self,ls,ars):
+
+ for key,value in self.edgeStyles.items():
+ lsVorlage,arsVorlage=value
+ if self.cmpDict(ls,lsVorlage) and self.cmpDict(ars,arsVorlage):
+
+ return key
+
+ return -1
+
+ def cmpDict(self,x,y):
+ """Teste zwei dicts auf Gleichheit"""
+
+ if (x is None) or (y is None):
+ return False
+
+ for key in x.keys():
+ yVal=y.get(key,None)
+ xVal=x.get(key)
+ if yVal!=xVal:
+ return False
+
+ return True
+
+ def exportAsDot(self,filename,graphName,onlyMs=False,partOfGraph=None,linksToGraph=None):
+ out = file(filename,"w")
+
+ type2NodeShape={0:'style="solid" color="blue"',
+ 1:'style="solid" color="lightblue"',
+ 2:'style="solid" color="blue"',
+ 3:'style="tapered" color="orange"',
+ 4:'style="solid" color="green"',
+ 5:'style="solid" color="sienna"',
+ 6:'style="solid" color="magenta"',
+ -1:'style="dotted" color="red"'
+ }
+
+ type2EdgeShape={0:'style="dotted" color="blue"',
+ 1:'style="solid"',
+ 2:'style="bold"',
+ 3:'style="tapered"',
+ 4:'style="solid" color="green"',
+ 5:'style="solid" color="sienna"',
+ 6:'style="solid" color="magenta"',
+ -1:'style="dotted" color="red"'
+ }
+
+ out.write("""digraph %s {"""%graphName)
+ g=self
+
+ for key,value in g.id2nodes.items():
+ #name=value.label.replace("\n","").replace(" ","_").replace(".","_").replace("(","_").replace(")","_").replace("?","_").replace("'","_").replace(",","_")
+ #name=value.numId
+ name=key
+ label=value.label.replace("\n","")
+ url=value.externalRef
+
+ if onlyMs:
+ if not label.lstrip().startswith("Add"):
+ continue
+ try:
+ s="""%s [label="%s" URL="%s" %s];\n"""%(name,label.decode("utf-8"),url,type2NodeShape.get(value.nodeType))
+ out.write(s)
+ except:
+ s="""%s [label="%s" URL="%s" %s];\n"""%(name,repr(label),url,type2NodeShape.get(value.nodeType))
+ out.write(s)
+
+
+ for edge in g.edges:
+ try:
+ #sr=g.id2label.get(edge.src).replace("\n","").replace(" ","_").replace(".","_").replace("(","_").replace(")","_").replace("?","_").replace("'","_").replace(",","_").replace("-","_")
+ sr=edge.src
+
+ tg=edge.target
+ #tg=g.id2label.get(edge.target).replace("\n","").replace(" ","_").replace(".","_").replace("(","_").replace(")","_").replace("?","_").replace("'","_").replace(",","_").replace("-","_")
+
+ s = """%s -> %s [%s];\n"""%(sr,tg,type2EdgeShape.get(edge.edgeType))
+ out.write(s)
+ except:
+ pass
+
+
+ if not partOfGraph is None:
+ for nodeID,graphList in partOfGraph.items():
+ #fromNode=g.id2label.get(nodeID).replace("\n","").replace(" ","_").replace(".","_").replace("(","_").replace(")","_").replace("?","_").replace("'","_").replace(",","_").replace("-","_")
+ fromNode=nodeID
+ for graph in graphList:
+ try:
+ s = """G_%s -> %s [color="yellow"];\n"""%(graph.replace(".","_"),fromNode)
+ out.write(s)
+ s = """G_%s [label="%s" color="green" fillcolor="green" style="filled"];\n"""%(graph.replace(".","_"),graph)
+ out.write(s)
+ except:
+ pass
+
+
+ if not linksToGraph is None:
+ for nodeID,graph in linksToGraph:
+ #fromNode=g.id2label.get(nodeID).replace("\n","").replace(" ","_").replace(".","_").replace("(","_").replace(")","_").replace("?","_").replace("'","_").replace(",","_").replace("-","_")
+ fromNode=nodeID
+ splitted=graph.split("/")
+ print graph
+ gr = splitted[-1]
+ print gr
+ try:
+ s = """%s -> G_%s [color="green"];\n"""%(fromNode,gr.replace(".","_"))
+ out.write(s)
+ s = """G_%s [label="%s" color="green" fillcolor="green" style="filled"];\n"""%(gr.replace(".","_"),gr)
+ out.write(s)
+ except:
+ pass
+ out.write("}")
+
+
+ out.close()
+
+
+ def exportAsRDF(self,filename,graphName,onlyMs=False,partOfGraph=None,linksToGraph=None):
+ out = file(filename,"w")
+
+ base="http://example.org/harriotOnt/"
+ type2NodeShape={0: base+"Topic",
+ 1: base+"Topic",
+ 2: base+"Topic",
+ 3: base+"FolioPage",
+ 4: base+"4",
+ 5: base+"RelatedFolioPage",
+ -1: base+"UNKNOWN"}
+
+ type2EdgeShape={0: base+"has_prev_by_pagination",
+ 1: base+"has_conjectural_relation",
+ 2: base+"has_prev_by_conjection",
+ 3: base+"has_prev_by_conjection",
+ 4: base+"result_used_from",
+ 5: base+"result_used_from",
+ -1: base+"is_related_to"}
+
+ #out.write("""digraph %s {"""%graphName)
+ g=self
+
+ for key,value in g.id2nodes.items():
+ #name=value.label.replace("\n","").replace(" ","_").replace(".","_").replace("(","_").replace(")","_").replace("?","_").replace("'","_").replace(",","_")
+ #name=value.numId
+ name=key
+ label=value.label.replace("\n","")
+ url=value.externalRef
+
+ if onlyMs:
+ if not label.lstrip().startswith("Add"):
+ continue
+
+ ressourceURI=base+str(name)
+ try:
+ s=""
+ if label!="":
+ s+="""<%s> "%s".\n"""%(ressourceURI,label.decode("utf-8").replace('"','\"'))
+ if url!="":
+ s+="""<%s> <%s> <%s>.\n"""%(ressourceURI,base+"describes",url)
+ print value.nodeType
+ s+="""<%s> <%s>.\n"""%(ressourceURI,type2NodeShape.get(value.nodeType))
+ #s="""%s [label="%s" URL="%s" %s];\n"""%(name,label.decode("utf-8"),url,type2NodeShape.get(value.nodeType))
+ out.write(s)
+ except:
+ if label!="":
+ s="""<%s> "%s".\n"""%(ressourceURI,'CHECK_THIS')
+ #s="""<%s> "%s"."""%(ressourceURI,repr(label).replace('"','\"'))
+ if url!="":
+ s+="""<%s> <%s> <%s>."""%(ressourceURI,base+"describes",url)
+ s+="""<%s> <%s>.\n"""%(ressourceURI,type2NodeShape.get(value.nodeType))
+ #s="""%s [label="%s" URL="%s" %s];\n"""%(name,repr(label),url,type2NodeShape.get(value.nodeType))
+ out.write(s)
+
+
+ for edge in g.edges:
+ try:
+ #sr=g.id2label.get(edge.src).replace("\n","").replace(" ","_").replace(".","_").replace("(","_").replace(")","_").replace("?","_").replace("'","_").replace(",","_").replace("-","_")
+ sr=edge.src
+
+ tg=edge.target
+ #tg=g.id2label.get(edge.target).replace("\n","").replace(" ","_").replace(".","_").replace("(","_").replace(")","_").replace("?","_").replace("'","_").replace(",","_").replace("-","_")
+
+ s ="""<%s><%s><%s>.\n"""%(base+str(sr),type2EdgeShape.get(edge.edgeType),base+str(tg))
+ #s = """%s -> %s [%s];\n"""%(sr,tg,type2EdgeShape.get(edge.edgeType))
+ out.write(s)
+ except:
+ pass
+
+
+ if not partOfGraph is None:
+ for nodeID,graphList in partOfGraph.items():
+ #fromNode=g.id2label.get(nodeID).replace("\n","").replace(" ","_").replace(".","_").replace("(","_").replace(")","_").replace("?","_").replace("'","_").replace(",","_").replace("-","_")
+ fromNode=nodeID
+ for graph in graphList:
+ try:
+ ressourceURI=base+graph
+ s ="""<%s><%s><%s>.\n"""%(base+str(fromNode),base+"is_part_of",ressourceURI)
+ #s = """G_%s -> %s [color="yellow"];\n"""%(graph.replace(".","_"),fromNode)
+ out.write(s)
+
+ s="""<%s> "%s".\n"""%(ressourceURI,graph)
+ s+="""<%s> <%s>.\n"""%(ressourceURI,base+"HarriotGraph")
+
+ #s = """G_%s [label="%s" color="green" fillcolor="green" style="filled"];\n"""%(graph.replace(".","_"),graph)
+ out.write(s)
+ except:
+ pass
+
+
+ if not linksToGraph is None:
+ for nodeID,graph in linksToGraph:
+ #fromNode=g.id2label.get(nodeID).replace("\n","").replace(" ","_").replace(".","_").replace("(","_").replace(")","_").replace("?","_").replace("'","_").replace(",","_").replace("-","_")
+ fromNode=nodeID
+ splitted=graph.split("/")
+ print graph
+ gr = splitted[-1]
+ print gr
+ ressourceURI=base+gr
+
+
+
+ typeSrc=type2NodeShape.get(nodeID)
+ if typeSrc==base+"Topic":
+ relation="is_specified_in"
+ else:
+ relation="see_also"
+
+ try:
+ s ="""<%s><%s><%s>.\n"""%(base+str(fromNode),relation,ressourceURI)
+ #s = """%s -> G_%s [color="green"];\n"""%(fromNode,gr.replace(".","_"))
+ out.write(s)
+
+ s="""<%s> "%s".\n"""%(ressourceURI,gr)
+ s+="""<%s> <%s>.\n"""%(ressourceURI,base+"HarriotGraph")
+
+ #s = """G_%s [label="%s" color="green" fillcolor="green" style="filled"];\n"""%(gr.replace(".","_"),gr)
+ out.write(s)
+ except:
+ pass
+ #out.write("}")
+
+
+ out.close()
+ def readPalette(self,palettePath):
+ typeNr=0
+ palette = etree.parse(palettePath)
+ edges=palette.xpath("//graphML:edge",namespaces=namespaces)
+ # lage alle kanten in der palette
+ for edge in edges:
+ #relevant fuer die einordnugn ist data key=12 linestyle und arrows
+ lineStyles=edge.xpath('./graphML:data[@key="d12"]/y:GenericEdge/y:LineStyle',namespaces=namespaces)
+ ls=None
+ for lineStyle in lineStyles:
+ ls=lineStyle
+
+ arrows=edge.xpath('./graphML:data[@key="d12"]/y:GenericEdge/y:Arrows',namespaces=namespaces)
+ ars=None
+ for arrow in arrows:
+ ars=arrow
+
+ #get description
+ ds=""
+ descriptions=edge.xpath('./graphML:data[@key="d9"]',namespaces=namespaces)
+ for description in descriptions:
+ ds=description
+
+ self.edgeDescription[typeNr]=ds.text
+ self.edgeStyles[typeNr]=(ls.attrib,ars.attrib)
+ typeNr+=1
+
+ typeNr=0
+ nodes=palette.xpath("//graphML:node",namespaces=namespaces)
+ for node in nodes:
+ style=""
+ #fall 1 Generic Node
+ gns = node.xpath('./graphML:data[@key="d7"]/y:GenericNode',namespaces=namespaces)
+ for gn in gns:
+ style="g"
+ fills=gn.xpath('./y:Fill',namespaces=namespaces)
+ fs=None
+ for fill in fills:
+ fs=fill.attrib
+
+ borderstyles=gn.xpath('./y:BorderStyle',namespaces=namespaces)
+ bs=None
+ for borderstyle in borderstyles:
+ bs=borderstyle.attrib
+
+
+ config=gn.attrib.get("configuration")
+
+ #get description
+ ds=""
+ descriptions=node.xpath('./graphML:data[@key="d4"]',namespaces=namespaces)
+ for description in descriptions:
+ ds=description.text
+
+ self.nodeDescription[typeNr]=ds
+
+ self.nodeStyles[typeNr]=(style,fs,bs,config)
+ typeNr+=1
+
+ #fall 2 shape Node
+ gns = node.xpath('./graphML:data[@key="d7"]/y:ShapeNode',namespaces=namespaces)
+ for gn in gns:
+ style="s"
+ fills=gn.xpath('./y:Fill',namespaces=namespaces)
+ fs=None
+ for fill in fills:
+ fs=fill.attrib
+
+ borderstyles=gn.xpath('./y:BorderStyle',namespaces=namespaces)
+ bs=None
+ for borderstyle in borderstyles:
+ bs=borderstyle.attrib
+
+
+ shapes=gn.xpath('./y:Shape',namespaces=namespaces)
+ shapeType=None
+ for shape in shapes:
+ shapeType=shape.attrib.get("type")
+
+
+
+ #get description
+ ds=""
+ descriptions=node.xpath('./graphML:data[@key="d4"]',namespaces=namespaces)
+ for description in descriptions:
+ ds=description.text
+
+ self.nodeDescription[typeNr]=ds
+ self.nodeStyles[typeNr]=(style,fs,bs,shapeType)
+ typeNr+=1
+
+def merge(graphs,dispensor):
+ filter=['supermap.graphml']
+ partOfGraph={}
+ linksToGraph=set()
+
+ edges=set()
+ mg =Graph(dispensor)
+ for g in graphs:
+ if g.graphURI in filter:
+ continue
+ idalt2neu={}
+ for nodeid in g.id2nodes.keys():
+ node=g.id2nodes.get(nodeid)
+ label=node.label
+ currentID =mg.label2Ids.get(label,dispensor.getID()) #hole id wenn existent sonst neue
+
+ mg.label2Ids[label]=currentID
+ mg.id2label[currentID]=label
+ idalt2neu[node.numId]=currentID
+ mg.id2nodes[currentID]=node
+
+
+ if node.internalRef!="":
+ linksToGraph.add((currentID,node.internalRef))
+
+ containedIn = partOfGraph.get(currentID,set())
+
+
+ containedIn.add(g.graphURI)
+ partOfGraph[currentID]=containedIn
+
+
+ for edge in g.edges:
+ src=edge.src
+ target=edge.target
+
+ edge.src=idalt2neu.get(src)
+ edge.target=idalt2neu.get(target)
+ edges.add(edge)
+
+ mg.edges=edges
+ return mg,partOfGraph,linksToGraph
+
+if __name__ == '__main__':
+ dispensor = IDDispensor()
+ #g1=Graph(dispensor)
+ #g1.readPalette("/Users/dwinter/Documents/Projekte/Diss - data-mining/eclipseWorkspace/graphML2RDF/examples/Manuscripts_3.graphml")
+ #g1.convertGrahml("/Users/dwinter/Documents/Projekte/Diss - data-mining/eclipseWorkspace/graphML2RDF/examples/5.7.3_cubics_other.graphml")
+
+
+
+ path="/Users/dwinter/Documents/Projekte/Europeana/harriot-graphml/Maps_20120523/"
+ ls = os.listdir(path)
+ graphs=set()
+
+ for l in ls:
+
+ g1=Graph(dispensor)
+ g1.readPalette("/Users/dwinter/Documents/Projekte/Diss - data-mining/eclipseWorkspace/graphML2RDF/examples/Manuscripts_3.graphml")
+
+ g1.convertGrahml(path+l)
+ g1.graphURI=l
+ graphs.add(g1)
+
+ g,po,lg = merge(graphs,dispensor)
+
+
+ #print g.label2Ids.keys()
+ #print len(g.label2Ids.keys())
+
+ #g.readPalette("/Users/dwinter/Documents/Projekte/Diss - data-mining/eclipseWorkspace/graphML2RDF/examples/Manuscripts_3.graphml")
+ #g.exportAsDot("/tmp/out.dot", "harriot",onlyMs=False,partOfGraph=po,linksToGraph=lg)
+ g.exportAsDot("/tmp/out.dot", "harriot",onlyMs=False,partOfGraph=po,linksToGraph=lg)
+ g.exportAsRDF("/tmp/out.rdf", "harriot",onlyMs=False,partOfGraph=po,linksToGraph=lg)
+
+ out2 = file("/tmp/out.txt","w")
+ for key in g.label2Ids.keys():
+ try:
+ out2.write('"'+key+'"'+"\n")
+ except:
+ pass
+ out2.close()
+
\ No newline at end of file