Синтаксический анализ и использование XML - PullRequest
0 голосов
/ 29 ноября 2009

Я создаю соответствующий синтаксический анализатор XML в C ++ и пытаюсь сделать его легким для использования в карманных ПК.

Вначале я решил добавить некоторые "события" в свой парсер, как это делает SAX, сообщая об элементах, инструкциях по обработке и т. Д.

Эти события принимаются производным классом, который создает дерево DOM для xml.

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

Например, я могу создать класс XMLEntityRef, который ссылается на некоторый XMLEntity, определенный в некотором объекте XMLDocType, как это делает .NET system.xml parser.

Как я знаю, для большинства целей приложению необходимо знать элемент, его содержимое, его соответствующие атрибуты и их соответствующие значения ... только строки ... ему все равно, формируется ли содержимое элемента объектами cdata , ссылки на сущности и / или простой текст ... то же самое относится к значениям атрибутов.

Итак, мой вопрос заключается в следующем: каково преимущество передачи приложению каждого XML-объекта в том виде, в котором он появляется, и возможности его (или вспомогательного класса) для создания, например, значения результирующего атрибута путем объединения текстов и разрешения ссылки на сущности?

Если я делаю опрос, пожалуйста, ответьте: ваше приложение должно знать о тегах cdata и о том, где они находятся в XML-файле, или вы упростите задачу ... вы хотите узнать полное значение содержимого элемент в строке, не беспокоясь о том, как он построен?

С наилучшими пожеланиями, Мауро Х. Легжери

Ответы [ 3 ]

1 голос
/ 29 ноября 2009

При создании синтаксического анализатора я не думаю, что вы должны предполагать что-либо о том, как приложения будут использовать xml, а предоставлять самый детальный уровень данных для каждого узла xml, чтобы обеспечить максимальную гибкость. Хотя для этого могут потребоваться дополнительные усилия со стороны потребляющих приложений, они смогут выполнять все, что им нужно. Удачи.

1 голос
/ 29 ноября 2009

Я создаю соответствующий синтаксический анализатор XML на C ++ и пытаюсь сделать его более легким

Не существует такого понятия, как облегченный согласующий (не говоря уже о проверке) синтаксический анализатор. Чтобы быть соответствующим парсером, вы должны понимать все, что может быть использовано во внешнем подмножестве DTD, что действительно очень сложно. Обидно, что спецификация XML в конечном итоге утяжелена всеми несущими SGML DTD, но мы застряли с ней сейчас.

нужно ли вашему приложению знать о тегах cdata и о том, где они находятся в XML-файле

Обычно нет. DOM Level 3 LS требует, чтобы разделы CDATA оставались узлами CDATASection в DOM по умолчанию, но приложения практически не заботятся.

(Если вопрос касается моего приложения, тогда да, потому что мое приложение - это система шаблонов, которая сохраняет разделы CDATA там, где они были. Но все же.)

Мои сомнения появляются, когда я пытаюсь разобраться в основном с сущностями

Боже, да. Ссылки на сущности - это полная катастрофа. Заставить реализацию DOM поддержать их способом, совместимым с DOM Level 3 Core / LS, очень и очень сложно. Избегайте, если это вообще возможно.

1 голос
/ 29 ноября 2009

обычно xml не легкий вес. Вам лучше с JSON.

...