Diff for /ECHO_content/ECHO_xslt.py between versions 1.12 and 1.14

version 1.12, 2006/10/11 16:55:26 version 1.14, 2006/10/18 14:42:33
Line 19  import transaction Line 19  import transaction
   
 import os.path  import os.path
   
 import urllib  import urllib,cgi
   
 try:  try:
     from Ft.Xml.Xslt.Processor import Processor      from Ft.Xml.Xslt.Processor import Processor
Line 77  class getXML(Implicit): Line 77  class getXML(Implicit):
                           
                   
             #print self.xsl              #print self.xsl
             #print xsltproc.run(document)              #< xsltproc.run(document)
             tmp=xsltproc.run(document)              tmp=xsltproc.run(document)
                           
             self.result=tmp[0:]              self.result=tmp[0:]
Line 253  class ECHO_xslt(ECHO_pageTemplate,ECHO_l Line 253  class ECHO_xslt(ECHO_pageTemplate,ECHO_l
         fn=self.REQUEST['fn']          fn=self.REQUEST['fn']
         self.cache.deleteObject(fn)          self.cache.deleteObject(fn)
                   
     def getPageLex(self,_pn="1",_id=None,_caching=None):      
       def createLinkNode(self,url,dom):
           """createa a link node"""
           txt=dom.createTextNode("<XMLLink>")
           node=dom.createElementNS("http://test.de","a")
           node.setAttributeNS("http://test.de","href",url)
           node.appendChild(txt)
           return node
         
       def forwardLink(self,linkid,url,type="target",RESPONSE=None):
           """forward to link"""
           if RESPONSE:
               RESPONSE.redirect(self.getLink(linkid,url,type=type))
               
           else:
               return self.getLink(linkid,url,type=type)
       def getLink(self,linkid,url,type="target"):
           """get target for linkid"""
           dom=NonvalidatingReader.parseUri(url)
           
           masterurl=dom.xpath("//mpiwg:masterurl/@ref",explicitNss={'mpiwg':'http://www.mpiwg-berlin.mpg.de/namespace'})[0].value
           slaveurl=dom.xpath("//mpiwg:slaveurl/@ref",explicitNss={'mpiwg':'http://www.mpiwg-berlin.mpg.de/namespace'})[0].value
           
           #check now if there are in the link file
        
           xp="//mpiwg:link[@id='%s']"%linkid
           
           if type=="target":
               for link in dom.xpath(xp,explicitNss={'mpiwg':'http://www.mpiwg-berlin.mpg.de/namespace'}):
                   fn=link.xpath("mpiwg:target/@filename",explicitNss={'mpiwg':'http://www.mpiwg-berlin.mpg.de/namespace'})[0].value
                   
                   if urlparse.urlparse(urllib.unquote(fn))[0]=="http": # fn ist eine url
                       return urllib.unquote(fn)  # dann gibt diese zurueck 
                   
                   ref=link.xpath("mpiwg:target/@refid",explicitNss={'mpiwg':'http://www.mpiwg-berlin.mpg.de/namespace'})[0].value
                   
                   ref2=link.xpath("mpiwg:target/mpiwg:pagelink/@refid",explicitNss={'mpiwg':'http://www.mpiwg-berlin.mpg.de/namespace'})[0].value
                   selectionNodeIndex=link.xpath("mpiwg:target/mpiwg:pagelink/@selectionNodeIndex",explicitNss={'mpiwg':'http://www.mpiwg-berlin.mpg.de/namespace'})[0].value
                     
                 
                   
                   lstr=slaveurl+'fn='+fn+'&_id='+ref+'&_pagelink=%s///%s/%s/%s'%(ref2,selectionNodeIndex,linkid,'target')
                   lstr+="&_links="+urllib.quote(url)
                   
           else:
               for link in dom.xpath(xp,explicitNss={'mpiwg':'http://www.mpiwg-berlin.mpg.de/namespace'}):
                   fn=link.xpath("mpiwg:source/@filename",explicitNss={'mpiwg':'http://www.mpiwg-berlin.mpg.de/namespace'})[0].value
                   if urlparse.urlparse(urllib.unquote(fn))[0]=="http": # fn ist eine url
                       return urllib.unquote(fn)  # dann gibt diese zurueck 
                   
                   ref=link.xpath("mpiwg:source/@refid",explicitNss={'mpiwg':'http://www.mpiwg-berlin.mpg.de/namespace'})[0].value
                   
                   ref2=link.xpath("mpiwg:source/mpiwg:pagelink/@refid",explicitNss={'mpiwg':'http://www.mpiwg-berlin.mpg.de/namespace'})[0].value
                   selectionNodeIndex=link.xpath("mpiwg:source/mpiwg:pagelink/@selectionNodeIndex",explicitNss={'mpiwg':'http://www.mpiwg-berlin.mpg.de/namespace'})[0].value
                                
                   lstr=masterurl+'fn='+fn+'&_id='+ref+'&_pagelink=%s///%s/%s/%s'%(ref2,selectionNodeIndex,linkid,'source')
                   lstr+="&_links="+urllib.quote(url)
           return lstr
      
       def addLinksUrl(self,txt,url):
           """add reference to links to  url"""
           ret=[]
           dom=NonvalidatingReader.parseUri(url)
           textDom=NonvalidatingReader.parseString(txt)
   
           #find ids in txt
           ids=textDom.xpath("//*[@id]")
           
           for textid in ids:
               xp="//mpiwg:link[mpiwg:source/@refid='%s']"%textid.xpath("@id")[0].value
               for link in dom.xpath(xp,explicitNss={'mpiwg':'http://www.mpiwg-berlin.mpg.de/namespace'}):
                   ref2=link.xpath("mpiwg:source/mpiwg:pagelink/@refid",explicitNss={'mpiwg':'http://www.mpiwg-berlin.mpg.de/namespace'})[0].value
                   selectionNodeIndex=link.xpath("mpiwg:source/mpiwg:pagelink/@selectionNodeIndex",explicitNss={'mpiwg':'http://www.mpiwg-berlin.mpg.de/namespace'})[0].value
                   linkid=link.xpath("@id")[0].value         
                   ret.append('%s///%s/%s/%s'%(ref2,selectionNodeIndex,linkid,'source'))
              
               xp="//mpiwg:link[mpiwg:target/@refid='%s']"%textid.xpath("@id")[0].value
               for link in dom.xpath(xp,explicitNss={'mpiwg':'http://www.mpiwg-berlin.mpg.de/namespace'}):
                   ref2=link.xpath("mpiwg:target/mpiwg:pagelink/@refid",explicitNss={'mpiwg':'http://www.mpiwg-berlin.mpg.de/namespace'})[0].value
                   selectionNodeIndex=link.xpath("mpiwg:target/mpiwg:pagelink/@selectionNodeIndex",explicitNss={'mpiwg':'http://www.mpiwg-berlin.mpg.de/namespace'})[0].value
                   linkid=link.xpath("@id")[0].value         
                   ret.append('%s///%s/%s/%s'%(ref2,selectionNodeIndex,linkid,'target'))
              
              
           return ret
             
       def addLinks(self,txt,url="http://127.0.0.1:8080/HFQP/linkCreator/getCollectionXML?collection=commentary2"):
           """add links to a page from xml linkfile"""
           
           dom=NonvalidatingReader.parseUri(url)
           textDom=NonvalidatingReader.parseString(txt)
   
           #find ids in txt
           ids=textDom.xpath("//*[@id]")
           masterurl=dom.xpath("//mpiwg:masterurl/@ref",explicitNss={'mpiwg':'http://www.mpiwg-berlin.mpg.de/namespace'})[0].value
           slaveurl=dom.xpath("//mpiwg:slaveurl/@ref",explicitNss={'mpiwg':'http://www.mpiwg-berlin.mpg.de/namespace'})[0].value
           
           #check now if there are in the link file
           for textid in ids:
               xp="//mpiwg:link[mpiwg:source/@refid='%s']"%textid.xpath("@id")[0].value
               for link in dom.xpath(xp,explicitNss={'mpiwg':'http://www.mpiwg-berlin.mpg.de/namespace'}):
                   fn=link.xpath("mpiwg:target/@filename",explicitNss={'mpiwg':'http://www.mpiwg-berlin.mpg.de/namespace'})[0].value
                   print fn
                   if urlparse.urlparse(urllib.unquote(fn))[0]=="http": # fn ist eine url
                       lstr=urllib.unquote(fn)  # dann gibt diese zurueck 
                   else:
                       try:
                           ref=link.xpath("mpiwg:target/@refid",explicitNss={'mpiwg':'http://www.mpiwg-berlin.mpg.de/namespace'})[0].value
                       
                           ref2=link.xpath("mpiwg:target/mpiwg:pagelink/@refid",explicitNss={'mpiwg':'http://www.mpiwg-berlin.mpg.de/namespace'})[0].value
                           selectionNodeIndex=link.xpath("mpiwg:target/mpiwg:pagelink/@selectionNodeIndex",explicitNss={'mpiwg':'http://www.mpiwg-berlin.mpg.de/namespace'})[0].value
                           linkid=link.xpath("@id")[0].value         
                           lstr=slaveurl+'fn='+fn+'&_id='+ref+'&_pagelink=%s///%s/%s/%s'%(ref2,selectionNodeIndex,linkid,'target')
                           lstr+="&_links="+urllib.quote(url)
                       except:
                           lstr=""
                   node=self.createLinkNode(lstr,textDom)
                   textid.parentNode.insertBefore(node,textid)
                 
             
               xp="//mpiwg:link[mpiwg:target/@refid='%s']"%textid.xpath("@id")[0].value
               for link in dom.xpath(xp,explicitNss={'mpiwg':'http://www.mpiwg-berlin.mpg.de/namespace'}):
                   fn=link.xpath("mpiwg:source/@filename",explicitNss={'mpiwg':'http://www.mpiwg-berlin.mpg.de/namespace'})[0].value
                   if urlparse.urlparse(urllib.unquote(fn))[0]=="http": # fn ist eine url
                       lstr=urllib.unquote(fn)  # dann gibt diese zurueck 
                   else:
                   
                       ref=link.xpath("mpiwg:source/@refid",explicitNss={'mpiwg':'http://www.mpiwg-berlin.mpg.de/namespace'})[0].value
                       
                       ref2=link.xpath("mpiwg:source/mpiwg:pagelink/@refid",explicitNss={'mpiwg':'http://www.mpiwg-berlin.mpg.de/namespace'})[0].value
                       selectionNodeIndex=link.xpath("mpiwg:source/mpiwg:pagelink/@selectionNodeIndex",explicitNss={'mpiwg':'http://www.mpiwg-berlin.mpg.de/namespace'})[0].value
                       linkid=link.xpath("@id")[0].value                    
                       lstr=masterurl+'fn='+fn+'&_id='+ref+'&_pagelink=%s///%s/%s/%s'%(ref2,selectionNodeIndex,linkid,"source")
                       lstr+="&_links="+urllib.quote(url)
                       
                   node=self.createLinkNode(lstr,textDom)
                   textid.parentNode.insertBefore(node,textid)
                 
               
           
           strio = StringIO()
           PrettyPrint(textDom,strio) 
           xmlstr = strio.getvalue()
           
           return xmlstr
   
               
           
       def getPageLex(self,_pn="1",_id=None,_caching=None,_links=None,_showall="no"):
         """getpage mit lexikalischer analyse und xslt transform          """getpage mit lexikalischer analyse und xslt transform
         if _caching=yes dann wird die lwxikalisch analysierte seite in einem cache abgespeichert          if _caching=yes dann wird die lwxikalisch analysierte seite in einem cache abgespeichert
         """          """
           def encode(hash):
               ret=[]
               for x in hash.keys():
                   value=hash[x]
                   
                   if type(value) is ListType:
                       for z in value:
                           ret.append("%s=%s"%(x,z))
                   else:
                       ret.append("%s=%s"%(x,value))
               return "&".join(ret)
                       
                           
   
         if not _caching:          if not _caching:
             _caching=self.caching              _caching=self.caching
Line 278  class ECHO_xslt(ECHO_pageTemplate,ECHO_l Line 439  class ECHO_xslt(ECHO_pageTemplate,ECHO_l
         else:          else:
            txt=self.tagLex(id=_id)             txt=self.tagLex(id=_id)
                         
           if _showall=="yes":
              params=cgi.parse_qs(self.REQUEST['QUERY_STRING'])
              
              params['_pagelink']=self.addLinksUrl(txt,url=_links)
              params['_showall']='no'
             
              print self.absolute_url()+"?"+encode(params)
              self.REQUEST.RESPONSE.redirect(self.absolute_url()+"/getPageLex?"+encode(params))
              
              
         xsl=self.xslt()          xsl=self.xslt()
                   
         xsltproc=Processor()          xsltproc=Processor()
Line 288  class ECHO_xslt(ECHO_pageTemplate,ECHO_l Line 459  class ECHO_xslt(ECHO_pageTemplate,ECHO_l
         stylesheet = InputSource.DefaultFactory.fromString(xsl)          stylesheet = InputSource.DefaultFactory.fromString(xsl)
         xsltproc.appendStylesheet(stylesheet)          xsltproc.appendStylesheet(stylesheet)
         tmp=xsltproc.run(document)          tmp=xsltproc.run(document)
           
           if _links:
               _links=urllib.unquote(_links)
               tmp=self.addLinks(tmp,url=_links)
               
         #bugfix for digilib images which doesn't accept &amp;          #bugfix for digilib images which doesn't accept &amp;
         tmp=tmp.replace("&amp;","&")          tmp=tmp.replace("&amp;","&")
                   

Removed from v.1.12  
changed lines
  Added in v.1.14


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>