Как добавить внешние данные в XML?

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

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

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

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

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

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

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

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

Спасибо!


person Ran    schedule 12.01.2009    source источник


Ответы (1)


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

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

По вашим предлагаемым решениям:

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

С уважением, Inbar

person Inbar Shani    schedule 12.01.2009
comment
Спасибо за подробный ответ. Что касается вашего вопроса, мне нужно будет сохранить его и использовать в последующих загрузках при десериализации моего элемента управления. - person Ran; 13.01.2009