changeset 4:fa8d698958f7

sorting by lastname Gerade nur f?r die Namen aus der Personenontologie nicht f?r die Tempor?ren Namen
author dwinter
date Tue, 11 Oct 2011 19:57:22 +0200
parents 6f4b30846fed
children 2773140337ad
files .pydevproject MPIWGThesaurus.py
diffstat 2 files changed, 68 insertions(+), 12 deletions(-) [+]
line wrap: on
line diff
--- a/.pydevproject	Thu Jun 30 11:18:29 2011 +0200
+++ b/.pydevproject	Tue Oct 11 19:57:22 2011 +0200
@@ -2,7 +2,7 @@
 <?eclipse-pydev version="1.0"?>
 
 <pydev_project>
-<pydev_property name="org.python.pydev.PYTHON_PROJECT_INTERPRETER">python2.4</pydev_property>
+<pydev_property name="org.python.pydev.PYTHON_PROJECT_INTERPRETER">python2.4 - zope</pydev_property>
 <pydev_property name="org.python.pydev.PYTHON_PROJECT_VERSION">python 2.4</pydev_property>
 <pydev_pathproperty name="org.python.pydev.PROJECT_SOURCE_PATH">
 <path>/MPIWGThesaurus</path>
--- a/MPIWGThesaurus.py	Thu Jun 30 11:18:29 2011 +0200
+++ b/MPIWGThesaurus.py	Tue Oct 11 19:57:22 2011 +0200
@@ -83,7 +83,8 @@
     objects2Projects=OOBTree()
     historicalPlaces2Projects=OOBTree()
     suggestedTags2Projects=OOBTree()
-    personIDtoNames=OOBTree()
+    personIDtoNames=OOBTree() # weist den personenIDs Klartextnamen aus dem Triplestore zu
+    personsIDForSort=[] # liste (personenID,(nachname,vorname) sortiert nach dem tupel (nachname,vorname)
     suggestedPersons= OOBTree(); #TODO: das sollte die ueberfluessig werde und nur im triple store stehen.
     
     tagList=[]
@@ -197,13 +198,14 @@
     #In der Anzeige soll der Name der zitierten Personen in Klartext angezeigt werden, ausserdem die Varianten, wie sie tatsaechlich
     #in den Projekten benutzt werden
     
-    security.declareProtected('View management screens','changeMPIWGThesaurus')
+    security.declareProtected('View management screens','collectPersonNamesToIds')
     def collectPersonNamesToIds(self):
         """Ordne Namen aus dem Triplestore bzw. die vergebenenden Label den Personen-Ids zu."""
-        self.personIDtoNames=OOBTree() # loessche alle 
-        
+        self.personIDtoNames=OOBTree() # loesche alle 
+        self.personsIDForSort=[]
+        personsIDForSortTmp=[]
         for personID in self.persons2Projects:
-            mainName=self.getMainNameFromTripleStore(personID); # hole die hauptbezeichnung aus dem triplestore
+            mainName,sortName=self.getMainNameFromTripleStore(personID); # hole die hauptbezeichnung aus dem triplestore
             
             personNames=[]
             for project in self.persons2Projects.get(personID):
@@ -224,7 +226,21 @@
             
             logging.debug(str(mainName)+"- foundalso :"+",".join(personNames))
             self.personIDtoNames.update({personID:(mainName,personNames)})
-                                         
+            personsIDForSortTmp.append((personID,sortName))
+            
+          
+            
+                                    
+        #sortiere personIDs nach erstmal nach Nachnamene TODO: sortiere nach name,vorname
+        def sort(x,y):
+            logging.debug("sort:")
+            logging.debug((x[1][0],y[1][0]))
+            return cmp(x[1][0],y[1][0])
+            
+        personsIDForSortTmp.sort(cmp=sort)
+           
+        self.personsIDForSort=[x[0] for x in personsIDForSortTmp]
+                                      
         self.personIDtoNames=self.personIDtoNames # make clear that it has changed #TODO: change this to variablen with names _p
     
     #Hole die Namen, die einer personID zugeordnet sind.
@@ -238,11 +254,26 @@
     
         
     #Hole die Hauptnamemsansetzung aus dem Triplestore ),falls vorhanden, wenn nicht ist der String leer.
+    #ausserdem einen Namen zum sortieren, =  Tupel(nachname, vorname)
     def getMainNameFromTripleStore(self,personID):
         
         
         cmdString ="""select * where { <%s> <http://xmlns.com/foaf/0.1/name> ?name}"""%personID
     
+        names= self.callSparql(cmdString)
+        
+        cmdString ="""select * where { <%s> <http://xmlns.com/foaf/0.1/lastName> ?name}"""%personID
+    
+        lastName= self.callSparql(cmdString)
+        
+        cmdString ="""select * where { <%s> <http://xmlns.com/foaf/0.1/firstName> ?name}"""%personID
+    
+        firstName= self.callSparql(cmdString)
+        
+        return names,(lastName,firstName)
+    
+    
+    def callSparql(self,cmdString):
 
         auth_handler = urllib2.HTTPBasicAuthHandler()
         auth_handler.add_password(realm='sparql',
@@ -255,13 +286,17 @@
         
         logging.debug(cmdString)
         try:
-            r= opener.open(self.virtuosoServer+"/sparql", urllib.urlencode({'query':cmdString,'default-graph-uri':self.virtuosoGraph,'named-graph-uri':None,'format':'text/csv'}))
+            logging.debug(self.virtuosoServer+"/sparql?" + urllib.urlencode({'query':cmdString,'default-graph-uri':self.virtuosoGraph,'named-graph-uri':'','format':'text/csv'}))
+            #r= opener.open(self.virtuosoServer+"/sparql", urllib.urlencode({'query':cmdString,'default-graph-uri':self.virtuosoGraph,'named-graph-uri':'','format':'text/csv'}))
+            r= opener.open(self.virtuosoServer+"/sparql", urllib.urlencode({'query':cmdString,'default-graph-uri':'','named-graph-uri':'','format':'text/csv'}))
             namesTxt=r.read()
         except urllib2.URLError, e:
             logging.error(e.code)
             logging.error(e.read())
+            
+            
             return
-        
+        logging.debug(namesTxt)
         names=namesTxt.split("\n")
         if len(names) < 2: #in der ersten Zeile stehen bei der Rückgabe die Spaltennamen, <2 heiss also es gibt keinen Eintrag
             return
@@ -678,16 +713,37 @@
         """holt die getaggted Personen mit Projekten"""
         persons = self.persons2Projects;
         ret={}
+        
         logging.debug("Check Person:"+repr(persons.keys()))
-        for person in persons.keys():
+        personsList=[x for x in persons.keys()]
+        
+        def sort(x,y):
+            sortNrx=self.personsIDForSort.index(x)
+            sortNry=self.personsIDForSort.index(y)
+            #logging.debug("INSORT***")
+            #logging.debug((sortNrx,sortNry))
+            return cmp(sortNrx,sortNry)
+        
+        logging.debug("SORT***")
+        logging.debug(self.personsIDForSort) 
+        logging.debug("SORT.list")
+        logging.debug(personsList) 
+        personsList.sort(cmp=sort)
+        #for person in persons.keys():
+        logging.debug("AFTERSORT***")
+        logging.debug(personsList) 
+        for person in personsList:
             logging.debug("Check:"+person)
-            #TODO: person muss duch den namen von provuder geholt werden
+            #TODO: person muss duch den namen von provider geholt werden
             list=[]
             for projectID in persons.get(person):
                 list.append(self.getProjectDetails(projectID))
             
             ret[person]=list[0:]
-        return ret
+       
+        logging.debug("AFTERSORT-ret***")
+        logging.debug(ret.keys()) 
+        return ret,personsList
     
     def getHistoricalPlacesWithProjectIDs(self):
         """holt die getaggted Personen mit Projekten"""