Программируемость для хранилища xml данных для документов



Программируемость для хранилища xml данных для документов
Программируемость для хранилища xml данных для документов
Программируемость для хранилища xml данных для документов
Программируемость для хранилища xml данных для документов
Программируемость для хранилища xml данных для документов

 


Владельцы патента RU 2417420:

МАЙКРОСОФТ КОРПОРЕЙШН (US)

Изобретение относится к системе управления данными. Техническим результатом является повышение надежности за счет разрешения конфликтов доступа и редактирования данных. Система включает: процессор, считываемый компьютером носитель; приложения, потребляющие данные; хранилище данных документа; и хранилище данных, соединенное к приложениями, потребляющими данные; причем хранилища данных включают в себя: хранилища данных XML; брокер API; хранилище изменения, которое выполнено с возможностью хранения изменений; и хранилище отмены, которое выполнено с возможностью отмены любых изменений, выполненных в результате изменения, которое было выполнено в отношении элементов структурированных данных; при этом брокер API предоставляет интерфейс прикладного программирования (API), который позволяет обеспечить программный доступ к документам и к элементу структурированных данных, которые содержатся в хранилищах данных; и приложение может выполнять API, для доступа к элементам структурированных данных в хранилищах данных, когда документ открыт или закрыт. 3 н. и 13 з.п. ф-лы, 5 ил.

 

Уровень техники

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

Документы, созданные такими приложениями (например, документы текстовых редакторов, электронные таблицы, документы - презентации слайдов), однако, обладают ограниченными возможностями для хранения/транспортирования содержания произвольных метаданных, требуемых контекстом документов. Например, решение, построенное поверх документа текстового редактора, может потребовать сохранения данных для делопроизводства, которые описывают различные состояния документа, например, предыдущие подтвержденные состояния в ходе делопроизводства (даты, время, имена), текущие состояния утверждения, будущие состояния делопроизводства до окончания работы над документом, имя и адрес офиса автора документа, изменения документа и т.п. Возможные варианты сохранения этой информации в основном ограничены использованием переменных документа или существующими свойствами связывания и встраивания объектов (OLE, СВО) документа, которые имеют ограничения. Например, невозможно сохранять иерархические данные; длина знака ограничена и т.п. Свойства таких способов сохраняют в одном хранилище, например, хранилище свойств OLE, что означает, что между свойствами могут возникать конфликты. Кроме того, такие сохраненные свойства не обладают возможностями проверки действительности данных. Пользователю таких приложений и соответствующих документов трудно сохранять произвольные данные вместе с документами, которые часто требуются для множества пользователей.

Сущность изобретения

Данный раздел "Сущность изобретения" предназначен для введения в упрощенной форме выбранных концепций, которые более подробно описаны ниже в разделе "Подробное описание изобретения". Данный раздел "Сущность изобретения" не предназначен для идентификации основных свойств или существенных свойств заявленного предмета изобретения и при этом не предполагается его использовать в качестве средства определения объема заявленного предмета изобретения.

Одни или более хранилищ данных содержатся отдельно от хранилища первичного представления в документе для сохранения, сопоставления и обеспечения возможности использования произвольных данных, которые ассоциированы с документом, созданном на компьютере. Данные для структурирования информации, ассоциированной с документом, такие как метаданные документа, содержатся в хранилище данных, в котором поддерживаются взаимосвязи между разными частями данных. Хранилище данных предоставляет интерфейсы прикладного программирования (API, ИПП) для различных частей данных, находящихся в хранилище данных, что обеспечивает для разных приложений возможность обращаться к одним или более таким частям данных и оперировать с ними.

Части данных могут быть структурированы в соответствии с языком разметки, например, таким как расширяемый язык разметки (XML, РЯР). Схемы XML могут быть ассоциированы с каждой частью данных, и хранилище данных может удостоверять действительность структуры XML, приложенной к данным, на основе схемы XML, ассоциированной с такой частью данных. Программный доступ обеспечивается к данным в их XML форме во время редактирования документа. Множество клиентских приложений могут обращаться и могут редактировать одни и те же части данных документа, и при этом разрешаются любые конфликтующие изменения данной части данных. Стандартные схемы XML (XSD, ОСР, определение схемы XML) также можно использовать для определения содержания любых частей специализированных данных XML, ассоциированных с метаданными документа, для обеспечения действительности данных XML, применяемых к данным документа.

Краткое описание чертежей

На фиг.1 иллюстрируется примерная вычислительная архитектура для компьютера;

на фиг.2 показана блок-схема, иллюстрирующая взаимосвязи между одним или более клиентских приложений и одним или более хранилищами данных и содержанием хранилища (хранилищ) данных;

на фиг.3 иллюстрируется схема системы, представляющая взаимодействие между внутренними и внешними потребителями данных с хранилищами данных XML;

на фиг.4 иллюстрируется процесс обработки событий, которые ассоциированы с хранилищем данных;

на фиг.5 иллюстрируется процесс обработки события, которое включает в себя побочные эффекты, в соответствии с аспектами настоящего изобретения.

Подробное описание изобретения

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

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

На фиг.1 показана одна примерная система, предназначенная для воплощения изобретения, которая включает в себя вычислительное устройство, такое как вычислительное устройство 100. В самой простой конфигурации вычислительное устройство 100 обычно включает в себя по меньшей мере одно процессорное устройство 102 и системную память 104. В зависимости от точной конфигурации и типа вычислительного устройства системная память 104 может быть энергозависимой (такой как ОЗУ), энергонезависимой (такой как ПЗУ, запоминающее устройство типа флэш и т.д.) или представлять собой некоторую комбинацию этих двух видов. Системная память 104 обычно включает в себя операционную систему 105, одно или более приложений 106 и может включать в себя программные данные 107. В одном варианте воплощения приложение 106 может включать в себя приложение 120 - текстовый редактор. Такая основная конфигурация иллюстрируется на фиг.1, и эти компоненты представлены внутри пунктирной линией 108.

Вычислительное устройство 100 может иметь дополнительные свойства или функции. Например, вычислительное устройство 100 может также включать в себя дополнительные (съемные и/или несъемные) устройства-накопители данных, такие как например, магнитные диски, оптические диски или лента. Такие дополнительные накопители представлены на фиг.1 в виде съемного накопителя 109 и несъемного накопителя 110. Компьютерные носители информации могут включать в себя энергозависимые и энергонезависимые, съемные и несъемные носители, воплощенные с использованием любого способа или технологии для хранения информации, такой как считываемые компьютером инструкции, структуры данных, программные модули или другие данные. Системная память 104, съемный накопитель 109 и несъемный накопитель 110, все представляют собой примеры компьютерных носителей информации. Компьютерные носители информации включают в себя, но не ограничиваются этим, ОЗУ, ПЗУ, СППЗУ, запоминающее устройство типа флэш или запоминающее устройство, построенное по другой технологии, CD-ROM, цифровые универсальные диски (DVD) или другие оптические накопители, магнитные кассеты, магнитную ленту, накопитель на магнитном диске или другие магнитные устройства хранения информации, или любой другой носитель, который можно использовать для сохранения требуемой информации и доступ к которому может осуществляться компьютерным устройством 100. Любой такой компьютерный носитель, предназначенный для хранения компьютерной информации, может составлять собой часть устройства 100. Вычислительное устройство 100 также может иметь устройство (устройства) 112 ввода, такие как клавиатура, мышь, перо, устройство голосового ввода, устройство сенсорного ввода и т.д. Устройство (устройства) 114 вывода, такие как дисплей, громкоговорители, принтер и т.д., также могут быть включены. Эти устройства хорошо известны в данной области техники и их подробное описание не требуется.

Вычислительное устройство 100 также может содержать соединение 116 для передачи данных, которое позволяет устройству связываться с другими вычислительными устройствами 118, например, через сеть. Соединение 116 передачи данных представляет собой один пример среды передачи данных. Среды передачи данных обычно могут быть воплощены с использованием считываемых компьютером инструкций, структур данных, программных модулей или других данных в виде модулированного сигнала данных, таких как несущая волна или другой механизм транспортирования, и включают в себя любую среду доставки информации. Термин "модулированный сигнал данных" означает сигнал, одна или более характеристик которого установлены или изменены таким образом, чтобы кодировать информацию в сигнале. В качестве примера и без ограничений среды передачи данных включают в себя проводную среду, такую как проводная сеть или непосредственное проводное соединение, и беспроводную среду, такую как акустическая, РИ, инфракрасная и другая беспроводная среда. Термин «считываемый компьютером носитель информации», в том виде, как он используется в настоящем описании, включает в себя как носители информации, так и среды передачи данных.

Ряд программных модулей и файлов данных могут быть сохранены в системной памяти 104 вычислительного устройства 100, включая в себя в операционную систему 105, которая предназначена для управления работой сетевого персонального компьютера, такую как операционная система WINDOWS компании MICROSOFT Corporation г. Редмонд, штат Вашингтон. В системной памяти 104 также может храниться один или более программных модулей, таких как приложение 120 текстового редактора, и другие, описанные ниже модули. Приложение 120 текстового редактора во время работы предоставляет функции формирования, редактирования и обработки электронных документов.

В соответствии с одним вариантом воплощения изобретения приложение 120 текстового редактора содержит программу WORD компании MICROSOFT Corporation. Однако следует понимать, что можно использовать программы приложения текстового редактора других производителей. Приложение текстового редактора представлено на чертеже только в качестве примера и не ограничивается другими типами приложений, которые могут формировать документы и позволяют выполнять операции с документами. Например, другие прикладные программы 106, позволяющие обрабатывать различные формы содержания (например, текст, изображения, и т.д.), такие как прикладные программы - электронные таблицы, прикладные программы - базы данных, прикладные программы - презентации слайдов, прикладные программы для рисования или программы автоматизированного проектирования и т.д. в равной степени применимы. Пример прикладной программы 106, которая формирует и которая позволяет выполнять операции с другими типами документов, включает в себя прикладную программу OFFICE компании MICROSOFT Corporation.

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

Во всем описании и в формуле изобретения следующие термины имеют ассоциированные здесь значения, если только контекст этих терминов не будет диктовать другое.

Термин "данные" может относиться к информации поверхностного уровня документа или уровня представления, такой как слова, предложения, абзацы и т.п., а также к вспомогательной информации, например метаданным, которая переносится вместе с документом текстового редактора, которые относятся к нему или которые используются документом текстового редактора. Такая информация часто бывает объемной и, как правило, ее не представляют на уровне представления документа.

Термин "представление" относится к видимой части документа, такой как текст и компоновка, которая может проявляться, если документ был напечатан.

Термин "тег" относится к знакам, вставленным в документ, которые ограничивают элементы в документе XML. Каждый элемент обычно включает в себя два тега: начальный тег и конечный тег. Возможно использовать также пустой элемент (без содержания), и в этом случае разрешено использовать один тег.

Термины "язык разметки" или "ML" (ЯР) относятся к языку для специальных кодов, содержащихся в документе, которые определяют, как части документа должны интерпретироваться прикладной программой. В файле текстового редактора язык разметки определяет, как текст должен быть отформатирован или скомпонован.

Термин "элемент" относится к основному модулю документа XML. Элемент может содержать атрибуты, другие элементы, текст и другие области содержания для документа XML.

Термин "строительный блок" относится к связанной и потенциально помеченной области в документе, которая используется как контейнер для конкретного типа содержания (контента), вводимого пользователем.

Термин "связывание данных, отображение данных и поле данных" относится к свойству строительного блока, который определяет XPath к DOM XML, сохраненным в документе, где должно быть сохранено содержимое строительного блока.

Содержание (контент) XML между тегами рассматривается как "дочерние элементы" (или потомок) для элемента. Следовательно, другие элементы, внедренные в контент элемента, называются "дочерними элементами" или "дочерними вершинами" или элементом. Текст, внедренный непосредственно в контент элемента, рассматривается как "дочерние текстовые вершины элемента". Вместе дочерние элементы и текст, находящийся в элементе, составляют "содержание" («контент») элемента.

Термин "атрибут" относится к дополнительному свойству, установленному для конкретного значения и ассоциированному с элементом. Элементы могут иметь произвольное количество установок атрибута, ассоциированных с ними, включая нулевое количество. Атрибуты используются для ассоциирования дополнительной информации с элементом, которая не будет содержать дополнительные элементы или не будет рассматриваться как текстовая вершина (узел).

"XPath" представляет собой оператор, который использует выражение пути для идентификации вершин в документе XML. Путь XPath представляет собой разделенный косой чертой список наименований дочерних элементов, которые описывают путь через документ XML. Структура "выбирает" элементы, которые соответствуют этому пути.

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

На фиг.2 показана блок-схема, иллюстрирующая взаимосвязи (соотношение) между одним или более дочерним приложением и одним или более хранилищами данных и содержанием хранилища (хранилищ) данных. В общих словах, одно или более хранилищ данных содержатся отдельно от хранилища первичного представления в документе для сохранения, сопоставления и для обеспечения возможности использования произвольных данных, которые ассоциированы с документом, генерируемым компьютером. Данные для структурирования информации, ассоциированной с документом, такие как метаданные документа, содержатся в хранилище данных, где поддерживаются взаимосвязи между различными частями данных. Хранилище данных предоставляет интерфейсы прикладного программирования (API) для различных частей данных в хранилище данных, обеспечивая возможность доступа и выполнения операций для различных прикладных программ с одними или более частями данных. Используемые в данном описании термины "потребители данных", "прикладные программы" и "процессы" можно использовать взаимозаменяемо, если только контекст явно не диктует другое.

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

Программный доступ также может быть обеспечен для данных в их форме XML во время редактирования документа. В соответствии с одним вариантом воплощения предусмотрен стандартный механизм, который известен для разработчиков решения, с помощью которого можно обращаться к данным и модифицировать их программным способом, когда документ открыт. Такой программный доступ имитирует стандартные интерфейсы XML. Программный доступ к данным обеспечивается через интерфейсы прикладной программы к одному или более редактирующим приложениям клиента (например, приложениям редактирования или создания документа и/или к приложениям - добавленным решениям третьей стороны и т.п.). В соответствии с этим множество клиентских приложений могут обращаться и могут редактировать одни и те же части данных документа и любые конфликтующие изменения для данной части данных разрешаются. Могут быть выполнены "побочные эффекты" любого данного изменения (например, в ответ на установку названия компании "Microsoft," оно изменяются на стандартные символы "MSFT"). Кроме того, изменения данных и любых ассоциированных побочных эффектов могут быть "взаимосвязаны" хранилищем данных таким образом, что отмена одного или более изменений приводит к обратному выполнению всех соответствующих изменений. Это помогает устранять нагрузку при разработке от самого решения для того, чтобы обеспечить отмену всех изменений, когда пользователь инициирует отмену первоначального изменения на поверхности документа, например, нажимая на команду Undo (отменить).

Стандартные схемы XML (XSD) также можно использовать для определения содержания любых частей пользовательских данных XML, ассоциированных с метаданными документа, для обеспечения действительности данных XML, применяемых к данным документа. Такие схемы могут быть прикреплены к любому экземпляру данных XML, сохраненных в документе, и хранилище данных будет запрещать любое изменение данных XML, которое приведет к тому, что структура XML (то есть теги XML, в отличие от их содержания) этих данных станут недействительными. Это помогает обеспечить возможность для разработчика решения прикрепить конкретную часть метаданных XML к документу и обеспечить структурную "правильность" данных XML в соответствии с ассоциированной схемой, независимо от потребителей данных (например, дополнения), использующих для изменения этих данных.

Рассмотрим теперь фиг.2, на которой данные 220 документа включают в себя данные структуры XML и ассоциированные данные документа, представляющие виды поверхности или уровня представления документа. Например, данные 220 документа могут включать в себя структуру XML (например, теги заголовков, теги тела документа, теги завершения) и ассоциированные данные просмотра поверхности (например, слова, предложения, абзацы) документа текстового редактора, документа электронной таблицы, документа презентации слайдов и т.п.

Хранилище 208 данных представляет собой склад (репозитарий) данных документа, предназначенный для сохранения одной или более частей структурированных данных, ассоциированных с одним или более типами данных, ассоциированных с данным документом. Хотя только одно хранилище данных представлено на чертеже, более чем одно хранилище данных может использоваться на практике. Метаданные 1 225 (элемент структурированных данных) могут включать в себя данные структуры XML и ассоциированные данные для первой части метаданных, ассоциированных с документом. Например, метаданные 1 225 могут включать в себя данные структуры XML (например, теги даты, теги названия и т.д.), в которых содержится имя автора документа, дата создания документа, дата последнего изменения/сохранения документа и т.п. Метаданные 2 230 (элемент структурированных данных) могут включать в себя данные (теги) структуры XML и ассоциированные метаданные, представляющие вторую часть метаданных, ассоциированных с документом. Как должно быть понятно, метаданные 1 и метаданные 2 представлены с целью примера и не ограничивают многообразие и множество различных типов данных, которые могут содержаться в хранилище 208 данных в ассоциации с данным документом. Например, как описано в настоящем описании, произвольные данные могут быть структурированы и добавлены к документу одной или более прикладных программ в соответствии с пожеланиями провайдеров решений или пользователей, имеющих доступ к данным документа.

Файл 240, 245 схемы может быть в случае необходимости добавлен к каждой части данных, сохраненных в хранилище 208 данных, для того, чтобы диктовать правила синтаксиса и проверки, ассоциированные с данными расширяемого языка разметки (XML) для каждой части данных 225, 230. Файлы схемы XML обеспечивают способ описания и проверки правильности данных в среде XML. Файл схемы определяет, какие данные разметки XML, включающие в себя элементы и атрибуты, используются для описания содержания в документе XML, и файл схемы определяет синтаксис разметки XML, включающий в себя то, разрешен ли каждый элемент, какие типы содержания (контента) разрешены в пределах элемента и какие элементы могут появляться в пределах других элементов. Использование файлов схемы обеспечивает то, что документ (или, в данном случае, отдельная часть данных) будет структурирован последовательным и прогнозируемым способом. Файлы 240, 245 схемы могут быть созданы пользователем и обычно поддерживаются соответствующим языком разметки, таким как XML.

Такая схематизация документа позволяет для хранилища данных обеспечивать возможность "гарантировать" структурную действительность документа путем отклонения какого-либо изменения, которое нарушает данный файл схемы, на уровне хранилища данных. В соответствии с вариантом воплощения в хранилище 208 данных используется модуль 260 проверки правильности схемы для подтверждения правильности структуры XML, добавленной к заданной части данных, или изменений, выполненных в заданной части данных, в соответствии с ассоциированным файлом схемы. Например, если автор документа или редактор выполняет структурные изменения XML в отношении заданной части данных, например, метаданных 1, при которых редактор добавляет или удаляет заданный тег XML, хранилище 208 данных будет использовать модуль проверки правильности схемы для проверки структурных изменений XML в соответствии с ассоциированным файлом схемы, для обеспечения действительности изменения. Если изменение является недействительным, может быть сгенерирована ошибка для редактора. Понятно, что такое управление структурой XML, применяемое для заданной части данных, позволяет обеспечить структурную последовательность и прогнозируемость, которые являются особенно важными для обеспечения возможности для клиентского приложения и третьей стороны взаимодействовать с ассоциированными данными.

Хранилище 208 данных обеспечивает один или более интерфейсов 270 прикладного программирования (API), к которым может обращаться приложение 205 клиента (например, приложения текстового редактора, приложения - электронные таблицы, приложения - презентации слайдов и т.д.), а также приложения 210, 215, разработанные третьей стороной, через объектные объекты (OM, МО) соответствующих приложений 205, 210, 215. Эти API позволяют клиентским приложениям и приложениям третьей стороны загружать любой существующий файл XML в хранилище 208 данных заданного документа, обеспечивая таким образом то, что эти данные теперь будут составлять часть документа и будут перемещаться в пределах этого документа в течение срока его существования (например, при открытии/редактировании/сохранении/переименовании/и т.д.), или до тех пор, пока эти данные не будут удалены из хранилища данных. В соответствии с одним вариантом воплощения данные в хранилище данных будут доступны в их формате XML, даже когда приложение-источник для заданной части данных 225, 230 будет закрыто или по какой-либо другой причине не будет доступно. Таким образом, доступ к заданной части данных 225, 230 может осуществляться через API 270 другими приложениями (отличными от приложения-источника). Как описано ниже, API также позволяют клиентским приложениям и приложениям, разработанным третьей стороной, выполнять изменения в данных разметки XML, применяемых для элементов 225, 230 данных.

После того как данные 225, 230 XML загружены в хранилище данных для ассоциирования с документом 220, ими можно манипулировать как стандартным XML с использованием интерфейсов хранилища данных, разработанных для предоставления способов, аналогичных существующим интерфейсам редактирования XML, для того, чтобы использовать существующее знание разработчика стандарта программирования XML. Это позволяет пользователям выполнять стандартные операции XML в отношении данных XML, добавленных к хранилищу данных для документа, например, добавления элементов и атрибутов, удаления элементов и атрибутов, изменения значения существующих элементов/атрибутов и считывания значения любой существующей части ассоциированного дерева XML. Используя эти стандартные операции XML, решения могут сохранять структурированные комплексные (сложенные) метаданные в документе, к которому не применяются никакие предыдущие ограничения в отношении длины/размера данных или структуры данных, что позволяет использовать это хранилище данных XML для существенно большего количества структурных решений, чем в решениях предшествующего уровня техники. Например, для приложения 215 третьей стороной может быть установлена возможность размещения и выделения имен автора документа и дат создания документов из множества документов путем считывания метаданных 1 225, добавленных к хранилищу 208 данных для каждого документа. Пример приложения третьей стороны может быть запрограммирован на уровне прикладной программы так, что он будет составлять список имен авторов документа и дат создания документа для всех документов, созданных заданной организацией. В соответствии с вариантами воплощения настоящего изобретения приложение третьей стороны может использовать структуру XML, применяемую к метаданным 1 для эффективного поиска и извлечения требуемых данных. Например, приложение третьей стороны может быть написано так, что оно будет выполнять разбор структуры XML файла метаданных 1 для поиска местонахождения тегов XML, таких как <docauthor> и <doccreationdate>, для получения и использования данных, ассоциированных с этими тегами. Следует понимать, что указанное выше представляет собой только один пример множества способов, с помощью которых одно или более приложений могут взаимодействовать со структурными данными, которые ассоциированы с документом, через хранилище 208 данных.

Кроме того, хранилище 208 данных обеспечивает любое количество интерфейсов 270 API для любой отдельной части данных 220, 225, 230 XML (также известных как элемент хранения), для обеспечения возможности работы множества приложений 205, 210, 215 с одной и той же частью данных. Например, несколько решений, таких как приложение - клиент (например, приложение текстового редактора), и решение приложения третьей стороны (например, описанные выше приложения) могут работать с одним и тем же набором свойств документа (например, свойствами, содержащимися в метаданных 2 файла 230). Используя хранилище 208 данных, каждое из этих приложений получает отдельный доступ к требуемым данным 230 XML через их собственный интерфейс 270 API хранилища данных, что обеспечивает для каждого приложения возможность связи с данными через его собственную OM без необходимости использования сложного решения для доступа множества потребителей данных к одной и той же части данных.

Для того чтобы обеспечить возможность доступа для такого множества приложений 205, 210, 215 - потребителей данных к одним и тем же данным, хранилище 208 данных уведомляет каждое из этих приложений, когда любая часть данных XML изменяется другим приложением, так что заданное приложение может ответить на это изменение (как внутри себя, в соответствии со своим собственным процессом, так и внешним образом путем других изменений тех же данных). Когда одно приложение запрашивает изменение заданного элемента данных, этот запрос автоматически поступает во все другие приложения, что обеспечивает для других приложений возможность определения, каким образом отвечать и требуется ли отвечать на запрашиваемое изменение. В соответствии с одним вариантом воплощения это осуществляется путем обеспечения возможности для каждого приложения регистрировать возможность "прослушивания" любой части данных XML, с которыми оно имеет интерфейс, таким образом, что данное решение приложения/программа принимает только те сообщения, которые соответствуют его собственной логике. Например, один тип приложения 210 может пожелать зарегистрировать прослушивание всех изменений, выполняемых для заданных данных XML, с тем чтобы обеспечить возможность предоставления подробной деловой логики для решения третьей стороны, но другой тип приложения 215 может пожелать прослушивать только изменения одного или двух конкретных элементов XML в пределах одних и тех же данных, поскольку его логику не интересуют изменения любой другой части данных XML.

В соответствии с этим вариантом воплощения множество приложений 205, 210, 215 могут обращаться и могут редактировать одну и ту же часть данных документа, и при этом разрешаются любые конфликтующие изменения данной части данных. Например, "побочные эффекты" любого заданного изменения могут быть выполнены, когда одно изменение, выполняемое одним приложением, приводит к изменению - побочному эффекту другого приложения. Например, первое приложение 210 может получить задачу извлечения названий компаний из одного или более элементов 225, 230 данных, ассоциированных с заданным документом, для перевода этих названий в соответствующие стандартные символы, если они доступны, для составления списка стандартных символов компаний, относящихся к данному документу. Если второе приложение 215 добавляет или изменяет заданное название компании в заданной части метаданных, например, изменяет название компании с "Company ABC" на "Company XYZ," первое приложение может прослушивать это изменение для автоматического обновления своего списка стандартных символов, для включения этих стандартных символов в "Company XYZ" вместо "Company ABC". Кроме того, такие изменения и любые ассоциированные побочные эффекты могут быть взаимосвязаны хранилищем 208 данных таким образом, что отмена одного или более изменений приводит к отмене всех связанных с ним изменений.

На фиг.3 иллюстрируется схема системы, представляющая взаимодействие между внутренним и внешним потребителями данных с хранилищами данных XML. Как представлено, система 300 включает в себя хранилище 302 данных, включающее в себя уровень 304 представления, хранилища 1-N (306) XML, каждое из которых включает в себя хранилище ошибки и хранилище отмены, хранилище 308 глобального изменения, необязательное хранилище 310 глобальной отмены, внутренний брокер 312, который соединен с потребителями 1-N 314 внутренних данных, и внешний брокер 316, который соединен с потребителями 1-N 318 внешних данных.

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

Как описано выше, программный доступ к этим данным обеспечивается через API, который может использоваться во время редактирования документа, предоставляя стандартный механизм, известный разработчикам решения, через который к этой информации можно обращаться и можно ее модифицировать программно, когда данный документ будет открыт. В соответствии с одним вариантом воплощения такой программный доступ разработан таким образом, чтобы он имитировал стандартные интерфейсы XML. Используя API, данные можно добавлять/удалять, в то время как приложение, такое как приложение текстового редактора, работает; заполнение данными может производиться в пределах элемента хранилища (часть в пределах хранилища данных); данными можно манипулировать, используя стандартные конструкции XML; схемы могут быть ассоциированы с любыми произвольными данными XML в хранилище данных; схемы можно добавлять/удалять/изменять после их ассоциирования с элементом хранилища данных; и изменения XML могут представляться как события для всех осуществляющих прослушивание клиентов. Как иллюстрируется, API содержит внешний брокер (посредник) 316, который предоставляет интерфейс для внешних потребителей 318 данных, и внутренний брокер 312, который обеспечивает интерфейс для любых внутренних потребителей 314 данных, которые взаимодействуют с хранилищем 302 данных.

Манипуляции с хранилищем 302 данных могут происходить в режиме реального времени. Как описано выше, хранилища 306 данных могут содержать один или более типов данных. Например, компании могут иметь одно хранилище данных, которое они используют для сохранения всех разных типов данных, которые они желают сохранять в пределах одного хранилища данных, в то время как другая компания может хотеть сохранять данные других типов данных в других хранилищах данных.

Потребители 318 данных могут регистрироваться в отношении событий, которые относятся к действиям, относящимся к хранилищам 306 данных. Например, потребитель данных может зарегистрироваться на прием события, когда любой тип изменения выполняют для одного или более хранилищ данных. Другой потребитель данных может зарегистрироваться на изменения, которые происходят с некоторым элементом или набором элементов в хранилище данных. Общие события включают в себя загрузку хранилища данных, добавление к хранилищу данных и удаление из хранилища данных. Когда происходит событие, каждый зарегистрировавшийся потребитель данных может реагировать на это изменение, в то время как состояние хранилищ данных единообразно поддерживается. Много раз, когда происходит изменение, потребитель данных не будет выполнять какие-либо действия. В других случаях потребитель данных будет выполнять некоторое действие (действия) в ответ на событие. Например, потребитель данных может выполнять некоторые другие изменения в отношении хранилища данных в ответ на такие изменения, как изменение названия, обновление заголовков в документе. Потребитель данных также может выполнять некоторые другие операции, которые не влияют на документ. Например, если вставляют символ тикера (биржевого аппарата), потребитель данных может осуществлять поиск данных, которые ассоциируются с этим символом тикера, даже если все найденные данные не могут быть отображены в пределах документа на уровне представления. Потребитель данных также может отклонить изменение. Например, если потребитель 1 данных получает сообщение об изменении, которое не может быть им принято, этот потребитель данных может вернуть флаг брокеру, обозначающий, что это изменение не принято. Всякий раз, когда изменение не будет принято, это изменение отменяют вместе с любыми побочными эффектами так, как если бы это изменение никогда не происходило. Каждое хранилище 306 XML может использовать свое хранилище отмены для отмены изменений, которые оно выполнило. В качестве альтернативы, хранилище 310 глобальной отмены можно использовать для отмены изменений, произведенных в хранилищах данных. Предположим, что имеется три потребителя данных, которые заинтересованы в том, что происходит в отношении свойств документа, при этом каждый из этих потребителей данных зарегистрировался на прием событий, относящихся к изменению свойств. Когда происходит изменение, хранилище данных определяет каждого зарегистрировавшегося потребителя данных и информирует каждого из них об изменении в заданном порядке. Каждый потребитель данных, в свою очередь, может выполнять некоторое действие в ответ на это изменение. Если это изменение или любое из изменений, выполненное зарегистрированными потребителями данных в результате этого изменения, не будет принято каким-либо одним из потребителей данных, все изменения, относящиеся к исходному изменению, будут отменены.

Уровень 316 интерфейса программирования приложения внешнего брокера обеспечивает доступ к хранилищу 302 данных для потребителей 318 внешних данных и обеспечивает клиентам третьей стороны возможность взаимодействовать с хранилищем 302 данных так же, как и внутренним потребителям данных, которые ассоциированы с приложением, взаимодействующим с хранилищем данных. Для каждого из хранилищ 306 данных XML в хранилище 302 данных предусмотрен уникальный ID для идентификации. Это позволяет находить хранилище 306 данных XML.

В любой момент потребитель данных может добавить схему, которая используется для проверки правильности данных, находящихся в хранилище данных. Таким образом, если теперь любой поступающий код третьей стороны пытается изменить данные, первое, что делает хранилище данных, - определяет, имеет ли такое изменение смысл в соответствии с представленной схемой. Если схема приложена, брокер становится объектом удостоверения (проверяющим правильность).

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

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

На фиг.4 и 5 иллюстрируется процесс обработки событий, относящихся к хранилищу данных. При чтении описания представленных в данном описании процедур следует понимать, что логические операции в соответствии с разными вариантами воплощения выполнены, (1) как последовательность выполняемых компьютером действий или программных модулей, работающих в компьютерной системе, и/или (2) как взаимно соединенные машинные логические схемы или схемные модули вычислительной системы. Воплощение представляет собой предмет выбора, который зависит от требований к рабочим характеристикам вычислительной системы, в которой воплощается изобретение. В соответствии с этим логические операции, иллюстрируемые и составляющие описанные здесь варианты воплощения, называются по-разному - как операции, структурные устройства, действия или модули. Эти операции, структурные устройства, действия и модули могут быть воплощены в виде программных средств, в виде программно-аппаратных средств, в виде специализированных цифровых логических схем и в виде любой их комбинации.

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

После начала работы процесс переходит к операции 410, где потребитель данных регистрируется по отношению к какому-либо событию (событиям), в приеме которых он заинтересован. Эти события могут относиться к добавлению данных к хранилищу данных, удалению данных из хранилища данных, изменению данных в хранилище данных и т.п. Событие может быть закреплено за глобальными изменениями или конкретными изменениям элементов, которые хранятся в одном или более хранилищ данных. Например, один потребитель данных может захотеть знать, когда происходит любое изменение, в то время как другой клиент заинтересован только в изменениях одного конкретного значения в хранилище данных.

Переходя к операции 420 принятия решения, определятся, произошло ли событие. Событие относится к изменению хранилища данных. Например, как описано выше, событие может включать в себя добавление, удаление или какое-либо другое изменение хранилища данных. Например, изменение может состоять в добавлении вершины (узла) к хранилищу данных. Когда событие не произошло, процесс возвращается к операции 420 принятия решения. Когда событие произошло, процесс переходит к операции 430.

В операции 430 изменение передают каждому из потребителей данных, которые зарегистрировались в отношении этого изменения. В соответствии с одним вариантом воплощения, каждого потребителя данных уведомляют в заданном порядке. Например, порядок может быть основан на порядке регистрации потребителей данных.

Переходя к операции 440, получают ответ от каждого из потребителей данных, которые получили уведомление о событии. Каждый из клиентов может принять или отклонить изменение. Ответы определяют, будет ли изменение передано в хранилище данных.

Переходя к операции 450 принятия решения, определяют, отклонил ли один из потребителей данных изменение в хранилище данных. Когда изменение было отклонено каким-либо из потребителей данных, процесс переходит на этап 460, где любые изменения, которые были выполнены в ответ на изменение, отменяют, как если бы изменение никогда не происходило.

Когда все уведомленные клиенты принимают изменение, процесс переходит к операции 470, где изменение в случае необходимости удостоверяют, и затем процесс переходит к операции 480, где изменение передают в соответствующее хранилище данных.

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

На фиг.5 иллюстрируется процесс обработки события, которое включает в себя побочные эффекты. Обычно, когда хранилище данных принимает запрос на изменение от потребителя данных, это изменение передают всем зарегистрированным клиентам, обеспечивая для них возможность отклонить изменение или запросить побочные эффекты (другие изменения XML) в качестве результата изменения. Например, клиент может быть проинформирован об изменении одного элемента в хранилище данных, и в результате изменения потребитель данных производит другое изменение в хранилище данных. Когда запрашивают изменение в качестве побочного эффекта, тогда процесс несколько отличается от процесса, представленного на фиг.4.

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

Переходя к операции 520, такое изменение побочного эффекта ставят в очередь, но не выполняют. Другими словами, изменение побочного эффекта не выполняется немедленно в хранилище данных. Основываясь на этом факте, альтернативы для событий включают в себя следующее:

Принудительно выполнить операции узла (например, добавление, замена) для возврата пустого значения вместо узла и документа, который составляет запрос, а не действие. Делает результат операции узла последовательным
Отсутствие выполнения
Удаляют из истории тот факт, что, если вы хотите манипулировать с узлом, вы должны делать это в его событии AfterAdd
Отразить тот факт, что вызывающий "запрашивает" изменение вместо выполнения изменения Делает результат операции узла последовательным
Отсутствие выполнения
Выполняет необходимые изменения для каждого вызывающего, затем отменяет их, когда вызывающий возвращается в исходное состояние Возвращает вызывающему активный узел
Возвращает разъединенную (следует понимать: еще не переданный узел), когда изменения выполнены в виде события Возвращает узел до изменения во всех случаях
Поддерживает отдельный DOM для клиента OM Возвращает вызывающему активный узел

Переходя к операции 530 принятия решения, определяют, отклонил ли кто-либо из потребителей данных исходное изменение в хранилище данных.

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

Когда клиенты принимают исходное изменение, процесс переходит к операции 550, где изменение в случае необходимости удостоверяют, и затем процесс переходит к операции 560, на которой исходное изменение передают в соответствующее хранилище данных.

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

Процесс затем переходит к конечному этапу и возвращается к обработке других действий.

Ниже приведен пример сегментов кода, которые иллюстрируют некоторые общие функции, открываемые через OM хранилища данных:

Первый пример иллюстрирует добавление потока к хранилищу данных:

Dim oStream As CustomXMLPart

Set oStream = Document.XMLStreams.Add

oStream.Load("c:\specSolution.xml")

Второй пример иллюстрирует определение местоположения данных в хранилище.

Dim oStream As CustomXMLPart

Set oStream = Document.XMLStreams("http://www.microsoft.com/office/12/specs")

Третий пример иллюстрирует добавление поддерева в хранилище данных.

oStream.SelectionNamespaces = oStream.SelectionNamespaces & "xmlns:s=1http://www.microsoft.com/office/12/specs"'

oStream.SelectSingleNode("/s:spec/s:specBody/s:issues").

AppendSubtree("<s:issue><s:issueBy/><s:issueDate/><s:issueDesc/></s:issue>")

В соответствии с одним вариантом воплощения ниже приведены примерные функции, которые ассоциированы с API.

События по CustomXMLNode

События могут возникать по CustomXMLNode, также как только на уровне документа.

AfterInsert (NewNode as CustomXMLNode, InUndoRedo as Boolean)

Параметры: NewNode: объект CustomXMLNode, соответствующий только что добавленному узлу в CustomXMLNode. Примечание: этот узел может иметь дочерний узел (если поддерево было только что добавлено к документу). InUndoRedo: Boolean возвращает значение TRUE, если узел был добавлен как часть действия Undo/Redo пользователем, FALSE в других случаях.

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

AfterDelete (ОldNode as CustomXMLNode, OldParentNode as CustomXMLNode, OldNextSibling as CustomXMLNode, InUndoRedo as Boolean)

Параметры: OldNode: объект CustomXMLNode, соответствующий узлу, который был только что удален из CustomXMLPart. Примечание: №1: эта вершина может иметь дочерние вершины (если поддерево удаляется из документа). Примечание: №2: Эта вершина будет "отсоединенной" вершиной в том смысле, что запрос мог быть послан из вершины, но не мог быть передан вверх - вероятно, она существует одна (то есть, она представляет собой элемент документа с тем же OwnerStream). OldParentNode: объект CustomXMLNode, соответствующий прежней родительской вершине для OldNode. OldNextSibling: объект CustomXMLNode, соответствующий прежней следующей вершине того же уровня OldNode. InUndoRedo: Boolean возвращает значение TRUE, если вершина была добавлена пользователем, как часть действия Undo/Redo, FALSE в других случаях.

Это событие происходит всякий раз, когда вершины (узлы) XML удаляют из текущего элемента в хранилище данных. Если операция удаления подразумевает удаление поддерева документа XML в CustomXMLPart, это событие происходит один раз для самой верхней изменяемой вершины. Такое событие происходит один раз для каждого изменения, сообщаемого в хранилище данных, поэтому побочные эффекты изменения, представленные этим событием, также инициируют событие.

AfterReplace (ОldNode as CustomXMLNode, NewNode as CustomXMLNode, InUndoRedo as Boolean)

Параметры: OldNode: объект CustomXMLNode, соответствующий вершине, которая была только что удалена из CustomXMLPart. Примечание: №1: Эта вершина может иметь дочернюю вершину (если поддерево удаляют из документа). Примечание: №2: Эта вершина будет "отсоединенной" вершиной в том, что запрос может быть выполнен вниз из вершины, но не будет передан вверх - она, вероятно, существует одна (то есть, она представляет собой элемент документа с тем же OwnerStream). NewNode: объект CustomXMLNode, соответствующий только что добавленной вершине к CustomXMLPart. Примечание: Эта вершина может иметь дочернюю вершину (если поддерево было только что добавлено к документу). InUndoRedo: Boolean возвращает значение TRUE, если вершина была добавлена пользователем как часть действия Undo/Redo, FALSE в других случаях.

Это событие возникает всякий раз, когда вершины XML заменяют в хранилище данных. Если операция замены подразумевает замену поддерева документа XML в CustomXMLPart, такое событие возникает один раз для самой верхней вершины, для которой происходит изменение. Такое событие возникает один раз для каждого изменения, объявленного для хранилища данных, поэтому побочные эффекты изменения, представленного этим событием, также инициирует событие.

CustomXMLParts(): Точки для сбора всех элементов хранилища данных, доступных в файле, включающем в себя потоки свойств документа OLE и потоки свойств WSS.

CustomXMLPrefixMappings: объект, представляющий все преобразования префикса для текущей части.

AddNamespace (Prefix as как String, NamespaceURI as String), as (Void)

Параметры: Префикс: String, представляющая префикс, для добавления к списку преобразования префикса. NamespaceURI: String, представляющая пространство имен, которое назначают для вновь добавленного префикса.

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

Count как Long: Возвращает количество преобразований префикса в подборке коллекции.

Item (Index as Long) as CustomXMLPrefixMapping

Параметры: Index: значение Long, представляющее индекс в требуемой схеме в подборке.

Возвращает запрашиваемый CustomXMLPrefixMapping из подборки. Принятый по умолчанию член этого объекта.

LookupNamespace (Prefix as String) as String

Параметры: Префикс: значение String, представляющее префикс в списке преобразования префикса. Позволяет разработчику получить пространство имен, соответствующее упомянутому префиксу. Если пространство имен не назначено для запрашиваемого префикса, возвращается "".

LookupPrefix (NamespaceURI as String) as String

Параметры: NamespaceURI: значение String, представляющее пространство имен в списке преобразования префикса;

Позволяет разработчику получить префикс, соответствующий упомянутому пространству имен. Если префикс не назначен для запрашиваемого пространства имен, возвращается "". Если имеется множество префиксов, указанных в пространстве имен, администратор возвращает первый один, который соответствует предоставленному пространству имен.

CustomXMLPrefixMapping: Объект, представляющий преобразования префикса.

Prefix as String: Возвращает префикс для этого преобразования префикса.

NamespaceURI as String: Возвращает пространство имен для этого преобразования префикса.

CustomXMLSchema: Объект, представляющий схему, которая составляет часть подборки коллекции схемы.

Delete as Void: Удаляет эту схему из подборки схемы. Если это выполняется для схемы в подборке, которая уже проверена или прикреплена к потоку (активная подборка сортов), тогда представляется сообщение об ошибке: "Эта схема не может быть удалена, поскольку подборка схемы используется в настоящее время".

Location as String: Возвращает строку, которая представляет местоположение этой схемы в устройстве пользователя.

NamespaceURI as String: Возвращает целевое пространство имен этой схемы, "", если ни одно из них не указано XSD.

Reload as Void значение: Перезагружает эту схему с диска, которая переходит к повторному прикреплению копии этой схемы на диске для: обновления ее местоположения (если SL изменился), и для того, чтобы удостовериться, что она все еще является действительной схемой. Если это выполняется для схемы в подборке, которая уже была проверена или привязана к потоку (активная подборка сортов), тогда будет выведено сообщение об ошибке: "Данная схема не может быть повторно загружена, поскольку подборка схемы в настоящее время используется".

CustomXMLSchemaCollection(): Объект, представляющий подборку (коллекцию) схем (которые прикреплены/будут прикреплены к потоку).

Add([NamespaceURI as String], [Alias as String], [FileName as String], [InstallForAllUsers as Boolean=False]) as CustomXMLSchema

Параметры: NamespaceURI: значение String, представляющее пространство имен схемы, которая будет добавлена к подборке. Если схема существует в библиотеке схемы, ее получают из нее. Alias: значение String, представляющее псевдоним схемы, которая будет добавлена к подборке. Если псевдоним существует в SL, найти его, используя этот аргумент. FileName: значение String, представляющее местоположение на диске, где может быть найдена схема. Если этот параметр указан, схему добавляют не только к подборке, но также добавляют ее к SL. InstallForAllUsers: Булево выражение, представляющее, следует ли в случае, когда схему добавляют в библиотеку схемы, записывать ключи SL в HKLM (для всех пользователей) или HKCU (только для текущего пользователя). Принятое по умолчанию значение False (запись в HKCU).

Этот метод позволяет разработчику добавлять одну или более схем в подборку схем, которую добавляют к потоку в хранилище данных, а также к библиотеке схемы. Он может быть активирован со следующими наборами параметров (в случае конфликта, попытка использования параметров в следующем порядке): [NamespaceURI], [Alias], FileName, [InstallForAHUsers] (добавляет схему к библиотеке схемы, если схема не существует в этом пространстве имен). Только NamespaceURI (осуществляет поиск XSD из библиотеки схемы). Только Alias (осуществляет поиск XSD из библиотеки схемы).

AddCollection (SchemaCollection as CustomXMLSchemas())as Void

Параметры: SchemaCollection: объект CustomXMLSchemas(), представляющий подборку (коллекцию) схем, которые будут импортированы в текущую подборку.

Добавляет уже существующую подборку к текущей подборке. Если происходит столкновение пространства имен во время импорта (например, если a.xsd уже связан с "fooNamespace", но поступающая подборка имеет b.xsd для того же пространства имен), поступающая подборка побеждает.

Count as Long: Возвращает количество схем в подборке.

Item (Index as Variant) as CustomXMLSchema

Параметры: Index: значение Variant, обозначающее желательный элемент в подборке. Он может быть любым из: значения String, представляющего целевое пространство имен желательной схемы; или значения Long, представляющего индекс требуемой схемы в подборке.

Возвращает запрашиваемый CustomXMLSchema из подборки. Принятый по умолчанию член этого объекта.

NamespaceURI (Index as Long) as String

Параметры: Index: значение Long, представляющее индекс схемы в подборке.

Возвращает целевое пространство имен упомянутого члена подборки схемы.

Проверить как Boolean: Возвращает значение Boolean, представляющее, являются ли схемы в подборке проверенными или нет. Кроме того, это также происходит, когда Includes перемещаются для каждой схемы в подборке и их добавляют к схемам, которые их запрашивали.

CustomXMLParts (): Подборка, представляющая набор объектов CustomXMLPart.

Add ([XML as String], [SchemaCollection as CustomXMLSchemaCollectionO]) as CustomXMLPart

Параметры: XML: необязательное значение String, представляющее XML, добавляемое к вновь созданному CustomXMLPart. SchemaCollection: необязательный объект CustomDataSchemaCollection(), представляющий набор схем, предназначенных для использования при проверке этого потока.

Позволяет пользователю добавить новый CustomXMLPart к файлу. Если XML в параметре XML неправильно сформирован, вырабатывается сообщение об ошибке: "Для добавления содержания к этому потоку, он должен быть действительным, правильно сформированным XML". Если пользователь предоставляет SchemaCollection: Проверить ее (если она еще до сих пор не была проверена). Запустить любой MSXML, анализирующий ошибки, принимаемые обратно в клиент OM, и невозможно добавлять поток. Проверить, можно ли загрузить параметр XML в DOM. В противном случае выдать сообщение об ошибке: "Чтобы добавить содержание к потоку, оно должен быть действительным правильно сформированным XML". Прикрепить подборку схемы к DOM и попытаться проверить данный документ. Если его нельзя проверить, выдать сообщение об ошибке и запустить XML, анализирующий ошибку, принятую обратно в клиент OM, и не добавлять поток к подборке.

Если пользователь НЕ предоставляет SchemaCollection: проверить, можно ли загрузить параметр XML в DOM. В противном случае выдать сообщение об ошибке: "Чтобы добавить содержание к потоку, он должен быть действительным правильно сформированным XML". Просмотреть список пространств имен, представленных в файле XML. Найти схемы из SL и логически вывести подборку схем для них. Попытаться проверить полученную в результате подборку схем. Если ее нельзя проверить, все еще добавить поток к подборке, но он не будет ассоциирован с какой-либо подборкой схем и, следовательно, не будет проверен. Прибавить подборку схем к DOM и попытаться проверить текущий документ. Если его нельзя проверить, выдать ошибку и запустить XML, анализирующий ошибку, принятую обратно в клиенте OM, и не добавлять поток к подборке. Если его нельзя проверить, все же добавить поток к подборке, но он не будет ассоциирован с какой-либо подборкой схем и, следовательно, не будет проверен. Предоставление пустой SchemaCollection будет представлять собой явное действие, которое предпринимают и которое означает "никогда не проверяйте этот поток".

Count As Long: Возвращает количество потоков данных потребителя в подборке.

Item (Index as Variant) as CustomXMLPart

Параметры: Индекс: Variant, который может представлять собой один из следующих двух типов: значение Long, представляющее индекс требуемого CustomXMLPart в подборке; или значение String, представляющее корневое пространство имен заданного CustomXMLPart в подборке. Если более чем одна часть соответствует этому корневому пространству имен, то будет возвращено первое соответствие в порядке индекса.

Это представляет собой принятый по умолчанию член объекта CustomXMLParts, и он возвращает объект CustomXMLPart, соответствующий запрашиваемому объекту.

SelectByID (ID as String) as CustomXMLPart

Параметры: ID: значение String, содержащее ID для элемента хранилища данных, который должен быть возвращен из подборки.

Позволяет разработчику захватывать конкретный элемент из хранилища данных, используя его ID. Если элемент хранилища с этим ID не существует, возвращается Nothing.

SelectByNamespace (NamespaceURI as String) as CustomXMLParts()

Параметры: NamespaceURI: String, представляющая корневое пространство имен требуемых элементов из подборки хранилища данных.

Возвращает все элементы хранилища данных, корневое пространство имен которых соответствует запрашиваемой записи. Если отсутствуют потоки с таким корневым пространством имен, возвращает пустую подборку CustomXMLParts().

StreamAfterAdd (NewStream as CustomXMLPart)

Параметры: NewStream: объект CustomXMLPart, содержащий поток, который был только что добавлен.

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

StreamBeforeDelete (OldStream as CustomXMLPart)

Параметры: OldStream: объект CustomXMLPart, содержащий поток, который вот-вот будет удален из хранилища данных.

Это событие возникает всякий раз, когда поток удаляют из хранилища данных. Если множество потоков удаляют, события возникают по одному разу для каждого потока, который был удален. Кроме того, для этого потока устанавливают флаг, такой как "вот-вот будет удален" так, что с ним действительны только операции считывания (например, запрос вершин, проверка значений и т.д.), но операция записи не будет осуществляться и будет выдано сообщение об ошибке: "Эта операция не может быть выполнена для потока, который вот-вот будет удален".

CustomXMLPart: объект, представляющий один поток XML в хранилище данных.

AddNode ([Name as String], [NamespaceURI as String], Parent As CustomXMLNode, [NextSibling as CustomXMLNode], [NodeType as msoCustomXMLNodeType], [NodeValue as String]) as Void

Параметры: Name: значение String, которое представляет базовое название вершины, которая должна быть добавлена к XML DOM. Namespace: необязательное значение String, которое представляет пространство имен для вершины, которая должна быть добавлена к XML DOM. Требуется добавлять вершины типа msoCustomXMLNodeElement или msoCustomXMLNodeAttribute, игнорируя другие. Parent: CustomXMLNode, представляющий вершину, ниже которой эта вершина должна быть добавлена. При добавлении атрибута обозначает элемент, к которому должен быть добавлен атрибут. NextSibling: Необязательный CustomXMLNode, представляющий вершину, которая должна стать следующей, равнозначной по уровню вершиной для новой вершины. Если это не указано, вершину добавляют в конце дочерних вершин родительской вершины. Игнорируется для добавления типа msoXMLNodeAttribute. Если NextSibling не является дочерним вершиной для родительской вершины, возвращается сообщение об ошибке: "Эта вершина не может быть добавлена, поскольку следующая равнозначная по уровню вершина не является дочерней для родительской вершины". NodeType: необязательный msoCustomXMLNodeType, который определяет тип создаваемой вершины. Если он не указан, предполагается, что он представляет собой msoCustomXMLNodeElement. NodeValue: необязательное значение String, которое используется для установки значения вершины для вершин, в которых разрешен текст. Если в вершине не разрешен текст, этот параметр игнорируется.

Обобщенный метод добавления XML вершины к элементу сохранения данных. Требуется родительская вершина и NodeType по умолчанию принимает значение msoXMLNodeElement. Если полученное в результате добавление будет конструктивно недействительным, вырабатывается сообщение об ошибке: "Эта операция не может быть выполнена, поскольку она могла бы привести к конструктивно недействительному потоку данных". Если пространство имен не находится в подборке ссылок схемы, вырабатывается сообщение об ошибке: "Для добавления этого элемента Вы должны вначале прикрепить его схему к потоку данных".

DocumentElement as CustomXMLNode

Получить корневой элемент потока. Если поток пустой, вернуть Nothing.

Удалить как пустые данные: Удаляет текущий CustomXMLPart из хранилища данных. Если пользователь пытается удалить часть основных свойств, вырабатывается сообщение об ошибке: "Эта часть специализированного XML требуется для правильного функционирования Office и не может быть удалена".

ID as String: Возвращает строку, содержащую GUID, назначенный для текущего CustomXMLPart.

Load(FilePath as String) as Boolean

Параметры: FilePath: Объект String соответствует файлу устройства пользователя (или сетевому устройству и т.д.), из которого XML для этого CustomXMLPart должен быть загружен.

Позволяет автору шаблона заполнять CustomXMLPart из ранее существующего файла на его устройстве. Возвращает значение TRUE, если нагрузка была успешной, значение FALSE, если нет (что включает в себя случай, в котором включают форсирование структуры, и XML является структурно недействительным, или случай, когда XML не был действительным и/или правильно сформированным). После загрузки DOM вырабатывается сообщение об ошибке "Этот DOM не может быть загружен дважды".

LoadXML (XML as String) as Boolean

Параметры: XML: объект String, соответствующий XML, с которым этот CustomXMLPart должен быть загружен.

Позволяет автору шаблона заполнить CustomXMLPart из строки XML. Возвращает значение TRUE, если загрузка была успешной, FALSE, если нет (что включает в себя случай, в котором форсирование структуры будет включено, и XML будет структурно не действительным, или случай, в котором XML не является действительным и/или правильно сформированным). После загрузки DOM вырабатывается сообщение об ошибке "Этот DOM не может быть загружен дважды".

NamespaceURI as String: возвращает строку, содержащую полное пространство имен URI для корневой вершины текущего CustomXMLPart. Если поток пустой (созданный, но вершины не добавлены), возвращает "".

SchemaCollection as CustomXMLSchemaCollection(): Получает/устанавливает подборку CustomXMLSchemaCollection(), представляющую набор схем, прикрепленных к этому потоку. Если пользователь представляет SchemaCollection: проверить ее действительность (если она еще не была подтверждена). Отбросить все ошибки анализа, принимаемые обратно в клиент, и не выполнять добавление в поток; и прикрепить подборку схемы к DOM и попытаться удостоверить данный документ. Если его невозможно удостоверить, выработать сообщение об ошибке и отбросить ошибку анализа, принятую обратно на сторону клиента, и не менять подборку схемы по потоку.

NamespaceManager as CustomXMLPrefixMappings()

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

SelectNodes (XPath as String) as CustomXMLNodes()

Параметры: XPath: значение String, содержащее выражение XPath для оценки против DOM. Отображения префикса для этого XPath получают из ассоциированного администратора пространства имен. Если XPath его не разрешает, перейти через любую генерируемую ошибку.

Этот метод позволяет разработчику получить обратно набор вершин из DOM.

SelectSingleNode (XPath as String) as CustomXMLNode

Параметры: XPath: значение String, содержащее выражение XPath для оценки для DOM. Отображения префикса для этого XPath получают от соответствующего администратора пространства имен. Если XPath не обеспечивает разрешение, генерируется проход через любую ошибку.

Этот метод позволяет разработчику получить обратно одиночную вершину из DOM.

XML as String: Возвращает представление XML текущего CustomXMLPart.

NodeAfterInsert (NewNode as CustomXMLNode, InUndoRedo as Boolean)

Параметры: NewNode: объект CustomXMLNode, соответствующий только что добавленной вершине в CustomXMLPart. Примечание: Эта вершина может иметь дочернюю вершину (если поддерево было только что добавлено к документу). InUndoRedo: Boolean, возвращающий TRUE, если вершина была добавлена как часть действия Undo/Redo пользователем, FALSE в других случаях.

Это событие запускается всякий раз, когда вершины XML вот-вот будут добавлены к текущему документу. Если операция добавления включает в себя поддерево документа XML, добавляемого в CustomXMLPart, это событие запускается один раз для самой верхней изменяемой вершины. Это событие запускается один раз для каждого изменения, объявленного для хранилища данных, поэтому побочные эффекты изменения, представленного этим событием, также инициируют событие.

NodeAfterDelete (OldNode as CustomXMLNode, OldParentNode as CustomXMLNode, OldNextSibling as CustomXMLNode, InUndoRedo as Boolean).

Параметры: OldNode: объект CustomXMLNode, соответствующий вершине, которая была только что удалена из CustomXMLPart. Примечание №1: Эта вершина может иметь дочернюю вершину (если поддерево удаляют из документа). Примечание №2: Эта вершина будет "отсоединенной" вершиной, в которой запрос может быть передан вниз вплоть до этой вершины, но не проходит вверх: выглядит, как будто она существует одна (то есть, ее элемент документа с тем же OwnerStream). OldParentNode: объект CustomXMLNode, соответствующий предыдущей родительской вершине OldNode. OldNextSibling: объект CustomXMLNode, соответствующий предыдущей следующей равнозначной вершине для OldNode. InUndoRedo: Boolean, возвращающий TRUE, если вершина была добавлена пользователем как часть действия Undo/Redo, FALSE в других случаях.

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

NodeAfterReplace (OldNode as CustomXMLNode, NewNode as CustomXMLNode, InUndoRedo as Boolean)

Параметры: OldNode: объект CustomaXMLNode, соответствующий вершине, которая была только что удалена из CustomXMLPart. Примечание №1: Эта вершина может иметь дочернюю вершину (если поддерево удаляют из документа). Примечание №2: Эта вершина будет "отсоединенной" вершиной, в которой запрос может быть передан вниз до вершины, но не может передан вверх, выглядит, как будто она существует одна (то есть, она представляет собой элемент документа с тем же OwnerStream). NewNode: объект CustomXMLNode, соответствующий только что добавленной вершине, в CustomXMLPart. Примечание: Эта вершина может иметь дочернюю вершину (если поддерево было только что добавлено к документу). InUndoRedo: Boolean, возвращает TRUE, если вершина была добавлена пользователем как часть действия Undo/Redo, FALSE в других случаях.

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

CustomXMLNodes(): подборка, представляющая набор объектов CustomXMLNode в текущем документе.

Count As Long: Возвращает количество CustomXMLNodes в подборке.

Item (Index As Long) as CustomXMLNode

Параметры: Индекс: значение Long представляет собой индекс требуемого CustomXMLNode в подборке.

Он представляет собой принятый по умолчанию элемент объекта CustomXMLNodes и возвращает объект CustomXMLNode, соответствующий запрашиваемому элементу в подборке.

CustomXMLNode

AppendChildNode ([Name as String], [NamespaceURI as String], [NodeType as msoCustomXMLNodeType], [NodeValue as String]) as Void

Параметры: Name: необязательное значение String, которое представляет базовое название элемента, добавляемого в XML DOM. Namespace: необязательное значение String, которое представляет пространство имен элемента, добавляемого к XML DOM. Требуется добавлять вершины типа msoCustomXMLNodeElement или msoCustomXMLNodeAttribute, игнорируя другие. NodeType: необязательный msoCustomXMLNodeType, который определяет тип создаваемой вершины. Если он не указан, предполагается, что он представляет собой msoCustomXMLNodeElement. Node Value: необязательное значение String, которое используется для установки значения вершины для вершин, которые разрешают текст. Если вершина не разрешает текст, этот параметр игнорируется.

Обеспечивает для разработчика возможность добавления одиночной вершины в виде, по меньшей мере, последней дочерней вершины в контексте элемента в дереве, если вершина контекста имеет тип msoXMLNodeElement. Если нет, тогда метод вырабатывает сообщение об ошибке: "Вы не можете прикрепить дочерний элемент к комментариям, инструкциям обработки или атрибутам". Кроме того, блокировать любой случай, в котором вершина, которая будет добавлена, имеет уже существующий атрибут: "атрибут с уже существующим названием текущего элемента".

AppendChildSubtree (XML as String) as Void

Параметры: XML: String представляет поддерево, которое добавляют к XML DOM. Этот XML должен быть правильно сформированным документом XML (включающим в себя декларации пространства имен, одну корневую вершину и т.д.). Если это не так, выводится сообщение об ошибке: "Добавьте поддерево XML в Ваш документ, он должен содержать действительный правильно сформированный XML".

Позволяет разработчику добавлять существующее правильно сформированное поддерево XML как последнее дочернее поддерево под элементом контекста в DOM, если вершина контекста имеет тип msoXMLNodeElement. Если нет, тогда этот метод приводит к ошибке и сообщению: "Вы не можете прикрепить дочернее поддерево к содержанию, к инструкциям обработки или атрибутам".

Атрибуты как CustomXMLNodes(): Возвращает подборку CustomXMLNodes, представляющую атрибуты для текущего элемента.

BaseName as String: представляет собой принятый по умолчанию элемент CustomXMLNode. Он возвращает базовое название вершины без префикса пространства имен, если такое существует в DOM.

ChildNodes as CustomXMLNodes: Возвращает подборку CustomXMLNodes, которая содержит все элементы, которые являются дочерними элементами для текущего вершины.

Delete as Void: Удаляет текущую вершину из DOM XML (включая в все ее дочерние элементы, если существуют). Если полученное удаление будет структурно недействительным, выводится сообщение об ошибке: "Эта операция не может быть выполнена, поскольку она может привести к структурно недействительному DOM".

FirstChild as CustomXMLNode; Возвращает объект CustomXMLNode, соответствующий первому дочернему элементу текущей вершины. Если вершина не имеет дочерний элемент (или если она сама не имеет тип msoCustomXMLNodeElement), ничего не возвращается.

HasChildNodes as Boolean: Возвращает значение Boolean, которое равно True, если текущая вершина имеет вершины - дочерние элементы, в других случаях False. Возвращает значение false, когда CustomXMLNode не имеет тип NodeType msoCustomXMLNodeElement.

InsertNodeBefore ([Name as String], [NamespaceURI as String], [NodeType as msoCustomXMLNodeType], [NodeValue as String], [NextSibling as CustomXMLNode]) as Void

Параметры: Name: значение String, которое представляет базовое название элемента, добавляемого к XML DOM. Namespace: необязательное значение String, которое представляет пространство имен для элемента, добавляемого к XML DOM. Требует добавлять вершины типа msoCustomXMLNodeElement или msoCustomXMLNodeAttribute, другие игнорируются. NodeType: необязательный тип msoCustomXMLNodeType, который определяет тип создаваемой вершины. Если не указан, предполагается, что он представляет собой msoCustomXMLNodeElement. NodeValue: необязательное значение String, которое используется для установки значения вершины для вершин, которые обеспечивают возможность текста. Если вершина не обеспечивает возможность текста, параметр игнорируются. NextSibling: необязательный объект CustomXMLNode, который определяет вершину, перед которым требуется добавить новый элемент XML в дерево.

Вставляет новую дочернюю вершину в дерево в указанном местоположении. Если BeforeNode не присутствует, при добавлении вершины типа msoCustomXMLNodeElement, msoCustomXMLNodeComment или msoCustomXMLNodeProcessingInstruction, вершина добавляется к концу списка. Если будет добавлен для типа msoCustomXMLNodeAttribute, его игнорируют. Если NextSibling не является дочерним объектом для контекстной вершины, тогда метод выводит сообщение ошибки: "Эта вершина XML не может быть добавлена, поскольку следующий равнозначный элемент должен быть дочерним для контекстного элемента". Если полученное в результате добавление будет структурно не действительным (и включено принудительное выполнение схемы), будет выведено сообщение об ошибке: "Эта операция не может быть выполнена, поскольку она могла бы привести к структурно не действительному DOM". Также блокируется любой случай, когда вершина, которая могла бы быть добавлена, уже имеет существующий атрибут: "атрибут с таким же названием уже существует для текущего элемента".

InsertSubtreeBefore (XML, as String, [NextSibling as CustomXMLNode]) as Void.

Параметры: XML: значение String, представляющее поддерево, добавляемое к XML DOM. Этот XML должен быть правильно сформированным документом XML (включающим в себя декларации пространства имен, одну корневую вершину и т.д.). Если это не так, выводится сообщение об ошибке: "Для добавления поддерева XML в Ваш документ он должен содержать действительный, правильно сформированный XML. "NextSibling: не обязательный объект CustomXMLNode, который определяет вершину, до того, как новый элемент XML будет добавлен к дереву.

Вставляет указанное поддерево XML в дочерний набор вершин в упомянутом местоположении. Если NextSibling не является дочерним для контекстной вершины, то метод выводит сообщение: "Эта вершина XML не может быть добавлена, поскольку следующая одноуровневая вершина должна быть дочерней для контекстного элемента". Если полученный после добавления результат будет структурно недействительным, выводится сообщение об ошибке: "Эта операция не может быть выполнена, поскольку она могла бы привести к структурно недействительному DOM".

LastChild as CustomXMLNode: Возвращает объект CustomXMLNode, соответствующий последнему дочернему элементу текущей вершины. Если вершина не имеет дочерних элементов (или если она сама не имеет тип msoCustomXMLNodeElement), ничего не возвращается.

NamespaceURI as String [только для чтения]

Возвращает значение String, соответствующее пространству имен текущей вершины. Если вершина имеет тип msoCustomXMLNodeComment msoCustomXMLNodeProcessingInstruction, возвращается "".

NextSibling as CustomXMLNode: Возвращает следующую одноуровневую вершину (элемент, комментарий или инструкцию по машинной обработке) текущей вершины. Если вершина представляет собой последнюю одноуровневую вершину на ее уровне, ничего не возвращается.

NodeType as msoCustomXMLNodeType: Возвращает константу msoCustomXMLNodeType, представляющую тип текущей вершины.

NodeValue as String: Получает/устанавливает текст внутри вершин, содержащих только текст (то есть, текстовых вершин, комментариев, инструкций обработки, атрибутов). Для элементов выводится сообщение об ошибке: "Вы не можете установить параметры NodeValue для вершин элементов".

OwnerDocument as Variant: Возвращает объект Document/Workbook/Presentation, представляющий документ Word, ассоциированный с этим вершиной.

OwnerStream as CustomXMLPart: Возвращает объект CustomXMLPart, представляющий элемент хранилища данных, ассоциированный с этой вершиной.

PreviousSibling as CustomXMLNode: Возвращает предыдущую одноуровневую вершину (элемент, комментарий, или машинную инструкцию по обработке) для текущей вершины. Если вершина представляет собой первую одноуровневую вершину на этом уровне, ничего не возвращается.

ParentNode as CustomXMLNode: Возвращает вершину - родительский элемент для текущей вершины. Если вершина находится на корневом уровне, ничего не возвращается.

RemoveChild (Child as CustomXMLNode) as Void

Параметры: Child: объект CustomXMLNode, который представляет дочернюю вершину для контекстной вершины, предназначенной для удаления. Если эта вершина не является дочерней для контекстной вершины, выводится сообщение об ошибке: "Эта вершина не может быть удалена, поскольку она не является дочерней для текущего элемента".

Удаляет указанную дочернюю вершину из потока. Если полученный в результате DOM будет структурно недействительным, выводится сообщение об ошибке: "Эта операция не может быть выполнена, поскольку она могла бы привести к структурно не действительному DOM".

ReplaceChildNode (Name as String, [Namespace as String], [NodeType as msoCustomXMLNodeType], [NodeValue as String], OldNode as CustomXMLNode) as Void

Параметры: OldNode: CustomXMLNode, представляющий дочернюю вершину, который будет заменена. Название: значение String, которое представляет базовое название элемента, добавляемого к XML DOM. NameSpace: необязательное значение String, которое представляет пространство имен элемента, добавляемого к XML DOM. Требуется добавлять вершины типа msoCustomXMLNodeElement или msoCustomXMLNodeAttribute, другие игнорируются. NodeType: необязательный тип msoCustomXMLNodeType, который определяет тип создаваемой вершины. Если не указан, предполагается, что он представляет собой msoCustomXMLNodeElement. NodeValue: необязательное значение String, которое используется для установки значения вершины для вершин, которые обеспечивают возможность текста. Если вершина не обеспечивает возможность текста, этот параметр игнорируется.

Удаляет упомянутую дочернюю вершина (и ее поддерево) из потока и заменяет его вершиной, указанной в том же местоположении. Если OldNode не является дочерней для контекстной вершины, выводится сообщение об ошибке: "OldNode должен быть дочерней для текущей вершины". Если полученная в результате замена будет структурно недействительной, выводится сообщение об ошибке: "Эта операция не может быть выполнена, поскольку она могла бы привести к структурно недействительному DOM". Кроме того, блокируется любой случай, когда вершина, которая могла бы быть добавлена, представляет собой уже существующий атрибут: "атрибут с таким же названием уже существует в текущем элементе".

ReplaceChildSubtree (XML, as String, OldNode as CustomXMLNode) as Void

Параметры: OldNode: CustomXMLNode, представляющий дочернюю вершину, которая будет заменена. XML: значение String, представляющее поддерево, которое должно быть добавлено к XML DOM. Этот XML должен быть правильно сформированным документом XML (включая декларации пространства имен, одиночной корневой вершины и т.д.). Если это не так, выводится сообщение об ошибке: "Для добавления поддерева XML в Ваш документ, он должен содержать действительный, правильно сформированный XML".

Удаляет указанную вершину (и ее поддерево) из потока и заменяет ее в том же местоположении упомянутым поддеревом XML. Если OldNode не является дочерним для контекстной вершины, выводится сообщение об ошибке: "OldNode должен быть дочерним для текущей вершины". Если полученная в результате замена может быть структурно недействительной, выводится сообщение об ошибке: "Эта операция не может быть выполнена, поскольку она могла бы привести к структурно недействительному DOM".

SelectNodes (XPath as String) as CustomXMLNodes()

Параметры: XPath: значение String, содержащее выражение XPath, для оценки для DOM. Преобразование префикса для этого XPath извлекают из свойства NamespaceManager. Если XPath не позволяет разрешить ситуацию, проходит через любые возникающие ошибки (аналогично существующему в настоящее время способу, применяемому к объекту Document с внедренным XML).

Такой метод позволяет разработчику получить обратно набор вершин из элемента хранилища данных.

SelectSingleNode (XPath as String) as CustomXMLNode()

Параметры: XPath: значение String, содержащее выражение XPath для оценки для DOM. Преобразования префикса для этого XPath извлекают из свойства NamespaceManager. Если XPath не позволяет разрешить ситуацию, проходит через любые возникающие ошибки (аналогично применяемому в настоящее время методу для объекта Document с внедренным XML).

Этот метод позволяет разработчику получить обратно одну вершину среди элементов хранилища данных.

Text as String: Получает/устанавливает текст для текущей вершины. В отличие от MSXML установка его для вершины заменяет содержание этой вершины указанной строкой - например, установкой ее в значение "тест" на не листовом элементе <foo>, где содержание foo выглядит следующим образом:

<foo>
Bar
<baz> hello </baz>
</foo>

Не приведет к ошибке, но приведет к другому внутреннему сообщению для хранилища данных и внешнему для клиентов хранилища данных. Если полученная в результате замена будет конструктивно недействительной, выводится сообщение об ошибке: "Эта операция не может быть выполнена, поскольку она могла бы привести к конструктивно недействительному DOM".

XML as String: возвращает не обработанное представление XML текущей вершины и ее дочерних элементов (если имеются).

XPath as String: Возвращает значение String с канонизированным XPath для текущей вершины. Если вершина больше не находится в DOM (была удалена), выводится сообщение об ошибке: "Эта вершина была удалена из соответствующей части XML пользователя)".

Новые Enums:

msoCustomXMLDataNodeType представляет типы доступных вершин XML, msoCustomXMLNodeAttribute представляет вершину атрибута XML. msoCustomXMLNodeCData представляет вершину CDATA. msoCustomXMLNodeComment представляет вершину комментария XML. msoCustomXMLNodeDocument представляет документ XML (/) вершину. msoCustomXMLNodeElement представляет вершину элемента XML. msoCustomXMLNodeProcessingInstruction представляет вершину инструкции обработки XML. msoCustomXMLNodeText представляет текстовую вершину.

ReplaceChild (Child as CustomXMLNode, Name as String, [Namespace as String], [NodeType as String], [NodeValue as String]) as CustomXMLNode

Параметры: Child: объект CustomXMLNode, который представляет дочернюю вершину контекстной вершины, которая должен быть удалена. Если эта вершина не является дочерней для контекстной вершины, выводится сообщение об ошибке: "Эта вершина не может быть удалена, поскольку она не является дочерней для текущего элемента". Name: значение String, которое представляет базовое название элемента, добавляемого к XML DOM. Namespace: необязательное значение String, которое представляет собой пространство имен элементов, добавляемых в XML DOM. Требуется добавлять вершины типа msoXMLNodeElement или msoXMLNodeAttribute, другие игнорируются. NodeType: необязательный тип msoXMLNodeType, который определяет тип создаваемой вершины. Если он не указан, предполагается, что он представляет собой msoXMLNodeElement. Node Value: не обязательное значение String, которое используется для установки значения вершины для вершин, которые обеспечивают возможность текста. Если вершина не обеспечивает возможность текста, этот параметр игнорируется.

Удаляет упомянутую дочернюю вершину (и ее поддерево) из потока и заменяет ее вершиной, указанной в том же местоположении. Если результат удаления приводит к недействительной структуре (и схема принуждения включена), выводится сообщение об ошибке: "Эта операция не может быть выполнена, поскольку она могла бы привести к структурно недействительному DOM".

XMLNamespace: объект, представляющий одиночное уникальное пространство имен в Schema Library.

AttachToCustomXMLPart (CustomXMLPart as Variant) as Void

Параметры: CustomXMLPart: Variant, который может быть либо объектом CustomXMLPart для требуемого потока, или индексом этого потока в подборке CustomXMLParts.

Прикрепляют схему для этого пространства имен XML для заданной CustomXMLPart.

XMLSchemaReference: объект, представляющий одиночное уникальное пространство имен, к которому обращаются в текущем документе,

Delete() as Void: Удаляет пространство имен, а также все элементы в этом пространстве имен из CustomXMLPart. Однако в этом случае хранилище данных может отклонить эту операцию, поскольку принудительное выполнение структурной схемы включено, и удаление этих элементов приведет к структурно недействительному DOM. В этом случае выводится сообщение об ошибке: "Эта операция не может быть выполнена, поскольку включена схема принудительного выполнения, в связи с тем, что полученный поток был бы структурно недействительным".

Add (Name as String, Namespace as String, [Parent as CustomXMLNode], [NextSibling as CustomXMLDataNode], [NodeType as msoXMLNodeType], [NodeValue as String]) as CustomXMLNode

Параметры: Name: значение String, которое представляет базовое название элемента, добавляемого к XML DOM. Namespace: необязательное значение String, которое представляет пространство имен элемента, который добавляют к XML DOM. Требуется добавлять вершины типов msoXMLNodeElement или msoXMLNodeAttribute, другие игнорируются. Parent: не обязательный CustomXMLNode, представляющий вершину, под которой должна быть добавлена данная вершина. Если его отзывают, подборка (коллекция) CustomXMLNodes возвращается по свойству Attributes и затем предполагается, что он представляет собой родительскую вершину для атрибутов. Если его вызывают в любом другом случае, тогда этот параметр указывает или возвращает ошибку: "Вы должны указать родительскую вершину для добавления этой вершины в Ваш документ". NextSibling: не обязательный CustomXMLNode, представляющий вершину, который должен стать следующей одноуровневой вершиной для новой вершины. Если она не указана, эту вершину добавляют в конце дочерней вершины для родительской вершины. Игнорируется для добавления типа msoXMLNodeAttribute. Если NextSibling не является дочерней или родительской вершиной, возвращается сообщение об ошибке: "Эта вершина не может быть добавлена, поскольку следующая одноуровневая вершина не является дочерней или родительской вершиной". NodeType: не обязательный msoXMLNodeType, который определяет тип создаваемой вершины. Если он не указан, предполагается, что он представляет собой msoXMLNodeElement, если только не будет отозвано свойство Attributes, тогда предполагается, что он представляет собой msoXMLNodeAttribute. NodeValue: не обязательное значение String, которое используется для установки значения вершины для вершин, которые обеспечивают возможность текста. Если вершина не обеспечивает возможность текста, этот параметр игнорируется.

Общий метод добавления XML вершины к элементу хранилища данных. Если его объект, возвращаемый свойством Attributes, отзывают из CustomXMLNodes, тогда Parent имеет значение, принятое по умолчанию для родительской вершины, и NodeType имеет значение, принятое по умолчанию для msoXMLNodeAttribute. Во всех других случаях требуется Parent, и NodeType устанавливается по умолчанию в значение msoXMLNodeElement. Если полученное в результате добавление будет структурно недействительным (и схема принудительного выполнения включена), выводится сообщение об ошибке: "Эта операция не может быть выполнена, пока схема принудительного выполнения включена, поскольку она могла бы привести к структурно недействительному потоку данных". Если пространство имен не содержится в подборке ссылок схемы, возникает ошибка и выводится сообщение: "Чтобы добавить этот элемент, Вы должны вначале прикрепить его схему к потоку данных".

CustomDataXMLSchemaReferences(): Подборка, представляющая все уникальные пространства имен, идентифицированные в CustomXMLPart. Примечание: По умолчанию его заполняют записями для каждого пространства имен, декларированного в файле XML.

Add([NamespaceURI as String], [Alias as String], [FileName as String], [InstallForAllUsers as Boolean=False]) as XMLSchemaReference

Параметры: NamespaceURI: значение String, содержащее пространство имен, определенное схемой, для добавления подборки схемы. Alias: значение String, содержащее псевдоним, для записи при добавлении этой схемы в библиотеку схемы. FileName: значение String, содержащее путь к схеме, которая должна быть добавлена к библиотеке схемы. InstallForAllUsers: булево значение, определяющее, следует ли добавлять ключи Schema Library к HKCU (принято по умолчанию) или HKLM

Этот метод добавляет ссылку к схеме. С этой целью добавляют соответствующую декларацию пространства имен к корневому элементу CustomXMLPart, если он уже не определен в файле. Во время открытия все декларируемые пространства имен используются для заполнения этой подборки.

EnforceStructure as Boolean: получает и устанавливает значение Boolean, которое соответствует, следует ли принудительно сохранять структурную действительность хранилища данных по ассоциированной CustomXMLPart, в соответствии с ее схемой. Если пользователь пытается установить это свойство в значение TRUE, в то время как содержание CustomXMLPart является недействительным, возвращается сообщение об ошибке: "принудительное выполнение схемы не может быть включено, пока содержание этого потока данных является структурно недействительным".

Count as Long: Возвращает количество пространств имен, к которым в настоящий момент обращаются в этом CustomXMLPart.

Item (Index as Variant) as XMLSchemaReference

Параметры: Index: значение Variant, которое может быть одним из следующих двух типов: Значение Long, представляющее индекс требуемого CustomDataXMLSchemaReference в подборке; и значение String, представляющее пространство имен требуемого CustomDataXMLSchemaReference в подборке.

Представляет собой принятый по умолчанию элемент объекта CustomDataXMLSchemaReferences и возвращает объект XMLSchemaReference, соответствующий запрашиваемому объекту.

Validate()as Void: Этот метод проверяет весь поток по всем схемам в подборке CustomDataXMLSchemaReferences. Об ошибках сообщают по отдельным вершинам (см. свойство ValidationStatus)/

CustomXMLNode

NodeAfterInsert (NewCustomXMLNode as CustomXMLNode, InUndoRedo as Boolean).

Параметры: NewCustomXMLNode: объект CustomXMLNode, соответствующий вершине, только что добавленному CustomXMLPart. Примечание: Эта вершина может иметь дочернюю вершину (если поддерево было только что добавлено в документ). InUndoRedo: булево значение, возвращающее значение TRUE, если вершина была добавлена как часть действия Undo/Redo пользователем, FALSE в других случаях.

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

NodeBeforeDelete (OldCustomXMLNode as CustomXMLNode, InUndoRedo as Boolean)

Параметры: OldCustomXMLNode: объект CustomXMLNode, соответствующий вершине, который должен быть удален из CustomXMLPart. Примечание: Эта вершина может иметь дочернюю вершину (если поддерево удаляют из документа). InUndoRedo: булево значение, возвращающее TRUE, если вершина была добавлена пользователем как часть действия Undo/Redo, в других случаях FALSE.

Это событие возникает всякий раз, когда вершины XML удаляют из текущего предмета в хранилище данных. Если операция удаления подразумевает поддерево документа XML в CustomXMLPart, это событие возникает один раз для самой верхней изменяемой вершины. Такое событие возникает один раз для каждого изменения, объявляемого в хранилище данных, поэтому побочные эффекты изменения, представленного этим событием, также инициируют событие. Если обработчик события пытается модифицировать что-либо, что могло бы находиться под этой вершиной, возникает ошибка и выводится сообщение об ошибке: "Это изменение не разрешено, поскольку предполагается, что эта вершина будет удалена".

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

1. Считываемый компьютером носитель информации, имеющий выполняемые компьютером инструкции для управления данными, ассоциированными с генерируемыми компьютером документами, посредством этапов, на которых:
сохраняют элементы структурированных данных, которые ассоциированы с документом, в хранилище данных, которое содержится отдельно от документа, причем элементы структурированных данных представлены на расширяемом языке разметки (XML),
форматируют структурированные данные так, что интерфейс прикладного программирования (API) предоставляют для множества приложений, потребляющих данные, для обеспечения возможности программного доступа приложениями, потребляющими данные, к элементам структурированных данных; причем выполнение API обеспечивает возможность доступа к элементам структурированных данных в пределах хранилища данных, когда документ открыт и когда документ закрыт, при этом API, который разрешает программный доступ к элементам структурированных данных приложениями, потребляющими данные, содержит этап, на котором разрешают множеству приложений, потребляющих данные, осуществлять доступ к одному и тому же элементу структурированных данных в один и тот же момент времени,
регистрируют для выполнения уведомления об изменениях посредством приложений, потребляющих данные,
определяют, когда сделано изменение одного из элементов структурированных данных с использованием API; и, когда изменение сделано, уведомляют зарегистрированные приложения, потребляющие данные, об этом изменении;
в ответ на уведомление об изменении ставят в очередь побочное изменение посредством одного из приложений, потребляющих данные, причем это побочное изменение генерируется на основе данных, относящихся к уведомленному изменению,
уведомляют зарегистрированные приложения, потребляющие данные, о побочном изменении.

2. Считываемый компьютером носитель информации по п.1, дополнительно содержащий этап, на котором отменяют изменения, когда одно из зарегистрированных приложений, потребляющих данные, отклоняет это изменение, и передают изменения в хранилище данных, когда каждое из зарегистрированных приложений, потребляющих данные, принимает изменение.

3. Считываемый компьютером носитель информации по п.2, дополнительно содержащий этап, на котором используют API для ассоциирования элемента структурированных данных с файлом схемы XML, который используется для проверки достоверности элемента структурированных данных прежде, чем изменение будет передано в хранилище данных.

4. Считываемый компьютером носитель информации по п.1, в котором API предоставляет функцию регистрации для приема уведомления для уведомления об изменениях в отношении, по меньшей мере, одного из: изменения хранилища данных и изменения одного или более элементов структурированных данных; причем изменение может включать в себя удаление, добавление и модификацию, по меньшей мере, одного из хранилища данных и элемента структурированных данных.

5. Считываемый компьютером носитель информации по п.4, в котором API предоставляет интерфейс для добавления вершины к хранилищу данных; удаления вершины из хранилища данных; и замены вершины в хранилище данных.

6. Считываемый компьютером носитель информации по п.4, в котором API предоставляет интерфейс для заполнения хранилища данных с использованием существующего файла; и заполнения хранилища данных с использованием строки XML.

7. Считываемый компьютером носитель информации по п.4, в котором API предоставляет интерфейс для добавления пространства имен; поиска в пространстве имен; добавления схемы; удаления схемы; и перезагрузки схемы.

8. Считываемый компьютером носитель информации по п.4, в котором API предоставляет интерфейс для добавления потока; удаления потока; добавления поддерева; удаления поддерева; получения следующей одноуровневой вершины для текущей вершины; и получения предыдущей одноуровневой вершины для текущей вершины, получающей тип вершины.

9. Считываемый компьютером носитель информации по п.4, в котором API предоставляет интерфейс для получения значения вершины; и принудительного выполнения структуры.

10. Выполняемый компьютером способ управления данными, ассоциированными с документами, генерируемыми компьютером, содержащий этапы, на которых:
сохраняют элементы структурированных данных, которые ассоциированы с документами, с использованием хранилищ данных; при этом элемент структурированных данных является структурированным в соответствии с расширяемым языком разметки (XML); и
форматируют структурированные данные так, что интерфейс прикладного программирования (API) предоставляется для приложений, потребляющих данные, который обеспечивает программный доступ к документам и к элементам структурированных данных, которые содержатся в хранилищах данных; и
выполняют этот API для доступа к элементам структурированных данных, находящихся в хранилище данных, в то время как документ редактируют и когда документ закрыт, так что структурированные данные связываются с документами и функциями как метаданные, описывающие характеристики документа; и при этом приложение, потребляющее данные, когда оно зарегистрировано, принимает уведомление об изменении, выполненном в хранилище данных,
инициируют изменение в одном из хранилищ данных, используя API,
передают уведомление ко второму зарегистрированному приложению, потребляющему данные, об изменении,
в ответ на уведомление во втором зарегистрированном приложении, потребляющем данные, ставят в очередь побочное изменение,
определяют, когда ответ от второго зарегистрированного приложения, потребляющего данные, является отклонением, и когда ответ есть отклонение, отменяют изменение и побочное изменение,
определяют, когда первое и второе зарегистрированное приложение, потребляющее данные, принимают изменение и побочное изменение, и когда первое и второе зарегистрированное приложение, потребляющее данные, принимают изменение и побочное изменение, необязательно проверяют правильность изменения и побочного изменения, используя схему XML, которая обеспечивается посредством одного из приложений, потребляющих данные, с помощью API,
передают изменение и побочное изменение в одно или более хранилищ данных.

11. Выполняемый компьютером способ по п.10, в котором использование API дополнительно содержит этапы, на которых:
предоставляют интерфейс программирования для получения значения для вершины; добавления вершины; удаления вершины; перемещения вершины;
добавления схемы; удаления схемы; перезагрузки схемы; добавления пространства имен и удаления пространства имен.

12. Система управления данными, ассоциированная с генерируемыми компьютером документами, содержащая:
процессор,
считываемый компьютером носитель, подсоединенный к процессору,
приложения, потребляющие данные, выполненные с возможностью выполнения в процессоре;
хранилище данных документа, которое выполнено с возможностью сохранения документов на считываемом компьютером носителе; и
хранилище данных, соединенное с приложениями, потребляющими данные, выполненное с возможностью сохранения элементов структурированных данных, которые ассоциированы с одним или более документами; причем хранилища данных включают в себя: хранилища данных XML; брокер API, выполненный с возможностью взаимодействия с приложениями, потребляющими данные; хранилище изменения, которое выполнено с возможностью хранения изменений, которые ассоциированы с изменением, которое выполнено в отношении элементов структурированных данных; и хранилище отмены, которое выполнено с возможностью отмены любых изменений, выполненных в результате изменения, которое было выполнено в отношении элементов структурированных данных; при этом брокер API предоставляет интерфейс прикладного программирования (API), который позволяет обеспечить программный доступ к документам и к элементу структурированных данных, которые содержатся в хранилищах данных; и при этом приложение, потребляющее данные, выполнено с возможностью выполнять API, для доступа к элементам структурированных данных в хранилищах данных, как в случае, когда документ открыт, так и в случае, когда документ закрыт, так что API обеспечивает программную связь с приложением, потребляющим данные, для связывания элементов в хранилище данных с документом, и при этом приложение, потребляющее данные, также выполнено с возможностью ставить в очередь побочное изменение, когда элемент в хранилище данных изменен.

13. Система по п.12, в которой хранилище данных дополнительно выполнено с возможностью:
приема изменения данных разметки расширяемого языка разметки (XML), применяемых к элементу структурированных данных;
считывания файла схемы XML, ассоциированного с элементом структурированных данных, на который направлены изменения данных разметки XML;
определения, являются ли данные XML разметки действительными в соответствии со считанным файлом схемы XML; и
запрета изменения данных XML разметки, если изменение данных XML разметки окажется не действительным в соответствии со считанным файлом схемы XML; и передачи изменения в одно или более хранилищ XML, когда изменение данных XML разметки является действительным в соответствии со считанным файлом схемы XML.

14. Система по п.12, в которой каждое из хранилищ данных XML содержит хранилище отмены и хранилище изменения.

15. Система по п.12, в которой API предоставляет интерфейс для добавления вершины к хранилищу данных; удаления вершины из хранилища данных; замены вершины в хранилище данных; и получения значения из хранилища данных.

16. Система по п.15, в которой API предоставляет интерфейс для добавления схемы; удаления схемы; и перезагрузки схемы.



 

Похожие патенты:

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

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

Изобретение относится к моделированию с помощью вычислительной машины параметров состояния (Z) объема стали (13), температура которого подвергается прямому или косвенному воздействию.

Изобретение относится к управлению и оптимизации химической реакции в открытом реакторе пластинчатого типа. .
Изобретение относится к области информационных технологий. .
Изобретение относится к игровой индустрии. .

Изобретение относится к области аппаратов плазменной обработки. .

Изобретение относится к области вычислительной техники, а именно к подвижным комплексам средств управления в частях и подразделениях силовых министерств. .
Изобретение относится к области информационных технологий. .

Изобретение относится к способам формирования сводных таблиц в интерфейсе прикладных программ

Изобретение относится к вычислительной технике, в частности к способу компрессии многомерных данных для хранения, поиска и анализа информации в системе управления базами данных и устройству для его осуществления

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

Изобретение относится к методам для клонирования и управления фрагментами базы данных

Изобретение относится к системам обработки данных в системе планирования ресурсов предприятия

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

Изобретение относится к устройству для поиска информации и оперативной идентификации в цифровых системах связи, в частности в сети передачи данных типа "Internet" стека коммуникационных протоколов TCP/IP

Изобретение относится к цифровой вычислительной технике, а именно к цифровым вычислительным системам для обработки входной информации о характеристиках боевых средств, ее преобразовании, выбора необходимой стратегии, формировании критериев противоборства с выявлением результатов боя, оценки своих потерь и нанесенного противнику ущерба, может быть использовано командным составом Вооруженных Сил в процессе его обучения и переучивания, проведения командно-штабных учений и непосредственно для планирования группового боя (ГБ)
Наверх