我正在将MathJax用于Python/Google应用引擎CRUD Web应用程序。我希望人们使用Content-MathML创建方程(这样网络应用程序就可以在其他地方利用语义信息)。
然后我想使用这个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
的内容粘贴为字符串文字(它太大了,并且有两种类型的引号)。
我该如何处理?
您可以在应用程序引擎上打开作为应用程序一部分上传的文件,只需确保路径相对于应用程序。例如,如果ctop.xsl
与Python模块位于同一目录中,则可以执行以下操作:
fh = open(os.path.join(os.path.dirname(__file__), 'ctop.xsl')
我不熟悉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))
您可以将文件放在dropbox上,并使用dropbox API:
https://www.dropbox.com/developers/reference/api#files-获取
我建议python请求用于此目的:
https://github.com/kennethreitz/requests
我还没有从谷歌应用程序引擎中做到这一点,尽管我确实在heroku上运行了类似的代码。