--- ECHO_content/ECHO_xslt.py 2006/10/12 16:37:33 1.13 +++ ECHO_content/ECHO_xslt.py 2006/10/18 14:42:33 1.14 @@ -19,7 +19,7 @@ import transaction import os.path -import urllib +import urllib,cgi try: from Ft.Xml.Xslt.Processor import Processor @@ -283,26 +283,62 @@ class ECHO_xslt(ECHO_pageTemplate,ECHO_l 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'%(ref2,selectionNodeIndex) - lstr+="&_links="+urllib.quote(url)+'&_linkid='+linkid+'&_linktype=target' + + + + 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'%(ref2,selectionNodeIndex) - lstr+="&_links="+urllib.quote(url)+'&_linkid='+linkid+'&_linktype=source' + 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""" @@ -319,13 +355,20 @@ class ECHO_xslt(ECHO_pageTemplate,ECHO_l 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 - 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'%(ref2,selectionNodeIndex) - lstr+="&_links="+urllib.quote(url)+'&_url='+url+'&_linkid='+linkid+'&_linktype=target' + 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) @@ -333,14 +376,18 @@ class ECHO_xslt(ECHO_pageTemplate,ECHO_l 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 - 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'%(ref2,selectionNodeIndex) - lstr+="&_links="+urllib.quote(url)+'&_linkid='+linkid+'&_linktype=source' + 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) @@ -354,11 +401,24 @@ class ECHO_xslt(ECHO_pageTemplate,ECHO_l - def getPageLex(self,_pn="1",_id=None,_caching=None,_links=None): + def getPageLex(self,_pn="1",_id=None,_caching=None,_links=None,_showall="no"): """getpage mit lexikalischer analyse und xslt transform 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: _caching=self.caching @@ -379,6 +439,16 @@ class ECHO_xslt(ECHO_pageTemplate,ECHO_l else: 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() xsltproc=Processor()