2013-05-14 2 views
2

Я создаю базу данных математических упражнений, я хотел бы использовать couchDB, а затем хранить упражнения в формате json, поэтому я могу хранить метаданные с каждым упражнением.store Latex in Json format

У меня возникли проблемы с допустимым json со всем синтаксисом Latex, что было бы хорошим способом решить эту проблему? Я думал о кодировании латекса, но я не уверен, что это хорошая идея, прежде всего, если это будет необходимо декодируются мобильным устройством ...

Примера данных:

 {"taglist": null, 
    "flagcount": null, 
    "category": "Algebre", 
    "chapter": "Polynomes", 
    "difficulty": 1, 
    "viewcount": null, 
    "hint": null, 
    "question": "Soit $P \in \mathbb{R}[X]$ scindé sur $\mathbb{R}$.\\ \begin{enumerate} \item Montrer que $P'$ est aussi scindé sur $\mathbb{R}$. \item Montrer que les racines multiples de $P'$ sont aussi racines de $P$. \item Ce resultat reste-t-il valable dans $\mathbb{C}[X]$ ? \end{enumerate}" 
    "solution": null} 

Кроме того, поскольку мне может потребоваться зашифровать «решение», потому что я не хочу, чтобы к нему обращались без разрешения, возможно, я должен хранить только зашифрованную форму в json?

Или, может быть, решение заключается в том, чтобы хранить латекс другим способом ...? Я очень новичок в этой проблеме, я ценю любую помощь;).

Благодаря

ответ

3

В колонках JSON обратная косая черта \ имеют особое значение. Если вы хотите сохранить его в своих данных, используйте \\ (с экранированной обратной косой чертой). Парсер JSON изменит его на один, а Couch должен хранить "$\\mathbb{R}$.\\\\" как $\mathbb{R}$.\\.

2

Пока вы правильно процитировать строку LaTeX, я не вижу здесь никакой проблемы. Есть отличные визуализаторы LaTeX в браузере, посмотрите, например, на http://math.stackexchange.com. Только имейте в виду, что рендеринг LaTeX может быть тяжелым процессом.

Хорошей новостью является то, что у вас есть функция в стандартной библиотеке Python, которая будет обрабатывать кодировку для вас: json.dumps. Просто передайте ему словарь со всеми приведенными выше данными. Вы также можете расширить базовый кодер, чтобы принять ваши типы данных.

Что касается сокрытия данных, я предлагаю не отправлять ответы на вопросы, так как определенный злоумышленник может найти кодовую фразу в любом случае, копая в вашем JS. Вместо этого попросите клиента отправить ответы через XHR. Если ответ верный, отправьте подтверждение с объяснением. Если это не так, отправьте подсказку или что-то еще.

Вы можете использовать таймер и счетчик, чтобы пользователь мог подождать между двумя представлениями для одной и той же проблемы (чтобы он/она должен был думать, вместо того, чтобы посылать множество случайных значений, надеясь поразить решения) и дать им решения в любом случае после определенного количества ошибочных ответов.