--- ECHO_content/ECHO_xslt.py 2006/10/11 16:55:26 1.12 +++ ECHO_content/ECHO_xslt.py 2006/10/12 16:37:33 1.13 @@ -77,7 +77,7 @@ class getXML(Implicit): #print self.xsl - #print xsltproc.run(document) + #< xsltproc.run(document) tmp=xsltproc.run(document) self.result=tmp[0:] @@ -253,7 +253,108 @@ class ECHO_xslt(ECHO_pageTemplate,ECHO_l fn=self.REQUEST['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("") + 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 + 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' + + 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 + 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' + return lstr + + 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 + 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' + 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 + 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' + + 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): """getpage mit lexikalischer analyse und xslt transform if _caching=yes dann wird die lwxikalisch analysierte seite in einem cache abgespeichert """ @@ -272,12 +373,12 @@ class ECHO_xslt(ECHO_pageTemplate,ECHO_l txt = fromCache else: txt=self.tagLex(nr=_pn) - + self.cache.storeObject(fn,_pn,txt[0:]) else: txt=self.tagLex(id=_id) - + xsl=self.xslt() xsltproc=Processor() @@ -288,6 +389,11 @@ class ECHO_xslt(ECHO_pageTemplate,ECHO_l stylesheet = InputSource.DefaultFactory.fromString(xsl) xsltproc.appendStylesheet(stylesheet) tmp=xsltproc.run(document) + + if _links: + _links=urllib.unquote(_links) + tmp=self.addLinks(tmp,url=_links) + #bugfix for digilib images which doesn't accept & tmp=tmp.replace("&","&")