我正在使用MathJax作为Python / Google App Engine CRUD webapp。我希望人们使用Content MathML创建方程式(以便webapp可以利用其他地方的语义信息)。
然后我想使用this Content-to-Presentation MML XSLT,以便我可以在生成的Presentation MathML上使用MathJax。
通常情况下,我会做这样的事情来提供转型服务:
import lxml.etree as etree
class MathMLTranslator(object):
def __init__(self):
with open('ctop.xsl') as f:
self.xslt = etree.XSLT(etree.XML(f.read()))
def translate(self, xml_string):
return self.xslt(etree.XML(xml_string))
但是我无法在Google App Engine中执行open('ctop.xsl')
,也无法在MathMLTranslator中将ctop.xsl
的内容粘贴为字符串文字(它太大且有两种类型的引号)。
我该如何处理?
答案 0 :(得分:1)
您可以在App Engine上打开作为应用程序的一部分上传的文件 - 您只需确保路径是相对于应用程序的。例如,如果ctop.xsl
与Python模块位于同一目录中,则可以执行以下操作:
fh = open(os.path.join(os.path.dirname(__file__), 'ctop.xsl')
答案 1 :(得分:0)
我不熟悉GAE,但是如果你可以上传任意大小的Python文件,你可以只将ctop.xsl
内容写入.py文件。例如ctop_data.py
:
ctop_xsl = """<xsl:stylesheet
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
... SKIPPED
"""
然后在代码中你可以:
from ctop_data import ctop_xsl
...
self.xslt = etree.XSLT(etree.XML(ctop_xsl))
答案 2 :(得分:-1)
您可以将文件放在Dropbox上并使用dropbox API:
https://www.dropbox.com/developers/reference/api#files-GET
我建议用于此目的的python请求:
https://github.com/kennethreitz/requests
我没有从谷歌应用引擎做到这一点,虽然我确实在heroku上运行代码做类似的事情。