Как добавить внешние данные в XML? - PullRequest
1 голос
/ 12 января 2009

У меня есть XML-схема и экземпляр XML, действительный для этой схемы.

Этот экземпляр XML содержит некоторые данные.

Я бы хотел расширить экземпляр XML дополнительными данными (моими собственными метаданными на элемент XML в экземпляре XML), сохраняя его в соответствии с предоставленной схемой.

Реальный вариант использования заключается в том, что у меня есть собственный элемент управления, который получает свои данные через XML, и я хотел бы создать новый XML, который каким-то образом хранит дополнительные метаданные, связанные с сериализацией элемента управления.

Пара моих решений состояла в том, чтобы сохранить другой документ со списком «XPath, Mode, Color». который я загружаю во второй проход после загрузки XML.

Другим решением было добавить идентификаторы к узлам XML и таким образом ссылаться на узлы из другого документа (вместо использования XPath).

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

У вас есть лучшее решение этой проблемы? За какое решение вы бы проголосовали? (Пожалуйста, объясните.)

Спасибо!

1 Ответ

1 голос
/ 12 января 2009

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

Вы можете рассмотреть возможность использования XSLT для генерирования нового XML с метаданными. Если новые данные ошибочны и выводятся из исходного XML, вы можете использовать XSLT для простой генерации метаданных для каждого узла. Если это предсказуемо и непротиворечиво, вы можете повторять этот процесс всякий раз, когда вы загружаете данные и получаете тот же новый XML. Если это непредсказуемо, например, если вам нужно создать XSLT на лету, вы все равно сможете сохранить XSL после его создания, а затем использовать его для повторного создания того же нового XML из исходного XML.

Согласно предложенным решениям:

  1. Ссылка по XPATH: хорошо, если исходный XML не изменяется, и вы можете создать точные XPATH.
  2. Ссылка по идентификатору узла: хорошо, но вам нужно добавить идентификаторы в исходный XML, если у вас его еще нет, и вам нужно будет обновить идентификаторы, если исходные изменения (поэтому вам может понадобиться счетчик идентификаторов назначить ID или иным образом использовать сгенерированный GUID в качестве идентификатора).
  3. Если вы хотите добавить метаданные в исходный XML, вы можете либо обновить схему, либо создать новую для «обновленных документов» (и изменить ссылку на схему в документе XML).

С уважением, Инбар

...