RU2371757C2 - Systems and methods of data modelling in storage platform based on subjects - Google Patents

Systems and methods of data modelling in storage platform based on subjects Download PDF

Info

Publication number
RU2371757C2
RU2371757C2 RU2006105208/09A RU2006105208A RU2371757C2 RU 2371757 C2 RU2371757 C2 RU 2371757C2 RU 2006105208/09 A RU2006105208/09 A RU 2006105208/09A RU 2006105208 A RU2006105208 A RU 2006105208A RU 2371757 C2 RU2371757 C2 RU 2371757C2
Authority
RU
Russia
Prior art keywords
item
items
type
links
data
Prior art date
Application number
RU2006105208/09A
Other languages
Russian (ru)
Other versions
RU2006105208A (en
Inventor
Анил К. НОРИ (US)
Анил К. НОРИ
Самит АГАРВАЛ (US)
Самит АГАРВАЛ
Дж. Патрик ТОМПСОН (US)
Дж. Патрик ТОМПСОН
Педро СЕЛИС (US)
Педро СЕЛИС
Дэвид Г. КЭМПБЕЛЛ (US)
Дэвид Г. КЭМПБЕЛЛ
Сонер Ф. ТЕРЕК (US)
Сонер Ф. ТЕРЕК
Ким КАМЕРОН (US)
Ким КАМЕРОН
Уолтер Р. СМИТ (US)
Уолтер Р. СМИТ
Даррен А. ШАКИБ (US)
Даррен А. ШАКИБ
Натаниел Х. БЭЛЛОУ (US)
Натаниел Х. БЭЛЛОУ
Сринивасмуртхи П. АЧАРИЯ (US)
Сринивасмуртхи П. АЧАРИЯ
Балан Сетху РАМАН (US)
Балан Сетху РАМАН
Питер М. СПИРО (US)
Питер М. СПИРО
Original Assignee
Майкрософт Корпорейшн
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Майкрософт Корпорейшн filed Critical Майкрософт Корпорейшн
Priority to RU2006105208/09A priority Critical patent/RU2371757C2/en
Publication of RU2006105208A publication Critical patent/RU2006105208A/en
Application granted granted Critical
Publication of RU2371757C2 publication Critical patent/RU2371757C2/en

Links

Images

Abstract

FIELD: information technologies.
SUBSTANCE: data storage control method consists in arranging data storage containing Subjects, Elements and Connections. Subject is the data unit stored in data storage, and in addition, it contains the above Element and the above Connection. Element is an example of the type containing one or several fields. Connection represents connection between at least two Subjects. In addition, data storage contains Base Scheme which sets the structure for creating and arranging each Subject and sets the fundamental set of properties, and Main Scheme for determining the set of the main types; at that, each type is characterised by at least one main type based on Subject type or Subject sub-type.
EFFECT: invention allows creating a new data storage platform which provides the improved possibility of arranging, searching and combined use of all data types in computer system.
14 cl, 37 dwg

Description

Перекрестная ссылкаCross reference

Настоящая заявка относится к предмету изобретений, описанному в следующих заявках с передачей права на совместное использование: заявка на патент США № (еще не назначен) (реестр поверенного № MSFT-1748), дата подачи которой одинакова с датой подачи настоящей заявки, озаглавленная «SYSTEMS AND METHODS FOR REPRESENTING UNITS OF INFORMATION MANAGEABLE BY A HARDWARE/SOFTWARE INTERFACE SYSTEM BUT INDEPENDENT OF PHYSICAL REPRESENTATION» (Системы и способы представления единиц информации, управляемых аппаратной/программной интерфейсной системой, но независимых от физического представления); заявка на патент США № (еще не назначен) (реестр поверенного № MSFT-1749), дата подачи которой одинакова с датой подачи настоящей заявки, озаглавленная «SYSTEMS AND METHODS FOR SEPARATING UNITS OF INFORMATION MANAGEABLE BY A HARDWARE/SOFTWARE INTERFACE SYSTEM FROM THEIR PHYSICAL ORGANIZATION» (Системы и способы отделения единиц информации, управляемых аппаратной/программной интерфейсной системой, от их физической организации); заявка на патент США № (еще не назначен) (реестр поверенного № MSFT-1750), дата подачи которой одинакова с датой подачи настоящей заявки, озаглавленная «SYSTEMS AND METHODS FOR THE IMPLEMENTATION OF A BASE SCHEMA FOR ORGANIZING UNITS OF INFORMATION MANAGEABLE BY A HARDWARE/SOFTWARE INTERFACE SYSTEM» (Системы и способы реализации базовой схемы для организации единиц информации, управляемых аппаратной/программной интерфейсной системой); заявка на патент США № (еще не назначен) (реестр поверенного № MSFT-1751), дата подачи которой одинакова с датой подачи настоящей заявки, озаглавленная «SYSTEMS AND METHODS FOR THE IMPLEMENTATION OF A CORE SCHEMA FOR PROVIDING A TOP-LEVEL STRUCTURE FOR ORGANIZING UNITS OF INFORMATION MANAGEABLE BY A HARDWARE/SOFTWARE INTERFACE SYSTEM» (Системы и способы реализации основной схемы для обеспечения структуры верхнего уровня для организации единиц информации, управляемых аппаратной/программной интерфейсной системой); заявка на патент США № (еще не назначен) (реестр поверенного № MSFT-1752), дата подачи которой одинакова с датой подачи настоящей заявки, озаглавленная «SYSTEMS AND METHOD FOR REPRESENTING RELATIONSHIPS BETWEEN UNITS OF INFORMATION MANAGEABLE BY A HARDWARE/SOFTWARE INTERFACE SYSTEM» (Системы и способы представления связей между единицами информации, управляемыми аппаратной/программной интерфейсной системой); заявка на патент США № (еще не назначен) (реестр поверенного № MSFT-2733), дата подачи которой одинакова с датой подачи настоящей заявки, озаглавленная «SYSTEMS AND METHODS FOR INTERFACING APPLICATION PROGRAMS WITH AN ITEM-BASED STORAGE PLATFORM» (Системы и способы сопряжения программ приложения с основанной на предметах платформой хранения); и заявка на патент США № (еще не назначен) (реестр поверенного № MSFT-2734), дата подачи которой одинакова с датой подачи настоящей заявки, озаглавленная «STORAGE PLATFORM FOR ORGANIZING, SEARCHING, AND SHARING DATA» (Платформа хранения для организации, поиска и совместного использования данных).This application relates to the subject matter of the inventions described in the following patent transfer applications: US Patent Application No. (not yet assigned) (Attorney Register No. MSFT-1748), the filing date of which is the same as the filing date of this application, entitled “SYSTEMS AND METHODS FOR REPRESENTING UNITS OF INFORMATION MANAGEABLE BY A HARDWARE / SOFTWARE INTERFACE SYSTEM BUT INDEPENDENT OF PHYSICAL REPRESENTATION "(Systems and methods for representing information units controlled by a hardware / software interface system, but independent of physical representation); US Patent Application No. (not yet assigned) (Attorney Register No. MSFT-1749), the filing date of which is the same as the filing date of this application, entitled "SYSTEMS AND METHODS FOR SEPARATING UNITS OF INFORMATION MANAGEABLE BY A HARDWARE / SOFTWARE INTERFACE SYSTEM FROM THEIR PHYSICAL ORGANIZATION ”(Systems and methods for separating information units managed by a hardware / software interface system from their physical organization); US Patent Application No. (not yet assigned) (Attorney Register No. MSFT-1750), the filing date of which is the same as the filing date of this application, entitled "SYSTEMS AND METHODS FOR THE IMPLEMENTATION OF A BASE SCHEMA FOR ORGANIZING UNITS OF INFORMATION MANAGEABLE BY A HARDWARE / SOFTWARE INTERFACE SYSTEM »(Systems and methods for implementing the basic scheme for organizing information units controlled by a hardware / software interface system); US Patent Application No. (not yet assigned) (Attorney Register No. MSFT-1751), the filing date of which is the same as the filing date of this application, entitled "SYSTEMS AND METHODS FOR THE IMPLEMENTATION OF A CORE SCHEMA FOR PROVIDING A TOP-LEVEL STRUCTURE FOR ORGANIZING UNITS OF INFORMATION MANAGEABLE BY A HARDWARE / SOFTWARE INTERFACE SYSTEM »(Systems and methods for implementing the basic scheme to provide a top-level structure for organizing information units controlled by a hardware / software interface system); US Patent Application No. (not yet assigned) (Attorney Register No. MSFT-1752), the filing date of which is the same as the filing date of this application, entitled "SYSTEMS AND METHOD FOR REPRESENTING RELATIONSHIPS BETWEEN UNITS OF INFORMATION MANAGEABLE BY A HARDWARE / SOFTWARE INTERFACE SYSTEM" (Systems and methods for representing relations between units of information controlled by a hardware / software interface system); US Patent Application No. (not yet assigned) (Attorney Register No. MSFT-2733), the filing date of which is the same as the filing date of this application, entitled "SYSTEMS AND METHODS FOR INTERFACING APPLICATION PROGRAMS WITH AN ITEM-BASED STORAGE PLATFORM" (Systems and methods pairing application programs with an object-based storage platform); and US Patent Application No. (not yet assigned) (Attorney Register No. MSFT-2734), the filing date of which is the same as the filing date of this application, entitled "STORAGE PLATFORM FOR ORGANIZING, SEARCHING, AND SHARING DATA" (Storage platform for organizing, searching and data sharing).

Область техники, к которой относится изобретениеFIELD OF THE INVENTION

Настоящее изобретение относится, в основном, к области хранения и извлечения информации и, в частности, к активной платформе хранения для организации, поиска и совместного использования различных типов данных в компьютеризованной системе.The present invention relates mainly to the field of storage and retrieval of information and, in particular, to an active storage platform for organizing, searching and sharing various types of data in a computerized system.

Предшествующий уровень техникиState of the art

Емкость индивидуального диска увеличивалась примерно на семьдесят процентов (70%) в год в течение последнего десятилетия. Закон Мура точно предсказал огромное увеличение мощности центрального процессора (ЦП; CPU), которое произошло за эти годы. Проводные и беспроводные технологии обеспечили широкие возможности подключения и полосу частот. Предполагается, что данная тенденция будет продолжаться, в течение нескольких лет средний портативный компьютер будет обрабатывать примерно один терабайт (Тбайт) памяти и содержать миллионы файлов, и станут обычным явлением накопители емкостью 500 гигабайт (Гбайт).Individual disk capacity has increased by about seventy percent (70%) per year over the past decade. Moore's law accurately predicted the huge increase in central processor power (CPU) that has occurred over the years. Wired and wireless technologies provide ample connectivity and bandwidth. It is assumed that this trend will continue, for several years the average laptop computer will process about one terabyte (TB) of memory and contain millions of files, and 500 gigabyte (GB) drives will become commonplace.

Потребители используют свои компьютеры, главным образом, для установления связи и организации персональной информации, является ли она данными традиционного стиля персональной информационной системы (ПИС; PIM) или мультимедиа, такой как цифровая музыка или фотографии. Значительно увеличились количество цифрового содержимого и возможности хранения необработанных байтов; однако отстали способы, доступные для потребителей, для организации и унификации этих данных. Специалисты в области анализа и обработки информации тратят огромное количество времени на управление и совместное использование информации, и некоторые исследования дают оценку, что специалисты в области анализа и обработки информации тратят 15-25% своего времени на непродуктивную деятельность, относящуюся к информации. Другие исследования дают оценку, что типичный специалист в области анализа и обработки информации тратит примерно 2,5 часа в день на поиск информации.Consumers use their computers primarily to communicate and organize personal information, whether it is traditional style personal information system (PIM) or multimedia data such as digital music or photographs. Significantly increased the number of digital content and the ability to store raw bytes; however, the methods available to consumers for organizing and unifying this data have lagged behind. Information analysis and processing specialists spend a huge amount of time managing and sharing information, and some studies estimate that information analysis and processing specialists spend 15-25% of their time on non-productive activities related to information. Other studies estimate that a typical specialist in the field of information analysis and processing spends about 2.5 hours a day searching for information.

Разработчики и отделы информационных технологий (ИТ; IT) инвестируют значительное количество времени и денег на построение своих собственных хранилищ данных для общих абстракций хранения для представления таких вещей, как люди, места, времена и события. Это не только приводит к дублированию работы, но это также создает области общих данных без механизмов общего поиска или совместного использования этих данных. Только подумайте, сколько адресных книг может существовать сегодня на компьютере, работающем под операционной системой Microsoft Windows. Многие приложения, такие как клиенты электронной почты и программы персональных финансов, сопровождают индивидуальные адресные книги, и существует незначительное совместное использование среди приложений данных адресных книг, которые каждая такая программа индивидуально сопровождает. Следовательно, программа финансов (подобно Microsoft Money) не использует совместно адреса для получателей платежа с адресами, поддерживаемыми в папке контактов электронной почты (подобно папке в Microsoft Outlook). В самом деле, многие пользователи имеют множество устройств и логически должны синхронизировать свои персональные данные между собой и с многочисленными дополнительными источниками, включая от сотовых телефонов до коммерческих служб, таких как служба MSN (Microsoft Support Network) и AOL (America Online); тем не менее, координация совместно используемых документов в значительной степени достигается присоединением документов к сообщениям электронной почты, т.е. вручную и не эффективно.Developers and information technology (IT) departments invest significant amounts of time and money building their own data warehouses for common storage abstractions to represent things like people, places, times and events. This not only leads to duplication of work, but it also creates areas of shared data without mechanisms for sharing or sharing these data. Just think how many address books can exist today on a computer running the Microsoft Windows operating system. Many applications, such as email clients and personal finance programs, accompany individual address books, and there is little sharing among the applications of these address books that each such program individually accompanies. Therefore, the finance program (like Microsoft Money) does not share addresses for payees with the addresses supported in the email contacts folder (like the folder in Microsoft Outlook). In fact, many users have many devices and logically need to synchronize their personal data with each other and with numerous additional sources, including from cell phones to commercial services such as MSN (Microsoft Support Network) and AOL (America Online); however, coordination of shared documents is largely achieved by attaching documents to e-mail messages, i.e. manually and not efficiently.

Одной причиной этого отсутствия координации является то, что традиционные подходы к организации информации в компьютерных системах концентрируются на использовании систем, основанных на папке с файлами и каталоге, («файловые системы») для организации множества файлов в иерархию каталогов папок, основываясь на абстракции физической организации носителя данных, используемой для хранения файлов. Операционной системе Multics, разработанной в 1960-х годах, можно приписать новаторство в использовании файлов, папок и каталогов для управления хранимыми единицами данных на уровне операционной системы. Конкретно, операционная система Multics использовала символические адреса в иерархии файлов (таким образом вводя идею пути к файлу), где физические адреса файлов не были прозрачны для пользователя (приложений и конечных пользователей). Эта файловая система совершенно не касалась формата файла любого индивидуального файла, и связи между ними и между файлами считались несущественными на уровне операционной системы (т.е. за исключением расположения файла в иерархии). С приходом операционной системы Multics хранимые данные были организованы в файлы, папки и каталоги на уровне операционной системы. Эти файлы, в основном, включают в себя саму иерархию файлов («каталог»), реализованную в специальном файле, поддерживаемом файловой системой. Этот каталог, в свою очередь, сопровождает список элементов, соответствующих всем другим файлам в каталоге, и узловое расположение таких файлов в иерархии (упоминаемое в данном описании как папки). Таким был уровень техники в течение примерно сорока лет.One reason for this lack of coordination is that traditional approaches to organizing information in computer systems focus on using systems based on a folder with files and a directory (“file systems”) to organize multiple files into a folder directory hierarchy based on an abstraction of physical organization storage medium used to store files. The Multics operating system, developed in the 1960s, can be credited with being innovative in using files, folders, and directories to manage stored data units at the operating system level. Specifically, the Multics operating system used symbolic addresses in the file hierarchy (thus introducing the idea of a file path), where the physical addresses of the files were not transparent to the user (applications and end users). This file system did not at all concern the file format of any individual file, and the connections between them and between files were considered insignificant at the operating system level (i.e., except for the location of the file in the hierarchy). With the advent of the Multics operating system, stored data was organized into files, folders, and directories at the operating system level. These files mainly include the file hierarchy itself (the “directory”) implemented in a special file supported by the file system. This directory, in turn, accompanies a list of elements corresponding to all other files in the directory, and the nodal location of such files in a hierarchy (referred to as folders in this description). This has been the state of the art for about forty years.

Однако, хотя обеспечивая приемлемое представление информации, постоянно находящейся в физической системе хранения компьютера, файловая система, тем не менее, является абстракцией этой физической системы хранения, и поэтому использование файлов требует некоторого уровня косвенности (интерпретации) между тем, чем манипулирует пользователь (единицы, имеющие контекст, особенности и связи с другими единицами), и тем, что предоставляет операционная система (файлы, папки и каталоги). Следовательно, у пользователя (приложений и/или конечных пользователей) нет выбора, как загружать единицы информации в структуру файловой системы, даже когда это выполнение является неэффективным, несовместимым или иным образом нежелательным. Кроме того, у существующих файловых систем мало сведений о структуре данных, хранимых в индивидуальных файлах, и из-за этого большая часть информации остается заблокированной в файлах, к которым могут обращаться (и они могут быть понятны) только приложения, которые их записали. Следовательно, это отсутствие схематического описания информации и механизмов управления информацией приводит к созданию бункеров данных с малым совместным использованием данных между индивидуальными бункерами. Например, многие пользователи персональных компьютеров (ПК) имеют более пяти отдельных хранилищ, которые содержат информацию о людях, с которыми они взаимодействуют на некотором уровне, например контакты Outlook, получатели онлайновых счетов, адресная книга Windows, получатели платежа Quicken и списки контактных лиц мгновенного обмена сообщениями (МОС; IM), так как организация файлов представляет сложную проблему для этих пользователей ПК. Так как большинство существующих файловых систем используют модельное представление вложенных папок для организации файлов и папок, когда увеличивается количество файлов, объем работ, необходимых для сопровождения схемы организации, которая является гибкой и эффективной, становится совершенно огромным. В таких ситуациях было бы очень полезным иметь множество классификаций одного файла; однако использование жесткого и гибкого связывания в существующих файловых системах является затруднительным и трудным для поддержки.However, while providing an acceptable representation of the information residing in the physical storage system of the computer, the file system is nevertheless an abstraction of this physical storage system, and therefore the use of files requires a certain level of indirectness (interpretation) between what the user manipulates (units, having context, features and relationships with other units), and what the operating system provides (files, folders, and directories). Therefore, the user (applications and / or end users) has no choice how to load units of information into the file system structure, even when this execution is inefficient, incompatible, or otherwise undesirable. In addition, existing file systems have little information about the structure of data stored in individual files, and because of this, most of the information remains locked in files that can only be accessed (and they can be understood) by the applications that recorded them. Therefore, this lack of a schematic description of information and information management mechanisms leads to the creation of data silos with little data sharing between individual silos. For example, many personal computer (PC) users have more than five separate repositories that contain information about the people with whom they interact at some level, for example, Outlook contacts, recipients of online accounts, Windows address book, Quicken payment recipients and instant contact contact lists messaging (MOS; IM), as organizing files is a complex problem for these PC users. Since most existing file systems use the model representation of subfolders to organize files and folders when the number of files increases, the amount of work needed to maintain an organization scheme that is flexible and efficient becomes quite huge. In such situations, it would be very useful to have many classifications of a single file; however, the use of hard and flexible binding in existing file systems is difficult and difficult to maintain.

В прошлом было предпринято несколько неуспешных попыток обращения к недостаткам файловых систем. Некоторые из этих предыдущих попыток включали в себя использование ассоциативной памяти для обеспечения механизма, посредством которого к данным можно было обращаться по содержимому, а не по физическому адресу. Однако эти усилия оказались неуспешными, так как, хотя ассоциативная память оказалась полезной для маломасштабного применения устройствами, такими как кэши и блоки управления памятью, крупномасштабное использование для устройств, таких как физические носители данных, не было все же возможным по многочисленным причинам, и, таким образом, такое решение просто не существует. Были предприняты другие попытки, использующие системы объектно-ориентированных баз данных (ООБД; OODB), но эти попытки, хотя характеризовались определенными характеристиками баз данных и хорошими нефайловыми представлениями, не были эффективными в обработке файловых представлений и не могли повторять быстродействие, эффективность и простоту иерархической структуры, основанной на файлах и папках, на уровне аппаратной/программной интерфейсной системы. Другие усилия, такие как те, которые пытались использовать SmallTalk (и другие модификации), оказались довольно эффективными при оперировании файловыми и нефайловыми представлениями, но в них отсутствовали особенности баз данных, необходимые для эффективной организации и использования связей, которые существуют между различными файлами данных, и, таким образом, была неприемлемой общая эффективность таких систем. Еще другие попытки использования BeOS (и другие исследования таких операционных систем) оказались неподходящими при оперировании нефайловыми представлениями - основное упущение, одинаковое для традиционных файловых систем, несмотря на способность адекватно представлять файлы, в то же время обеспечивать некоторые необходимые особенности баз данных.In the past, several unsuccessful attempts have been made to address file system flaws. Some of these previous attempts included the use of associative memory to provide a mechanism by which data could be accessed by content rather than by physical address. However, these efforts were unsuccessful because, although associative memory was useful for small-scale use by devices, such as caches and memory control units, large-scale use for devices, such as physical storage media, was still not possible for many reasons, and, such therefore, such a solution simply does not exist. Other attempts were made using object-oriented database systems (OOBB; OODB), but these attempts, although characterized by certain database characteristics and good non-file representations, were not effective in processing file representations and could not repeat the speed, efficiency, and simplicity of the hierarchical structure based on files and folders at the hardware / software interface system level. Other efforts, such as those that tried to use SmallTalk (and other modifications), turned out to be quite effective in handling file and non-file representations, but they lacked the database features necessary for the efficient organization and use of the relationships that exist between different data files, and thus the overall effectiveness of such systems was unacceptable. Still other attempts to use BeOS (and other studies of such operating systems) turned out to be inappropriate when operating with non-file representations - the main omission is the same for traditional file systems, despite the ability to adequately represent files, at the same time provide some necessary database features.

Технология баз данных представляет собой другую область техники, в которой существуют подобные сложные проблемы. Например, хотя модель реляционных баз данных имела большой коммерческий успех, в действительности независимые поставщики программного обеспечения (НППО; ISV), в основном, используют малую часть функциональных возможностей, доступных в программных продуктах реляционных баз данных (таких как Microsoft SQL Server). Вместо этого большая часть взаимодействия приложения с таким продуктом происходит в виде простых «gets» и «puts». Хотя существует ряд легко различимых причин для этого, такие как агностические в отношении платформы или базы данных, одной ключевой причиной, которая часто остается незамеченной, является то, что база данных необязательно обеспечивает точную абстракцию, в чем действительно нуждаются главные поставщики бизнес-приложений. Например, хотя реальный мир имеет понятие о «предметах», таких как «потребители» или «заказы» (вместе с внедренными в заказ «предметными позициями» в качестве предметов самих в себе или самих по себе), реляционные базы данных общаются только на языке таблиц и строк. Следовательно, хотя приложению может быть необходимо иметь аспекты совместимости, блокировки, безопасности и/или триггеров на уровне предметов (указав несколько), базы данных, в основном, предоставляют эти особенности только на уровне таблиц/строк. Хотя это может работать хорошо, если каждый предмет отображается на одну строку в некоторой таблице в базе данных, в случае заказа с многочисленными предметными позициями могут быть причины, почему предмет фактически отображается на многочисленные таблицы, и, когда это так, простая система реляционной базы данных совершенно не предоставляет правильных абстракций. Следовательно, приложение должно строить логику поверх базы данных, чтобы обеспечить эти базовые абстракции. Другими словами, базовая реляционная модель не обеспечивает достаточную платформу для хранения данных, на которой легко могут разрабатываться приложения более высокого уровня, так как базовая реляционная модель требует уровня косвенности между приложением и системой хранения, где семантическая структура данных может быть видимой только в приложении в некоторых случаях. Хотя некоторые поставщики баз данных встраивают функциональные возможности более высокого уровня в свои продукты, такие как предоставление объектно-реляционных возможностей, новых организационных моделей и т.п., никто еще не предоставил вид комплексного решения, необходимый там, где действительно комплексное решение представляет собой решение, которое предоставляет обе полезные абстракции модели данных (такие как «Предметы», «Расширения», «Связи» и т.п.) для полезных абстракций доменов (таких как «Личности», «Расположения», «События» и т.д.).Database technology is another area of technology in which there are similar complex problems. For example, although the relational database model has been a great commercial success, in reality independent software vendors (ISVs) mainly use a small fraction of the functionality available in relational database software products (such as Microsoft SQL Server). Instead, most of the application’s interaction with such a product takes the form of simple “gets” and “puts”. Although there are a number of easily distinguishable reasons for this, such as platform or database agnostic, one key reason that often goes unnoticed is that the database does not necessarily provide the exact abstraction that the main business application providers really need. For example, although the real world has a concept of “objects”, such as “consumers” or “orders” (together with “subject items” embedded in the order as objects in themselves or on their own), relational databases communicate only in the language tables and rows. Therefore, although an application may need to have aspects of compatibility, locking, security, and / or triggers at the item level (by specifying several), databases mainly provide these features only at the table / row level. Although this may work well if each item is displayed on a single row in some table in the database, in the case of an order with multiple item items there may be reasons why the item is actually displayed in multiple tables, and when so, a simple relational database system completely does not provide the correct abstractions. Therefore, the application must build logic on top of the database to provide these basic abstractions. In other words, the basic relational model does not provide a sufficient platform for storing data on which higher-level applications can be easily developed, since the basic relational model requires a level of indirection between the application and the storage system, where the semantic data structure can be visible only in some applications cases. Although some database vendors embed higher-level functionality in their products, such as providing object-relational capabilities, new organizational models, etc., no one has yet provided the kind of integrated solution needed where a truly integrated solution is a solution , which provides both useful abstractions of the data model (such as “Items”, “Extensions”, “Links”, etc.) for useful domain abstractions (such as “Persons”, “Locations”, “Events” etc.).

Принимая во внимание вышеупомянутые недостатки в существующем хранении данных и технологиях баз данных, существует потребность в новой платформе хранения, которая обеспечивает улучшенную возможность организации, поиска и совместного использования всех типов данных в компьютерной системе - платформе хранения, которая распространяет и расширяет платформу данных за пределы существующих файловых систем и систем баз данных и которая предназначена быть хранилищем для всех типов данных. Настоящее изобретение удовлетворяет этой потребности.Given the aforementioned deficiencies in existing data storage and database technologies, there is a need for a new storage platform that provides improved organization, retrieval and sharing of all types of data in a computer system - a storage platform that extends and extends the data platform beyond existing file systems and database systems and which is intended to be a repository for all types of data. The present invention satisfies this need.

Сущность изобретенияSUMMARY OF THE INVENTION

Нижеследующее краткое изложение предоставляет обзор различных аспектов изобретения. Оно не предназначено ни для предоставления исчерпывающего описания всех важных аспектов изобретения, ни для определения объема изобретения. Скорее, это краткое изложение предназначено для того, чтобы служить в качестве предисловия к подробному описанию и чертежам, которые следуют за ним.The following summary provides an overview of various aspects of the invention. It is not intended to provide an exhaustive description of all important aspects of the invention, nor to determine the scope of the invention. Rather, this summary is intended to serve as a preface to the detailed description and the drawings that follow.

Настоящее изобретение относится к платформе хранения для организации, поиска и совместного использования данных. Платформа хранения настоящего изобретения распространяет и расширяет принцип хранения данных за пределы существующих файловых систем и систем баз данных и предназначена для того, чтобы быть хранилищем для всех типов данных, включая структурированные, неструктурированные или полуструктурированные данные.The present invention relates to a storage platform for organizing, searching and sharing data. The storage platform of the present invention extends and extends the principle of storing data beyond existing file systems and database systems and is intended to be a repository for all types of data, including structured, unstructured or semi-structured data.

Согласно одному аспекту настоящего изобретения платформа хранения настоящего изобретения содержит хранилище данных, реализованное на процессоре (средстве обработки) базы данных. В различных вариантах осуществления настоящего изобретения процессор базы данных содержит объектно-реляционные расширения. Хранилище данных реализует модель данных, которая поддерживает организацию, поиск, совместное использование, синхронизацию и защиту данных. Конкретные типы данных описываются в схемах, и платформа обеспечивает механизм для расширения набора схем для определения новых типов данных (по существу, подтипы базовых типов предусматриваются схемами). Возможность синхронизации способствует совместному использованию данных среди пользователей или систем. Предусмотрены возможности, аналогичные возможностям файловой системы, которые предоставляют возможность взаимодействия хранилища данных с существующими файловыми системами, но без ограничения таких традиционных файловых систем. Механизм отслеживания изменений предоставляет возможность отслеживать изменения в хранилище данных. Платформа хранения дополнительно содержит набор интерфейсов программ приложений, которые предоставляют приложениям возможность обращаться ко всем вышеупомянутым возможностям платформы хранения и осуществлять доступ к данным, описанным в схемах.According to one aspect of the present invention, the storage platform of the present invention comprises a data warehouse implemented on a database processor (s). In various embodiments of the present invention, the database processor comprises object-relational extensions. The data warehouse implements a data model that supports the organization, search, sharing, synchronization and data protection. Specific data types are described in the schemas, and the platform provides a mechanism for expanding the set of schemas for defining new data types (essentially, subtypes of the base types are provided by the schemas). The ability to synchronize facilitates data sharing among users or systems. Features similar to those of the file system are provided that provide the ability for the data store to interact with existing file systems, but without limiting such traditional file systems. The change tracking mechanism provides the ability to track changes in the data warehouse. The storage platform additionally contains a set of application program interfaces that provide applications with the ability to access all of the above capabilities of the storage platform and access the data described in the diagrams.

Согласно другому аспекту изобретения модель данных, реализуемая хранилищем данных, определяет единицы хранения данных на основе предметов, элементов и связей. Предмет представляет собой единицу данных, хранимую в хранилище данных, и может содержать один или несколько элементов и связей. Элемент представляет собой экземпляр типа, содержащий одно или несколько полей (также упоминаемых в данном описании как свойство). Связь представляет собой связывание между двумя предметами. (Как используется в данном описании, эти и другие конкретные термины могут быть напечатаны заглавными буквами для получения их параллельного значения относительно других терминов, используемых с близким значением; однако нет никакого намерения устанавливать различие между написанным заглавными буквами термином, например «Предмет», и этим же термином, когда он написан не заглавными буквами, например «предмет», и такое различие не должно предполагаться или подразумеваться.)According to another aspect of the invention, a data model implemented by a data warehouse defines data storage units based on objects, elements, and relationships. An item is a unit of data stored in a data warehouse and may contain one or more elements and relationships. An element is an instance of a type containing one or more fields (also referred to as a property in this description). A bond is a bond between two objects. (As used herein, these and other specific terms may be capitalized to get their parallel meaning relative to other terms used with a similar meaning; however, there is no intention to distinguish between a capitalized term such as “Subject” and this the same term when it is not written in capital letters, for example “subject”, and such a difference should not be assumed or implied.)

Согласно другому аспекту изобретения компьютерная система содержит множество Предметов, где каждый Предмет составляет дискретную хранимую единицу информации, которой может манипулировать аппаратная/программная интерфейсная система; множество Папок Предметов, которые составляют организационную структуру для упомянутых Предметов; и аппаратную/программную интерфейсную систему для манипулирования множеством Предметов, и в которой каждый Предмет принадлежит по меньшей мере к одной Папке Предметов и может принадлежать более чем одной Папке Предметов.According to another aspect of the invention, a computer system comprises a plurality of Items, where each Item constitutes a discrete stored unit of information that can be manipulated by a hardware / software interface system; a plurality of Item Folders that make up the organizational structure for said Items; and a hardware / software interface system for manipulating a plurality of Items, and in which each Item belongs to at least one Item Folder and may belong to more than one Item Folder.

Согласно другому аспекту изобретения компьютерная система содержит множество Предметов, где каждый Предмет составляет дискретную единицу информации, которой может манипулировать аппаратная/программная интерфейсная система, и Предмет или некоторые из значений свойств Предмета вычисляются динамически в противоположность выведению из долговременного хранилища. Другими словами, аппаратной/программной интерфейсной системе не требуется, чтобы Предмет хранился, и поддерживаются некоторые операции, такие как возможность перечисления текущего набора Предметов или возможность извлечения Предмета по его идентификатору (который более подробно описывается в разделах, которые описывают интерфейс прикладного программирования, или ИПП (API)), платформы хранения, например Предметом может быть текущее расположение сотового телефона или отсчет температуры датчика температуры.According to another aspect of the invention, a computer system comprises a plurality of Items, where each Item constitutes a discrete unit of information that can be manipulated by a hardware / software interface system, and the Item or some of the property values of the Item are dynamically calculated as opposed to being removed from a long-term storage. In other words, the hardware / software interface system does not require the Item to be stored, and some operations are supported, such as the ability to list the current set of Items or the ability to retrieve the Item by its identifier (which is described in more detail in the sections that describe the application programming interface, or API (API)), storage platforms, for example. The subject may be the current location of the cell phone or the temperature sensor temperature reading.

Согласно другому аспекту изобретения аппаратная/программная интерфейсная система для компьютерной системы, в которой упомянутая аппаратная/программная интерфейсная система манипулирует множеством Предметов, дополнительно содержит Предметы, взаимно соединенные между собой посредством множества Связей, управляемых аппаратной/программной интерфейсной системой. Согласно другому аспекту изобретения аппаратная/программная интерфейсная система для компьютерной системы, в которой упомянутая аппаратная/программная интерфейсная система манипулирует множеством дискретных единиц информации, имеющих свойства, понимаемые упомянутой аппаратной/программной интерфейсной системой. Согласно другому аспекту изобретения аппаратная/программная интерфейсная система для компьютерной системы содержит основную схему для определения набора основных Предметов, которые упомянутая аппаратная/программная интерфейсная система понимает и может непосредственно обрабатывать предварительно определенным и предсказуемым образом. Согласно другому аспекту изобретения описывается способ манипулирования множеством дискретных единиц информации («Предметов») в аппаратной/программной интерфейсной системе для компьютерной системы, причем упомянутый способ содержит взаимное соединение упомянутых Предметов с множеством Связей и управление упомянутыми Связями на уровне аппаратной/программной интерфейсной системы.According to another aspect of the invention, a hardware / software interface system for a computer system in which said hardware / software interface system manipulates a plurality of Items, further comprises Items interconnected by a plurality of Links controlled by the hardware / software interface system. According to another aspect of the invention, a hardware / software interface system for a computer system in which said hardware / software interface system manipulates a plurality of discrete pieces of information having properties understood by said hardware / software interface system. According to another aspect of the invention, a hardware / software interface system for a computer system comprises a basic circuit for determining a set of core Items that the hardware / software interface system understands and can directly process in a predetermined and predictable manner. According to another aspect of the invention, a method is described for manipulating a plurality of discrete information units (“Items”) in a hardware / software interface system for a computer system, said method comprising interconnecting said Items with a plurality of Links and managing said Links at the hardware / software interface system level.

Согласно другому отличительному признаку изобретения ИПП (API) платформы хранения предусматривает классы данных для каждого предмета, расширения предмета и связи, определенных в наборе схем платформы хранения. Кроме того, интерфейс прикладного программирования предусматривает набор классов интегрированной среды, которые определяют общий набор методов поведения для классов данных и которые вместе с классами данных обеспечивают базовую модель программирования для ИПП (API) платформы хранения. Согласно другому отличительному признаку изобретения ИПП (API) платформы хранения предусматривает упрощенную модель запросов, которая дает возможность программистам приложений формировать запросы, основываясь на различных свойствах предметов в хранилище данных, таким образом, позволяет отделить программиста приложения от подробностей языка запросов лежащего в основе процессора (средства обработки) базы данных. Согласно еще другому аспекту ИПП (API) платформы хранения настоящего изобретения ИПП (API) собирает изменения в предмете, выполняемые программой приложения, и затем организует их в корректные обновления, необходимые для процессора базы данных (или любого вида процессора хранения), на котором реализовано хранилище данных. Это позволяет программистам приложения выполнять изменения предмета в памяти, в то же время оставляя сложность обновлений хранилища данных для ИПП (API).According to another feature of the invention, the storage platform API (API) provides data classes for each item, item extensions, and communications defined in the set of storage platform schemas. In addition, the application programming interface provides a set of integrated environment classes that define a common set of behavior methods for data classes and which, together with data classes, provide a basic programming model for the storage platform API. According to another distinguishing feature of the invention, the storage platform API (API) provides a simplified query model that allows application programmers to generate queries based on various properties of items in the data warehouse, thus allowing the application programmer to be separated from the details of the query language of the underlying processor (tools processing) database. According to another aspect of the storage platform API (API) of the present invention, the API (API) collects changes in the subject that are executed by the application program and then organizes them into the correct updates necessary for the database processor (or any kind of storage processor) on which the storage is implemented data. This allows application programmers to make changes to the subject in memory, while at the same time leaving the complexity of updating the data warehouse for the API (API).

Посредством ее общей основы хранения и схематизированных данных платформа хранения настоящего изобретения позволяет выполнять более эффективную разработку приложений для потребителей, специалистов в области анализа и обработки информации и предприятий. Она предлагает мощный и расширяемый интерфейс прикладного программирования, который не только делает доступными возможности, свойственные ее модели данных, но также охватывает и расширяет существующую файловую систему и способы обращения к базам данных.Through its common storage framework and schematized data, the storage platform of the present invention enables more efficient application development for consumers, information analysis and processing professionals, and enterprises. It offers a powerful and extensible application programming interface that not only makes available the capabilities inherent in its data model, but also extends and extends the existing file system and ways to access databases.

Другие отличительные признаки и преимущества изобретения могут стать очевидными из последующего подробного описания изобретения и прилагаемых чертежей.Other features and advantages of the invention may become apparent from the following detailed description of the invention and the accompanying drawings.

Краткое описание чертежейBrief Description of the Drawings

Вышеупомянутое краткое содержание, а также последующее подробное описание изобретения легче понять при чтении совместно с прилагаемыми чертежами. Для целей иллюстрации изобретения на чертежах показаны примерные варианты осуществления различных аспектов изобретения; однако изобретение не ограничивается описанными конкретными способами и средствами. На чертежах:The foregoing summary, as well as the following detailed description of the invention, is easier to read when read in conjunction with the accompanying drawings. For purposes of illustrating the invention, the drawings show exemplary embodiments of various aspects of the invention; however, the invention is not limited to the described specific methods and means. In the drawings:

фиг.1 представляет собой блок-схему, представляющую компьютерную систему, в которую могут быть включены аспекты настоящего изобретения;1 is a block diagram representing a computer system into which aspects of the present invention may be incorporated;

фиг.2 представляет собой блок-схему, иллюстрирующую компьютерную систему, разделенную на три группы компонентов: аппаратный компонент, компонент аппаратной/программной интерфейсной системы и компонент программ приложений;FIG. 2 is a block diagram illustrating a computer system divided into three groups of components: a hardware component, a hardware / software interface system component, and an application program component;

фиг.2А иллюстрирует традиционную иерархическую структуру на основе дерева для файлов, сгруппированных в папки в каталоге в основанной на файлах операционной системе;2A illustrates a traditional tree-based hierarchical structure for files grouped into folders in a directory in a file-based operating system;

фиг.3 представляет собой блок-схему, иллюстрирующую платформу хранения согласно настоящему изобретению;3 is a block diagram illustrating a storage platform according to the present invention;

фиг.4 иллюстрирует структурную связь между Предметами, Папками Предметов и Категориями в различных вариантах осуществления настоящего изобретения;4 illustrates the structural relationship between Items, Item Folders, and Categories in various embodiments of the present invention;

фиг.5А представляет собой блок-схему, иллюстрирующую структуру Предмета;5A is a block diagram illustrating the structure of an Item;

фиг.5В представляет собой блок-схему, иллюстрирующую составные типы свойств Предмета по фиг.5А;5B is a block diagram illustrating composite types of properties of the Item of FIG. 5A;

фиг.5С представляет собой блок-схему, иллюстрирующую Предмет «Location», в котором дополнительно описываются (явно перечисляются) его составные типы;5C is a block diagram illustrating an “Location” Item, which further describes (explicitly lists) its composite types;

фиг.6А иллюстрирует Предмет в качестве подтипа Предмета, определяемого в Базовой Схеме;figa illustrates an Item as a subtype of an Item defined in the Base Scheme;

фиг.6В представляет собой блок-схему, иллюстрирующую подтип Item по фиг.6А, в котором его унаследованные типы явно перечисляются (в дополнение к ее непосредственным свойствам);figv is a block diagram illustrating the subtype Item of figa, in which its inherited types are explicitly listed (in addition to its immediate properties);

фиг.7 представляет собой блок-схему, иллюстрирующую Базовую Схему, включающую в себя ее два типа класса верхнего уровня, Item и PropertyBase, и дополнительные типы Базовой Схемы, выведенные из них;7 is a block diagram illustrating a Base Scheme, including its two types of top-level class, Item and PropertyBase, and additional types of the Base Schema derived from them;

фиг.8А представляет собой блок-схему, иллюстрирующую Предметы в Основной Схеме;FIG. 8A is a block diagram illustrating Items in a Main Scheme; FIG.

фиг.8В представляет собой блок-схему, иллюстрирующую типы свойств в Основной Схеме;FIG. 8B is a block diagram illustrating property types in the Main Scheme; FIG.

фиг.9 представляет собой блок-схему, иллюстрирующую Папку Предметов, Предметы ее членов и взаимно соединяющие Связи между Папкой Предметов и Предметами ее членов;9 is a block diagram illustrating an Item Folder, Items of its members and interconnecting Connections between the Item Folder and Items of its members;

фиг.10 представляет собой блок-схему, иллюстрирующую Категорию (которая, снова, представляет собой сам Предмет), Предметы ее членов и взаимно соединяющие Связи между Категорией и Предметами ее членов;10 is a block diagram illustrating a Category (which, again, represents the Item itself), Items of its members and interconnecting Links between the Category and Items of its members;

фиг.11 представляет собой схему, иллюстрирующую иерархию ссылочного типа модели данных платформы хранения согласно настоящему изобретению;11 is a diagram illustrating a hierarchy of a reference type of a data model of a storage platform according to the present invention;

фиг.12 представляет собой схему, иллюстрирующую, как классифицируются связи согласно варианту осуществления настоящего изобретения;12 is a diagram illustrating how communications are classified according to an embodiment of the present invention;

фиг.13 представляет собой схему, иллюстрирующую механизм уведомления согласно варианту осуществления настоящего изобретения;13 is a diagram illustrating a notification mechanism according to an embodiment of the present invention;

фиг.14 представляет собой схему, иллюстрирующую пример, в котором две транзакции обе вставляют новую запись в одно и то же В-дерево;14 is a diagram illustrating an example in which two transactions both insert a new record in the same B tree;

фиг.15 иллюстрирует процесс обнаружения изменения данных согласно варианту осуществления настоящего изобретения;15 illustrates a data change detection process according to an embodiment of the present invention;

фиг.16 иллюстрирует примерное дерево каталогов;Fig illustrates an exemplary directory tree;

фиг.17 изображает пример, в котором существующая папка основанной на каталогах файловой системы перемещается в хранилище данных платформы хранения согласно аспекту настоящего изобретения;FIG. 17 illustrates an example in which an existing directory-based file system folder is moved to a storage platform data store in accordance with an aspect of the present invention; FIG.

фиг.18 иллюстрирует принцип Папок Включений согласно аспекту настоящего изобретения;Fig. 18 illustrates the principle of Inclusion Folders in accordance with an aspect of the present invention;

фиг.19 иллюстрирует базовую архитектуру ИПП (API) платформы хранения;FIG. 19 illustrates a basic architecture of a storage platform API (API); FIG.

фиг.20 схематически представляет различные компоненты стека ИПП (API) платформы хранения;20 schematically represents various components of an IPP stack (API) of a storage platform;

фиг.21А и 21В представляют собой графические представления примерной схемы Контактов (Предметы и Элементы);21A and 21B are graphical representations of an exemplary Contact scheme (Items and Elements);

фиг.22 иллюстрирует интегрированную среду выполнения (runtime framework) ИПП (API) платформы хранения согласно аспекту настоящего изобретения;FIG. 22 illustrates an integrated runtime framework of a storage platform API in accordance with an aspect of the present invention; FIG.

фиг.23 иллюстрирует исполнение операции FindAll согласно варианту осуществления настоящего изобретения;23 illustrates a design of a FindAll operation according to an embodiment of the present invention;

фиг.24 иллюстрирует процесс, посредством которого классы ИПП (API) платформы хранения генерируются из Схемы платформы хранения согласно аспекту настоящего изобретения;24 illustrates a process by which storage platform APIs are generated from a storage platform diagram in accordance with an aspect of the present invention;

фиг.25 иллюстрирует схему, на которой основан ИПП (API) Файла согласно другому аспекту настоящего изобретения;25 illustrates a diagram on which a File API is based according to another aspect of the present invention;

фиг.26 представляет собой схему, иллюстрирующую формат маски доступа, используемый для целей защиты данных, согласно варианту осуществления настоящего изобретения;26 is a diagram illustrating an access mask format used for data protection purposes according to an embodiment of the present invention;

фиг.27(а), (b) и (с) изображают новую идентично защищенную зону безопасности, вырезаемую из существующей зоны безопасности, согласно варианту осуществления одного аспекта настоящего изобретения;27 (a), (b) and (c) depict a new identically protected security zone cut out from an existing security zone according to an embodiment of one aspect of the present invention;

фиг.28 представляет собой схему, иллюстрирующую принцип представления поиска Предмета, согласно варианту осуществления одного аспекта настоящего изобретения; иFIG. 28 is a diagram illustrating a principle of submitting an item search, according to an embodiment of one aspect of the present invention; FIG. and

фиг.29 представляет собой схему, иллюстрирующую примерную иерархию Предметов, согласно варианту осуществления настоящего изобретения.29 is a diagram illustrating an example hierarchy of Items, according to an embodiment of the present invention.

Подробное описание изобретенияDETAILED DESCRIPTION OF THE INVENTION

СОДЕРЖАНИЕCONTENT

I. ВВЕДЕНИЕI. INTRODUCTION

А. ПРИМЕРНАЯ ВЫЧИСЛИТЕЛЬНАЯ СРЕДАA. EXAMPLE COMPUTER ENVIRONMENT

В. ТРАДИЦИОННОЕ ОСНОВАННОЕ НА ФАЙЛАХ ХРАНЕНИЕB. TRADITIONAL FILE-BASED STORAGE

II. НОВАЯ ПЛАТФОРМА ХРАНЕНИЯ ДЛЯ ОРГАНИЗАЦИИ, ПОИСКА И СОВМЕСТНОГО ИСПОЛЬЗОВАНИЯ ДАННЫХII. NEW STORAGE PLATFORM FOR ORGANIZING, SEARCHING AND JOINT USE OF DATA

А. СЛОВАРЬA. DICTIONARY

В. ОБЗОР ПЛАТФОРМЫ ХРАНЕНИЯB. OVERVIEW OF STORAGE PLATFORM

С. МОДЕЛЬ ДАННЫХC. DATA MODEL

1. Предметы1. Items

2. Идентификация предметов2. Identification of items

а) Ссылки на предметa) References to the subject

(1) ItemIDReference(1) ItemIDReference

(2) ItemPathReference(2) ItemPathReference

b) Иерархия ссылочного типаb) Reference type hierarchy

3. Папки и категории предметов3. Folders and item categories

4. Схемы4. Schemes

а) Базовая схемаa) Basic scheme

b) Основная схемаb) The basic scheme

5. Связи5. Communication

а) Объявление связиa) Communication announcement

b) Связь прикрепленияb) Attachment connection

с) Связи внедренияc) Implementation Relations

d) Связи ссылкиd) Link links

е) Правила и ограниченияe) Rules and restrictions

f) Упорядочение связейf) Ordering links

6. Расширяемость6. Extensibility

а) Расширения предметаa) Extensions of the subject

b) Расширения типов NestedElementb) Type extensions NestedElement

D. ПРОЦЕССОР БАЗЫ ДАННЫХD. DATABASE PROCESSOR

1. Реализация хранилища данных, используя определяемые пользователем типы (ОПТ; UDT)1. Implementation of the data warehouse using user-defined types (OPT; UDT)

2. Отображение предметов2. Display items

3. Отображение расширений3. Display extensions

4. Отображение вложенных элементов4. Display of nested elements

5. Идентификация объектов5. Identification of objects

6. Именование объектов языка структурированных запросов (ЯСЗ; SQL)6. Naming of objects of the structured query language (JSS; SQL)

7. Именование столбцов7. Naming columns

8. Представления поиска8. Search submissions

а) Предметa) subject

(1) Главное представление поиска предметов(1) The main item search view

(2) Типизированные представления поиска предметов(2) Typed item search representations

b) Расширения предметовb) Item extensions

(1) Главное представление поиска расширений(1) Main view of extension search

(2) Типизированные представления поиска расширений(2) Typed Extension Search Views

с) Вложенные элементыc) Nested elements

d) Связиd) Communication

(1) Главное представление поиска связей(1) Top link search view

(2) Представления поиска экземпляров связи(2) Communication instance search submissions

9. Обновления9. Updates

10. Отслеживание изменений и объекты-памятники10. Change tracking and monuments

а) Отслеживание измененийa) Change tracking

(1) Отслеживание изменений в «главных» представлениях поиска(1) Tracking changes to the “main” search views

(2) Отслеживание изменений в «типизированных» представлениях поиска(2) Tracking changes in typed search views

b) Объекты-памятникиb) Monument objects

(1) Объекты-памятники предметов(1) Objects-monuments of objects

(2) Объекты-памятники расширений(2) Extension Monuments

(3) Объект-памятник связей(3) Object-monument of communications

(4) Очистка объектов-памятников(4) Cleaning of monuments

11. Вспомогательный ИПП (API) и функции11. Auxiliary API (API) and functions

а) Функция [System.Storage].GetItema) Function [System.Storage] .GetItem

b) Функция [System.Storage].GetExtensionb) Function [System.Storage] .GetExtension

с) Функция [System.Storage].GetRelationshipc) Function [System.Storage] .GetRelationship

12. Метаданные12. Metadata

а) Метаданные схемы 75a) Schema metadata 75

b) Метаданные экземпляра 75b) Instance metadata 75

Е. ЗАЩИТАE. PROTECTION

1. Обзор1. Overview

2. Подробное описание модели защиты2. Detailed description of the protection model

а) Структура дескриптора защитыa) Security descriptor structure

(1) Формат маски доступа(1) Access mask format

(2) Обобщенные права доступа(2) Generalized access rights

(3) Стандартные права доступа(3) Standard access rights

b) Характерные для предмета праваb) Subject-specific rights

(1) Характерные для объекта права файла и каталога(1) Object-specific file and directory rights

(2) WinFSItemRead(2) WinFSItemRead

(3) WinFSItemReadAttributes 86(3) WinFSItemReadAttributes 86

(4) WinFSItemWriteAttribute(4) WinFSItemWriteAttribute

(5) WinFSItemWrite(5) WinFSItemWrite

(6) WinFSItemAddLink(6) WinFSItemAddLink

(7) WinFSItemDeleteLink(7) WinFSItemDeleteLink

(8) Права на удаление предмета(8) Rights to delete an item

(9) Права на копирование предмета(9) Copying Rights

(10) Права на перемещение предмета(10) Rights to move an item

(11) Права на просмотр политики безопасности на предмет(11) Rights to view security policy for

(12) Права на изменение политики безопасности на предмет(12) Subject to change of security policy

(13) Права, которые не имеют прямого эквивалента(13) Rights that do not have a direct equivalent

3. Реализация3. Implementation

а) Создание нового предмета в контейнереa) Creating a new item in the container

b) Добавление явного списка управления доступом (СУД; ACL) к предметуb) Adding an explicit access control list (ACL) to the subject

с) Добавление связи прикрепления к предметуc) Adding an attachment link to an item

d) Удаление связи прикрепления из предметаd) Removing an attachment link from an item

е) Удаление явного СУД (ACL) из предметаf) Removing an explicit ACL from an item

f) Модифицирование СУД (ACL), ассоциированного с предметомf) Modification of the ACL associated with the subject

F. УВЕДОМЛЕНИЯ И ОТСЛЕЖИВАНИЕ ИЗМЕНЕНИЙF. NOTIFICATIONS AND TRACKING OF CHANGES

1. События изменения хранения1. Storage change events

а) Событияa) Events

b) Наблюдателиb) Observers

2. Механизм отслеживания изменений и генерирования уведомлений2. Change tracking and notification mechanism

а) Отслеживание измененийa) Change tracking

b) Управление временными меткамиb) Time stamp management

с) Обнаружение изменения даты - обнаружение событийc) Date change detection - event detection

G. СИНХРОНИЗАЦИЯG. SYNCHRONIZATION

1. Синхронизация платформы хранения с платформой хранения1. Synchronize the storage platform with the storage platform

а) Приложения управления синхронизациейa) Synchronization management applications

b) Аннотирование схемb) Annotating circuits

с) Конфигурация синхронизацииc) Sync configuration

(1) Папка сообщества - отображения(1) Community Folder - Mappings

(2) Профили(2) Profiles

(3) Расписания(3) Schedules

d) Оперирование конфликтамиd) Conflict handling

(1) Обнаружение конфликтов(1) Conflict Detection

(а) Основанные на сведениях конфликты(a) Information-based conflicts

(b) Основанные на ограничениях конфликты(b) Restriction-based conflicts

(2) Обработка конфликтов(2) Conflict Handling

(а) Автоматическое разрешение конфликтов(a) Automatic conflict resolution

(b) Регистрация конфликтов(b) Conflict Records

(с) Инспектирование и разрешение конфликтов(c) Inspection and resolution of conflicts

(d) Слияние реплик и распространение разрешений конфликтов(d) Merging replicas and distributing conflict resolution

2. Синхронизация с хранилищами данных не платформы хранения2. Synchronization with non-storage platform data warehouses

а) Службы синхронизацииa) Sync services

(1) Перечисление изменений(1) Listing Changes

(2) Применение изменений(2) Application of changes

(3) Разрешение конфликтов(3) Conflict Resolution

b) Реализация адаптераb) adapter implementation

3. Защита3. Protection

4. Управляемость4. Manageability

H. ВОЗМОЖНОСТЬ ВЗАИМОДЕЙСТВИЯ С ТРАДИЦИОННЫМИ ФАЙЛОВЫМИ СИСТЕМАМИH. POSSIBILITY OF INTERACTION WITH TRADITIONAL FILE SYSTEMS

1. Модель для возможности взаимодействия1. A model for interoperability

2. Особенности хранилища данных2. Data Warehouse Features

а) Не томa) Not that

b) Структура хранилищаb) Storage structure

с) Не все файлы мигрируютc) Not all files migrate

d) Доступ пространства имен файловой системы новой технологии (ФСНТ; NTFS) к файлам платформы храненияd) New technology file system namespace (FSNT; NTFS) access to storage platform files

е) Ожидаемые буквы пространства имен/накопителяe) The expected namespace / drive letters

I. ИПП (API) ПЛАТФОРМЫ ХРАНЕНИЯI. STI PLATFORMS (API)

1. Обзор1. Overview

2. Именование и области действия2. Naming and scopes

3. Компоненты ИПП (API) платформы хранения3. Components of the Storage Platform API

4. Классы данных4. Data classes

5. Интегрированная среда выполнения5. Integrated runtime

а) Классы интегрированной среды выполненияa) Integrated Runtime Classes

(1) ItemContext(1) ItemContext

(2) ItemSearcher(2) ItemSearcher

(а) Тип цели(a) Type of target

(b) Фильтры(b) Filters

(с) Подготовка поисков(c) Preparing searches

(d) Варианты поиска(d) Search options

(3) Поток результатов предметов («FindResult»)(3) Stream of item results (“FindResult”)

b) Интегрированная среда выполнения в работеb) Integrated runtime at work

с) Общие шаблоны программированияc) General programming patterns

(1) Открытие и закрытие объектов ItemContext(1) Opening and closing ItemContext objects

(2) Поиск объектов(2) Object Search

(а) Варианты поиска(a) Search options

(b) FindOne и FindOnly(b) FindOne and FindOnly

(с) Краткие формы поиска по ItemContext(c) Short search forms for ItemContext

(d) Поиск по идентификатору (ИД; ID)) или пути(d) Search by identifier (ID; ID)) or path

(е) Шаблон GetSearcher (f) GetSearcher Template

(3) Обновление хранилища(3) Storage update

6. Защита6. Protection

7. Поддержка связей7. Communication support

а) Базовые типы связейa) Basic types of relationships

(1) Класс Relationship(1) Relationship class

(2) Класс ItemReference(2) ItemReference Class

(3) Класс ItemIdReference(3) Class ItemIdReference

(4) Класс ItemPathReference(4) Class ItemPathReference

(5) Структура RelationshipId(5) RelationshipId Structure

(6) Класс VirtualRelationshipCollection(6) VirtualRelationshipCollection class

b) Генерируемые типы связейb) Generated link types

(1) Генерируемые типы связей(1) Generated link types

(2) Класс RelationshipPrototype(2) RelationshipPrototype class

(3) Класс RelationshipPrototypeCollection(3) RelationshipPrototypeCollection Class

с) Поддержка связей в классе Itemc) Support for relations in the class Item

(1) Класс Item(1) Item class

(2) Класс RelationshipCollection(2) RelationshipCollection class

d) Поддержка связей в выражениях поискаd) Support for relationships in search expressions

(1) Прохождение от предметов к связям(1) Passage from items to links

(2) Прохождение от связей к предметам(2) Passage from links to objects

(3) Объединение прохождения связи(3) Combining communications

е) Примеры использования поддержки связейe) Examples of using linking support

(1) Поиск связей(1) Search for links

(2) Навигация от связи к предметам источника и цели(2) Navigation from communication to source and target objects

(3) Навигация от предметов источника к связям(3) Navigation from source items to links

(4) Создание связей (и предметов)(4) Creating links (and items)

(5) Удаление связей (и предметов)(5) Removing links (and items)

8. «Расширение» ИПП (API) платформы хранения8. “Extension” of the storage platform API (API)

а) Методы поведения доменаa) Domain behavior methods

b) Дополнительные методы поведенияb) Additional behaviors

с) Дополнительные методы поведения в качестве поставщиков службc) Additional behaviors as service providers

9. Интегрированная среда периода проектирования9. Integrated design period environment

10. Формализм запроса10. Request formalism

а) Основы фильтровa) Filter Basics

b) Приведение типовb) Type casting

с) Синтаксис фильтраc) Filter syntax

11. Удаленное взаимодействие11. Remote interaction

а) Локальная/удаленная прозрачность в ИПП (API)a) Local / remote transparency in the API (API)

b) Реализация платформой хранения удаленного взаимодействияb) Implementation of the remoting storage platform

с) Доступ к хранилищам не платформы храненияc) Access to non-storage platform storage

d) Связь с распределенной файловой системой (РФС; DFS)d) Communication with a distributed file system (RFU; DFS)

е) Связь с глобальной архитектурой расширяемого языка разметки (ГАР; GXA)/Indigoe) Link to the global architecture of Extensible Markup Language (GAR; GXA) / Indigo

12. Ограничения12. Limitations

13. Совместное использование13. Sharing

а) Представление совместно используемого ресурсаa) Presentation of a shared resource

b) Управление совместно используемыми ресурсамиb) Shared Resource Management

с) Доступ к совместно используемым ресурсамc) Access to shared resources

d) Обнаруживаемостьd) Detectability

14. Семантика Find14. Semantics of Find

15. ИПП (API) контактов платформы хранения15. IPP (API) contacts storage platform

а) Обзор System.Storage.Contacta) System.Storage.Contact Overview

b) Методы поведения доменовb) Domain Behaviors

16. ИПП (API) файла платформы хранения16. IPP (API) of the storage platform file

а) Введениеa) Introduction

(1) Отражение тома ФСНТ (NTFS) в платформе хранения(1) Reflection of the FSST volume (NTFS) in the storage platform

(2) Создание File и Directory в пространстве имен платформы хранения(2) Creating a File and Directory in the storage platform namespace

b) Схема файлаb) File schema

с) Обзор System.Storage.Filesc) System.Storage.Files Overview

d) Примеры кодаd) Code examples

(1) Открытие файла и запись в него(1) Opening a file and writing to it

(2) Использование запросов(2) Using queries

е) Методы поведения доменовe) Domain Behaviors

J. ЗАКЛЮЧЕНИЕJ. CONCLUSION

I. ВВЕДЕНИЕI. INTRODUCTION

Предмет настоящего изобретения описывается со спецификой удовлетворения требований закона. Однако само описание, как предполагается, не ограничивает объем данного патента. Скорее, изобретатели предполагали, что заявленный предмет также может быть осуществлен другими способами, включая различные этапы или комбинации этапов, аналогичные этапам, описанным в данном документе, совместно с другими настоящими или будущими технологиями. Кроме того, хотя термин «этап» может использоваться в данном документе для ассоциации с различными элементами используемых способов, термин не должен интерпретироваться как означающий любой конкретный порядок среди или между различными этапами, описанными в данном документе, исключая и, кроме того, когда явно описывается порядок индивидуальных этапов.The subject of the present invention is described with the specifics of meeting the requirements of the law. However, the description itself is not intended to limit the scope of this patent. Rather, the inventors have suggested that the claimed subject matter can also be carried out in other ways, including various steps or combinations of steps, similar to the steps described herein, together with other present or future technologies. Furthermore, although the term “step” may be used herein to associate with various elements of the methods used, the term should not be interpreted as meaning any particular order among or between the various steps described herein, except and moreover, when explicitly described order of individual steps.

А. ПРИМЕРНАЯ ВЫЧИСЛИТЕЛЬНАЯ СРЕДАA. EXAMPLE COMPUTER ENVIRONMENT

Многочисленные варианты осуществления настоящего изобретения могут исполняться на компьютере. Фиг.1 и последующее обсуждение предназначены для того, чтобы предоставить краткое общее описание подходящей вычислительной среды, в которой может быть реализовано изобретение. Хотя это и не требуется, различные аспекты изобретения могут описываться в общем контексте исполняемых компьютером инструкций, таких как программные модули, исполняемые компьютером, таким как клиентская рабочая станция или сервер. В общих чертах, программные модули включают в себя подпрограммы, программы, объекты, компоненты, структуры данных и т.п., которые выполняют конкретные задачи или реализуют конкретные абстрактные типы данных. Кроме того, изобретение может быть осуществлено на практике с другими конфигурациями компьютерной системы, включая карманные устройства, мультипроцессорные системы, микропроцессорную или программируемую бытовую электронику, сетевые ПК, мини-компьютеры, мэйнфреймы и т.п. Изобретение также может быть осуществлено на практике в распределенных вычислительных средах, где задачи выполняются удаленными устройствами обработки, которые связываются по сети связи. В распределенной вычислительной среде программные модули могут располагаться как на локальных, так и на удаленных устройствах хранения.Numerous embodiments of the present invention may be executed on a computer. Figure 1 and the following discussion are intended to provide a brief, general description of a suitable computing environment in which the invention may be implemented. Although not required, various aspects of the invention may be described in the general context of computer-executable instructions, such as program modules, being executed by a computer, such as a client workstation or server. In general terms, program modules include routines, programs, objects, components, data structures, and the like that perform particular tasks or implement particular abstract data types. In addition, the invention can be practiced with other computer system configurations, including handheld devices, multiprocessor systems, microprocessor or programmable consumer electronics, network PCs, mini-computers, mainframes, and the like. The invention can also be practiced in distributed computing environments where tasks are performed by remote processing devices that communicate over a communications network. In a distributed computing environment, program modules can be located on both local and remote storage devices.

Как показано на фиг.1, примерная вычислительная система общего назначения включает в себя обычный персональный компьютер 20 или аналогичный, включающий в себя процессор 21, системную память 22 и системную шину 23, которая соединяет различные компоненты системы, включая системную память с процессором 21. Системная шина 23 может быть любого из нескольких типов шинных структур, включая шину памяти или контроллер памяти, периферийную шину и локальную шину, используя любую из множества шинных архитектур. Системная память включает в себя постоянное запоминающее устройство (ПЗУ) 24 и оперативное запоминающее устройство (ОЗУ) 25. Базовая система 26 ввода-вывода (БСВВ (BIOS); BIOS), содержащая базовые подпрограммы, которые способствуют переносу информации между элементами в персональном компьютере 20, например, во время запуска, хранится в ПЗУ 24. Персональный компьютер 20 дополнительно может включать в себя накопитель 27 на жестком диске для считывания и записи на жесткий диск (не показан), накопитель 28 на магнитных дисках для считывания или записи на съемный магнитный диск 29 и накопитель 30 на оптических дисках для считывания или записи на съемный оптический диск 31, такой как компакт-диск или другой оптический носитель. Накопитель 27 на жестком диске, накопитель 28 на магнитных дисках и накопитель 30 на оптических дисках подключаются к системной шине 23 при помощи интерфейса 32 накопителя на жестком диске, интерфейса 33 накопителя на магнитных дисках и интерфейса 34 накопителя на оптических дисках соответственно. Накопители и связанные с ними считываемые компьютером носители обеспечивают энергонезависимое хранение считываемых компьютером инструкций, структур данных, программных модулей и других данных для персонального компьютера 20. Хотя примерная среда, описываемая в данном документе, использует жесткий диск, съемный магнитный диск 29 и съемный оптический диск 31, для специалиста в данной области техники должно быть понятно, что в примерной операционной среде также могут использоваться другие типы считываемых компьютером носителей, которые могут хранить данные, к которым может обращаться компьютер, такие как магнитные кассеты, карты флэш-памяти, цифровые видеодиски, картриджи Бернулли, оперативные запоминающие устройства (ОЗУ), постоянные запоминающие устройства (ПЗУ) и т.п. Аналогично, примерная среда также может включать в себя многие типы устройств мониторинга, такие как датчики температуры и системы безопасности или пожарной сигнализации, и другие источники информации.As shown in FIG. 1, an exemplary general-purpose computing system includes a conventional personal computer 20 or the like, including a processor 21, a system memory 22, and a system bus 23 that connects various components of the system, including the system memory to the processor 21. System bus 23 may be any of several types of bus structures, including a memory bus or memory controller, a peripheral bus, and a local bus using any of a variety of bus architectures. System memory includes read-only memory (ROM) 24 and random access memory (RAM) 25. Basic input / output system 26 (BSVV (BIOS); BIOS) containing basic routines that facilitate the transfer of information between elements in a personal computer 20 for example, during startup, it is stored in ROM 24. The personal computer 20 may further include a hard disk drive 27 for reading and writing to a hard disk (not shown), magnetic disk drive 28 for reading or writing to a magnetic disk 29 and an optical disk drive 30 for reading or writing to a removable optical disk 31, such as a compact disk or other optical medium. The hard disk drive 27, the magnetic disk drive 28, and the optical disk drive 30 are connected to the system bus 23 via the hard disk drive interface 32, the magnetic disk drive interface 33, and the optical disk drive interface 34, respectively. Drives and related computer-readable media provide non-volatile storage of computer-readable instructions, data structures, program modules and other data for personal computer 20. Although the sample environment described herein uses a hard disk, removable magnetic disk 29, and removable optical disk 31 , it will be understood by one skilled in the art that other types of computer-readable media that can also be used in an exemplary operating environment They can store data that can be accessed by a computer, such as magnetic tapes, flash memory cards, digital video disks, Bernoulli cartridges, random access memory (RAM), read-only memory (ROM), etc. Similarly, an example environment may also include many types of monitoring devices, such as temperature sensors and security systems or fire alarms, and other information sources.

Ряд программных модулей может храниться на жестком диске, магнитном диске 29, оптическом диске 31, в ПЗУ 24 или ОЗУ 25, включая операционную систему 35, одну или несколько программ 36 приложений, другие программные модули 37 и программные данные 38. Пользователь может вводить команды и информацию в персональный компьютер 20 при помощи устройств ввода, таких как клавиатура 40 и указательное устройство 42. Другие устройства ввода (не показаны) могут включать в себя микрофон, джойстик, игровой планшет, антенну спутниковой связи, сканер или т.п. Эти и другие устройства ввода часто соединяются с процессором 21 при помощи интерфейса 46 последовательного порта, который соединен с системной шиной, но могут соединяться при помощи других интерфейсов, таких как параллельный порт, игровой порт или универсальная последовательная шина (УПШ; USB). Монитор 47 или устройство отображения другого типа также подключается к системной шине 23 при помощи интерфейса, такого как видеоадаптер 48. В дополнение к монитору 47 персональные компьютеры обычно включают в себя другие периферийные устройства вывода (не показаны), такие как громкоговорители и принтеры. Примерная система по фиг.1 также включает в себя хост-адаптер 55, шину 56 интерфейса малых вычислительных систем (ИМВС; SCSI) и внешнее устройство 62 хранения, подключенное к шине 56 ИМВС (SCSI).A number of program modules may be stored on a hard disk, magnetic disk 29, optical disk 31, in ROM 24 or RAM 25, including an operating system 35, one or more application programs 36, other program modules 37, and program data 38. A user may enter commands and information to the personal computer 20 using input devices such as a keyboard 40 and pointing device 42. Other input devices (not shown) may include a microphone, joystick, game pad, satellite dish, scanner, or the like. These and other input devices are often connected to the processor 21 via the serial port interface 46, which is connected to the system bus, but can be connected using other interfaces, such as a parallel port, a game port, or a universal serial bus (USB; USB). A monitor 47 or other type of display device is also connected to the system bus 23 via an interface such as a video adapter 48. In addition to the monitor 47, personal computers typically include other peripheral output devices (not shown), such as speakers and printers. The exemplary system of FIG. 1 also includes a host adapter 55, a small computing system interface (IMSI) bus 56, and an external storage device 62 connected to the IMSI bus 56 (SCSI).

Персональный компьютер 20 может работать в сетевой среде, используя логические соединения с одним или несколькими удаленными компьютерами, такими как удаленный компьютер 49. Удаленным компьютером 49 может быть другой персональный компьютер, сервер, маршрутизатор, сетевой ПК, одноранговое устройство или другой общий узел сети, и он обычно включает в себя многие или все из элементов, описанных выше в отношении персонального компьютера 20, хотя на фиг.1 изображено только запоминающее устройство 50. Логические соединения, изображенные на фиг.1, включают в себя локальную сеть (ЛС; LAN) 51 и глобальную сеть (ГС; WAN) 52. Такие сетевые среды являются общепринятыми в офисах, компьютерных сетях масштаба предприятия, интрасетях и Интернете.The personal computer 20 may operate in a network environment using logical connections with one or more remote computers, such as a remote computer 49. The remote computer 49 may be another personal computer, a server, a router, a network PC, a peer device, or another common network node, and it usually includes many or all of the elements described above with respect to the personal computer 20, although only the storage device 50 is shown in FIG. 1. The logical connections shown in FIG. 1 include yuchayut a local area network (LAN; LAN) 51 and a wide area network (WAN; WAN) 52. Such networking environments are commonplace in offices, enterprise-wide computer networks, intranets and the Internet.

При использовании в сетевой среде ЛС (LAN) персональный компьютер 20 подключается к ЛС (LAN) 51 при помощи сетевого интерфейса или адаптера 53. При использовании в сетевой среде ГС (WAN) персональный компьютер 20 обычно включает в себя модем 54 или другое средство для установления связи по глобальной сети 52, такой как Интернет. Модем 54, который может быть внутренним или внешним, подключается к системной шине 23 при помощи интерфейса 46 последовательного порта. В сетевой среде программные модули, описанные выше в отношении персонального компьютера 20, или его частей, могут храниться в удаленном запоминающем устройстве. Понятно, что показанные сетевые подключения являются примерными, и может использоваться другое средство для установления линии связи между компьютерами.When used in a LAN environment, the personal computer 20 is connected to the LAN 51 using a network interface or adapter 53. When used in a WAN environment, the personal computer 20 typically includes a modem 54 or other means for establishing communications over a global network 52, such as the Internet. The modem 54, which may be internal or external, is connected to the system bus 23 using the serial port interface 46. In a networked environment, program modules described above with respect to personal computer 20, or portions thereof, may be stored in a remote storage device. It is understood that the network connections shown are exemplary, and other means may be used to establish a communication link between computers.

Как изображено на блок-схеме фиг.2, компьютерная система 200 грубо может быть разделена на три группы компонентов: аппаратный компонент 202, компонент 204 аппаратной/программной интерфейсной системы и компонент 206 программ приложений (также упоминаемый как «пользовательский компонент» или «программный компонент» в некоторых контекстах данного описания).As shown in the block diagram of FIG. 2, the computer system 200 can be roughly divided into three groups of components: hardware component 202, hardware / software interface system component 204, and application program component 206 (also referred to as a “user component” or “software component” "In some contexts of this description).

В многочисленных вариантах осуществления компьютерной системы 200 и ссылаясь опять на фиг.1, аппаратный компонент 202 может содержать центральный процессор (ЦП; CPU) 21, память (как ПЗУ 24, так и ОЗУ 25), базовую систему 26 ввода-вывода (БСВВ; BIOS) и различные устройства ввода-вывода (ВВ; I/O), такие как клавиатура 40, мышь 42, монитор 47 и/или принтер (не показан), между прочим. Аппаратный компонент 202 содержит базовую физическую инфраструктуру для компьютерной системы 200.In numerous embodiments of the computer system 200, and again referring to FIG. 1, the hardware component 202 may comprise a central processing unit (CPU; CPU) 21, memory (both ROM 24 and RAM 25), and an I / O base system 26 (BSVV; BIOS) and various input / output devices (BB; I / O), such as keyboard 40, mouse 42, monitor 47 and / or printer (not shown), among other things. Hardware component 202 comprises the underlying physical infrastructure for computer system 200.

Компонент 206 программ приложений содержит различные программы программного обеспечения, но не ограничивается компиляторами, системами баз данных, текстовыми редакторами, программами для бизнеса, видеоиграми и т.п. Программы приложений обеспечивают средство, посредством которого ресурсы компьютера используются для решения проблем, предоставления решений и обработки данных для различных пользователей (машин, других компьютерных систем и/или конечных пользователей).The application program component 206 contains various software programs, but is not limited to compilers, database systems, text editors, business programs, video games, and the like. Application programs provide a means by which computer resources are used to solve problems, provide solutions, and process data for various users (machines, other computer systems, and / or end users).

Компонент 204 аппаратной/программной интерфейсной системы содержит (и в некоторых вариантах осуществления может состоять исключительно из) операционную систему, которая сама содержит, в большинстве случаев, оболочку и ядро. «Операционная система» (ОС; OS) представляет собой специальную программу, которая служит в качестве посредника между программами приложений и аппаратными средствами компьютера. Компонент 204 аппаратной/программной интерфейсной системы также может содержать диспетчер виртуальных машин (ДВМ; VMM), общеязыковую среду выполнения (ОЯСВ; CLR)) или ее функциональный эквивалент, виртуальную Java-машину (ВJМ; JVM) или ее функциональный эквивалент, или другие такие программные компоненты вместо или в дополнение к операционной системе в компьютерной системе. Назначением аппаратной/программной интерфейсной системы является предоставление среды, в которой пользователь может выполнять программы приложений. Цель любой аппаратной/программной интерфейсной системы заключается в том, чтобы сделать компьютерную систему удобной для использования, а также использовать аппаратные средства компьютера эффективным образом.The hardware / software interface system component 204 comprises (and in some embodiments may consist solely of) an operating system that itself contains, in most cases, a shell and a kernel. An “operating system” (OS; OS) is a special program that serves as an intermediary between application programs and computer hardware. Component 204 of the hardware / software interface system may also include a virtual machine manager (DVM; VMM), a common language runtime environment (NLSA; CLR)) or its functional equivalent, a virtual Java machine (BJM; JVM) or its functional equivalent, or other such software components instead of or in addition to the operating system in a computer system. The purpose of a hardware / software interface system is to provide an environment in which a user can execute application programs. The goal of any hardware / software interface system is to make the computer system user-friendly and to use the hardware of the computer in an efficient manner.

Аппаратная/программная интерфейсная система обычно загружается в компьютерную систему при запуске и после этого управляет всеми программами приложений в компьютерной системе. Программы приложений взаимодействуют с аппаратной/программной интерфейсной системой посредством запрашивания служб при помощи интерфейса прикладного программирования (ИПП; API). Некоторые программы приложений предоставляют возможность конечным пользователям взаимодействовать с аппаратной/программной интерфейсной системой при помощи пользовательского интерфейса, такого как командный язык или графический пользовательский интерфейс (ГПИ; GUI).A hardware / software interface system typically loads into a computer system at startup and then manages all application programs in the computer system. Application programs interact with a hardware / software interface system by requesting services using an application programming interface (API; API). Some application programs provide the ability for end users to interact with a hardware / software interface system using a user interface such as a command language or graphical user interface (GUI).

Аппаратная/программная интерфейсная система традиционно выполняет множество служб для приложений. В многозадачной аппаратной/программной интерфейсной системе, где одновременно может выполняться множество программ, аппаратная/программная интерфейсная система определяет, какие приложения должны выполняться в каком порядке и сколько времени должно выделяться каждому приложению перед переключением по очереди на другое приложение. Аппаратная/программная интерфейсная система также управляет совместным использованием внутренней памяти среди множества приложений и оперирует вводом и выводом на и от присоединенных аппаратных устройств, таких как жесткие диски, принтеры и порты удаленного доступа, по коммутируемым линиям. Аппаратная/программная интерфейсная система также посылает сообщения каждому приложению (и в некоторых случаях конечному пользователю), касающиеся состояния операций и любых ошибок, которые могли произойти. Аппаратная/программная интерфейсная система также может разгрузить управление пакетными заданиями (например, печать), так что запускающее приложение освобождается от этой работы и может возобновить другую обработку и/или операции. На компьютерах, которые могут обеспечивать параллельную обработку, аппаратная/программная интерфейсная система также управляет разделением программы, так что она выполняется одновременно на более чем одном процессоре.A hardware / software interface system traditionally provides many services for applications. In a multi-tasking hardware / software interface system, where many programs can be executed simultaneously, the hardware / software interface system determines which applications should be executed in what order and how much time should be allocated to each application before switching in turn to another application. The hardware / software interface system also manages the sharing of internal memory across multiple applications and operates input and output to and from attached hardware devices, such as hard drives, printers, and remote access ports, over dial-up lines. The hardware / software interface system also sends messages to each application (and in some cases to the end user) regarding the status of operations and any errors that may have occurred. A hardware / software interface system can also offload batch job management (such as printing), so that the starting application is freed from this work and can resume other processing and / or operations. On computers that can provide parallel processing, the hardware / software interface system also controls the separation of the program, so that it runs simultaneously on more than one processor.

Оболочка аппаратной/программной интерфейсной системы (упоминаемая в данном описании просто как «оболочка») представляет собой интерактивный интерфейс конечного пользователя к аппаратной/программной интерфейсной системе. (Оболочка также может упоминаться как «интерпретатор команд» или в операционной системе как «оболочка операционной системы».) Оболочка представляет собой внешний уровень аппаратной/программной интерфейсной системы, к которой непосредственно обращаются программы приложений и/или конечные пользователи. В противоположность оболочке ядро представляет собой самый внутренний уровень аппаратной/программной интерфейсной системы, который непосредственно взаимодействует с аппаратными компонентами.A shell of a hardware / software interface system (referred to simply as a “shell” in this description) is an interactive end-user interface to a hardware / software interface system. (A shell can also be referred to as a “command interpreter” or in the operating system as a “shell of an operating system.”) A shell is an external layer of a hardware / software interface system that is directly accessed by application programs and / or end users. In contrast to the shell, the kernel represents the innermost level of a hardware / software interface system that interacts directly with hardware components.

Хотя представляется себе, что многочисленные варианты осуществления настоящего изобретения особенно хорошо подходят к компьютеризованным системам, ничто в данном документе не предполагает ограничение изобретения такими вариантами осуществления. В противоположность этому, как используется в данном описании, термин «компьютерная система», как предполагается, охватывает любые и все устройства, выполненные с возможностью хранения и обработки информации и/или выполненные с возможностью использования хранимой информации для управления методом поведения или исполнением самого устройства, независимо от того, являются ли такие устройства электронными, механическими, логическими или виртуальными по своему характеру.Although it appears that numerous embodiments of the present invention are particularly well suited to computerized systems, nothing in this document is intended to limit the invention to such embodiments. In contrast, as used herein, the term “computer system” is intended to encompass any and all devices configured to store and process information and / or configured to use stored information to control the behavior or execution of the device itself, regardless of whether such devices are electronic, mechanical, logical or virtual in nature.

В. ТРАДИЦИОННОЕ ОСНОВАННОЕ НА ФАЙЛАХ ХРАНЕНИЕB. TRADITIONAL FILE-BASED STORAGE

В большинстве компьютерных систем в настоящее время «файлы» представляют собой единицы хранимой информации, которые могут включать в себя аппаратную/программную интерфейсную систему, а также программы приложений, наборы данных и т.п. Во всех современных аппаратных/программных интерфейсных системах (Windows, Unix, Linux, Mac OS, системах виртуальных машин и т.п.) файлы представляют собой базовые дискретные (хранимые и извлекаемые) единицы информации (например, данные, программы и т.п.), которыми может манипулировать аппаратная/программная интерфейсная система. Группы файлов обычно организуются в «папки». В Microsoft Windows, Macintosh OS и в других аппаратных/программных интерфейсных системах папка представляет собой совокупность файлов, которые могут извлекаться, перемещаться и иным образом подвергаться манипулированию в виде одиночных единиц информации. Эти папки, в свою очередь, организуются в иерархическую структуру на основе дерева, называемую «каталогом» (более подробно описанным в данном документе ниже). В некоторых других аппаратных/программных интерфейсных системах, таких как DOS (дисковая операционная система), z/OS и большинство операционных систем на основе Unix, термины «каталог» и/или «папка» являются взаимозаменяемыми, и ранние компьютерные системы Apple (например, Apple IIe) использовали термин «каталог» (catalog) вместо каталога (directory); однако, как используется в данном описании, все эти термины, как считается, являются синонимами и взаимозаменяемыми и предназначены для того, чтобы дополнительно включать в себя все другие эквивалентные термины и для ссылок на иерархические структуры хранения информации и их компоненты папки и файлы.In most computer systems, “files” are currently units of stored information, which may include a hardware / software interface system, as well as application programs, data sets, etc. In all modern hardware / software interface systems (Windows, Unix, Linux, Mac OS, virtual machine systems, etc.) files are basic discrete (stored and retrieved) units of information (for example, data, programs, etc.). ) that can be manipulated by the hardware / software interface system. File groups are usually organized in “folders”. On Microsoft Windows, Macintosh OS, and other hardware / software interface systems, a folder is a collection of files that can be retrieved, moved, and otherwise manipulated as single pieces of information. These folders, in turn, are organized into a tree-based hierarchical structure called the “directory” (described in more detail later in this document). On some other hardware / software interface systems, such as DOS (disk operating system), z / OS, and most Unix-based operating systems, the terms “directory” and / or “folder” are used interchangeably, and Apple's early computer systems (for example, Apple IIe) used the term catalog instead of a directory; however, as used herein, all of these terms are considered to be synonymous and interchangeable and are intended to further include all other equivalent terms and to refer to hierarchical structures of information storage and their components folders and files.

Традиционно, каталог (известный также как каталог папок) представляет собой иерархическую структуру на основе дерева, в которой файлы группируются в папки, и папки, в свою очередь, упорядочиваются в соответствии с относительными узловыми точками, которые содержат дерево каталогов. Например, как изображено на фиг.2А, базовая папка (или «корневой каталог») 212 основанной на DOS файловой системы может содержать множество папок 214, каждая из которых может дополнительно содержать дополнительные папки (в качестве «подпапок» этой конкретной папки) 216, и каждая из них также может содержать дополнительные папки 218 до бесконечности. Каждая из этих папок может иметь один или несколько файлов 220, хотя на уровне аппаратной/программной интерфейсной системы индивидуальные файлы в папке не имеют ничего общего, за исключением их расположения в древовидной иерархии. Не удивительно, что этот подход организации файлов в иерархии папок косвенно отражает физическую организацию обычного носителя данных, используемого для хранения этих файлов (например, жесткие диски, дискеты, компакт-диски и т.д.).Traditionally, a directory (also known as a folder directory) is a tree-based hierarchical structure in which files are grouped into folders, and folders, in turn, are organized according to relative nodal points that contain the directory tree. For example, as shown in FIG. 2A, the base folder (or “root directory”) 212 of the DOS-based file system may contain many folders 214, each of which may additionally contain additional folders (as “subfolders” of this particular folder) 216, and each of them may also contain additional folders 218 to infinity. Each of these folders can have one or several files 220, although at the level of the hardware / software interface system, the individual files in the folder have nothing in common, except for their location in the tree hierarchy. Not surprisingly, this approach to organizing files in a folder hierarchy indirectly reflects the physical organization of the usual storage medium used to store these files (for example, hard drives, floppy disks, CDs, etc.).

В дополнение к вышесказанному, каждая папка представляет собой контейнер для своих подпапок и своих файлов, т.е. каждая папка владеет своими подпапками и файлами. Например, когда папка удаляется аппаратной/программной интерфейсной системой, подпапки и файлы этой папки также удаляются (которые, в случае каждой подпапки, дополнительно включают в себя свои собственные подпапки и файлы рекурсивно). Аналогично, каждым файлом обычно владеет только одна папка, и, хотя файл может копироваться и копия может располагаться в другой папке, копия файла сама представляет собой особую и отдельную единицу, которая не имеет непосредственной связи с оригиналом (например, изменения в файле оригинала не отражаются в файле копии на уровне аппаратной/программной интерфейсной системы). В этом отношении файлы и папки поэтому являются характерно «физическими» по своей природе, так как папки рассматриваются подобно физическим контейнерам, и файлы рассматриваются как дискретные и отдельные физические элементы внутри этих контейнеров.In addition to the above, each folder is a container for its subfolders and its files, i.e. each folder owns its subfolders and files. For example, when a folder is deleted by the hardware / software interface system, the subfolders and files of that folder are also deleted (which, in the case of each subfolder, additionally include their own subfolders and files recursively). Similarly, only one folder usually owns each file, and although the file can be copied and the copy can be located in another folder, the copy of the file itself is a special and separate unit that does not directly relate to the original (for example, changes to the original file are not reflected in the copy file at the hardware / software interface system level). In this regard, files and folders are therefore characteristically “physical” in nature, since folders are treated like physical containers, and files are treated as discrete and separate physical elements within these containers.

II. НОВАЯ ПЛАТФОРМА ХРАНЕНИЯ ДЛЯ ОРГАНИЗАЦИИ, ПОИСКА И СОВМЕСТНОГО ИСПОЛЬЗОВАНИЯ ДАННЫХII. NEW STORAGE PLATFORM FOR ORGANIZING, SEARCHING AND JOINT USE OF DATA

Настоящее изобретение относится к платформе хранения для организации, поиска и совместного использования данных. Платформа хранения настоящего изобретения распространяет и расширяет платформу данных за пределы типов существующих файловых систем и систем баз данных, описанных выше, и предназначена для того, чтобы быть хранилищем для всех типов данных, включая новый вид данных, названный Предметы.The present invention relates to a storage platform for organizing, searching and sharing data. The storage platform of the present invention extends and extends the data platform beyond the types of existing file systems and database systems described above, and is intended to be a repository for all types of data, including a new kind of data called Items.

А. СЛОВАРЬA. DICTIONARY

Для целей данного описания и формулы изобретения следующие термины имеют следующее значение:For the purposes of this specification and claims, the following terms have the following meanings:

«Предмет» представляет собой единицу хранимой информации, к которой может обращаться аппаратная/программная интерфейсная система, которая в отличие от простого файла является объектом, имеющим базовый набор свойств, которые обычно поддерживаются по всем объектам, раскрываемым конечному пользователю посредством оболочки аппаратной/программной интерфейсной системы. Предметы также имеют свойства и связи, которые обычно поддерживаются по всем типам Предметов, включая особенности, которые дают возможность вводить новые свойства и связи (и более подробно описываемые ниже в данном описании).An “item” is a unit of stored information that can be accessed by a hardware / software interface system, which, unlike a simple file, is an object that has a basic set of properties that are usually supported for all objects disclosed to the end user through the shell of a hardware / software interface system . Items also have properties and relationships that are typically supported across all types of Items, including features that enable the introduction of new properties and relationships (and more fully described later in this description).

«Операционная система» (ОС; OS) представляет собой специальную программу, которая служит в качестве посредника между программами приложений и аппаратными средствами компьютера. Операционная система содержит, в большинстве случаев, оболочку и ядро.An “operating system” (OS; OS) is a special program that serves as an intermediary between application programs and computer hardware. The operating system contains, in most cases, a shell and a kernel.

«Аппаратная/программная интерфейсная система» представляет собой программное обеспечение или комбинацию аппаратных средств и программного обеспечения, которое служит в качестве интерфейса между лежащими в основе аппаратными компонентами компьютерной системы и приложениями, которые исполняются на компьютерной системе. Аппаратная/программная интерфейсная система обычно содержит (и в некоторых вариантах осуществления может состоять исключительно из) операционную систему. Аппаратная/программная интерфейсная система также может содержать диспетчер виртуальных машин (ДВМ; VMM), общеязыковую среду выполнения (ОЯСВ; CLR) или ее функциональный эквивалент, виртуальную Java-машину (BJM; JVM) или ее функциональный эквивалент, или другой такой программный компонент вместо или в дополнение к операционной системе в компьютерной системе. Целью аппаратной/программной интерфейсной системы является обеспечение среды, в которой пользователь может исполнять программы приложений. Цель любой аппаратной/программной интерфейсной системы заключается в том, чтобы сделать компьютерную систему удобной для использования, а также использовать аппаратные средства компьютера эффективным образом.A “hardware / software interface system” is software or a combination of hardware and software that serves as an interface between underlying hardware components of a computer system and applications that run on a computer system. A hardware / software interface system typically comprises (and in some embodiments may consist solely of) an operating system. A hardware / software interface system may also include a virtual machine manager (DVM; VMM), a common language runtime environment (TLLW; CLR) or its functional equivalent, a virtual Java machine (BJM; JVM) or its functional equivalent, or another such software component instead or in addition to the operating system in a computer system. The purpose of a hardware / software interface system is to provide an environment in which a user can execute application programs. The goal of any hardware / software interface system is to make the computer system user-friendly and to use the hardware of the computer in an efficient manner.

В. ОБЗОР ПЛАТФОРМЫ ХРАНЕНИЯB. OVERVIEW OF STORAGE PLATFORM

Ссылаясь на фиг.3, платформа 300 хранения согласно настоящему изобретению содержит хранилище 302 данных, реализованное на процессоре (средстве обработки) 314 базы данных. В одном варианте осуществления процессор базы данных содержит процессор реляционной базы данных с объектно-реляционными расширениями. В одном варианте осуществления процессор 314 реляционной базы данных содержит процессор реляционной базы данных Microsoft SQL Server.Referring to FIG. 3, a storage platform 300 according to the present invention comprises a data store 302 implemented on a database processor (means) 314. In one embodiment, the database processor comprises a relational database processor with object-relational extensions. In one embodiment, the relational database processor 314 comprises a Microsoft SQL Server relational database processor.

Хранилище 302 данных реализует модель 304 данных, которая поддерживает организацию, поиск, совместное использование, синхронизацию и защиту данных. Конкретные типы данных описываются в схемах, таких как схемы 340, и платформа 300 хранения предусматривает инструментальные средства 346 для развертывания этих схем, а также для расширения этих схем, как более подробно описано ниже.Data warehouse 302 implements a data model 304 that supports the organization, search, sharing, synchronization, and data protection. Specific data types are described in schemes, such as schemes 340, and the storage platform 300 provides tools 346 for deploying these schemes, as well as for expanding these schemes, as described in more detail below.

Механизм 306 отслеживания изменений, реализованный в хранилище 302 данных, предусматривает возможность отслеживания изменений в хранилище данных. Хранилище 302 данных также обеспечивает возможности 308 защиты и возможности 310 распространения/устранения распространения, обе из которых более подробно описываются ниже. Хранилище 302 данных также обеспечивает раскрытие набором интерфейсов 312 прикладного программирования возможностей хранилища 302 данных другим компонентам платформы хранения и программам приложений (например, программам 350а, 350b и 350с приложений), которые используют платформу хранения.The change tracking engine 306 implemented in the data warehouse 302 provides for the ability to track changes in the data warehouse. Data storage 302 also provides security capabilities 308 and distribution capabilities / distribution capabilities 310, both of which are described in more detail below. Data storage 302 also enables the application storage interface 302 to expose the capabilities of data storage 302 to other storage platform components and application programs (e.g., application programs 350a, 350b, and 350c) that use the storage platform.

Платформа хранения настоящего изобретения дополнительно содержит интерфейсы 322 прикладного программирования (ИПП; API), которые дают возможность программам приложений, таким как программы 350а, 350b и 350с приложений, обращаться ко всем вышеупомянутым возможностям платформы хранения и обращаться к данным, описанным в схемах. ИПП (API) 322 платформы хранения может использоваться программами приложений в комбинации с другими ИПП (APIs), такими как ИПП (API) 324 связывания и внедрения объектов (СВО) для баз данных (СВОБД; OLEDB) и ИПП (API) 326 Microsoft Windows Win32.The storage platform of the present invention further comprises application programming interfaces (APIs) 322 that enable application programs, such as application programs 350a, 350b, and 350c, to access all of the aforementioned storage platform capabilities and access the data described in the diagrams. The storage platform API 322 can be used by application programs in combination with other APIs, such as Object Linking and Embedding APIs (APIs) 324 for databases (OLEDBs) and Microsoft Windows APIs 326 (API) 326 Win32

Платформа 300 хранения настоящего изобретения может предоставлять множество служб 328 для программ приложений, включая службу 330 синхронизации, которая способствует совместному использованию данных пользователями или системами. Например, служба 330 синхронизации может предоставлять возможность взаимодействия с другими хранилищами 340 данных, имеющими такой же формат, что и у хранилища 302 данных, а также доступа к хранилищам 342 данных, имеющим другие форматы. Платформа 300 хранения также предоставляет возможности файловой системы, которые предоставляют возможности взаимодействия хранилища 302 данных с существующими файловыми системами, такими как файловая система 318 ФСНТ (NTFS) Windows.The storage platform 300 of the present invention can provide a variety of services 328 for application programs, including a synchronization service 330, which facilitates data sharing between users or systems. For example, synchronization service 330 may provide the ability to interact with other data stores 340 having the same format as the data store 302, as well as access to data stores 342 having other formats. Storage platform 300 also provides file system capabilities that interoperate data storage 302 with existing file systems such as Windows NTFS file system 318.

По меньшей мере в некоторых вариантах осуществления платформа 320 хранения также может предоставлять программам приложений дополнительные возможности, позволяющие выполнять воздействие на данные и взаимодействие с другими системами. Эти возможности могут осуществляться в виде дополнительных служб 328, таких как служба 334 Информационного агента и служба 332 уведомления, а также в виде других утилит 336.In at least some embodiments, the storage platform 320 can also provide application programs with additional capabilities that can act on data and interact with other systems. These capabilities can be implemented in the form of additional services 328, such as the Information Agent service 334 and the notification service 332, as well as other utilities 336.

По меньшей мере в некоторых вариантах осуществления платформа хранения реализуется в аппаратной/программной интерфейсной системе компьютерной системы или составляет ее неотъемлемую часть. Например, и без ограничения, платформа хранения настоящего изобретения может реализоваться в, или составляет неотъемлемую часть, операционной системе, диспетчере виртуальных машин (ДВМ; VMM), общеязыковой среде выполнения (ОЯСВ; CLR) или ее функциональном эквиваленте или виртуальной Java-машине (BJM) или ее функциональном эквиваленте.In at least some embodiments, the storage platform is implemented in, or forms an integral part of, the hardware / software interface system of a computer system. For example, and without limitation, the storage platform of the present invention can be implemented in, or forms an integral part of, the operating system, the virtual machine manager (VDM; VMM), the common language runtime environment (NLSA; CLR) or its functional equivalent or the virtual Java machine (BJM ) or its functional equivalent.

Посредством ее общей основы хранения и схематизированных данных платформа хранения настоящего изобретения позволяет осуществлять более эффективную разработку приложений для потребителей, специалистов в области анализа и обработки информации и предприятий. Она предлагает расширяемую и с широкими возможностями площадь программирования, которая не только делает доступными возможности, свойственные ее модели данных, но также охватывает и расширяет существующие способы обращения к файловым системам и базам данных.Through its common storage framework and schematized data, the storage platform of the present invention allows for more efficient application development for consumers, information analysis and processing specialists, and enterprises. It offers an expandable and highly programmable programming area that not only makes available the capabilities inherent in its data model, but also extends and extends existing ways of accessing file systems and databases.

В нижеследующем описании и в различных описаниях фигур платформа 300 хранения настоящего изобретения может упоминаться как «WinFS». Однако использование этого названия для упоминания платформы хранения осуществляется исключительно для удобства описания и никоим образом не предназначено для ограничения.In the following description and various description of the figures, the storage platform 300 of the present invention may be referred to as “WinFS”. However, the use of this name to refer to a storage platform is for convenience only and is not intended to be limiting in any way.

С. МОДЕЛЬ ДАННЫХC. DATA MODEL

Хранилище 302 данных платформы 300 хранения настоящего изобретения реализует модель данных, которая поддерживает организацию, поиск, совместное использование, синхронизацию и защиту данных, которые постоянно находятся в хранилище. В модели данных настоящего изобретения «Предмет» представляет собой фундаментальную единицу информации хранения. Модель данных предусматривает механизм для объявления Предметов и расширений Предметов и для установления связей между Предметами и для организации Предметов в Папки Предметов и в Категории, что более подробно описано ниже.The data store 302 of the storage platform 300 of the present invention implements a data model that supports the organization, retrieval, sharing, synchronization and protection of data that resides in the store. In the data model of the present invention, “Subject” is a fundamental unit of storage information. The data model provides a mechanism for declaring Items and extensions of Items and for establishing links between Items and for organizing Items in Item Folders and Categories, which is described in more detail below.

Модель данных основывается на двух примитивных механизмах, Типы и Связи. Типы представляют собой структуры, которые обеспечивают формат, который управляет формой экземпляра Типа. Формат выражается в виде упорядоченного набора Свойств. Свойство представляет собой имя значения или набора значений данного Типа. Например, тип USPostalAddress может иметь свойства Street, City, Zip, State, в которых Street, City и State являются типа String, и Zip является Типом Int32. Street может иметь много значений (т.е. набор значений), которые дают возможность адресу иметь более одного значения для свойства Street. Система определяет некоторые элементарные типы, которые могут использоваться при построении других типов - они включают в себя String, Binary, Boolean, Int16, Int32, Int64, Single, Double, Byte, DateTime, Decimal и GUID (глобально уникальный идентификатор (ГУИД; GUID)). Свойства Типа могут определяться с использованием любых элементарных типов или (с некоторыми ограничениями, отмеченными ниже) любых сложных типов. Например, мог быть определен Тип Location, который имел Свойства Coordinate и Address, где Свойство Address является Типа USPostalAddress, как описано выше. Свойства также могут быть обязательными и необязательными.The data model is based on two primitive mechanisms, Types and Relations. Types are structures that provide a format that governs the form of an instance of a Type. The format is expressed as an ordered set of Properties. A property is the name of a value or set of values for this Type. For example, a USPostalAddress type may have properties Street, City, Zip, State, in which Street, City, and State are of type String, and Zip is of type Int32. Street can have many values (i.e. a set of values) that enable the address to have more than one value for the Street property. The system defines some elementary types that can be used to build other types - they include String, Binary, Boolean, Int16, Int32, Int64, Single, Double, Byte, DateTime, Decimal and GUID (globally unique identifier (GUID; GUID) ) Type properties can be defined using any elementary types or (with some restrictions noted below) any complex types. For example, a Location Type could be defined that had Coordinate and Address Properties, where the Address Property is of USPostalAddress Type, as described above. Properties can also be required and optional.

Связи могут объявляться и представлять отображение между наборами экземпляров двух типов. Например, может быть Связь, объявленная между Типом Person и Типом Location, названная LivesAt, которая определяет, кто из людей живет по какому местожительству. Связь имеет имя, две конечные точки, а именно конечную точку источника и конечную точку цели. Связи также могут иметь упорядоченный набор свойств. Конечные точки как Источника, так и Цели имеют Имя и Тип. Например, Связь LivesAt имеет Источник, названный Occupant Типа Person, и Цель, названную Dwelling Типа Location, и дополнительно имеет свойства StartDate и EndDate, указывающие период времени, в течение которого житель проживал по местожительства. Следует отметить, что Person может проживать по многочисленным местожительствам во времени, и местожительство может иметь многочисленных жителей, поэтому наиболее вероятным местом размещения информации о StartDate и EndDate является сама связь.Relationships can be declared and represent a mapping between sets of instances of two types. For example, there may be a Link declared between the Person Type and the Location Type, called LivesAt, which determines which people live in which domicile. The relationship has a name, two endpoints, namely the endpoint of the source and the endpoint of the target. Links can also have an ordered set of properties. The endpoints of both the Source and the Goals have a Name and a Type. For example, the LivesAt Link has a Source named Occupant of Type Person and a Target called Dwelling of Type Location, and additionally has StartDate and EndDate properties that indicate the length of time a resident has lived. It should be noted that Person can reside in many places in time, and the place of residence can have many residents, so the most likely place to post information about StartDate and EndDate is the connection itself.

Связи определяют отображение между экземплярами, которые ограничиваются типами, данными в качестве типов конечных точек. Например, связь LivesAt не может быть связью, в которой Automobile является Occupant, так как Automobile не является Person.Relationships define the mapping between instances, which are limited to types given as endpoint types. For example, a LivesAt link cannot be a link in which Automobile is Occupant since Automobile is not Person.

Модель данных действительно позволяет выполнять определение связи подтип-подтип между типами. Связь подтип-подтип, также известная как связь BaseType, определяется таким образом, что, если Тип А является BaseType для Типа В, то должно быть так, что каждый экземпляр В также представляет собой экземпляр А. Другим способом выражения этого является то, что каждый экземпляр, который соответствует В, также должен соответствовать А. Если, например, А имеет свойство Name Типа String, тогда как В имеет свойство Age Типа Int16, то из этого следует, что любой экземпляр В должен иметь как Name, так и Age. Иерархия типов может рассматриваться как дерево с единственным супертипом в корне. Ветви от корня обеспечивают подтипы первого уровня, ветви на этом уровне обеспечивают подтипы второго уровня и т.д. до подтипов самых последних листьев, которые сами не имеют никаких подтипов. Дерево не ограничивается равномерной глубиной, но не может содержать никаких циклов. Данный Тип может иметь нуль или более подтипов и нуль или один супертип. Данный экземпляр может соответствовать самое большее одному типу вместе с супертипами этого типа. Другими словами, для данного экземпляра на любом уровне в дереве экземпляр может соответствовать самое большее одному подтипу на этом уровне.The data model really allows you to define subtype-subtype relationships between types. A subtype-subtype relationship, also known as a BaseType relationship, is defined so that if Type A is a BaseType for Type B, then it should be so that each instance of B is also an instance of A. Another way of expressing this is that each an instance that matches B must also match A. If, for example, A has a Name property of Type String, while B has an Age property of Type Int16, then it follows that any instance of B must have both Name and Age. The type hierarchy can be considered as a tree with a single supertype in the root. Branches from the root provide subtypes of the first level, branches at this level provide subtypes of the second level, etc. to subtypes of the very last leaves, which themselves do not have any subtypes. A tree is not limited to uniform depth, but cannot contain any cycles. This Type may have zero or more subtypes and zero or one supertype. A given instance may correspond to at most one type together with supertypes of that type. In other words, for a given instance at any level in the tree, an instance can correspond to at most one subtype at that level.

Типом, как считается, является Abstract, если экземпляры типа также должны быть экземпляром подтипа типа.The type is considered to be Abstract if the type instances must also be an instance of the type subtype.

1. Предметы1. Items

Предмет представляет собой единицу хранимой информации, которая в отличие от простого файла представляет собой объект, имеющий базовый набор свойств, которые обычно поддерживаются по всем объектам, раскрытым для конечного пользователя или программы приложения посредством платформы хранения. Предметы также имеют свойства и связи, которые обычно поддерживаются по всем типам Предметов, включая особенности, которые дают возможность вводить новые свойства и связи, как описано ниже.An item is a unit of stored information, which, unlike a simple file, is an object that has a basic set of properties that are usually maintained for all objects disclosed to the end user or application program through a storage platform. Items also have properties and relationships that are typically supported across all types of Items, including features that enable you to enter new properties and relationships, as described below.

Предметы представляют собой объекты для общих операций, таких как копирование, удаление, перемещение, открытие, печать, резервирование, восстановление, репликация и т.п. Предметы представляют собой единицы, которые могут храниться и извлекаться, и все виды хранимой информации, которой манипулирует платформа хранения, существуют в виде Предметов, свойств Предметов или Связей между Предметами, каждый из которых описывается более подробно в данном описании ниже.Items are objects for general operations such as copying, deleting, moving, opening, printing, backing up, restoring, replicating, etc. Items are units that can be stored and retrieved, and all types of stored information that the storage platform manipulates exist in the form of Items, the properties of Items or the Relationships between Items, each of which is described in more detail in this description below.

Предметы предназначены для представления реальных и легко понимаемых единиц данных, таких как Контакты, Люди, Службы, Расположения, Документы (всех различных видов) и т.д. Фиг.5А представляет собой блок-схему, иллюстрирующую структуру Предмета. Несоставным именем Предмета является «Location». Составным именем Предмета является «Core.Location», которое указывает, что эта структура Предмета определяется как конкретный тип Предмета в Основной схеме. (Основная схема описывается более подробно в данном описании ниже).Objects are intended to represent real and easily understood data units, such as Contacts, People, Services, Locations, Documents (all different types), etc. 5A is a block diagram illustrating the structure of an Item. The non-integral name of the Item is “Location”. The compound name of the Item is “Core.Location”, which indicates that this structure of the Item is defined as a specific type of Item in the Main Scheme. (The main circuit is described in more detail in this description below).

Предмет Location имеет множество свойств, включая EAddresses, MetropolitanRegion, Neighborhood и PostalAddresses. Конкретный тип свойства для каждого указывается непосредственно за именем свойства и отделяется от имени свойства двоеточием («:»). Справа от имени типа указывается ряд значений, разрешенных для этого типа свойства, между скобками («[]»), в которых звездочка («*») справа от двоеточия («:») обозначает незаданное и/или неограниченное количество («многие»). «1» справа от двоеточия указывает, что может быть самое большое одно значение. Нуль («0») слева от двоеточия указывает, что свойство является необязательным (может быть вообще без значения). «1» слева от двоеточия указывает, что должно быть по меньшей мере одно значение (требуется свойство). Neighborhood и MetropolitanRegion оба представляют собой тип «nvarchar» (или эквивалентный), который является предварительно определенным типом данных или «простым типом» (и обозначается в данном описании отсутствием выделения заглавными буквами). EAddress и PostalAddresses, однако, представляют собой свойства определенных типов или «составных типов» (обозначаемых в данном описании выделением заглавными буквами) типов EAddress и PostalAddress соответственно. Составной тип представляет собой тип, который выводится из одного или нескольких простых типов данных и/или из других составных типов. Составные типы для свойств Предмета также составляют «вложенные элементы», так как подробности составного типа вложены в непосредственный Предмет для определения ее свойств, и информация, относящаяся к этим составным типам, сохраняется с Предметом, который имеет эти свойства (внутри границ Предмета, как описано в данном описании ниже). Эти принципы задания типов хорошо известны и легко понятны для специалиста в данной области техники.Location has many properties, including EAddresses, MetropolitanRegion, Neighborhood, and PostalAddresses. A specific property type for each is indicated immediately after the property name and is separated by a colon (“:”) from the property name. To the right of the type name is a series of values allowed for this type of property, between brackets (“[]”), in which the asterisk (“*”) to the right of the colon (“:”) indicates an undefined and / or unlimited number (“many” ) A “1” to the right of the colon indicates that there may be the largest single value. A zero (“0”) to the left of the colon indicates that the property is optional (it can be without a value at all). A “1” to the left of the colon indicates that there must be at least one value (a property is required). Neighborhood and MetropolitanRegion are both of type “nvarchar” (or equivalent), which is a predefined data type or “simple type” (and is denoted by the absence of capitalization in this description). EAddress and PostalAddresses, however, are properties of certain types or “composite types” (denoted by capitalization in this description) of the types EAddress and PostalAddress, respectively. A composite type is a type that is inferred from one or more simple data types and / or from other composite types. Compound types for Item properties also constitute “nested elements”, since the details of the composite type are embedded in the immediate Item to determine its properties, and information related to these composite types is stored with the Item that has these properties (within the boundaries of the Item, as described in this description below). These typesetting principles are well known and readily understood by those skilled in the art.

Фиг.5В представляет собой блок-схему, иллюстрирующую составные типы свойств PostalAddress и EAddress. Тип свойства PostalAddress определяет, что Предмет типа свойства PostalAddress может, как ожидается, иметь нуль или одно значение City, нуль или одно значение CountryCode, нуль или одно значение MailStop и любое количество (нуль - многие) PostalAddressTypes и т.д. и т.п. Таким образом, этим определяется вид данных для конкретного свойства в Предмете. Тип свойства EAddress определяется аналогичным образом, как показано. Хотя необязательно используемый в данном описании данной заявки, другим путем представления составных типов в Предмете Location является выведение Предмета с индивидуальными свойствами каждого составного типа, перечисленного в нем. Фиг.5С представляет собой блок-схему, иллюстрирующую Предмет Location, в котором дополнительно описываются его составные типы. Однако необходимо понять, что это альтернативное представление Предмета Location на этой фиг.5С предназначено для точно такого же Предмета, изображенного на фиг.5А. Платформа хранения настоящего изобретения также позволяет выполнять задание подтипов, посредством чего один тип свойства может быть подтипом другого (где один тип свойства наследует свойства другого, родительского типа свойства).5B is a block diagram illustrating the composite property types of PostalAddress and EAddress. The PostalAddress property type determines that an Object of the PostalAddress property type can be expected to have zero or one City value, zero or one CountryCode value, zero or one MailStop value, and any number (zero - many) PostalAddressTypes, etc. etc. Thus, this determines the type of data for a particular property in the Item. The type of the EAddress property is defined in the same way as shown. Although not necessarily used in this description of this application, another way of representing the composite types in the Location Item is to derive the Item with the individual properties of each composite type listed in it. 5C is a block diagram illustrating a Location Item, which further describes its composite types. However, it must be understood that this alternative representation of the Location Item in this FIG. 5C is for the exact same Item shown in FIG. 5A. The storage platform of the present invention also allows subtypes to be specified, whereby one type of property can be a subtype of another (where one type of property inherits the properties of another, parent type of the property).

Аналогично, но отличаясь от свойств и их типов свойств, Предметы по сути представляют свои собственные Типы Предметов, которые также могут быть предметом задания подтипов. Другими словами, платформа хранения в нескольких вариантах осуществления настоящего изобретения предоставляет возможность Предмету быть подтипом другого Предмета (посредством чего один Предмет наследует свойства другого, родительского Предмета). Кроме того, для различных вариантов осуществления настоящего изобретения каждый Предмет представляет собой подтип типа Предмета «Item», который является первым и основополагающим типом Предмета, находящимся в Базовой схеме. (Базовая схема также подробно описывается в данном описании ниже.) Фиг.6А иллюстрирует Предмет, Предмет Location в этом Примере, который является подтипом типа Предмета Item находящегося в Базовой схеме. На этом чертеже стрелка указывает, что предмет Location (аналогично всем другим Предметам) является подтипом типа Предмета Item. Тип Предмета Item в качестве основополагающего Предмета, из которого выводятся все другие Предметы, имеет ряд важных свойств, таких как ItemId и различные временные метки, и, таким образом, определяет стандартные свойства всех Предметов в операционной системе. На настоящей фигуре эти свойства типа Предмета Item наследуются Location и, таким образом, становятся свойствами Location.Similarly, but different from properties and their property types, Items essentially represent their own Item Types, which can also be the subject of subtypes. In other words, the storage platform in several embodiments of the present invention enables the Item to be a subtype of another Item (whereby one Item inherits the properties of another, parent Item). In addition, for various embodiments of the present invention, each Item is a subtype of the Item type of the Item, which is the first and fundamental type of Item found in the Base Scheme. (The Basic Scheme is also described in detail in this description below.) FIG. 6A illustrates an Item, a Location Item in this Example, which is a subtype of the type of Item Item located in the Basic scheme. In this drawing, an arrow indicates that the Location item (like all other Items) is a subtype of the Item type. The Item Type of an Item, as the foundational Item from which all other Items are derived, has a number of important properties, such as ItemId and various timestamps, and thus defines the standard properties of all Items in the operating system. In the present figure, these properties of the Item type are inherited by Location and thus become Location properties.

Другим путем представления свойств в Предмете Location, наследуемом из типа Предмета Item, является выведение Location с индивидуальными свойствами каждого типа свойств из родительского Предмета, перечисленного в нем. Фиг.6В представляет собой блок-схему, иллюстрирующую Предмет Location, в котором его наследованные типы описаны в дополнение к его непосредственным свойствам. Необходимо отметить и понять, что этот Предмет представляет собой тот же Предмет, что и изображенный на фиг.5А, хотя на настоящей фигуре Location изображается со всеми своими свойствами, как непосредственными - показанными как на этой фигуре, так и на фиг.5А, так и наследованными - показанными на этой фигуре, но не на фиг.5А (поскольку на фиг.5А эти свойства упоминаются посредством изображения со стрелкой, что Предмет Location является подтипом типа Предмета Item).Another way to represent properties in a Location Item, inherited from the Item Type, is to infer Location with the individual properties of each property type from the parent Item listed in it. 6B is a block diagram illustrating a Location Item in which its inherited types are described in addition to its immediate properties. It should be noted and understood that this Item is the same Item as that depicted in Fig. 5A, although the Location figure is depicted with all its properties, both direct - shown both in this figure and in Fig. 5A, and inherited — shown in this figure, but not in FIG. 5A (since in FIG. 5A, these properties are referenced by the arrow image that the Location Item is a subtype of the Item Type).

Предметы представляют собой автономные объекты; таким образом, если вы удаляете Предмет, все непосредственные и наследованные свойства Предметов также удаляются. Аналогично, при извлечении Предмета, тем, что принимается, является Предмет и все его непосредственные и наследованные свойства (включая информацию, относящуюся к его составным типам свойств). Некоторые варианты осуществления настоящего изобретения могут предоставить возможность запроса поднабора свойств при извлечении конкретного Предмета; однако для многих таких вариантов осуществления по умолчанию Предмет обеспечивается всеми своими непосредственными и наследованными свойствами при извлечении. Кроме того, свойства Предметов также могут быть расширены посредством добавления новых свойств к существующим свойствам этого типа Предмета. Эти «расширения», после этого, представляют собой настоящие свойства Предмета, и подтипы этого типа Предмета могут автоматически включать в себя свойства расширения.Items are autonomous objects; thus, if you delete an Item, all immediate and inherited properties of the Items are also deleted. Similarly, when retrieving an Item, what is accepted is the Item and all its immediate and inherited properties (including information related to its composite property types). Some embodiments of the present invention may provide the ability to request a subset of properties when retrieving a specific Item; however, for many such default embodiments, an Item is provided with all its immediate and inherited properties when retrieved. In addition, the properties of Items can also be expanded by adding new properties to existing properties of this type of Item. These "extensions", after that, are the real properties of the Item, and subtypes of this type of Item can automatically include the properties of the extension.

«Граница» Предмета представлена его свойствами (включая составные типы свойств, расширения и т.п.). Граница Предмета также представляет ограничение операции, выполняемой над Предметом, такой как копирование, удаление, перемещение, создание и т.п. Например, в нескольких вариантах осуществления настоящего изобретения, когда копируется Предмет, также копируется все внутри этой границы Предмета. Для каждого Предмета граница охватывает следующее:The “border” of an Item is represented by its properties (including composite property types, extensions, etc.). An Item Boundary also represents a limitation of an operation performed on an Item, such as copying, deleting, moving, creating, etc. For example, in several embodiments of the present invention, when an Item is copied, everything inside this border of the Item is also copied. For each Item, the boundary covers the following:

- Тип Item Предмета и, если Предмет является подтипом другого Предмета (как в случае с несколькими вариантами осуществления настоящего изобретения, где все Предметы выводятся из единственного Предмета и Типа Item в Базовой схеме), информацию о любом применимом подтипе (т.е. информацию, относящуюся к родительскому типу Item). Если исходный копируемый Предмет представляет собой подтип другого Предмета, копия также может быть подтипом этого же Предмета.- the Item Type of the Item and, if the Item is a subtype of another Item (as is the case with several embodiments of the present invention, where all Items are derived from a single Item and Item Type in the Base Scheme), information about any applicable subtype (i.e. information, referring to the parent type Item). If the original Item being copied is a subtype of another Item, the copy may also be a subtype of the same Item.

- Свойства и расширения составного типа Предмета, если они есть. Если исходный Предмет имеет свойства составных типов (собственные или расширенные), копия также может иметь эти же составные типы.- Properties and extensions of the composite type of the Item, if any. If the original Item has properties of composite types (native or advanced), the copy can also have the same composite types.

- Записи Предмета по «связям владения», т.е. собственный список Предмета того, какими другими Предметами («Предметами цели» или целевыми Предметами) владеет настоящий Предмет («Владеющий Предмет»). Это особенно уместно в отношении Папок Предметов, описываемых более подробно ниже, и правила, указанного ниже, что все Предметы должны принадлежать по меньшей мере одной Папке Предметов. Кроме того, в отношении внедренных предметов, описываемых более подробно ниже, внедренный предмет, как считается, является частью Предмета, в который он внедряется, для операций, таких как копирование, удаление и т.п.- Records of the Subject on “ownership relationships”, i.e. own list of the Subject of which other Items (“Subjects of purpose” or target Subjects) owns this Subject (“Owning Subject”). This is particularly relevant for the Item Folders described in more detail below, and the rule indicated below that all Items must belong to at least one Item Folder. In addition, with respect to embedded items, described in more detail below, the embedded item is considered to be part of the Item in which it is embedded, for operations such as copying, deleting, etc.

2. Идентификация Предметов2. Identification of Items

Предметы однозначно идентифицируются в глобальном пространстве предметов при помощи ItemID. Тип Base.Item определяет поле ItemID типа GUID, которое хранит идентификатор для Предмета. Предмет должен иметь точно один идентификатор в хранилище 302 данных.Items are uniquely identified in the global item space using the ItemID. The Base.Item type defines an ItemID field of type GUID that stores the identifier for the Item. The item must have exactly one identifier in the data store 302.

а) Ссылка на предметa) Link to the subject

Ссылка на предмет представляет собой структуру данных, которая содержит информацию для определения расположения и идентификации Предмета. В модели данных определяется абстрактный тип, названный ItemReference, из которого выводятся все ссылочные типы предмета. Тип ItemReference определяет виртуальный метод, названный Resolve. Метод Resolve разрешает ItemReference и возвращает Item. Этот метод замещается конкретными подтипами ItemReference, которые реализуют функцию, которая извлекает Предмет по данной ссылке. Метод Resolve вызывается как часть ИПП (API) 322 платформы хранения.An item reference is a data structure that contains information for determining the location and identification of an Item. The data model defines an abstract type called ItemReference, from which all reference item types are derived. The ItemReference type defines a virtual method called Resolve. The Resolve method enables an ItemReference and returns an Item. This method is replaced by specific subtypes of ItemReference, which implement the function that retrieves the Item from this link. The Resolve method is called as part of the storage platform API 322.

(1) ItemIDReference(1) ItemIDReference

ItemIDReference представляет собой подтип ItemReference. Он определяет поле Locator и ItemID. Поле Locator именует (т.е. идентифицирует) домен предмета. Оно обрабатывается методом разрешения локатора, который может разрешить значение Локатора для домена предмета. Поле ItemID является типом ItemID.ItemIDReference is a subtype of ItemReference. It defines the Locator field and ItemID. The Locator field names (i.e. identifies) the domain of the item. It is processed by the locator resolution method, which can resolve the Locator value for the subject domain. The ItemID field is an ItemID type.

(2) ItemPathReference(2) ItemPathReference

ItemPathReference представляет собой специализацию ItemReference, которая определяет поле Locator и Path. Поле Locator идентифицирует домен предмета. Оно обрабатывается методом разрешения локатора, который может разрешить значение Locator для домена предмета. Поле Path содержит (относительный) путь в пространстве имен платформы хранения с корнем в домене предмета, предусмотренным посредством Locator.ItemPathReference is a specialization of ItemReference that defines the Locator and Path fields. The Locator field identifies the domain of the item. It is processed by the locator resolution method, which can resolve the Locator value for the subject domain. The Path field contains the (relative) path in the storage platform namespace with the root in the subject domain provided by the Locator.

Этот тип ссылки не может использоваться в операции установки. Ссылка должна, в основном, разрешаться при помощи процесса разрешения пути. Метод Resolve ИПП (API) 322 платформы хранения обеспечивает данную функциональную возможность.This type of link cannot be used in the installation operation. The link should basically be resolved using the path resolution process. The Resolve API API 322 storage platform provides this functionality.

b) Иерархия ссылочного типаb) Reference type hierarchy

Ссылочные формы, описанные выше, представляются посредством иерархии ссылочного типа, изображенной на фиг.11. Дополнительные ссылочные типы, которые наследуются от этих типов, могут определяться в схемах. Они могут использоваться при объявлении связи в качестве типа поля цели.The reference forms described above are represented by the hierarchy of the reference type depicted in FIG. 11. Additional reference types that inherit from these types can be defined in schemas. They can be used when declaring a link as a type of target field.

3. Папки и категории предметов3. Folders and item categories

Как описано более подробно ниже, группы Предметов могут организовываться в специальные Предметы, называемые Папками Предметов (которые не следует путать с папками файлов). В отличие от большинства файловых систем, однако, Предмет может принадлежать более чем одной Папке Предметов, так что, когда происходит обращение к Предмету в одной Папке Предметов и он изменяется, к этому измененному Предмету затем можно обращаться непосредственно из другой папки Предметов. По существу, хотя обращение к Предмету может происходить из различных Папок Предметов, то, к чему, в действительности, происходит обращение, представляет собой, фактически, этот же самый Предмет. Однако Папка Предметов необязательно владеет всеми Предметами ее членов или может просто совместно владеть Предметами вместе с другими папками, так что удаление Папки Предметов необязательно приводит к удалению Предмета. Тем не менее, в нескольких вариантах осуществления настоящего изобретения Предмет должен принадлежать по меньшей мере одной Папке Предметов, так что, если затем удаляется единственная Папка Предметов для конкретного Предмета, для некоторых вариантов осуществления Предмет автоматически удаляется, или в альтернативных вариантах осуществления Предмет автоматически становится членом Папки предметов по умолчанию (например, Папки Предметов «Trash Can», концептуально аналогичной аналогично названным папкам, используемым в различных системах, основанных на файлах и папках).As described in more detail below, groups of Items can be organized into special Items called Item Folders (which should not be confused with file folders). Unlike most file systems, however, an Item can belong to more than one Item Folder, so when an Item is accessed in one Item Folder and it changes, this modified Item can then be accessed directly from another Item folder. Essentially, although a call to an Item can come from different Mailboxes of Items, what is actually being addressed is actually the same Item. However, the Item Folder does not necessarily own all the Items of its members or may simply share the Items with other folders, so deleting the Item Folder does not necessarily delete the Item. However, in several embodiments of the present invention, the Item must belong to at least one Item Folder, so if a single Item Folder is then deleted for a specific Item, for some embodiments, the Item is automatically deleted, or in alternative embodiments, the Item automatically becomes a member Default Item Folders (for example, Trash Can Item Folders, conceptually similar to the named folders used on various systems, based on files and folders).

Как также более подробно описано ниже, Предметы также могут принадлежать Категориям, основанным на общих описанных характеристиках, таких как (а) Тип (или Типы) Item, (b) конкретное непосредственное или наследованное свойство (или свойства) или (с) конкретное значение (или значения), соответствующее свойству Предмета. Например, Предмет, содержащий конкретные свойства для персональной контактной информации, может автоматически принадлежать Категории Contact, и любой Предмет, имеющий свойства контактной информации, будет точно так же автоматически принадлежать этой Категории. Аналогичным образом, любой Предмет, имеющий свойство расположения со значением «New York City», может автоматически принадлежать Категории NewYorkCity.As also described in more detail below, Items can also belong to Categories based on the general characteristics described, such as (a) the Type (or Types) of an Item, (b) a specific immediate or inherited property (or properties) or (c) a specific value ( or values) corresponding to the property of the Item. For example, an Item containing specific properties for personal contact information may automatically belong to the Contact Category, and any Item that has contact information properties will likewise automatically belong to this Category. Similarly, any Item that has a location property with a value of “New York City” can automatically belong to the NewYorkCity Category.

Категории концептуально отличаются от Папок Предметов в том, что, тогда как Папки Предметов могут содержать Предметы, которые не являются взаимосвязанными (т.е. без общих описанных характеристик), каждый Предмет в Категории имеет общий тип, свойство или значение («общность»), которые описаны для этой Категории, и именно эта общность формирует основу для ее связи с другими Предметами в Категории и между ними. Кроме того, тогда как членство Предметов в конкретной Папке не основывается принудительно на каком-либо конкретном аспекте этого Предмета, для некоторых вариантов осуществления все Предметы, имеющие общность, безусловно связанную с Категорией, могут автоматически становиться членом Категории на уровне аппаратной/программной интерфейсной системы. Концептуально, Категории также могут представляться как виртуальные Папки Предметов, членство которых основывается на результатах конкретного запроса (такого как в контексте базы данных), и Предметы, которые удовлетворяют условиям этого запроса (определяемого общностями Категории), таким образом, будут заключать в себе членство Категории.Categories are conceptually different from Item Folders in that, while Item Folders can contain Items that are not interconnected (that is, without common characteristics described), each Item in a Category has a common type, property or value (“commonality”) , which are described for this Category, and it is this community that forms the basis for its connection with other Items in the Category and between them. In addition, while the membership of Items in a particular Folder is not forcibly based on any particular aspect of this Item, for some embodiments, all Items having commonality unconditionally associated with the Category can automatically become a member of the Category at the hardware / software interface system level. Conceptually, Categories can also be represented as virtual Subject Folders whose membership is based on the results of a particular query (such as in the context of the database), and Subjects that satisfy the conditions of this query (defined by the Community of Categories), thus, will enclose the Category membership .

Фиг.4 иллюстрирует структурную связь между Предметами, Папками Предметов и Категориями в различных вариантах осуществления настоящего изобретения. Множество Предметов 402, 404, 406, 408, 410, 412, 414, 416, 418 и 420 являются членами различных Папок 422, 424, 426, 428 и 430 Предметов. Некоторые Предметы могут принадлежать более чем одной Папке Предметов, например, Предмет 402 принадлежит Папкам 422 и 424 Предметов. Некоторые Предметы, например, Предметы 402, 404, 406, 408, 410 и 412 также являются членами одной или нескольких Категорий 432, 434 и 436, тогда как в других случаях, например, Предметы 414, 416, 418 и 420 могут не принадлежать никакой Категории (хотя это, большей частью маловероятно в некоторых вариантах осуществления, где владение любым свойством автоматически означает членство в Категории, и, таким образом, Предмет должен быть совершенно лишен характерных черт, чтобы не быть членом никакой категории в таком варианте осуществления). В противоположность иерархической структуре папок как Категории, так и Папки Предметов имеют структуры, более похожие на ориентированные графы, как показано. В любом случае Предметы, Папки Предметов и Категории все представляют собой Предметы (хотя и различных Типов Item).Figure 4 illustrates the structural relationship between Items, Item Folders, and Categories in various embodiments of the present invention. Many Items 402, 404, 406, 408, 410, 412, 414, 416, 418 and 420 are members of various Folders 422, 424, 426, 428 and 430 Items. Some Items may belong to more than one Item Folder, for example, Item 402 belongs to Item Folders 422 and 424. Some Items, for example, Items 402, 404, 406, 408, 410 and 412 are also members of one or more Categories 432, 434 and 436, while in other cases, for example, Items 414, 416, 418 and 420 may not belong to any Categories (although this is mostly unlikely in some embodiments, where owning any property automatically means membership in the Category, and thus, the Item must be completely devoid of features in order not to be a member of any category in such an embodiment). In contrast to the hierarchical structure of folders, both Categories and Item Folders have structures more similar to oriented graphs, as shown. In any case, Items, Item Folders and Categories are all Items (albeit of different Item Types).

В противоположность файлам, папкам и каталогам Предметы, Папки Предметов и Категории настоящего изобретения не являются характеристически «физическими» по своей сущности, так как они не имеют концептуальных эквивалентов физическим контейнерам, и поэтому Предметы могут существовать в более чем одном таком расположении. Возможность Предметов существовать в более чем одном расположении Папки Предметов, а также организация в Категории обеспечивают улучшенную и расширенную степень манипулирования данными и возможностей структуры хранения на уровне аппаратной/программной интерфейсной системы, больше того, что в настоящее время доступно в данной области техники.In contrast to the files, folders and directories, the Items, Item Folders and Categories of the present invention are not characteristic “physical” in nature, since they do not have conceptual equivalents to physical containers, and therefore Items can exist in more than one such location. The ability of Items to exist in more than one location of the Item Folder, as well as the organization in the Categories, provide an improved and expanded degree of data manipulation and storage structure capabilities at the hardware / software interface system level, more than what is currently available in the art.

4. Схемы4. Schemes

а) Базовая схемаa) Basic scheme

Чтобы обеспечить всеобъемлющую основу для создания и использования Предметов, различные варианты осуществления платформы хранения настоящего изобретения содержат Базовую Схему, которая устанавливает концептуальную структуру для создания и организации Предметов и свойств. Базовая Схема определяет некоторые специальные типы Предметов и свойств и особенности этих специальных основополагающих типов, из которых могут дополнительно выводиться подтипы. Использование этой Базовой Схемы позволяет программисту концептуально отличать Предметы (и их соответствующие типы) от свойств (и их соответствующих типов). Кроме того, Базовая Схема формулирует основополагающий набор свойств, которым все Предметы могут обладать, так как все Предметы (и их соответствующие Типы Item) выводятся из этого основополагающего Предмета в Базовой Схеме (и ее соответствующего Типа Item).In order to provide a comprehensive framework for creating and using Items, various embodiments of the storage platform of the present invention comprise a Basic Scheme that establishes a conceptual framework for creating and organizing Items and properties. The Basic Scheme defines some special types of Objects and properties and features of these special fundamental types from which subtypes can be additionally derived. Using this Basic Scheme allows a programmer to conceptually distinguish Objects (and their respective types) from properties (and their respective types). In addition, the Base Scheme formulates a fundamental set of properties that all Items can possess, since all Items (and their corresponding Item Types) are derived from this fundamental Item in the Base Scheme (and its corresponding Item Type).

Как изображено на фиг.7 и в отношении нескольких вариантов осуществления настоящего изобретения, Базовая Схема определяет три типа верхнего уровня: Item, Extension и PropertyBase. Как показано, тип Item определяется свойствами этого основополагающего типа Предметов «Item». В противоположность этому тип свойства верхнего уровня «PropertyBase» не имеет предварительно определенных свойств и представляет собой просто привязку, из которой выводятся все другие типы свойств и посредством которой связываются между собой все выводимые типы свойств (выводимые обычно из единственного типа свойств). Свойства типа Extension определяют, какой Предмет расширяет расширение, а также идентификацию для отличия одного расширения от другого, так как Предмет может иметь многочисленные расширения.As shown in FIG. 7 and with respect to several embodiments of the present invention, the Basic Scheme defines three types of top level: Item, Extension and PropertyBase. As shown, the type of Item is determined by the properties of this fundamental type of Item. In contrast, the top-level property type “PropertyBase” has no predefined properties and is simply a binding from which all other property types are derived and through which all property types that are inferred (usually derived from a single property type) are linked. Properties of the Extension type determine which Item extends the extension, as well as identification to distinguish one extension from another, since the Item can have multiple extensions.

ItemFolder представляет собой подтип типа Предмета Item, который в дополнение к свойствам, наследуемым от Item, характеризуется Связью для установления связывания с ее членами (если они есть), тогда как и IdentityKey, и Property представляют собой подтипы PropertyBase. CategoryRef, в свою очередь, является подтипом IdentityKey.An ItemFolder is a subtype of the type of an Item, which, in addition to the properties inherited from Item, is characterized by a Link to bind to its members (if any), while both IdentityKey and Property are subtypes of PropertyBase. CategoryRef, in turn, is a subtype of IdentityKey.

b) Основная схемаb) The basic scheme

Различные варианты осуществления платформы хранения настоящего изобретения дополнительно содержат Основную Схему, которая обеспечивает концептуальную основу для структур типа Item верхнего уровня. Фиг.8А представляет собой блок-схему, иллюстрирующую Предметы в Основной Схеме, и фиг.8В представляет собой блок-схему, иллюстрирующую типы свойств в Основной Схеме. Отличие, сделанное между файлами с различными расширениями (*.com, *.exe, *.bat, *.sys и т.д.), и другие такие критерии в системах, основанных на файлах и папках, аналогичны функции Основной Схемы. В основанной на Предметах аппаратной/программной интерфейсной системе Основная Схема определяет набор основных типов Item, которые непосредственно (посредством типа Item) или косвенно (посредством подтипа Item) характеризуют все Предметы в один или несколько типов Item Основной Схемы, которые основанная на Предметах аппаратная/программная интерфейсная система понимает и может непосредственно обрабатывать предварительно определенным и предсказуемым образом. Предварительно определенные типы Item отражают наиболее общие Предметы в основанной на Предметах аппаратной/программной интерфейсной системе, и, таким образом, повышается уровень эффективности посредством основанной на Предметах аппаратной/программной интерфейсной системы, понимающей эти предварительно определенные типы Item, которые содержит Основная Схема.Various embodiments of the storage platform of the present invention further comprise a Main Scheme that provides a conceptual framework for top-level Item structures. Fig. 8A is a block diagram illustrating Objects in the Main Scheme, and Fig. 8B is a block diagram illustrating property types in the Main Scheme. The difference made between files with various extensions (* .com, * .exe, * .bat, * .sys, etc.), and other such criteria in systems based on files and folders, are similar to the functions of the Main Schema. In the Item-based hardware / software interface system, the Main Scheme defines a set of basic Item types that directly (through the Item type) or indirectly (through the Item subtype) characterize all Items in one or more Item types of the Main Scheme that the Item-based hardware / software the interface system understands and can directly process in a predefined and predictable way. The predefined Item types reflect the most common Items in the Item-based hardware / software interface system, and thus, the level of efficiency is enhanced by the Item-based hardware / software interface system that understands these predefined Item types that the Basic Schema contains.

В некоторых вариантах осуществления Основная Схема не является расширяемой, т.е. дополнительные типы Item не могут быть заданы подтипами непосредственно из типа Item в Базовой Схеме, за исключением конкретных предварительно определенных производных типов Item, которые являются частью Основной Схемы. Посредством предотвращения расширений в Основной Схеме (т.е. посредством предотвращения добавления новых Предметов к Основной Схеме) платформа хранения предоставляет полномочия на использование типов Item Основной Схемы, так как каждый последующий тип Item является обязательно подтипом типа Item Основной Схемы. Эта структура позволяет получить приемлемую степень гибкости при определении дополнительных типов Item, в то же время также сохраняя преимущества обладания предварительно определенным набором основных типов Item.In some embodiments, the implementation of the Main Scheme is not extensible, i.e. additional Item types cannot be defined by subtypes directly from the Item type in the Base Scheme, except for specific predefined derived types of Item that are part of the Main Schema. By preventing extensions in the Master Schema (i.e., by preventing the addition of new Items to the Master Schema), the storage platform provides authority to use the Item types of the Master Schema, since each subsequent Item type is necessarily a subtype of the Item type of the Master Schema. This structure allows you to get an acceptable degree of flexibility when defining additional Item types, while also preserving the benefits of having a predefined set of basic Item types.

Для различных вариантов осуществления настоящего изобретения и со ссылкой на фиг.8А, конкретные типы Item, поддерживаемые Основной Схемой, могут включать в себя одно или несколько из следующего:For various embodiments of the present invention and with reference to FIG. 8A, specific Item types supported by the Main Schema may include one or more of the following:

- Категории: Предметы этого Типа Item (и подтипы, выведенные из него) представляют действительные Категории в основанной на Предметах аппаратной/программной интерфейсной системе.- Categories: Items of this Type Item (and subtypes derived from it) represent valid Categories in the Item-based hardware / software interface system.

- Товары: Предметы, которые являются идентифицируемыми ценностно значимыми объектами.- Goods: Items that are identifiable value objects.

- Устройства: Предметы, имеющие логическую структуру, которая поддерживает возможности обработки информации.- Devices: Items that have a logical structure that supports information processing capabilities.

- Документы: Предметы с содержимым, которое не интерпретируется основанной на Предметах аппаратной/программной интерфейсной системой, но вместо этого интерпретируется программой приложения, соответствующей типу документа.- Documents: Items with content that is not interpreted by the Item-based hardware / software interface system, but is instead interpreted by an application program that matches the type of document.

- События: Предметы, которые регистрируют некоторые случаи в среде.- Events: Items that record some cases in the environment.

- Расположения: Предметы, представляющие физические расположения (например, географические расположения).- Locations: Items representing physical locations (e.g., geographic locations).

- Сообщения: Предметы обмена данными между двумя или более принципалами (определенными ниже).- Communications: Items exchanged between two or more principals (defined below).

- Принципалы: Предметы, имеющие по меньшей мере один точно доказуемый идентификатор кроме ItemID (например, идентификация личности, организации, группы, семьи, органа, службы и т.д.).- Principals: Items having at least one identifiable identifiable identifier other than ItemID (for example, identification of an individual, organization, group, family, authority, service, etc.).

- Формулировки: Предметы, имеющие специальную информацию, касающуюся среды, включая, без ограничения, политики, подписки, параметры доступа и т.п.- Wording: Items that have specific information regarding the environment, including, without limitation, policies, subscriptions, access settings, etc.

Аналогично, и со ссылкой на фиг.8В, конкретные типы свойств, поддерживаемые Основной Схемой, могут включать в себя одно или несколько из следующего:Similarly, and with reference to FIG. 8B, specific types of properties supported by the Main Scheme may include one or more of the following:

- Сертификаты (выводимые из основополагающего типа PropertyBase в Базовой Схеме)- Certificates (derived from the underlying PropertyBase type in the Base Schema)

- Ключи идентификации принципала (выводимые из типа IdentityKey в Базовой Схеме)- Principal identification keys (derived from the IdentityKey type in the Base Schema)

- Почтовый адрес (выводимый из типа Property в Базовой Схеме)- Mailing address (inferred from the Property type in the Base Schema)

- Обогащенный текст (выводимый из типа Property в Базовой Схеме)- Rich text (inferred from the Property type in the Base Schema)

- EAddress (выводимый из типа Property в Базовой Схеме)- EAddress (inferred from the Property type in the Base Schema)

- IdentitySecurityPackage (выводимый из типа Relationship в Базовой Схеме)- IdentitySecurityPackage (inferred from the Relationship type in the Base Schema)

- RoleOccupancy (выводимый из типа Relationship в Базовой Схеме)- RoleOccupancy (inferred from the Relationship type in the Base Schema)

- BasicPresence (выводимый из типа Relationship в Базовой Схеме)- BasicPresence (inferred from the Relationship type in the Base Schema)

Эти Предметы и Свойства дополнительно описываются набором их соответствующих свойств, изложенных на фиг.8А и 8В.These Items and Properties are further described by a set of their respective properties set forth in FIGS. 8A and 8B.

5. Связи5. Communication

Связи представляют собой бинарные связи, где один Предмет обозначается как источник, а другой Предмет - как цель. Предмет источника и Предмет цели связываются связью. Предмет источника обычно управляет временем существования связи. Т.е., когда удаляется Предмет источника, также удаляется связь между Предметами.Links are binary links, where one Item is designated as a source, and another Item as a target. The source item and the target item are linked. A source item typically controls the lifetime of a link. That is, when the Source Item is deleted, the relationship between the Items is also deleted.

Связи классифицируются на: связи Включения и Ссылки. Связи включения управляют временем существования Предметов цели, тогда как связи ссылки не обеспечивают никакой семантики управления временем существования. Фиг.12 иллюстрирует то, как классифицируются связи.Links are classified into: Inclusion and Link links. Inclusion relationships control the lifetime of Objects of the target, while linking relationships do not provide any semantics for managing lifetimes. 12 illustrates how communications are classified.

Типы связи Включения дополнительно классифицируются на связи Прикрепления и Внедрения. Когда удаляются все связи прикрепления для Предмета, удаляется Предмет. Связь прикрепления управляет временем существования цели посредством механизма подсчета ссылок. Связи внедрения позволяют моделировать составные Предметы и могут представляться как исключительные связи прикрепления. Предмет может быть целью одной или нескольких связей прикрепления; но Предмет может быть целью только одной связи внедрения. Предмет, который является целью связи внедрения, не может быть целью никаких других связей прикрепления или внедрения.Types of connection Inclusions are further classified in the connection of Attachment and Implementation. When all attachment links for an Item are deleted, the Item is deleted. An attachment relationship controls the lifetime of a target through a link counting mechanism. Implementation links allow you to model compound Items and can be represented as exclusive attachment links. An item may be the target of one or more attachment links; but the Subject can be the goal of only one implementation connection. An object that is the target of an attachment link cannot be the target of any other attachment or attachment link.

Связи ссылок не управляют временем существования Предмета цели. Они могут быть повисшими - Предмет цели может не существовать. Связи ссылок могут использоваться для моделирования ссылок на Предметы в любом месте в глобальном пространстве имен Предметов (т.е. включая удаленные хранилища данных).Link links do not control the lifetime of the Target. They may be dangling - The subject of the goal may not exist. Link relationships can be used to model links to Items anywhere in the global Item namespace (i.e. including remote data stores).

Выборка Предмета не выбирает автоматически его связи. Приложения должны явно запросить связи Предмета. Кроме того, модифицирование связи не модифицирует Предмет источника или цели; аналогично, добавление связи не оказывает влияния на Предмет источника/цели.Selecting an Item does not automatically select its relationship. Applications must explicitly request Item links. In addition, modifying the link does not modify the subject of the source or target; likewise, adding a link does not affect the Source / target Subject.

а) Объявление связиa) Communication announcement

Явные типы связи определяются следующими элементами:Explicit communication types are defined by the following elements:

- Имя связи задается в атрибуте Name.- The name of the relationship is specified in the Name attribute.

- Типом связи, одно из следующих: Прикрепления, Внедрения, Ссылки. Он задается в атрибуте Type.- The type of connection, one of the following: Attachments, Implementations, Links. It is set in the Type attribute.

- Конечными точками источника и цели. Каждая конечная точка задает имя и тип ссылаемого Предмета.- The endpoints of the source and target. Each endpoint specifies the name and type of the referenced Item.

- Поле конечной точки источника обычно типа ItemID (не объявлен), и оно должно ссылаться на Предмет в этом же хранилище данных, что и экземпляр связи.- The source endpoint field is usually of the type ItemID (not declared), and it must reference the Item in the same data store as the link instance.

- Для связей Прикрепления и Внедрения поле конечной точки цели должно быть типа ItemIDReference, и оно должно ссылаться на Предмет в этом же хранилище данных, что и экземпляр связи. Для связей Ссылки конечная точка цели может быть любого типа ItemReference и может ссылаться на Предметы в других хранилищах данных платформы хранения.- For Attachment and Deployment relationships, the target endpoint field must be of the ItemIDReference type, and it must reference the Item in the same data store as the link instance. For Link relationships, the target endpoint can be of any type of ItemReference and can refer to Items in other storage platforms data warehouses.

- Необязательно может объявляться одно или несколько полей скалярного типа или типа PropertyBase. Эти поля могут содержать данные, ассоциированные со связью.- Optionally, one or more fields of a scalar type or PropertyBase type can be declared. These fields may contain data associated with the relationship.

- Экземпляры связей хранятся в глобальной таблице связей.- Link instances are stored in the global link table.

- Каждый экземпляр связи однозначно идентифицируется комбинацией (ItemID источника, ID связи). ID связи является уникальным в пределах данного ItemID источника для всех связей, имеющих происхождение в данном Предмете независимо от их типа.- Each communication instance is uniquely identified by a combination (Source ItemID, Communication ID). The link ID is unique within the given ItemID source for all links originating in this Item regardless of their type.

Предмет источника является владельцем связи. Хотя Предмет, обозначенный как владелец, управляет временем существования связи, сама связь является отдельной от Предметов, с которыми она связана. ИПП (API) 322 платформы хранения предусматривает механизмы для раскрытия связей, ассоциированных с Предметом.The source item is the owner of the link. Although the Item, designated as the owner, controls the life of the link, the link itself is separate from the Items with which it is associated. The API 322 of the storage platform provides mechanisms for disclosing the relationships associated with the Item.

Вот пример объявления связи:Here is an example of a link declaration:

<Relationship Name="Employment" BaseType="Reference" ><Relationship Name = "Employment" BaseType = "Reference">

<Source Name="Employee" ItemType="Contact.Person"/><Source Name = "Employee" ItemType = "Contact.Person" />

<Target Name="Employer" ItemType="Contact.Organization"<Target Name = "Employer" ItemType = "Contact.Organization"

ReferenceType="ItemIDReference" />ReferenceType = "ItemIDReference" />

<Property Name="StartDate" Type="the storage<Property Name = "StartDate" Type = "the storage

platformTypes.DateTime" />platformTypes.DateTime "/>

<Property Name="EndDate" Type="the storage<Property Name = "EndDate" Type = "the storage

platformTypes.DateTime" />platformTypes.DateTime "/>

<Property Name="Office" Type="the storage<Property Name = "Office" Type = "the storage

platformTypes.DateTime" />platformTypes.DateTime "/>

</Relationship></Relationship>

Это пример связи Ссылки. Связь не может быть создана, если не существует Предмета person, на который ссылается ссылка источника. Также, если удаляется Предмет person, удаляются экземпляры связей между person и organization. Однако, если удаляется Предмет Organization, связь не удаляется, и она является повисшей.This is an example link relationship. A link cannot be created if the Person subject to which the source link refers does not exist. Also, if Person is deleted, instances of the relationship between person and organization are deleted. However, if the Organization Item is deleted, the link is not deleted, and it is dangling.

b) Связь прикрепленияb) Attachment connection

Связи прикрепления используются для моделирования управления временем существования Предметов цели на основе подсчета ссылок.Attachment links are used to model the management of the lifetime of Objects based on reference counting.

Предметом может быть конечная точка источника для нулевой или более связей к Предметам. Предмет, который не является внедренным Предметом, может быть целью в одной или нескольких связях прикрепления.An item can be a source endpoint for zero or more links to Items. An Item that is not an embedded Item may be the target in one or more attachment relationships.

Ссылочным типом конечной точки цели должен быть ItemIDReference, и он должен ссылаться на Предмет в этом же хранилище, что и экземпляр связи.The target endpoint reference type must be ItemIDReference, and it must reference the Item in the same store as the link instance.

Связи прикрепления выполняют управление временем существования конечной точки цели. Создание экземпляра связи прикрепления и Предмета, для которого он является целью, представляет собой атомарную операцию. Могут создаваться дополнительные экземпляры связи прикрепления, целью которых является этот же Предмет. Когда удаляется последний экземпляр связи прикрепления с данным Предметом в качестве конечной точки цели, также удаляется Предмет цели.Attachment links control the lifetime of the target endpoint. Creating an instance of the connection of the attachment and the Item for which it is the goal is an atomic operation. Additional instances of the attachment link may be created, the purpose of which is the same Item. When the last instance of the attachment link with this Item as the endpoint of the target is deleted, the Target is also deleted.

Типы Предметов конечных точек, заданных в объявлении связи, вводятся в действие, когда создается экземпляр связи. Типы Предметов конечных точек не могут быть изменены после установления связи.The types of Endpoint Items specified in the link declaration are enforced when the link instance is created. Endpoint Item Types cannot be changed after communication has been established.

Связи прикрепления играют ключевую роль при формировании пространства имен Предметов. Они содержат свойство «Name», которое определяет имя Предмета цели относительно Предмета источника. Это относительное имя является уникальным для всех связей прикрепления, источником которых является данный Предмет. Упорядоченный список этих относительных имен, начинающийся с корневого Предмета до данного Предмета, формирует полное имя для Предмета.Attachment links play a key role in creating the Item namespace. They contain the “Name” property, which defines the name of the Target with respect to the Source. This relative name is unique to all attachment relationships originating from this Item. An ordered list of these relative names, starting from the root Item to this Item, forms the full name for the Item.

Связи прикрепления формируют ориентированный ациклический граф (ОАГ; DAG). Когда создается связь прикрепления, система гарантирует, что не создается цикл, таким образом гарантируя, что пространство имен Предметов формирует ОАГ (DAG).Attachment bonds form an oriented acyclic graph (OAS; DAG). When an attachment relationship is created, the system ensures that no loop is created, thus ensuring that the Item namespace forms an OAG.

Хотя связь прикрепления управляет временем существования Предмета цели, она не управляет операционной совместимостью Предмета конечной точки цели. Предмет цели операционно не зависит от Предмета, который им владеет при помощи связи прикрепления. Операции Копирования, Перемещения, Резервирования и другие операции над Предметом, который является источником связи прикрепления, не оказывают влияния на Предмет, который является целью этой же связи, например, т.е. резервирование Предмета Папки не резервирует автоматически все Предметы в папке (цели связи FolderMember).Although the attachment relationship controls the lifetime of the Target, it does not control the interoperability of the Target. The subject of the goal is operationally independent of the Object that is owned by the attachment link. Copying, Moving, Reserving and other operations on the Item, which is the source of the attachment link, do not affect the Item, which is the target of the same link, for example, i.e. backup of a Folder Item does not automatically reserve all Items in a folder (FolderMember link targets).

Нижеследующее является примером связи прикрепления:The following is an example of an attachment relationship:

<Relationship Name="FolderMembers" BaseType="Holding" ><Relationship Name = "FolderMembers" BaseType = "Holding">

<Source Name="Folder" ItemType="Base.Folder"/><Source Name = "Folder" ItemType = "Base.Folder" />

<Target Name="Item" ItemType="Base.Item"<Target Name = "Item" ItemType = "Base.Item"

ReferenceType="ItemIDReference" />ReferenceType = "ItemIDReference" />

</Relationship></Relationship>

Связь FolderMembers позволяет осуществлять принцип Папки в качестве обобщенной коллекции Предметов.The FolderMembers association allows you to implement the Folder principle as a generalized collection of Items.

с) Связи внедренияc) Implementation Relations

Связи внедрения моделируют принцип привилегированного управления временем существования Предмета цели. Они делают возможным понятие составных Предметов.Implementation relationships model the principle of privileged control over the lifetime of the Target. They make possible the concept of compound Items.

Создание экземпляра связи внедрения и Предмета, который представляет собой цель, является атомарной операцией. Предмет может быть источником нуля или более связей внедрения. Однако Предмет может быть целью одной и только одной связи внедрения. Предмет, который является целью связи внедрения, не может быть целью связи прикрепления.Creating an instance of the connection of the introduction and the Subject, which represents the goal, is an atomic operation. An item can be a source of zero or more implementation links. However, an Item may be the goal of one and only one implementation link. An object that is the target of an implementation link cannot be the target of an attachment link.

Ссылочным типом конечной точки цели должен быть ItemIDReference, и он должен ссылаться на Предмет в этом же хранилище данных, что и экземпляр связи.The target endpoint reference type must be ItemIDReference, and it must reference the Item in the same data store as the link instance.

Типы Предметов конечной точки, заданные в объявлении связи, как правило, будут задействоваться, когда создается экземпляр связи. Типы Предметов конечной точки не могут изменяться после установления связи.The types of Endpoint Items specified in the link declaration will typically be invoked when the link instance is created. Endpoint Item Types cannot be changed after communication is established.

Связи внедрения управляют операционной совместимостью конечной точки цели. Например, операция сериализации Предмета может включать в себя сериализацию всех связей внедрения, источником которых является этот Предмет, а также всех их целей; копирование Предмета также копирует все его внедренные Предметы.Deployment relationships control the endpoint interoperability of the target. For example, the operation of serializing an Item may include the serialization of all implementation links originating from this Item, as well as all their goals; Copying an Item also copies all of its embedded Items.

Нижеследующее представляет собой примерное объявление:The following is an example declaration:

<Relationship Name="ArchiveMembers" BaseType="Embedding" ><Relationship Name = "ArchiveMembers" BaseType = "Embedding">

<Source Name="Archive" ItemType="Zip.Archive" /><Source Name = "Archive" ItemType = "Zip.Archive" />

<Target Name="Member" ItemType=Base.Item"<Target Name = "Member" ItemType = Base.Item "

ReferenceType="ItemIDReference" />ReferenceType = "ItemIDReference" />

<Property Name="ZipSize" Type="the storage<Property Name = "ZipSize" Type = "the storage

platformTypes.bigint" />platformTypes.bigint "/>

<Property Name="SizeReduction" Type="the storage<Property Name = "SizeReduction" Type = "the storage

platformTypes.float" />platformTypes.float "/>

</Relationship></Relationship>

d) Связи ссылкиd) Link links

Связь ссылки не управляет временем существования Предмета, на который она ссылается. Даже более, связи ссылки не гарантируют существование цели, они также не гарантируют тип цели, заданный в объявлении связи. Это означает, что связи ссылки могут быть повисшими. Также, связь ссылки может ссылаться на Предметы в других хранилищах данных. Связи ссылки могут представляться как принцип, аналогичный связываниям на веб-страницах.Linking a link does not control the lifetime of the Item to which it refers. Even more, link links do not guarantee the existence of a target, nor do they guarantee the type of target specified in the link declaration. This means link links can be dangling. Also, link links can reference Items in other data stores. Link links can appear as a principle similar to linking on web pages.

Пример объявления связи ссылки следующий:An example link link declaration is as follows:

<Relationship Name="DocumentAuthor" BaseType="Reference" ><Relationship Name = "DocumentAuthor" BaseType = "Reference">

<Source ItemType="Document" ItemType= "Base.Document"/><Source ItemType = "Document" ItemType = "Base.Document" />

<Target ItemType="Author" ItemType="Base.Author"<Target ItemType = "Author" ItemType = "Base.Author"

ReferenceType="ItemIDReference" />ReferenceType = "ItemIDReference" />

<Property Type="Role" Type="Core.CategoryRef" /><Property Type = "Role" Type = "Core.CategoryRef" />

<Property Type="DisplayName" Type="the storage<Property Type = "DisplayName" Type = "the storage

platformTypes.nvarchar(256)" />platformTypes.nvarchar (256) "/>

</Relationship></Relationship>

В конечной точке цели допускается любой ссылочный тип. Предметы, которые участвуют в связи ссылки, могут быть любого типа Item.Any reference type is allowed at the target endpoint. Items that are involved in linking links can be of any type Item.

Связи ссылки используются для моделирования большинства связей без управления временем существования между Предметами. Так как не вынуждается существование цели, связь ссылки удобна для моделирования слабосвязанных связей. Связь ссылки может использоваться для Предметов целей в других хранилищах данных, включая хранилища на других компьютерах.Link links are used to model most links without managing the lifetime between Items. Since the existence of the goal is not forced, the link link is convenient for modeling loosely coupled links. Link links can be used for Objects in other data warehouses, including storages on other computers.

е) Правила и ограниченияe) Rules and restrictions

Следующие дополнительные правила и ограничения применяются к связям:The following additional rules and restrictions apply to relationships:

1. Предмет должен быть целью (точно одной связи внедрения) или (одной или нескольких связей прикрепления). Единственным исключением является корневой Предмет. Предметом может быть цель нуля или более связей ссылки.1. The subject should be the goal of (exactly one attachment relationship) or (one or more attachment links). The one exception is the root Item. The subject may be the target of zero or more link links.

2. Предмет, который является целью связи внедрения, не может быть источником связей прикрепления. Он может быть источником связей ссылки.2. The subject, which is the goal of the implementation link, cannot be a source of attachment links. It can be a source of link links.

3. Предмет не может быть источником связи прикрепления, если распространяется (promoted) из файла. Он может быть источником связей внедрения и связей ссылки.3. The subject cannot be a source of attachment links if it is promoted from a file. It can be a source of implementation links and link links.

4. Предмет, который распространяется (promoted) из файла, не может быть целью связи внедрения.4. An item that is distributed (promoted) from a file cannot be the target of an implementation link.

f) Упорядочение связейf) Ordering links

По меньшей мере в одном варианте осуществления платформа хранения настоящего изобретения поддерживает упорядочение связей. Упорядочение достигается посредством свойства, названного «Order» в базовом определении связей. Нет ограничения на единственность на поле Order. Не гарантируется порядок связей с одинаковым значением свойства «order», однако гарантируется, что они могут упорядочиваться после связей с более низким значением «order» и до связей с более высоким значением поля «order».In at least one embodiment, the storage platform of the present invention supports link ordering. Ordering is achieved through a property called “Order” in the base definition of relationships. There is no restriction on uniqueness on the Order field. The order of links with the same value of the order property is not guaranteed, but it is guaranteed that they can be ordered after links with a lower value of order and before links with a higher value of the order field.

Приложения могут получать связи в порядке по умолчанию посредством упорядочивания по комбинации (SourceItemID, RelationshipID, Order). Все экземпляры связи, источником которых является данный Предмет, упорядочиваются в виде единственной коллекции независимо от типа связей в коллекции. Это, однако, гарантирует, что все связи данного типа (например, FolderMembers) представляют собой упорядоченный поднабор коллекции связей для данного Предмета.Applications can receive links in the default order by ordering by combination (SourceItemID, RelationshipID, Order). All communication instances originating from this Item are ordered as a single collection, regardless of the type of relationship in the collection. This, however, ensures that all links of a given type (for example, FolderMembers) constitute an ordered subset of the collection of links for a given Item.

ИПП (API) 312 хранилища данных для манипулирования связями реализует набор операций, который поддерживает упорядочение связей. Вводятся следующие термины, помогающие объяснить операции:An API 312 data warehouse for manipulating relationships implements a set of operations that supports the ordering of relationships. The following terms are introduced to help explain operations:

RelFirst представляет собой первую связь в упорядоченной коллекции со значением OrdFirst очередности; RelFirst represents the first relationship in an ordered collection with an OrdFirst value of order;

RelLast представляет собой последнюю связь в упорядоченной коллекции со значением OrdLast очередности; RelLast represents the last relationship in an ordered collection with an OrdLast value of priority;

RelX представляет собой данную связь в коллекции со значением OrdX очередности; RelX represents this association in the collection with an OrdX priority value;

RelPrev представляет собой ближайшую связь в коллекции к RelX со значением OrdPrev очередности, меньшим, чем OrdX; и RelPrev represents the closest association in the collection to RelX with a priority OrdPrev value less than OrdX ; and

RelNext представляет собой ближайшую связь в коллекции к RelX со значением OrdNext очередности, большим, чем OrdX. RelNext is the closest association in the collection to RelX with a priority OrdNext value greater than OrdX .

InsertBeforeFirst (SourceItemID, Relationship)InsertBeforeFirst (SourceItemID, Relationship)

Вставляет связь в качестве первой связи в коллекции. Значение свойства «Order» новой связи может быть меньше, чем OrdFirst.Inserts a link as the first link in the collection. The value of the Order property of the new link may be less than OrdFirst.

InsertAfterLast (SourceItemID, Relationship)InsertAfterLast (SourceItemID, Relationship)

Вставляет связь в качестве последней связи в коллекции. Значение свойства «Order» новой связи может быть больше, чем OrdLast.Inserts a link as the last link in the collection. The value of the Order property of the new link may be greater than OrdLast.

InsertAt (SourceItemID, ord, Relationship)InsertAt (SourceItemID, ord, Relationship)

Вставляет связь с заданным значением для свойства «Order».Inserts a relationship with the specified value for the Order property.

InsertBefore (SourceItemID, ord, Relationship)InsertBefore (SourceItemID, ord, Relationship)

Вставляет связь перед связью с данным значением очередности. Новой связи может быть назначено значение «Order», которое находится между OrdPrev и ord, не включая их.Inserts a link before the link with the given priority value. A new connection can be assigned the value "Order", which is located between OrdPrev and ord, not including them.

InsertAfter (SourceItemID, ord, Relationship)InsertAfter (SourceItemID, ord, Relationship)

Вставляет связь после связи с данным значением очередности. Новой связи может быть назначено значение «Order», которое находится между ord и OrdNext, не включая их.Inserts a link after a link to a given priority value. A new relationship may be assigned the value "Order", which is between ord and OrdNext, not including them.

MoveBefore (SourceItemID, ord, RelationshipID)MoveBefore (SourceItemID, ord, RelationshipID)

Перемещает связь с данным идентификатором (ИД; ID) связи перед связью с заданным значением «Order». Связи может быть назначено новое значение «Order», которое находится между OrdPrev и ord, не включая их.Moves the connection with this identifier (ID; ID) of the connection before the connection with the specified value "Order". Relationships can be assigned a new “Order” value, which is located between OrdPrev and ord, not including them.

MoveAfter (SourceItemID, ord, RelationshipID)MoveAfter (SourceItemID, ord, RelationshipID)

Перемещает связь с данным ИД (ID) связи после связи с заданным значением «Order». Связи может быть назначено новое значение очередности, которое находится между ord и OrdNext, не включая их.Moves the connection with the given communication ID (ID) after communication with the specified value "Order". Relationships can be assigned a new priority value, which is between ord and OrdNext, not including them.

Как ранее упомянуто, каждый Предмет должен быть членом Папки Предметов. На языке Связей каждый Предмет должен иметь связь с Папкой Предметов. В нескольких вариантах осуществления настоящего изобретения некоторые связи представляются Связями, существующими между Предметами.As previously mentioned, each Item must be a member of the Item Folder. In the language of Links, each Item must have a link to the Item Folder. In several embodiments of the present invention, some relationships are represented by Relationships existing between Items.

Как реализовано для различных вариантов осуществления настоящего изобретения, Связь предусматривает направленную бинарную связь, которая «распространяется» одним Предметом (источником) до другого Предмета (цели). Связью владеет Предмет источника (Предмет, который распространяет ее), и, таким образом, Связь удаляется, если удаляется источник (например, Связь удаляется, когда удаляется Предмет источника). Кроме того, в некоторых случаях Связь может совместно использовать владение (совместно владеть) Предметом цели, и такое владение может отражаться в свойстве IsOwned (или его эквиваленте) Связи (как показано на фиг.7 для типа свойства Relationship). В этих вариантах осуществления создание новой Связи IsOwned автоматически увеличивает число ссылок на Предмет цели, и удаление такой Связи может уменьшать число ссылок на Предмет цели. Для таких конкретных вариантов осуществления Предметы продолжают существовать, если они имеют число ссылок, большее, чем нуль, и автоматически удаляются, если и когда число достигает нуля. Снова, Папка предметов представляет собой Предмет, который имеет (или выполнен с возможностью иметь) набор Связей к другим Предметам, причем эти другие Предметы содержат членство в Папке Предметов. Другие фактические реализации Связей возможны и предусматриваются настоящим изобретением для достижения функциональной возможности, описанной в данном документе.As implemented for various embodiments of the present invention, a Link provides a directional binary link that is “distributed” by one Item (source) to another Item (target). The Link is owned by the Source Item (the Item that distributes it), and thus the Link is deleted if the source is deleted (for example, the Link is deleted when the Source Item is deleted). In addition, in some cases, the Link may share the ownership of the Object of the target, and such ownership may be reflected in the IsOwned property (or its equivalent) of the Link (as shown in FIG. 7 for the type of Relationship property). In these embodiments, creating a new IsOwned Link automatically increases the number of links to the Target, and deleting such a Link can reduce the number of links to a Target. For such specific embodiments, the Items continue to exist if they have a number of links greater than zero and are automatically deleted if and when the number reaches zero. Again, the Item Folder is an Item that has (or is configured to have) a set of Links to other Items, these other Items containing membership in the Item Folder. Other actual implementations of the Relationships are possible and contemplated by the present invention to achieve the functionality described herein.

Независимо от фактической реализации Связь представляет собой выбираемое соединение от одного объекта к другому. Возможность принадлежности Предмета к более чем одной Папке Предметов, а также к одной или нескольким Категориям, и являются ли эти Предметы, Папки и Категории открытыми или закрытыми, определяется смыслом, данным существованию (или его отсутствию) в основанной на Предметах структуре. Эти логические Связи представляют собой смысл, назначенный набору Связей, независимо от физической реализации, которые конкретно используются для достижения функциональных возможностей, описанных в данном документе. Логические Связи устанавливаются между Предметом и его Папкой(ами) Предметов или Категориями (или наоборот), так как, по существу, Папки Предметов и Категории каждая представляет собой специальный тип Item. Следовательно, с Папками Предметов и Категориями можно действовать таким же образом, как и с любым другим Предметом - копировать, добавлять к сообщению электронной почты, внедрять в документ и т.п. и т.д. без ограничения, Папки Предметов и Категории могут сериализоваться и десериализоваться (импортироваться и экспортироваться), используя одинаковые механизмы, что и для других Предметов. (Например, в расширяемом языке разметки (РЯР; XML) все Предметы могут иметь формат сериализации, и этот формат применяется в равной степени к Папкам Предметов, Категориям и Предметам.)Regardless of the actual implementation, Communication is a selectable connection from one object to another. The possibility that an Item belongs to more than one Item Folder, as well as to one or more Categories, and whether these Items, Folders and Categories are open or closed, is determined by the meaning given to the existence (or its absence) in the structure based on the Items. These logical Links represent the meaning assigned to the set of Links, regardless of the physical implementation, which are specifically used to achieve the functionality described in this document. Logical Links are established between an Item and its Item Folder (s) or Categories (or vice versa), since, essentially, Item Folders and Categories each represents a special type of Item. Consequently, with Item Folders and Categories you can act in the same way as with any other Item - copy, add to an email message, embed in a document, etc. etc. without limitation, Item Folders and Categories can be serialized and deserialized (imported and exported) using the same mechanisms as for other Items. (For example, in Extensible Markup Language (RPN; XML), all Items can have a serialization format, and this format applies equally to Item Folders, Categories, and Items.)

Вышеупомянутые Связи, которые представляют связь между Предметом и его Папкой(ами) Предметов, могут логически распространяться от Предмета до Папки Предметов, от Папки Предметов до Предмета или оба случая. Связь, которая логически распространяется от Предмета до Папки Предметов, означает, что Папка Предметов является открытой для этого Предмета и совместно использует ее информацию о членстве с этим Предметом; и наоборот, отсутствие логической Связи от Предмета к Папке Предметов означает, что Папка Предметов является закрытой для этого Предмета и не использует совместно ее информацию о членстве с этим Предметом. Аналогично, Связь, которая логически распространяется от Папки предметов к Предмету, означает, что Предмет является открытым и совместно используемым для этой Папки Предметов, тогда как отсутствие логической Связи от Папки Предметов к Предмету означает, что Предмет является закрытым и не является совместно используемым. Следовательно, когда Папка Предметов экспортируется в другую систему, именно «открытые» Предметы совместно используются в новом контексте, и, когда Предмет выполняет поиск в его Папках Предметов других совместно используемых Предметов, именно «открытые» Папки Предметов обеспечивают предмет информацией, касающейся совместно используемых Предметов, которые принадлежат им.The above Links, which represent the relationship between the Item and its Item Folder (s), can logically spread from the Item to the Item Folder, from the Item Folder to the Item, or both. A link that logically spreads from an Item to an Item Folder means that the Item Folder is open to this Item and shares its membership information with this Item; and vice versa, the absence of a logical Link from the Item to the Item Folder means that the Item Folder is closed to this Item and does not share its membership information with this Item. Similarly, the Link that logically spreads from the Item Folder to the Item means that the Item is open and shared for this Item Folder, while the lack of a logical Link from the Item Folder to the Item means that the Item is closed and not shared. Therefore, when the Item Folder is exported to another system, it is the “open” Items that are shared in the new context, and when the Item searches its Item Folders for other shared Items, it is the “open” Item Folders that provide the item with information regarding shared Items that belong to them.

Фиг.9 представляет собой блок-схему, иллюстрирующую Папку Предметов (которая, снова, представляет собой сам Предмет), Предметы ее членов и взаимно соединяющие Связи между Папкой Предметов и Предметами ее членов. Папка 900 Предметов имеет в качестве членов множество Предметов 902, 904 и 906. Папка 900 Предметов имеет Связь 912 от самой себя к Предмету 902, которая означает, что Предмет 902 является открытым и совместно используемым для Папки 900 Предметов, ее членов 904 и 906 и любых других Папок Предметов, Категорий или Предметов (не показаны), которые могут обращаться к Папке 900 Предметов. Однако нет Связи от Предмета 902 к Папке 900 Предметов, что означает, что Папка 900 Предметов является закрытой для Предмета 902 и не использует совместно ее информацию о членстве с Предметом 902. Предмет 904, с другой стороны, действительно имеет Связь 924 от самого себя к Папке 900 Предметов, которая означает, что Папка 900 Предметов является открытой и совместно использует ее информацию о членстве с Предметом 904. Однако нет Связи от Папки 900 Предметов к Предмету 904, которая означает, что Предмет 904 является закрытым и не совместно используемым для Папки 900 Предметов, ее других членов 902 и 906 и любых других Папок Предметов, Категорий или Предметов (не показаны), которые могут обращаться к Папке 900 Предметов. В противоположность ее Связям (или отсутствию их) к Предметам 902 и 904 Папка 900 Предметов имеет Связь 916 от самой себя к Предмету 906, и Предмет 906 имеет Связь 926 обратно к Папке 900 Предметов, которые вместе означают, что Предмет 906 является открытым и совместно используемым для Папки 900 Предметов, ее членов 902 и 904 и любых других Папок Предметов, Категорий или предметов (не показаны), которые могут обращаться к Папке 900 Предметов, и что Папка 900 Предметов является открытой и совместно использует свою информацию о членстве с Предметом 906.9 is a block diagram illustrating an Item Folder (which, again, is the Item itself), Items of its members and interconnecting Links between the Item Folder and the Items of its members. Folder 900 Items has many Members 902, 904, and 906 as members. Folder 900 Items has a Link 912 from itself to Subject 902, which means that Subject 902 is open and shared for Folder 900 Items, its members 904 and 906, and any other Item, Category, or Item Folders (not shown) that can access the 900 Item Folder. However, there is no Link from Subject 902 to Folder 900 of Subjects, which means that Subfolder 900 of Subjects is private to Subject 902 and does not share its membership information with Subject 902. Subject 904, on the other hand, does have a 924 Link from itself to Folder 900 Items, which means that Folder 900 Items is open and shares its membership information with Item 904. However, there is no Link from Folder 900 Items to Item 904, which means Item 904 is private and not shared for Folder 900Items, its other members 902 and 906, and any other Item, Category or Item Folders (not shown) that can access the Item 900 Folder. In contrast to its Relationships (or lack thereof) to Items 902 and 904, the Item 900 Folder has a Connection 916 from itself to Item 906, and Item 906 has a Connection 926 back to Item 900 Folder, which together means that Item 906 is open and shared used for the Folder 900 Items, its members 902 and 904 and any other Folders of Items, Categories or items (not shown) that can access the Folder 900 Items, and that the Folder 900 Items is open and shares its membership information with Item 906 .

Как раннее описано, Предметам в Папке Предметов нет необходимости совместно использовать общность, так как Папки Предметов не «описаны». Категории, с другой стороны, описываются общностью, которая является общей для всех Предметов ее членов. Следовательно, членство в Категории, по своей природе, ограничивается Предметами, имеющими описанную общность, и в некоторых вариантах осуществления все Предметы, удовлетворяющие описанию Категории, автоматически делаются членами Категории. Таким образом, тогда как Папки Предметов делают возможным представление тривиальных структур типов посредством их членства, Категории допускают членство, основанное на описанной общности.As previously described, the Items in the Item Folder do not need to share a commonality, since the Item Folders are not “described”. Categories, on the other hand, are described by a community that is common to all Items of its members. Therefore, membership in a Category is, by its nature, limited to Items having the described generality, and in some embodiments, all Items satisfying the description of the Category are automatically made members of the Category. Thus, while Item Folders make it possible to represent trivial type structures through their membership, Categories allow membership based on the described generality.

Конечно, описания Категории являются логическими по своей сущности, и поэтому Категория может описываться любым логическим представлением типов, свойств и/или значений. Например, логическим представлением для Категории может быть то, что ее членство содержит Предметы, имеющие одно из двух свойств или оба. Если этими описанными свойствами для Категории являются «А» и «В», тогда членство Категорий может содержать Предметы, имеющие свойство А, но не В, Предметы, имеющие свойство В, но не А, и Предметы, имеющие оба свойства А и В. Это логическое представление свойств описывается логическим оператором «ИЛИ», где набор членов, описываемых Категорией, представляет собой Предметы, имеющие свойства А ИЛИ В. Аналогичные логические операнды (включая без ограничения «И», «Исключающее ИЛИ» и «НЕТ» отдельно или в комбинации) также могут использоваться для описания категории, что понятно для специалиста в данной области техники.Of course, Category descriptions are logical in nature, and therefore a Category can be described by any logical representation of types, properties and / or values. For example, a logical representation for a Category may be that its membership contains Items that have one of two properties, or both. If these described properties for the Category are “A” and “B”, then the membership of the Categories may contain Items that have property A, but not B, Items that have property B, but not A, and Items that have both properties A and B. This logical representation of properties is described by the logical operator "OR", where the set of members described by the Category is Items having properties A or B. Similar logical operands (including without limitation "AND", "EXCLUSIVE OR" and "NO" separately or in combinations) can also be used for descriptions of the category, which is clear to a person skilled in the art.

Несмотря на отличие между Папками Предметов (не описанные) и Категориями (описанные), Связь Категорий с Предметами и Связь Предметов с Категориями, по существу, аналогичны тому, что описано в данном документе выше для Папок Предметов и Предметов во многих вариантах осуществления настоящего изобретения.Despite the difference between the Item Folders (not described) and the Categories (described), the Linking of Categories to Items and the Linking of Items to Categories are essentially the same as described in this document for Item Folders and Items in many embodiments of the present invention.

Фиг.10 представляет собой блок-схему, иллюстрирующую Категорию (которая, снова, представляет собой сам Предмет), Предметы ее членов и взаимно соединяющие Связи между Категорией и Предметами ее членов. Категория 1000 имеет в качестве членов множество Предметов 1002, 1004 и 1006, все из которых совместно используют некоторую комбинацию общих свойств, значений или типов 1008, описанных (описанием 1008' общности) Категорией 1000. Категория 1000 имеет Связь 1012 от самой себя к Предмету 1002, которая означает, что Предмет 1002 является открытым и совместно используемым для Категории 1000, ее членов 1004 и 1006 и любых других Категорий, Папок Предметов или Предметов (не показаны), которые могут обращаться к Категории 1000. Однако нет Связи от Предмета 1002 к Категории 1000, которая означает, что Категория 1000 является закрытой для Предмета 1002 и не использует совместно свою информацию о членстве с Предметом 1002. Предмет 1004, с другой стороны, действительно имеет Связь 1024 от самого себя к Категории 1000, которая означает, что Категория 1000 является открытой и совместно использует свою информацию о членстве с Предметом 1004. Однако нет Связи, распространяемой от Категории 1000 к Предмету 1004, которая означает, что Предмет 1004 является закрытым и не является совместно используемым для Категории 1000, ее других членов 1002 и 1006 и любых других Категорий, Папок Предметов или Предметов (не показаны), которые могут обращаться к Категории 1000. В противоположность ее Связям (или отсутствию их) с Предметами 1002 и 1004 Категория 1000 имеет Связь 1016 от самой себя к Предмету 1006, и Предмет 1006 имеет Связь 1026 обратно к Категории 1000, которые вместе означают, что Предмет 1006 является открытым и совместно используемым для Категории 1000, ее членов 1002 и 1004 Предметов и любых других Категорий, Папок Предметов или Предметов (не показаны), которые могут обращаться к Категории 1000, и что Категория 1000 является открытой и совместно использует свою информацию о членстве с Предметом 1006.10 is a block diagram illustrating a Category (which, again, represents the Item itself), Items of its members and interconnecting Links between the Category and Items of its members. Category 1000 has as members many Objects 1002, 1004, and 1006, all of which share some combination of common properties, values, or types 1008 described (by description 1008 'of generality) by Category 1000. Category 1000 has Link 1012 from itself to Item 1002 , which means that Item 1002 is open and shared for Category 1000, its members 1004 and 1006, and any other Categories, Item Folders or Items (not shown) that can access Category 1000. However, there is no Link from Item 1002 to Category 1000 which means that Category 1000 is closed to Item 1002 and does not share its membership information with Item 1002. Item 1004, on the other hand, does have a Link 1024 from itself to Category 1000, which means that Category 1000 is open and shared uses its membership information with Item 1004. However, there is no Link distributed from Category 1000 to Item 1004, which means that Item 1004 is closed and is not shared for Category 1000, its other members 1002 and 1006, and any other their Categories, Folders of Items or Items (not shown) that can refer to Category 1000. In contrast to its Relationships (or their absence) with Items 1002 and 1004, Category 1000 has a Link 1016 from itself to Item 1006, and Item 1006 has a Link 1026 back to Category 1000, which together means that Item 1006 is open and shared for Category 1000, its members 1002 and 1004 Items and any other Categories, Item Folders or Items (not shown) that can access Category 1000, and what Category 1000 is from rytoy and shares its membership information with the subject in 1006.

Наконец, так как Категории и Папки Предметов сами являются Предметами, и Предметы могут иметь Связь друг с другом, Категории могут иметь Связь с Папками Предметов и наоборот, и Категории, Папки Предметов и Предметы могут иметь Связь с другими Категориями, Папками Предметов и Предметами соответственно в некоторых альтернативных вариантах осуществления. Однако в различных вариантах осуществления структуры Папок Предметов и/или структуры Категорий на уровне аппаратной/программной интерфейсной системы запрещены от содержания циклов. Где структуры Папок Предметов и Категорий сходны с ориентированными графами, варианты осуществления, которые запрещают циклы, сходны с ориентированными ациклическими графами (ОАГ; DAG), которые, согласно математическому определению в области теории графов, представляют собой ориентированные графы, в которых путь не начинается и не оканчивается в одной и той же вершине.Finally, since Categories and Item Folders themselves are Items, and Items can have a Link to each other, Categories can have a Link to Item Folders and vice versa, and Categories, Item Folders and Items can have a Link to other Categories, Item Folders and Items respectively in some alternative embodiments. However, in various embodiments, the implementation of the Item Folder structure and / or Category structure at the hardware / software interface system level is prohibited from looping. Where the structures of Subject and Category Folders are similar to oriented graphs, embodiments that prohibit cycles are similar to oriented acyclic graphs (DAGs), which, according to the mathematical definition in the field of graph theory, are oriented graphs in which the path does not start and doesn't end at the same vertex.

6. Расширяемость6. Extensibility

Предполагается, что платформа хранения предусматривается с исходным набором схем 340, как описано выше. Кроме того, однако, по меньшей мере в некоторых вариантах осуществления платформа хранения дает возможность потребителям, включая независимых поставщиков программного обеспечения (НППО; ISV), создавать новые схемы 344 (т.е. новые типы Item и Nested Element). Этот раздел касается механизма для создания таких схем посредством расширения типов Item и типов Nested Element (или просто типов «Element»), определенных в исходном наборе схем 340.It is assumed that the storage platform is provided with an initial set of circuits 340, as described above. In addition, however, in at least some embodiments, the storage platform enables consumers, including independent software vendors (ISVs), to create new schemes 344 (i.e., new Item and Nested Element types). This section deals with the mechanism for creating such schemas by extending the Item types and Nested Element types (or simply “Element” types) defined in the source schema set 340.

Предпочтительно, что расширение исходного набора типов Item и Nested Element ограничивается следующим образом:Preferably, the extension of the original set of Item and Nested Element types is limited as follows:

НППО (ISV) разрешается вводить новые типы Item, т.е. подтип Base.Item;NPVO (ISV) is allowed to introduce new types of Item, i.e. subtype of Base.Item;

НППО (ISV) разрешается вводить новые типы Nested Element, т.е. подтип Base.NestedElement;NPVO (ISV) is allowed to introduce new types of Nested Element, i.e. subtype of Base.NestedElement;

НППО (ISV) разрешается вводить новые расширения, т.е. подтип Base.NestedElement; ноNPPO (ISV) is allowed to introduce new extensions, i.e. subtype of Base.NestedElement; but

НППО (ISV) не может определять подтип любых типов (типы Item, Nested Element или Extension), определенных исходным набором схем 340 платформы хранения.NPVO (ISV) cannot determine the subtype of any types (types Item, Nested Element or Extension) defined by the source set of storage platform circuits 340.

Так как тип Item или тип Nested Element, определенные исходным набором схем платформы хранения, не могут точно совпадать с потребностями приложения НППО (ISV), необходимо дать возможность НППО (ISV) настраивать тип. Это разрешается с понятием Расширения. Расширения представляют собой строго типизированные экземпляры, но (а) они не могут существовать независимо, и (b) они должны присоединяться к Предмету или Вложенному элементу (Nested Element).Because the Item type or Nested Element type, defined by the source set of storage platform schemas, cannot exactly match the needs of an ISV application, you must enable the ISV to configure the type. This is permitted with the concept of Extension. Extensions are strongly typed instances, but (a) they cannot exist independently, and (b) they must join an Item or Nested Element.

В дополнение к обращению к потребности расширяемости схем, Расширения также предназначены для обращения к вопросу «множественного задания типов». Так как в некоторых вариантах осуществления платформа хранения может не поддерживать множественное наследование или перекрывающиеся подтипы, приложения могут использовать Расширения как способ моделирования экземпляров с перекрывающимися типами (например, Документ представляет собой правовой документ, а также документ по безопасности).In addition to addressing the need for schema extensibility, Extensions are also intended to address the issue of “multiple type assignment”. Since in some embodiments, the storage platform may not support multiple inheritance or overlapping subtypes, applications can use Extensions as a way to model instances with overlapping types (for example, a Document is a legal document as well as a security document).

а) Расширения предметаa) Extensions of the subject

Чтобы обеспечить расширяемость Предмета, модель данных дополнительно определяет абстрактный тип, названный Base.Extension. Это корневой тип для иерархии типов расширения. Приложения могут задавать подтип Base.Extension для создания конкретных типов расширения.To ensure the extensibility of the Item, the data model additionally defines an abstract type called Base.Extension. This is the root type for the extension type hierarchy. Applications can specify a Base.Extension subtype to create specific extension types.

Тип Base.Extension определяется в Базовой схеме следующим образом:The Base.Extension type is defined in the Base schema as follows:

<Type Name="Base.Extension" IsAbstract="True"><Type Name = "Base.Extension" IsAbstract = "True">

<Property Name="ItemID"<Property Name = "ItemID"

Type="the storage platformTypes.uniqueidentified"Type = "the storage platformTypes.uniqueidentified"

Nullable="false"Nullable = "false"

MultiValued="false"/>MultiValued = "false" />

<Property Name-"ExtensionID"<Property Name- "ExtensionID"

Type="the storage platformTypes.uniqueidentified"Type = "the storage platformTypes.uniqueidentified"

Nullable="false"Nullable = "false"

MultiValued="false"/>MultiValued = "false" />

</Type></Type>

Поле ItemID содержит ItemID предмета, с которым ассоциируется расширение. Должен существовать Предмет с этим ItemID. Расширение не может быть создано, если не существует предмет с данным ItemID. Когда удаляется Предмет, удаляются все расширения с одинаковым ItemID. Кортеж (ItemID, ExtensionID) однозначно идентифицирует экземпляр расширения.The ItemID field contains the ItemID of the item with which the extension is associated. An Item must exist with this ItemID. An extension cannot be created if an item with the given ItemID does not exist. When an Item is deleted, all extensions with the same ItemID are deleted. A tuple (ItemID, ExtensionID) uniquely identifies an extension instance.

Структура типа расширения аналогична структуре типа предмета:The structure of an extension type is similar to the structure of an item type:

Типы расширения имеют поля;Extension types have fields;

Поля могут быть типов простейших и вложенных элементов; иFields can be types of simple and nested elements; and

У типов расширения могут задаваться подтипы.Extension types can have subtypes.

Следующие ограничения применяются к типам расширений:The following restrictions apply to extension types:

Расширения не могут быть источниками и целями связей;Extensions cannot be sources and targets of links;

Экземпляры типа расширения не могут существовать независимо от предмета; иExtension type instances cannot exist independently of the subject; and

Типы расширений не могут использоваться в качестве типов полей в определениях типа платформы хранения.Extension types cannot be used as field types in storage platform type definitions.

Нет ограничений на типы расширений, которые могут ассоциироваться с данным типом Item. Любой тип расширения разрешен для расширения любого типа предмета. Когда множественные экземпляры расширений присоединяются к предмету, они не зависят друг от друга как по структуре, так и по методу поведения.There are no restrictions on the types of extensions that can be associated with this type of Item. Any type of extension is allowed to expand any type of item. When multiple instances of extensions are attached to an item, they are independent of each other, both in structure and in behavior.

Экземпляры расширений хранятся, и к ним осуществляется обращение отдельно от предмета. Все экземпляры типа расширения являются доступными из глобального представления расширения. Может быть составлен эффективный запрос, который будет возвращать все экземпляры данного типа расширения независимо от того, с каким типом предмета они ассоциированы. ИПП (API) платформы хранения предусматривает модель программирования, которая может хранить, извлекать и модифицировать расширения предметов.Instances of extensions are stored and accessed separately from the item. All instances of the extension type are accessible from the global extension view. An efficient query can be made that will return all instances of a given type of extension no matter what type of item they are associated with. The storage platform API (API) provides a programming model that can store, retrieve, and modify item extensions.

Могут быть заданы подтипы типов расширений, используя единственную модель наследования платформы хранения. Выведение из типа расширения создает новый тип расширения. Структура или метод поведения расширения не может переопределять или заменять структуру или методы поведения иерархии типа предметов.Subtypes of extension types can be specified using a single storage platform inheritance model. Deriving from an extension type creates a new extension type. The structure or behavior method of an extension cannot override or replace the structure or behavior methods of a hierarchy of type of objects.

Аналогично типам Item к экземплярам типа Extension можно непосредственно обращаться через представление, ассоциированное с типом расширения. ItemID расширения указывает, к какому предмету они принадлежат и какой предмет может использоваться для извлечения соответствующего объекта Item из глобального представления Предмета.Similarly to Item types, instances of Extension type can be accessed directly through the view associated with the extension type. The Extension ItemID indicates which item they belong to and which item can be used to retrieve the corresponding Item from the global representation of the Item.

Считается, что расширения являются частью предмета для целей операционной совместимости. Копирование/Перемещение, Резервирование/Восстановление и другие общие операции, которые определяет платформа хранения, могут работать с расширениями в качестве части предмета.Extensions are considered to be part of the subject for interoperability purposes. Copy / Move, Backup / Restore, and other general operations that the storage platform defines can work with extensions as part of the item.

Рассмотрим следующий пример. Тип Contact определяется в наборе Типов Windows.Consider the following example. The Contact type is defined in the Windows Typeset.

<Type Name="Contact" BaseType="Base.Item" ><Type Name = "Contact" BaseType = "Base.Item">

<Property Name="Name"<Property Name = "Name"

Type="String"Type = "String"

Nullable="false"Nullable = "false"

MultiValued="false"/>MultiValued = "false" />

<Property Name="Address"<Property Name = "Address"

Type="Address"Type = "Address"

Nullable="true"Nullable = "true"

MultiValued=false"/>MultiValued = false "/>

</Type></Type>

Разработчик приложения управления взаимосвязями с клиентами (УВК; CRM) хотел бы присоединить расширение приложения УВК (CRM) к контактам, хранящимся в платформе хранения. Разработчик приложения определяет расширение УВК (CRM), которое содержит дополнительную структуру данных, которой приложение может манипулировать.A customer relationship management (CRM) application developer would like to attach a CRM application extension to contacts stored in a storage platform. The application developer defines a CRM extension, which contains an additional data structure that the application can manipulate.

<Type Name="CRMExtension" BaseType="Base.Extension" ><Type Name = "CRMExtension" BaseType = "Base.Extension">

<Property Name="CustomerID"<Property Name = "CustomerID"

Type="String"Type = "String"

Nullable="false"Nullable = "false"

MultiValued="false"/>MultiValued = "false" />

...

</Type</ Type

Разработчик приложения управления кадрами (УК; HR) может пожелать также присоединить дополнительные данные с Contact. Эти данные являются независимыми от данных приложения УВК (CRM). Разработчик приложения снова может создать расширениеThe developer of a personnel management application (UK; HR) may also wish to attach additional data with Contact. This data is independent of the UVM application data (CRM). Application developer can create extension again

<Type Name="HRExtension" EBaseType="Base.Extension" ><Type Name = "HRExtension" EBaseType = "Base.Extension">

<Property Name="EmployeeID"<Property Name = "EmployeeID"

Type="String"Type = "String"

Nullable="false"Nullable = "false"

MultiValued="false"/>MultiValued = "false" />

...

</Type></Type>

CRMExtension и HRExtension представляют собой два независимых расширения, которые могут быть присоединены к предметам Contact. Они создаются и к ним обращаются независимо друг от друга.CRMExtension and HRExtension are two independent extensions that can be attached to Contact items. They are created and addressed to them independently of each other.

В вышеприведенном примере поля и методы типа CRMExtension не могут замещать поля и методы иерархии Contact. Необходимо отметить, что экземпляры типа CRMExtension могут присоединяться к типам Item, исключая Contact.In the above example, fields and methods of type CRMExtension cannot replace fields and methods of the Contact hierarchy. It should be noted that instances of the CRMExtension type can join Item types, excluding Contact.

Когда извлекается предмет Contact, не извлекаются автоматически его расширения предмета. При наличии предмета Contact к связанным с ним расширениям предмета можно обращаться посредством запроса глобального представления расширения в отношении расширений с одинаковым ItemId.When a Contact item is retrieved, its item extensions are not retrieved automatically. If you have a Contact item, the item extensions associated with it can be accessed by querying the global view of the extension for extensions with the same ItemId.

Ко всем расширениям CRMExtension в системе можно обращаться при помощи представления типа CRMExtension независимо от того, к какому предмету они принадлежат. Все расширения предмета у предмета совместно используют одинаковый идентификатор предмета. В вышеприведенном примере экземпляр предмета Contact и присоединенные экземпляры CRMExtension и HRExtension имеют одинаковый ItemID.All CRMExtension extensions in the system can be accessed using a representation of the CRMExtension type, regardless of which item they belong to. All item extensions on an item share the same item identifier. In the above example, an instance of Contact and attached instances of CRMExtension and HRExtension have the same ItemID.

В нижеследующей таблице просуммированы сходства и различия между типами Item, Extension и NestedElement:The following table summarizes the similarities and differences between the Item, Extension, and NestedElement types:

Item в сравнении с Item Extension в сравнении с NestedElementItem versus Item Extension versus NestedElement ItemItem Item ExtensionItem extension NestedElementNestedElement ИД (ID) предметаItem ID Имеет свой собственный ИД (ID) предметаHas its own item ID Совместно использует ИД (ID) предмета у предметаShares the item ID of the item Не имеет своего собственного ИД (ID) предмета. Вложенный элемент представляет собой часть предмета.Does not have its own item ID. A nested element is part of an item. ХранениеStorage Иерархия предметов хранится в своих собственных таблицахThe item hierarchy is stored in its own tables. Иерархия расширений предмета хранится в своих собственных таблицахThe hierarchy of item extensions is stored in its own tables. Хранится с предметомStored with item Запрос/поискQuery / Search Может запрашивать таблицы предметовMay query item tables Может запрашивать таблицы расширений предметовMay query item extension tables Может, в основном, запрашиваться только в контексте, включающем предметIt can mainly be requested only in a context that includes an item Область действия запроса/поискаQuery / Search Scope Может выполнять поиск по всем экземплярам типа предметаCan search all instances of item type Может выполнять поиск по всем экземплярам типа расширения предметаCan search all instances of item extension type Может, в основном, выполнять поиск только в экземплярах типа вложенного элемента единственного (включающего) предметаIt can mainly search only in instances of the type of an embedded element of a single (inclusive) subject Семантика связейRelations Semantics Может иметь Связи к предметамMay have Item Links Нет Связей к расширениям предметаNo Links to item extensions Нет Связей к вложенным элементамNo Links to Nested Elements Ассоциация с предметамиAssociation with subjects Могут иметь связь к другим предметам при помощи Связей прикрепления, Связей внедрения и гибких СвязейMay be linked to other items using attachment links, embedding links and flexible links Могут, в основном, иметь связи только при помощи расширений. Семантика расширений аналогична семантике внедренных предметов.They can basically have connections only with the help of extensions. The semantics of extensions are similar to the semantics of embedded objects. Имеет связи с предметом при помощи полей. Вложенные элементы являются частью предмета.Has links to the subject using fields. Nested items are part of the item.

b) Расширение типов NestedElementb) Extension of NestedElement types

Типы Nested Element не расширяются при помощи такого же механизма, что и типы Item. Расширения вложенных элементов (nested elements) хранятся, и к ним выполняется обращение при помощи тех же механизмов, что и поля типов вложенных элементов.Nested Element types are not extended using the same mechanism as Item types. Extensions of nested elements are stored and accessed using the same mechanisms as the type fields of nested elements.

Модель данных определяет корень для типов вложенных элементов, названный Element:The data model defines the root for the types of nested elements called Element:

<Type Name="Element"<Type Name = "Element"

IsAbstract="True">IsAbstract = "True">

<Property Name="ElementID"<Property Name = "ElementID"

Type="the storage platformTypes.uniqueidentifier"Type = "the storage platformTypes.uniqueidentifier"

Nullable="false"Nullable = "false"

MultiValued="false"/>MultiValued = "false" />

</Type></Type>

Тип NestedElement наследует от этого типа. Тип элемента NestedElement дополнительно определяет поле, которое представляет собой мультинабор Элементов.The type NestedElement inherits from this type. The element type NestedElement additionally defines a field that is a multiset of Elements.

<Type Name="NestedElement" BaseType="Base.Element"<Type Name = "NestedElement" BaseType = "Base.Element"

IsAbstract="True">IsAbstract = "True">

<Property Name="Extensions"<Property Name = "Extensions"

Type="Base.Element"Type = "Base.Element"

Nullable="false"Nullable = "false"

MultiValued="true"/>MultiValued = "true" />

</Type></Type>

Расширения NestedElement отличаются от расширений предмета следующим:NestedElement extensions differ from item extensions in the following ways:

Расширения вложенных элементов не являются типами расширений. Они не принадлежат к иерархии типов расширений, корнем которой является тип Base.Extension.Extensions of nested elements are not extension types. They do not belong to the extension type hierarchy whose root is the Base.Extension type.

Расширения вложенных элементов хранятся вместе с другими полями предмета и не являются с глобальным доступом - не может быть составлен запрос, который извлекает все экземпляры данного типа расширения.Extensions of nested elements are stored together with other fields of the subject and are not with global access - a query cannot be made that retrieves all instances of this type of extension.

Эти расширения хранятся таким же образом, как хранятся другие вложенные элементы (предмета). Подобно другим вложенным наборам, расширения NestedElement хранятся в ОПТ (UDT). Они являются доступными через поле Extensions типа вложенных элементов.These extensions are stored in the same way as other nested elements (items) are stored. Like other nested kits, NestedElement extensions are stored in the OPT (UDT). They are accessible through the Extensions field of the type of nested elements.

Интерфейсы коллекций, используемые для доступа к свойствам со многими значениями, также используются для доступа и итерации по набору расширений типа.Collection interfaces used to access properties with many values are also used to access and iterate over a set of type extensions.

Следующая таблица суммирует и сравнивает расширения Item и NestedElement.The following table summarizes and compares the extensions Item and NestedElement.

Расширения Item по сравнению с расширениями NestedElementItem extensions compared to NestedElement extensions Расширение ItemItem Extension Расширение NestedElementNestedElement Extension ХранениеStorage Иерархия расширения Item хранится в своих собственных таблицахItem extension hierarchy is stored in its own tables Хранится подобно вложенным элементамStored like nested elements Запрос/поискQuery / Search Может запрашивать таблицы расширений предметаMay query item extension tables Может, в основном, запрашиваться только в контексте, включающем предметIt can mainly be requested only in a context that includes an item Область действия запроса/поискаQuery / Search Scope Может выполнять поиск по всем экземплярам типа расширений предметаCan search all instances of item type extensions Может, в основном, выполнять поиск только в пределах экземпляров типа вложенного элемента единственного (включающего) предметаIt can mainly perform searches only within instances of the type of an embedded element of a single (inclusive) subject ПрограммируемостьProgrammability Требует специальные ИПП (API) расширений и специальные запросы по таблицам расширенийRequires special APIs for extensions and special queries on extension tables Расширения NestedElement подобны любому другому полю со многими значениями вложенного элемента; используются ИПП (API) нормального типа вложенного элементаNestedElement extensions are like any other field with many values of a nested element; APIs of the normal type of the nested element are used Метод поведенияBehavior method Может ассоциировать метод поведенияMay associate a behavior method Методы поведения не разрешены (?)Behaviors not allowed (?) Семантика СвязейLink Semantics Нет Связей к расширениям предметаNo Links to item extensions Нет Связей к расширениям NestedElementNo Links to NestedElement Extensions ИД (ID) предметаItem ID Совместно использует ИД (ID) предмета у предметаShares the item ID of the item Не имеет своего собственного ИД (ID) предмета. Расширение NestedElement является частью предметаDoes not have its own item ID. The NestedElement extension is part of the subject.

D. ПРОЦЕССОР БАЗЫ ДАННЫХD. DATABASE PROCESSOR

Как упомянуто выше, хранилище данных реализуется на процессоре базы данных. В настоящем варианте осуществления процессор базы данных содержит процессор реляционной базы данных, который реализует язык запросов ЯСЗ (SQL), такой как процессор Microsoft SQL Server, с объектно-реляционными расширениями. В этом разделе описывается отображение модели данных, которое хранилище данных реализует для реляционного хранилища, и предоставляет информацию по логическому ИПП (API), используемому клиентами платформы хранения, согласно настоящему варианту осуществления. Понятно, однако, что может применяться другое отображение, когда применяется другой процессор базы данных. Действительно, в дополнение к реализации концептуальной модели данных платформы хранения на процессоре реляционной базы данных, она также может быть реализована на других типах баз данных, например на объектно-ориентированных базах данных и базах данных РЯР (XML).As mentioned above, the data warehouse is implemented on a database processor. In the present embodiment, the database processor comprises a relational database processor that implements SQL Server query language, such as a Microsoft SQL Server processor, with object-relational extensions. This section describes the data model mapping that the data warehouse implements for relational storage and provides information on the logical APIs used by the storage platform clients according to the present embodiment. It is understood, however, that a different mapping may be applied when a different database processor is used. Indeed, in addition to implementing the conceptual data model of the storage platform on a relational database processor, it can also be implemented on other types of databases, for example, object-oriented databases and RNR (XML) databases.

Система объектно-ориентированной (ОО) базы данных предусматривает обеспечение постоянства и транзакции для объектов языка программирования (например, С++, Java). Понятие платформы хранения «предмета» хорошо отображается на «Объект» в объектно-ориентированных системах, хотя необходимо добавить внедренные коллекции к Объектам. Принципы других типов платформы хранения, подобно наследованию и типам вложенных элементов, также отображаются на системы объектно-ориентированного типа. Объектно-ориентированные системы обычно уже поддерживают идентификацию объектов; следовательно, идентификация предмета может отображаться на идентификацию объекта. Методы поведения (операции) предметов хорошо отображаются на объектные методы. Однако в объектно-ориентированных системах обычно отсутствуют организационные возможности, и в них плохо выполняется поиск. Также объектно-ориентированные системы не обеспечивают поддержку неструктурированных и полуструктурированных данных. Чтобы поддерживать полную модель данных платформы хранения, описанную в данном документе, к объектной модели данных необходимо добавить понятия, подобные связям, папкам и расширениям. Кроме того, необходимо реализовать механизмы, подобные распространению (promotion), синхронизации, уведомлению и защите.An object-oriented (OO) database system provides for persistence and transactions for programming language objects (for example, C ++, Java). The concept of the “item” storage platform is well displayed on the “Object” in object-oriented systems, although it is necessary to add embedded collections to the Objects. The principles of other types of storage platforms, like inheritance and types of nested elements, are also mapped onto systems of an object-oriented type. Object-oriented systems usually already support object identification; therefore, the identification of the item may be mapped to the identification of the object. Methods of behavior (operation) of objects are well displayed on object methods. However, object-oriented systems usually lack organizational capabilities and are poorly searched. Also, object-oriented systems do not provide support for unstructured and semi-structured data. To support the complete storage platform data model described in this document, concepts like links, folders, and extensions must be added to the data object model. In addition, mechanisms such as promotion, synchronization, notification, and protection must be implemented.

Аналогично объектно-ориентированным системам, базы данных РЯР (XML), основанные на определении РЯР (XML)-схемы (ОРС; XSD), поддерживают системы типа на основе единичного наследования. Система типов предметов настоящего изобретения может отображаться на модель типов ОРС (XSD). ОРС (XSD) также не обеспечивают поддержку методов поведения. ОРС (XSD) для предметов необходимо дополнить методами поведения предметов. Базы данных РЯР (XML) имеют дело с единственными ОРС (XSD)-документами, и в них отсутствует возможность организации и широкого поиска. Как и с объектно-ориентированными базами данных, для поддержки модели данных, описанной в данном документе, другие понятия, подобные связям и папкам, необходимо встроить в такие базы данных РЯР (XML); также необходимо реализовать механизмы, подобные синхронизации, уведомления и защите (безопасности).Like object-oriented systems, databases of RNR (XML) based on the definition of RNR (XML) schema (OPC; XSD) support type systems based on single inheritance. The item type system of the present invention can be mapped onto an OPC type model (XSD). OPC (XSD) also does not provide support for behaviors. OPC (XSD) for items must be supplemented with item behavior methods. RNR databases (XML) deal with single ODP (XSD) documents, and they lack the ability to organize and search widely. As with object-oriented databases, in order to support the data model described in this document, other concepts, such as links and folders, must be built into such databases as RNR (XML); It is also necessary to implement mechanisms such as synchronization, notification and protection (security).

1. Реализация хранилища данных, используя ОПТ (UDT)1. The implementation of the data warehouse using the OPT (UDT)

В настоящем варианте осуществления процессор 314 реляционной базы данных, который в одном варианте осуществления содержит процессор Microsoft SQL Server, поддерживает встроенные скалярные типы. Встроенные скалярные типы являются «родными» и «простыми». Они являются родными в том смысле, что пользователь не может определять свои собственные типы, и они являются простыми в том, что они не могут инкапсулировать составную структуру. Определяемые пользователем типы (ниже: ОПТ (UDT)) обеспечивают механизм для расширяемости типов над и за пределы родной системы скалярного типа, тем самым позволяя пользователям расширять систему типов посредством определения составных, структурированных типов. Если он определен пользователем, ОПТ (UDT) может использоваться где угодно в системе типов, где может использоваться встроенный скалярный тип.In the present embodiment, the relational database processor 314, which in one embodiment comprises a Microsoft SQL Server processor, supports embedded scalar types. Built-in scalar types are "native" and "simple." They are native in the sense that the user cannot define their own types, and they are simple in that they cannot encapsulate a composite structure. User-defined types (below: UDT) provide a mechanism for extensibility of types above and beyond the native scalar type system, thereby allowing users to expand the type system by defining composite, structured types. If defined by the user, the UDT can be used anywhere in the type system where the built-in scalar type can be used.

Согласно аспекту настоящего изобретения схемы платформы хранения отображаются на классы ОПТ (UDT) в хранилище процессора базы данных. Предметы хранилища данных отображаются на классы ОПТ (UDT), выводимые из типа Base.Item. Подобно Предметам, Расширения также отображаются на классы ОПТ (UDT) и используют наследование. Корневым типом Extension является Base.Extension, из которого выводятся все типы Extension.According to an aspect of the present invention, storage platform diagrams are mapped to UTT classes in a database processor storage. Data warehouse objects are mapped to classes of opt-in storage (UDT) inferred from the Base.Item type. Like Subjects, Extensions are also mapped to UDT classes and use inheritance. The root type of Extension is Base.Extension, from which all Extension types are derived.

ОПТ (UDT) представляет собой класс ОЯСВ (CLR) - он имеет состояние (т.е. поля данных) и метод поведения (т.е. подпрограммы). ОПТ (UDT) определяются с использованием любого управляемого языка - С#, VB.NET и др. Методы и операторы ОПТ (UDT) могут вызываться в T-SQL в отношении экземпляра этого типа. ОПТ (UDT) может быть: типом столбца в строке, типом параметра подпрограммы в T-SQL или типом переменной в T-SQL.OPT (UDT) is a class of nuclear weapons library (CLR) - it has a state (i.e. data fields) and a method of behavior (i.e. subroutines). OPT (UDT) are defined using any managed language - C #, VB.NET and others. OPT methods and operators (UDT) can be called in T-SQL with respect to an instance of this type. OPT (UDT) can be: the type of a column in a row, the type of a subroutine parameter in T-SQL, or the type of a variable in T-SQL.

Следующий пример иллюстрирует основы ОПТ (UDT). Предположим, что MapLib.dll имеет сборку, названную MapLib. В этой сборке имеется класс, названный Point, в пространстве имен BaseTypes:The following example illustrates the basics of OPT (UDT). Suppose MapLib.dll has an assembly called MapLib. This assembly has a class called Point in the BaseTypes namespace:

namespace BaseTypesnamespace BaseTypes

{{

public class Pointpublic class Point

{{

//возвращает расстояние от заданной точки.// returns the distance from the given point.

public double Distance(Point p)public double Distance (Point p)

{{

//возвращает расстояние между Point p и этой Point// returns the distance between Point p and this Point

}}

//другой материал в классе// other material in the class

}}

}}

Следующий код T-SQL связывает класс Point с ОПТ (UDT) SQL Server, названным Point. На первом шаге вызывается «CreateAssembly», который загружает сборку MapLib в базу данных. На втором шаге вызывается «Create Type» для создания Определяемого пользователем типа «Point» и связывает его с управляемым типом BaseTypes.Point:The following T-SQL code associates the Point class with the SQL Server OPT (UDT) called Point. The first step calls CreateAssembly, which loads the MapLib assembly into the database. In the second step, “Create Type” is called to create the user-defined “Point” type and associates it with the managed type BaseTypes.Point:

CREATE ASSEMBLY MapLibCREATE ASSEMBLY MapLib

FROM '\\mysrv\share\MapLib.dll'FROM '\\ mysrv \ share \ MapLib.dll'

gogo

CREATE TYPE PointCREATE TYPE Point

EXTERNAL NAME 'BaseTypes.Point'EXTERNAL NAME 'BaseTypes.Point'

gogo

Если он создан, ОПТ (UDT) «Point» может использоваться в качестве столбца в таблице и методы могут вызываться в T-SQL, как показано ниже:If it is created, the Point UDT can be used as a column in the table and the methods can be called in T-SQL, as shown below:

Create table Cities(Create table Cities (

Name varchar(20),Name varchar (20),

State varchar(20),State varchar (20),

Location Point)Location Point)

-- Извлечь Distance городов- Extract Distance Cities

-- из координат (32, 23)- from coordinates (32, 23)

Declare @p point(32, 23), @distance floatDeclare @p point (32, 23), @distance float

Select Location::Distance(@p)Select Location :: Distance (@p)

From CitiesFrom cities

Отображение схем платформы хранения на классы ОПТ (UDT) является довольно непосредственным на высоком уровне. В основном, Схема платформы хранения отображается на пространство имен ОЯСВ (CLR). Тип платформы хранения отображается на класс ОЯСВ (CLR). Наследование класса ОЯСВ (CLR) отражает наследование Типа платформы хранения, и Свойство платформы хранения отображается на свойство класса ОЯСВ (CLR).Mapping storage platform schemas to UTT classes is fairly straightforward at a high level. Basically, the storage platform schema is mapped to the SNRN (CLR) namespace. The type of storage platform is mapped to the CLR class. Inheritance of the CLR class reflects the inheritance of the Storage Platform Type, and the property of the storage platform maps to the property of the CLR class.

Иерархия Предметов, изображенная на фиг.29, используется в качестве примера в данном документе. Она показывает тип Base.Item, из которого выводятся все типы Item, вместе с набором производных типов Item (например, Contact.Person и Contact.Employee), с наследованием, указанным стрелками.The Item Hierarchy depicted in FIG. 29 is used as an example in this document. It shows the Base.Item type, from which all Item types are derived, along with a set of derived Item types (e.g. Contact.Person and Contact.Employee), with the inheritance indicated by arrows.

2. Отображение предметов2. Display items

Задаваясь желательностью глобального поиска для Предметов и поддержки в реляционной базе данных настоящего варианта осуществления наследования и замещаемости типов, одной возможной реализацией хранения Предметов в хранилище базы данных было бы хранение всех Предметов в единственной таблице со столбцом типа Base.Item. Используя замещаемость типов, Предметы всех типов могли бы храниться, и поиск мог бы фильтроваться по типу и подтипу Item, используя оператор Yukon «is of (Тип)».Given the desirability of a global search for Items and support in the relational database of this embodiment of type inheritance and replaceability, one possible implementation of storing Items in a database repository would be to store all Items in a single table with a column of type Base.Item. Using type substitution, Items of all types could be stored, and the search could be filtered by type and subtype of Item, using the Yukon "is of ( Type )" operator.

Однако вследствие важности служебных данных, связанных с таким подходом, в настоящем варианте осуществления Предметы делятся типом верхнего уровня, так что Предметы каждого «семейства» типа хранятся в отдельной таблице. При такой схеме разделения таблица создается для каждого типа Item, наследуя непосредственно из Base.Item. Типы, наследующие ниже этих, хранятся в соответствующей таблице семейства типа, используя замещаемость типов, как описано выше. Только первый уровень наследования из Base.Item рассматривается специально. Для примерной иерархии Предметов, показанной на фиг.29, это приводит к следующим таблицам семейства типа:However, due to the importance of overhead associated with such an approach, in the present embodiment, the Items are divided by the top-level type, so that the Items of each “family” of the type are stored in a separate table. With this separation scheme, a table is created for each type of Item, inheriting directly from Base.Item. Types inheriting below these are stored in the corresponding table of the type family, using type substitutions, as described above. Only the first level of inheritance from Base.Item is considered specifically. For the exemplary Item hierarchy shown in FIG. 29, this leads to the following type family tables:

create table Contact.[Table!Person] (create table Contact. [Table! Person] (

_Item Contact.Person not null,_Item Contact.Person not null,

{Информация по отслеживанию изменений}{Change Tracking Information}

))

create table Doc.[Table!Document] (create table Doc. [Table! Document] (

_Item Doc.Document not null,_Item Doc.Document not null,

{Информация по отслеживанию изменений}{Change Tracking Information}

))

«Теневая» таблица используется для хранения копий свойств глобального поиска для всех Предметов. Эта таблица может поддерживаться методом Update() ИПП (API) платформы хранения, при помощи которого выполняются все изменения данных. В отличие от таблиц семейства типа эта глобальная таблица Предметов содержит только скалярные свойства верхнего уровня Предмета, не полного объекта ОПТ (UDT) Item. Структура глобальной таблицы Предметов следующая:The Shadow table is used to store copies of global search properties for all Items. This table can be supported by the Update () method of the storage platform API (API), by which all data changes are performed. Unlike type family tables, this global Item table contains only scalar properties of the top level of an Item, not a complete UDT Item. The structure of the global Item table is as follows:

create table Base.[Table!Item] (create table Base. [Table! Item] (

ItemID uniqueidentifier not null constraint [PK_Clu_Item!ItemID] primary key clustered,ItemID uniqueidentifier not null constraint [PK_Clu_Item! ItemID] primary key clustered,

TypeID uniqueidentifier not null,TypeID uniqueidentifier not null,

{Дополнительные свойства Base.Item},{Additional properties of Base.Item},

{Информации по отслеживанию изменений}{Change Tracking Information}

))

Глобальная таблица Предметов дает возможность выполнять навигацию к объекту Item, хранимому в таблице семейства типа, посредством раскрытия ItemID и TypeID. ItemID, в основном, однозначно идентифицирует Предмет в хранилище данных. TypeID может отображаться, используя метаданные, которые не описываются здесь, на имя типа и представление, включающее Предмет.The Global Item table enables you to navigate to an Item object stored in a type family table by expanding ItemID and TypeID. ItemID basically uniquely identifies the Item in the data warehouse. A TypeID may be displayed using metadata that is not described here in the type name and view including the Subject.

Так как обнаружение Предмета по его ItemID может быть простой операцией как в контексте глобальной таблицы Предметов, так и иным образом, предусматривается функция GetItem() для извлечения объекта Item по ItemID Предмета. Эта функция имеет следующее объявление:Since discovering an Item by its ItemID can be a simple operation both in the context of the global table of Items and otherwise, the GetItem () function is provided to retrieve an Item by the ItemID of the Item. This function has the following declaration:

Base.Item Base.GetItem (uniqueidentifier ItemID)Base.Item Base.GetItem (uniqueidentifier ItemID)

Для удобного доступа и скрытия подробностей реализации до возможной степени все запросы Предметов могут выполняться в отношении представлений, построенных на таблицах Предметов, описанных выше. Конкретно, представления могут создаваться для каждого типа Item в отношении соответствующей таблицы семейства типа. Эти представления типов могут выбирать все Предметы ассоциированного типа, включая подтипы. Для удобства в дополнение к объекту ОПТ (UDT) представления могут раскрывать столбцы для всех полей верхнего уровня этого типа, включая наследуемые поля. Представления для примерной иерархии Предметов, показанной на фиг.29, следующие:For convenient access and concealment of implementation details, to the extent possible, all queries of Items can be performed in relation to the views built on the tables of Items described above. Specifically, views can be created for each type of Item in relation to the corresponding table of the type family. These type representations can select all Items of the associated type, including subtypes. For convenience, in addition to the UDT object, views can expand columns for all top-level fields of this type, including inherited fields. The views for the exemplary hierarchy of Items shown in FIG. 29 are as follows:

create view Contact.Person ascreate view Contact.Person as

select _Item.ItemID, {Свойства Base.Item}, {Свойства Contact.Person}, {Информация по отслеживанию изменений}, _Itemselect _Item.ItemID, {Base.Item Properties}, {Contact.Person Properties}, {Change Tracking Information}, _Item

from Contact.[Table!Person]from Contact. [Table! Person]

--Отметьте, что представление Contact.Employee использует предикат «where»- Note that the Contact.Employee view uses the predicate "where"

--для ограничения набора обнаруженных Предметов до экземпляров Contact.Employee--to limit the set of detected Items to Contact.Employee instances

create view Contact. Employee ascreate view Contact. Employee as

select _Item.ItemID, {Свойства Base.Item}, {Свойства Contact.Person}, {Свойстваselect _Item.ItemID, {Base.Item Properties}, {Contact.Person Properties}, {Properties

Contact. Employee},Contact Employee},

{Информация по отслеживанию изменений}, cast (_Item as Contact.Employee){Change Tracking Information}, cast (_Item as Contact.Employee)

from Contact.[Table!Person]from Contact. [Table! Person]

where _Item is of (Contact. Employee)where _Item is of (Contact. Employee)

create view Doc. Document ascreate view Doc. Document as

select _Item.ItemID, {Свойства Base.Item}, {Свойства Doc.Document}, {Информация поselect _Item.ItemID, {Base.Item Properties}, {Doc.Document Properties}, {Information on

отслеживанию изменений}, _Itemchange tracking}, _Item

from Doc.[Table!Document]from Doc. [Table! Document]

--Отметьте, что представление Doc.WordDocument использует предикат «where»--Note that the Doc.WordDocument view uses the predicate "where"

--для ограничения набора обнаруженных Предметов до экземпляров Doc.WordDocument--to limit the set of discovered Items to instances of Doc.WordDocument

create view Doc.WordDocument ascreate view Doc.WordDocument as

select _Item.ItemID, {Свойства Base.Item}, {Свойства Doc.Document}, {Свойстваselect _Item.ItemID, {Base.Item Properties}, {Doc.Document Properties}, {Properties

Doc.WordDocument},Doc.WordDocument},

{Информация по отслеживанию изменений}, cast (_Item as Doc.WordDocument){Change Tracking Information}, cast (_Item as Doc.WordDocument)

from Doc.[Table!Document]from Doc. [Table! Document]

where _Item is of (Doc.WordDocument)where _Item is of (Doc.WordDocument)

Для полноты представление также может создаваться по глобальной таблице Предметов. Это представление первоначально может раскрывать такие же столбцы, что и таблица:For completeness, a view can also be created using the global Item table. This view may initially expand the same columns as the table:

create view Base.Item ascreate view Base.Item as

select ItemID, TypeID, {Свойства Base.Item}, {Информация по отслеживаниюselect ItemID, TypeID, {Base.Item Properties}, {Tracking Information

изменений}changes}

from Base.[Table!Item]from Base. [Table! Item]

3. Отображение расширений3. Display extensions

Расширения очень похожи на Предметы и имеют некоторые из таких же требований. В качестве другого корневого типа, поддерживающего наследование, Расширения подвержены многим из таких же соображений и компромиссов при хранении. Из-за этого к Расширениям применяется подобное отображение семейства типа, а не подход с единственной таблицей. Конечно, в других вариантах осуществления может использоваться подход с единственной таблицей.Extensions are very similar to Items and have some of the same requirements. As another root type that supports inheritance, Extensions are subject to many of the same considerations and trade-offs during storage. Because of this, a similar type family mapping is applied to Extensions, rather than a single table approach. Of course, in other embodiments, a single table approach may be used.

В настоящем варианте осуществления Расширение ассоциируется с точно одним Предметом посредством ItemID и содержит ExtensionID, который является уникальным в контексте Предмета. Таблица Расширений имеет следующее определение:In the present embodiment, an Extension is associated with exactly one Item through an ItemID and contains an ExtensionID that is unique in the context of the Item. The Extensions table has the following definition:

create table Base.[Table!Extension] (create table Base. [Table! Extension] (

ItemID uniqueidentifier not null,ItemID uniqueidentifier not null,

ExtensionID uniqueidentifier not null,ExtensionID uniqueidentifier not null,

TypeID uniqueidentifier not null,TypeID uniqueidentifier not null,

{Свойства Base.Extension},{Base.Extension Properties},

{Информация по отслеживанию изменений},{Change Tracking Information},

constraint [PK_Clu_Extension!ItemID!ExtensionID]constraint [PK_Clu_Extension! ItemID! ExtensionID]

primary key clustered (ItemID asc, ExtensionID asc)primary key clustered (ItemID asc, ExtensionID asc)

))

Как и с Предметами может быть предусмотрена функция для извлечения Расширения по его идентификатору, который состоит из пары ItemID и ExtensionID. Эта функция имеет следующее объявление:As with Items, a function can be provided to retrieve an Extension by its identifier, which consists of a pair of ItemID and ExtensionID. This function has the following declaration:

Base.Extension Base.GetExtension (uniqueidentifier ItemID, uniqueidentifier ExtensionID,)Base.Extension Base.GetExtension (uniqueidentifier ItemID, uniqueidentifier ExtensionID,)

Для каждого типа Extension создается Представление, аналогичное представлениям типа Item. Предположим, что иерархия Расширений параллельна примерной иерархии Предметов со следующими типами: Base.Extension, Contact.PersonExtension, Contact.For each type of Extension, a View is created similar to the views of the Item type. Suppose that the hierarchy of Extensions is parallel to the sample hierarchy of Items with the following types: Base.Extension, Contact.PersonExtension, Contact.

create view Contact.[Extension!PersonExtension] ascreate view Contact. [Extension! PersonExtension] as

select _Extension.ItemID, _Extension.ExtensionID, { EmployeeExtension. Могут быть созданы следующие представления:select _Extension.ItemID, _Extension.ExtensionID, {EmployeeExtension. The following views can be created:

create view Base.Extension ascreate view Base.Extension as

select ItemID, ExtensionID, TypeID, {Свойства Base.Extension}, {Информация поselect ItemID, ExtensionID, TypeID, {Base.Extension Properties}, {Information on

отслеживанию изменений}change tracking}

from Base.[Table!Extension]Свойства Base.Extension, {Свойстваfrom Base. [Table! Extension] Properties of Base.Extension, {Properties

Contact.PersonExtension},Contact.PersonExtension},

{Информация по отслеживанию изменений}, _Extension{Change Tracking Information}, _Extension

from Base.[Table!PersonExtension]from Base. [Table! PersonExtension]

create view Contact.[Extension!EmployeeExtension] ascreate view Contact. [Extension! EmployeeExtension] as

select _Extension.ItemID, _Extension.ExtensionID, {Свойства Base.Extension), {Свойстваselect _Extension.ItemID, _Extension.ExtensionID, {Base.Extension Properties), {Properties

Contact.PersonExtension},Contact.PersonExtension},

{Свойства Contact.EmployeeExtension}, {Информация по отслеживанию{Contact.EmployeeExtension Properties}, {Tracking Information

изменений},changes}

cast (_Extension as Contact.EmployeeExtension)cast (_Extension as Contact.EmployeeExtension)

from Base.[Table!PersonExtension]from Base. [Table! PersonExtension]

where _Extension is of (Contact.EmployeeExtension)where _Extension is of (Contact.EmployeeExtension)

4. Отображение вложенных элементов4. Display of nested elements

Вложенные элементы представляют собой типы, которые могут внедряться в Предметы, Расширения, Связи или другие Вложенные элементы, формируя структуры с большой глубиной вложения. Подобно Предметам и Расширениям Вложенные Элементы реализуются как ОПТ (UDT), но они хранятся в Предметах и Расширениях. Поэтому Вложенные Элементы не имеют отображения хранения кроме их контейнеров Предметов и Расширений. Другими словами, нет таблиц в системе, которые непосредственно хранят экземпляры типов NestedElement, и нет представлений, специально выделенных Вложенным элементам.Nested elements are types that can be embedded in Items, Extensions, Links or other Nested elements, forming structures with a large depth of nesting. Like Items and Extensions, Nested Elements are implemented as OPT (UDT), but they are stored in Items and Extensions. Therefore, Nested Elements do not have a storage display other than their Containers of Items and Extensions. In other words, there are no tables on the system that directly store instances of NestedElement types, and there are no views specifically allocated to Nested Elements.

5. Идентификация объектов5. Identification of objects

Каждая сущность в модели данных, т.е. каждый Предмет, Расширение и Связь, имеет уникальное значение ключа. Предмет однозначно идентифицируется посредством его ItemID. Расширение однозначно идентифицируется посредством составного ключа (ItemId, ExtensionId). Связь идентифицируется составным ключом (ItemId, RelationshipId). ItemId, ExtensionId и RelationshipId представляют собой значения GUID.Each entity in the data model, i.e. Each Item, Extension and Link, has a unique key value. An item is uniquely identified by its ItemID. An extension is uniquely identified by means of a compound key (ItemId, ExtensionId). A relationship is identified by a compound key (ItemId, RelationshipId). ItemId, ExtensionId, and RelationshipId are GUID values.

6. Именование объектов ЯСЗ (SQL)6. Naming of objects of the LSS (SQL)

Все объекты, созданные в хранилище данных, могут храниться в имени схемы ЯСЗ (SQL), выводимом из имени схемы платформы хранения. Например, Базовая схема платформы хранения (часто называемая «Base») может создавать типы в схеме ЯСЗ (SQL) «[System.Storage]», такой как «[System.Storage].Item». К генерируемым именам добавляется префикс при помощи квалификатора для устранения конфликтов именования. Когда это является подходящим, восклицательный знак (!) используется в качестве разделителя для каждой логической части имени. В таблице ниже вкратце изложено соглашение об именовании, используемое для объектов в хранилище данных. Каждый элемент схемы (Предмет, Расширение, Связь и Представление) перечисляется вместе с соглашением о декорированном именовании, используемом для доступа к экземплярам в хранилище данных.All objects created in the data warehouse can be stored in the name of the SCL (SQL) schema that is derived from the name of the storage platform schema. For example, a Base Storage Platform Schema (often called a “Base”) can create types in the SQL [SQL] scheme “[System.Storage]”, such as “[System.Storage] .Item”. A prefix is added to the generated names using a qualifier to eliminate naming conflicts. When appropriate, an exclamation mark (!) Is used as a separator for each logical part of the name. The table below summarizes the naming convention used for objects in the data warehouse. Each schema element (Item, Extension, Link, and Presentation) is listed along with the decorated naming convention used to access instances in the data warehouse.

ОбъектAn object Декорирование именName decoration ОписаниеDescription ПримерExample Главное Представление Поиска ПредметовTop Subject Search Submission Master!ItemMaster! Item Предоставляет сводку предметов в текущем домене предметовProvides a summary of items in the current item domain [System.Storage].
[Master!Item]
[System.Storage].
[ Master! Item ]
Типизированное представление поиска ПредметовTyped view of a Search item ТипПредметаItem Type Предоставляет данные всех свойств из предмета и любого родительского типа(ов).Provides data for all properties from an item and any parent type (s). [AcmeCorp.Doc]. [OfficeDoc][AcmeCorp.Doc]. [OfficeDoc] Главное Представление Поиска РасширенийTop View Search Extensions Master!ExtensionMaster! Extension Предоставляет сводку всех расширений в текущем домене предметов.Provides a summary of all extensions in the current item domain. [System.Storage].
[Master!Extension]
[System.Storage].
[ Master! Extension ]
Типизированное представление поиска расширенийTyped extension search view Extension!Типрасширения Extension ! Extension Type Предоставляет данные всех свойств для расширения Provides data for all properties for extension [AcmeCorp.Doc ].
[Extension!StickyNote]
[AcmeCorp.Doc].
[ Extension ! StickyNote]
Главное Представление СвязейTop View Links Master!RelationshipMaster! Relationship Предоставляет сводку всех связей в текущем домене предметов.Provides a summary of all links in the current item domain. [System.Storage].
[Master!Relationship]
[System.Storage].
[ Master! Relationship ]
Представление связейRelationship View Relationship!Имя связи Relationship ! Link Name Предоставляет все данные, ассоциированные с данной связью Provides all the data associated with this association. [AcmeCorp.Doc].
[Relationship!AuthorsFromDocument]
[AcmeCorp.Doc].
[ Relationship ! AuthorsFromDocument]
ПредставлениеPerformance View!Имя представления View ! View Name Предоставляет все столбцы/типы, основанные на определении схемы view.Provides all columns / types based on the view schema definition. [AcmeCorp.Doc].
[View!DocumentTitles]
[AcmeCorp.Doc].
[ View ! DocumentTitles]

7. Именование столбцов7. Naming columns

При отображении любой объектной модели на хранилище имеет место возможность конфликтов именования вследствие дополнительной информации, хранимой вместе с объектом-приложением. Чтобы исключить конфликты именования, все столбцы, не характерные для типа, (столбцы, которые не отображаются непосредственно на именованное Свойство в объявлении типа) дополняются префиксом при помощи символа подчеркивания (_). В настоящем варианте осуществления символы подчеркивания (_) запрещены в качестве начального знака любого свойства идентификатора. Далее, чтобы унифицировать именование между ОЯСВ (CLR) и хранилищем данных, все свойства типов или элемента схемы (связь и т.д.) платформы хранения должны иметь написанный заглавными буквами первый символ.When mapping any object model to the repository, there is the possibility of naming conflicts due to additional information stored with the application object. To avoid naming conflicts, all columns not specific to the type (columns that do not map directly to the named Property in the type declaration) are prefixed with an underscore (_). In the present embodiment, the underscore (_) characters are prohibited as the initial character of any identifier property. Further, to unify the naming between the CLR and the data warehouse, all properties of the types or element of the scheme (communication, etc.) of the storage platform must have the first character written in capital letters.

8. Представления поиска8. Search submissions

Представления предусматриваются платформой хранения для поиска хранимого содержимого. Представление ЯСЗ (SQL) предоставляется для каждого типа Item и Extension. Далее, представления предоставляются для поддержки Связей и Представлений (определенных Моделью Данных). Все представления ЯСЗ (SQL) и лежащие в основе таблицы в платформе хранения являются только для чтения. Данные могут храниться или изменяться с использованием метода Update() ИПП (API) платформы хранения, как описано более подробно ниже.Views are provided by the storage platform to search for stored content. A JSS view is provided for each type of Item and Extension. Further, views are provided to support Links and Views (defined by the Data Model). All SQL Server views and underlying tables in the storage platform are read-only. Data may be stored or modified using the Update () method of the storage platform API (API), as described in more detail below.

К каждому представлению, явно определенному в схеме (определяемой разработчиком схемы и не генерируемой автоматически платформой хранения) платформы хранения, может обращаться именованное представление ЯСЗ (SQL) [<имя-схемы].[View!<имя-представления>]. Например, к представлению, именованному «BookSales» в схеме «AcmePublisher.Books», можно обращаться с использованием имени «[AcmePublisher.Books].[View!BookSales]». Так как выходной формат представления настраивается на основе каждого представления (определяемый посредством произвольного запроса, предоставляемого стороной, определяющей представление), столбцы непосредственно отображаются, основываясь на определении представления схемы.Each view that is explicitly defined in the scheme (defined by the developer of the scheme and not automatically generated by the storage platform) of the storage platform can be referred to as a named view of SQL Server [<schema-name]. [ View! <view_name>]. For example, a view named “BookSales” in the “AcmePublisher.Books” schema can be accessed using the name “[AcmePublisher.Books]. [View! BookSales]”. Since the output format of the view is configured based on each view (determined by an arbitrary request provided by the party that defines the view), the columns are directly displayed based on the definition of the presentation of the diagram.

Все представления поиска ЯСЗ (SQL) в хранилище данных платформы хранения используют следующее соглашение об упорядочении для столбцов:All SQL Server (SQL) search views in the storage platform data warehouse use the following collation for columns:

1. Логический «ключевой» столбец (столбцы) результата представления, такой как ItemId, ElementId, RelationshipId, … 1. The logical “key” column (s) of the presentation result, such as ItemId, ElementId, RelationshipId, ...

2. Информация метаданных по типу результата, такая как TypeId.2. Metadata information by type of result, such as TypeId .

3. Столбцы отслеживания изменений, такие как CreateVersion, UpdateVersion, … 3. Change tracking columns, such as CreateVersion, UpdateVersion, ...

4. Характерный для типа столбец (столбцы) (Свойства объявленного типа).4. Type-specific column (s) (Properties of the declared type).

5. Характерные для типа представления (представления семейства) также содержат столбец объекта, который возвращает объект.5. Type-specific representations (family representations) also contain an object column that returns the object.

Члены каждого семейства типа являются доступными для поиска, используя последовательность представлений Предметов, причем имеется одно представление на тип Item в хранилище данных.Members of each type family are searchable using a sequence of Item views, with one view per Item type in the data store.

а) Предметa) subject

Каждое представление поиска Предмета содержит строку для каждого экземпляра Предмета конкретного типа или его подтипов. Например, представление для Document может возвращать экземпляры Document, LegalDocument и ReviewDocument. Принимая во внимание данный пример, представления Предметов могут быть представлены на концептуальном уровне так, как показано на фиг.28.Each Item search view contains a string for each instance of the Item of a particular type or its subtypes. For example, a view for a Document may return instances of Document, LegalDocument, and ReviewDocument. Given this example, the representations of Items can be represented at a conceptual level as shown in FIG. 28.

(1) Главное представление поиска предметов(1) The main item search view

Каждый экземпляр хранилища данных платформы хранения определяет специальное представление Предметов, названное Главное представление Предметов. Это представление предусматривает информационную сводку по каждому Предмету в хранилище данных. Представление предусматривает один столбец на свойство типа Item, столбец, который описывает тип Предмета, и несколько столбцов, которые используются для предоставления информации по отслеживанию изменений и синхронизации. Главное представление предметов идентифицируется в хранилище данных, используя имя «[System.Storage].[Master!Item]».Each instance of the storage platform data warehouse defines a special Item view called the Master Item view . This view provides an informational summary for each Item in the data warehouse. The view provides one column for a property of type Item, a column that describes the type of the Item, and several columns that are used to provide change tracking and synchronization information. The main item view is identified in the data warehouse using the name “[System.Storage]. [Master! Item]”.

СтолбецColumn ТипType of ОписаниеDescription ItemIdItemId ItemIdItemId Идентификация платформы хранения ПредметаItem Storage Platform Identification _TypeId_TypeId TypeIdTypeid TypeId Предмета идентифицирует точный тип Предмета и может использоваться для извлечения информации по типу, используя каталог Metadata.The TypeId of the Item identifies the exact type of the Item and can be used to retrieve information by type using the Metadata directory. _RootItemId_RootItemId ItemIdItemId ItemId первого невнедренного предшественника, который управляет временем существования этого предмета.ItemId of the first non-implanted predecessor that controls the lifetime of this item. <глобальное отслеживание изменений><global change tracking> ... Информация о глобальном отслеживании измененийGlobal Change Tracking Information <Свойства Item><Item Properties> не применяетсяnot applicable Один столбец на свойство типа ItemOne column per property of type Item

(2) Типизированные представления поиска предметов(2) Typed item search representations

Каждый тип Item также имеет представление поиска. Наряду с тем, что оно является аналогичным представлению корневого Предмета, это представление также обеспечивает доступ к объекту Item при помощи столбца «_Item». Каждое типизированное представление поиска предмета идентифицируется в хранилище данных с использованием имени [Имясхемы].[Имятипаitem]. Например, [AcmeCorp.Doc].[OfficeDoc].Each type of Item also has a search representation. Along with being similar to the representation of the root Item, this view also provides access to the Item object using the "_Item" column. Each typed representation of the subject search is identified in the data warehouse using the name [ Name ]. [ Name ]. For example, [AcmeCorp.Doc]. [OfficeDoc].

СтолбецColumn ТипType of ОписаниеDescription ItemIdItemId ItemIdItemId Идентификация платформы хранения ПредметаItem Storage Platform Identification <отслеживание изменений типа><type change tracking> ... Информация по отслеживанию изменений типаType Change Tracking Information <родительские свойства><parent properties> <характерные для свойства<characteristic properties Один столбец на родительское свойствоOne column per parent property <свойства предмета><item properties> <характерные для свойства><property specific> Один столбец на исключительное свойство этого типаOne column per exceptional property of this type _Item_Item Тип ОЯСВ (CLR) ПредметаType NLWW (CLR) Item Объект ОЯСВ (CLR) - тип объявленного ПредметаNLW Object (CLR) - Type of declared Item

b) Расширения предметаb) Item extensions

Все Расширения Предмета в WinFS также являются доступными с использованием представлений поиска.All Subject Extensions in WinFS are also available using search views.

(1) Главное представление поиска расширений(1) Main view of extension search

Каждый экземпляр хранилища данных определяет специальное представление Расширений, названное Главное представление Расширений. Это представление предоставляет информационную сводку по каждому Расширению в хранилище данных. Представление имеет столбец на свойство Расширения, столбец, который описывает тип Расширения, и несколько столбцов, которые используются для предоставления информации по отслеживанию изменений и синхронизации. Главное представление расширений идентифицируется в хранилище данных с использованием имени «[System.Storage].[Master!Extension]».Each instance of the data warehouse defines a special extension view called the Extension Extension Main View . This view provides an informational summary of each Extension in the data warehouse. The view has a column on the Extensions property, a column that describes the type of Extensions, and several columns that are used to provide change tracking and synchronization information. The main extension view is identified in the data warehouse using the name "[System.Storage]. [Master! Extension]".

СтолбецColumn ТипType of ОписаниеDescription ItemIdItemId ItemIdItemId Идентификация платформы хранения Предмета, с которым ассоциируется это расширениеIdentification of the Item storage platform this extension is associated with ExtensionIdExtensionId ExtensionId (GUID)ExtensionId (GUID) ИД (ID) этого экземпляра расширенияID of this extension instance _TypeId_TypeId TypeIdTypeid TypeId Расширения - идентифицирует точный тип расширения и может использоваться для извлечения информации по расширению, используя каталог Metadata.TypeId Extensions - Identifies the exact type of extension and can be used to retrieve extension information using the Metadata directory. <глобальное отслеживание изменений><global change tracking> ... Информация по глобальному отслеживанию измененийGlobal Change Tracking Information <свойства расширений><extension properties> <характерные для расширений><extension specific> Один столбец на свойство типа ExtensionOne column per property of type Extension

(2) Типизированные представления поиска расширений(2) Typed Extension Search Views

Каждый тип Extension также имеет представление поиска. Наряду с тем, что оно является аналогичным главному представлению расширений, это представление также предоставляет доступ к объекту Item посредством столбца _Extension. Каждое типизированное представление поиска расширений идентифицируется в хранилище данных с использованием имени [Имясхемы].[Extension! ИмяТипарасширения]. Например, [AcmeCorp.Doc].[Extension!OfficeDocExt].Each type of Extension also has a search view. Along with being similar to the main extension view, this view also provides access to the Item object through the _Extension column. Each typed extension search lookup is identified in the data store using the name [ Name ]. [ Extension! ExtensionName ]. For example, [AcmeCorp.Doc]. [Extension! OfficeDocExt].

СтолбецColumn ТипType of ОписаниеDescription ItemIdItemId ItemIdItemId Идентификация платформы хранения Предмета, с которым ассоциируется это расширениеIdentification of the Item storage platform this extension is associated with ExtensionIdExtensionId ExtensionId (GUID)ExtensionId (GUID) ИД (ID) этого экземпляра расширенияID of this extension instance <отслеживание изменений типа><type change tracking> ... Информация по отслеживанию изменений типаType Change Tracking Information <родительские свойства><parent properties> <характерные для свойства><property specific> Один столбец на родительское свойствоOne column per parent property <свойства расширения><extension properties> <характерные для свойства><property specific> Один столбец на исключительное свойство этого типаOne column per exceptional property of this type _Extension_Extension Тип ОЯСВ (CLR) экземпляра РасширенияExtension type CLR (Instance Type) Объект ОЯСВ (CLR) - тип объявленного РасширенияNLB Object (CLR) - Type of declared Extension

с) Вложенные элементыc) Nested elements

Все вложенные элементы хранятся в экземплярах Предметов, Расширений или Связей. По существу, к ним обращаются посредством запроса соответствующего представления поиска Предметов, Расширений или Связей.All nested items are stored in instances of Items, Extensions, or Links. Essentially, they are accessed by querying the appropriate search for Items, Extensions, or Links.

d) Связиd) Communication

Как описано выше, Связи формируют фундаментальную единицу связывания между Предметами в хранилище данных платформы хранения.As described above, Links form the fundamental unit of binding between Items in the storage platform data warehouse.

(1) Главное представление поиска связей(1) Top link search view

Каждое хранилище данных предоставляет Главное представление Связей. Это представление предоставляет информацию по всем экземплярам связей в хранилище данных. Главное представление связей идентифицируется в хранилище данных с использованием имени «[System.Storage].[Master!Relationship]».Each data store provides a Main Relationship view . This view provides information on all instances of relationships in the data warehouse. The main relationship view is identified in the data warehouse using the name “[System.Storage]. [Master! Relationship]”.

СтолбецColumn ТипType of ОписаниеDescription ItemIdItemId ItemIdItemId Идентификация конечной точки (ItemId) источникаSource Endpoint Identification (ItemId) RelationshipIdRelationshipId RelationshipId (GUID)RelationshipId (GUID) ИД (ID) экземпляра связиLink Instance ID _RelTypeId_RelTypeId RelationshipTypeIdRelationshipTypeId RelTypeId Связи - идентифицирует тип экземпляра связи, используя каталог MetadataRelTypeId Links - Identifies the type of link instance using the Metadata directory <глобальное отслеживание изменений><global change tracking> ... Информация по глобальному отслеживанию измененийGlobal Change Tracking Information TargetItemReferenceTargetItemReference ItemReferenceItemReference Идентификация конечной точки целиTarget Endpoint Identification _Relationship_Relationship RelationshipRelationship Экземпляр объекта Relationship для этого экземпляраAn instance of the Relationship object for this instance

(2) Представления поиска экземпляров связи(2) Communication instance search submissions

Каждая объявленная Связь также имеет представление поиска, которое возвращает все экземпляры конкретной связи. Наряду с тем, что оно является аналогичным главному представлению связи, это представление также предоставляет именованные столбцы для каждого свойства данных связи. Каждое представление поиска экземпляров связи идентифицируется в хранилище данных с использованием имени [Имясхемы].[Relationship!Имясвязи]. Например, [AcmeCorp.Doc].[Relationship!DocumentAuthor].Each advertised Link also has a search representation that returns all instances of a particular link. Along with being similar to the main view of a link, this view also provides named columns for each property of the link data. Each view of the link instance search is identified in the data store using the name [ Name ]. [ Relationship ! Name the link ]. For example, [AcmeCorp.Doc]. [Relationship! DocumentAuthor].

СтолбецColumn ТипType of ОписаниеDescription ItemIdItemId ItemIdItemId Идентификация конечной точки (ItemId) источникаSource Endpoint Identification (ItemId) RelationshipIdRelationshipId RelationshipId (GUID)RelationshipId (GUID) ИД (ID) экземпляра связиLink Instance ID <отслеживание изменений типа><type change tracking> ... Информация по отслеживанию изменений типаType Change Tracking Information TargetItemReferenceTargetItemReference ItemReferenceItemReference Идентификация конечной точки целиTarget Endpoint Identification <имя источника><source name> ItemIdItemId Именованное свойство идентификации конечной точки источника (псевдоним для ItemId)Named source endpoint identification property (alias for ItemId) <имя цели><target name> ItemReference или производный классItemReference or derived class Именованное свойство идентификации конечной точки цели (псевдоним и приведение типов для TargetItemReference)Named target endpoint identification property (alias and type casting for TargetItemReference) <свойство связи><communication property> <характерное для свойства><property specific> Один столбец на свойство определения связиOne column per link definition property _Relationship_Relationship Тип ОЯСВ (CLR) экземпляра СвязиLINES type (CLR) of the Link instance Объект ОЯСВ (CLR) - тип объявленной СвязиNLW object (CLR) - type of declared Link

9. Обновления9. Updates

Все представления в хранилище данных платформы хранения являются только для чтения. Чтобы создать новый экземпляр элемента модели данных (предмет, расширение или связь) или обновить существующий экземпляр, должны использоваться методы ProcessOperation или ProcessUpdategram ИПП (API) платформы хранения. Метод ProcessOperation представляет собой единственную хранимую процедуру, определенную хранилищем данных, которая использует «операцию», которая детализирует действие, подлежащее выполнению. Метод ProcessUpdategram представляет собой хранимую процедуру, которая принимает упорядоченный набор операций, известный как «updategram», который вместе детализирует набор действий, подлежащих выполнению.All views in the storage platform data warehouse are read-only. To create a new instance of a data model element (item, extension, or relationship) or update an existing instance, the ProcessOperation or ProcessUpdategram methods of the storage platform API must be used. The ProcessOperation method is the only stored procedure defined by the data store that uses an “operation” that details the action to be performed. The ProcessUpdategram method is a stored procedure that accepts an ordered set of operations, known as an “updategram”, which together details the set of actions to be performed.

Формат операции является расширяемым и обеспечивает различные операции над элементами схемы. Некоторые общие операции включают в себя:The operation format is extensible and provides various operations on circuit elements. Some common operations include:

1. Операции над Предметами:1. Operations on Items:

а. CreateItem (Создает новый предмет в контексте связи внедрения или прикрепления)but. CreateItem (Creates a new item in the context of an embed or attach relationship)

b. UpdateItem (обновляет существующий Предмет)b. UpdateItem (updates an existing Item)

2. Операции над Связями:2. Relationship Operations:

а. CreateRelationship (создает экземпляр связи ссылки или прикрепления)but. CreateRelationship (creates an instance of link or attach link)

b. UpdateRelationship (обновляет экземпляр связи)b. UpdateRelationship (updates link instance)

c. DeleteRelationship (удаляет экземпляры связей)c. DeleteRelationship (deletes link instances)

3. Операции над Расширениями:3. Operations on Extensions:

а. CreateExtension (добавляет расширение к существующему Предмету)but. CreateExtension (Adds an extension to an existing Item)

b. UpdateExtension (обновляет существующее расширение)b. UpdateExtension (updates an existing extension)

с. DeleteExtension (удаляет расширение)from. DeleteExtension (removes the extension)

10. Отслеживание изменений и объекты-памятники10. Change tracking and monuments

Службы отслеживания изменений и объектов-памятников предоставляются хранилищем данных, как описано более подробно ниже. В данном разделе предоставляется общая структура информации по отслеживанию изменений, раскрытой в хранилище данных.Change tracking and monument facilities are provided by the data warehouse, as described in more detail below. This section provides the general structure of change tracking information disclosed in the data warehouse.

а) Отслеживание измененийa) Change tracking

Каждое представление поиска, обеспечиваемое хранилищем данных, содержит столбцы, используемые для предоставления информации по отслеживанию изменений; столбцы являются общими по всем представлениям Предметов, Расширений и Связей. Представления Схемы платформы хранения, определенные явно разработчиками схем, не предоставляют автоматически информацию по отслеживанию изменений - такая информация предоставляется неявно при помощи представлений поиска, на которых построено само представление.Each search view provided by the data warehouse contains columns used to provide change tracking information; columns are common across all views of Items, Extensions, and Links. Views of the Storage Platform Schema, defined explicitly by the developers of the schemes, do not automatically provide information on tracking changes - such information is provided implicitly using the search views on which the view itself is built.

Для каждого элемента в хранилище данных информация по отслеживанию изменений доступна из двух мест - «главного» представления элементов и «типизированного» представления элементов. Например, информация по отслеживанию изменений по типу Item AcmeCorp.Document.Document доступна из Главного представления Предметов «[System.Storage].[Master!Item]» и типизированного представления поиска Предметов [AcmeCorp.Document].[Document].For each item in the data warehouse, change tracking information is available from two places - the “main” representation of the elements and the “typed” representation of the elements. For example, change tracking information on the type of Item AcmeCorp.Document.Document is available from the Main Item View “[System.Storage]. [Master! Item]” and the typed Item Search View [AcmeCorp.Document]. [Document].

(1) Отслеживание изменений в «главных» представлениях поиска(1) Tracking changes to the “main” search views

Информация по отслеживанию изменений в главных представлениях поиска предоставляет информацию по версиям создания и обновления элемента, информацию по тому, какой партнер синхронизации создал элемент, какой партнер синхронизации последним обновил элемент, и номера версий от каждого партнера для создания и обновления. Партнеры в связях синхронизации (описанные ниже) идентифицируются посредством ключа партнера. Единственный объект ОПТ (UDT), названный _ChangeTrackingInfo, типа [System.Storage.Store].ChangeTrackingInfo содержит всю эту информацию. Тип определяется в схеме System.Storage. _ChangeTrackingInfo доступна во всех глобальных представлениях поиска для Предмета, Расширения и Связи. Определение типа ChangeTrackingInfo представляет собой:Information on tracking changes in the main views of the search provides information on the versions of creating and updating the element, information on which synchronization partner created the element, which synchronization partner last updated the element, and version numbers from each partner for creation and updating. Partners in synchronization relationships (described below) are identified by the partner key . A single OPT object (UDT) named _ChangeTrackingInfo of type [System.Storage.Store] .ChangeTrackingInfo contains all this information. The type is defined in the System.Storage schema. _ChangeTrackingInfo is available in all global search views for Subject, Extension and Link. A ChangeTrackingInfo type definition is:

<Type Name="ChangeTrackingInfo" BaseType="Base.NestedElement"><Type Name = "ChangeTrackingInfo" BaseType = "Base.NestedElement">

<FieldProperty Name="CreationLocalTS" Type="SqlTypes.SqlInt64"<FieldProperty Name = "CreationLocalTS" Type = "SqlTypes.SqlInt64"

Nullable="False" />Nullable = "False" />

<FieldProperty Name="CreatingPartnerKey"<FieldProperty Name = "CreatingPartnerKey"

Type="SqlTypes.SqlInt32" Nullable="False" />Type = "SqlTypes.SqlInt32" Nullable = "False" />

<FieldProperty Name = "CreatingPartnerTS"<FieldProperty Name = "CreatingPartnerTS"

Type="SqlTypes.SqlInt64" Nullable="False" />Type = "SqlTypes.SqlInt64" Nullable = "False" />

<FieldProperty Name="LastUpdateLocalTS"<FieldProperty Name = "LastUpdateLocalTS"

Type="SqlTypes.SqlInt64" Nullable="False" />Type = "SqlTypes.SqlInt64" Nullable = "False" />

<FieldProperty Name="LastUpdatingPartnerKey"<FieldProperty Name = "LastUpdatingPartnerKey"

Type="SqlTypes.SqlInt32" Nullable="False" />Type = "SqlTypes.SqlInt32" Nullable = "False" />

<FieldProperty Name="LastUpdatingPartnerTS" Type="SqlTypes.SqlInt64"<FieldProperty Name = "LastUpdatingPartnerTS" Type = "SqlTypes.SqlInt64"

Nullable="False" />Nullable = "False" />

</Type></Type>

Эти свойства содержат следующую информацию:These properties contain the following information:

СтолбецColumn ОписаниеDescription CreationLocalTSCreationLocalTS Временная метка создания локальной машинойLocal Machine Creation Timestamp _CreatingPartnerKey_CreatingPartnerKey PartnerKey партнера, который создал эту сущность. Если сущность была создана локально, то он представляет собой PartnerKey локальной машины.PartnerKey is the partner who created this entity. If the entity was created locally, then it represents the PartnerKey of the local machine. _CreatingPartnerTS_CreatingPartnerTS Временная метка момента времени, в который была создана эта сущность у партнера, соответствующего _CreatingPartnerKey.The timestamp of the point in time at which this entity was created for the partner matching _CreatingPartnerKey. _LastUpdateLocalTS_LastUpdateLocalTS Локальная временная метка, соответствующая моменту времени обновления на локальной машинеLocal timestamp corresponding to the time point of the update on the local machine _LastUpdatingPartnerKey_LastUpdatingPartnerKey PartnerKey партнера, который в последний раз обновил эту сущность. Если последнее обновление сущности было выполнено локально, то он представляет собой PartnerKey локальной машины.PartnerKey is the partner who last updated this entity. If the last entity update was performed locally, then it represents the PartnerKey of the local machine. _LastUpdatingPartnerTS_LastUpdatingPartnerTS Временная метка момента времени, в который эта сущность была обновлена у партнера, соответствующего _LastUpdatingPartnerKey.The timestamp of the point in time at which this entity was updated with a partner matching _LastUpdatingPartnerKey.

(2) Отслеживание изменений в «типизированных» представлениях поиска(2) Tracking changes in typed search views

В дополнение к предоставлению такой же информации, что и глобальное представление поиска, каждое типизированное представление поиска предоставляет дополнительную информацию, записывающую состояние синхронизации каждого элемента в топологии синхронизации.In addition to providing the same information as the global search view, each typed search view provides additional information that records the synchronization status of each element in the synchronization topology.

СтолбецColumn ТипType of ОписаниеDescription <глобальное отслеживание изменений><global change tracking> ... Информация от глобального отслеживания измененийInformation from global change tracking _ChangeUnitVersions_ChangeUnitVersions MultiSet<ChangeUnitVersion>MultiSet <ChangeUnitVersion> Описание номеров версий единиц изменения в конкретном элементеDescription of version numbers of units of change in a specific item _ElementSyncMetadata_ElementSyncMetadata ElementSyncMetadataElementSyncMetadata Дополнительные независимые от версии метаданные об этом предмете, которые представляют интерес только для периода выполнения Синхронизации.Additional version-independent metadata about this subject that is of interest only for the duration of the Synchronization. _VersionSyncMetadata_VersionSyncMetadata VersionSyncMetadataVersionSyncMetadata Дополнительные характерные для версии метаданные об этой версии, которые представляют интерес только для периода выполнения Синхронизации.Additional version-specific metadata about this version that is of interest only for the duration of the Synchronization.

b) Объекты-памятникиb) Monument objects

Хранилище данных предоставляет информацию об объектах-памятниках для Предметов, Расширений и Связей. Представления объектов-памятников предоставляют информацию как о действующих сущностях, так и сущностях, которые представляют собой объекты-памятники, (предметы, расширения и связи) в одном месте. Представления объектов-памятников предметов и расширений не обеспечивают доступ к соответствующему объекту, тогда как представление объектов-памятников связей обеспечивает доступ к объекту связи (объект связи равен NULL в случае связи, которая представляет собой объект-памятник).The data warehouse provides information about monument objects for Items, Extensions and Links. Representations of objects-monuments provide information about both existing entities and entities that are objects-monuments (objects, extensions and communications) in one place. Representations of objects-monuments of objects and extensions do not provide access to the corresponding object, while the representation of objects-monuments of connections provides access to the object of communication (the object of communication is NULL in the case of the connection, which is a monument object).

(1) Объекты-памятники предметов(1) Objects-monuments of objects

Объекты-памятники предметов извлекаются из системы при помощи представления [System.Storage].[Tombstone!Item].Monument items are retrieved from the system using the [System.Storage]. [Tombstone! Item] view.

СтолбецColumn ТипType of ОписаниеDescription ItemIdItemId ItemIdItemId Идентификация ПредметаItem Identification _TypeID_TypeID TypeIdTypeid Тип ПредметаItem Type <Свойства Предмета><Item Properties> ... Свойства, определенные для всех предметовProperties specific to all items _RootItemId_RootItemId ItemIdItemId ItemId первого невнедряющего предмета, который содержит этот предмет.ItemId of the first non-implementing item that contains this item. _ChangeTrackingInfo_ChangeTrackingInfo Экземпляр ОЯСВ (CLR) типа ChangeTrackingInfoNLW Instance (CLR) of type ChangeTrackingInfo Информация по отслеживанию изменений для этого предметаChange Tracking Information for this Item _IsDeleted_IsDeleted BITBit Это флаг, который равен 0 для действующих предметов, и 1 для предметов, которые представляют собой объекты-памятники.This is a flag that is 0 for active items, and 1 for items that are monument objects. _DeletionWallclock_DeletionWallclock UTCDATETIMEUtcatetime Время/дата местного времени Всемирного координированного времени (ВКВ) в соответствии с партнером, который удалил предмет. Он равен NULL, если Предмет является действующим.Local time Coordinated Universal Time (UTC), according to the partner who deleted the item. It is NULL if the Item is valid.

(2) Объекты-памятники расширений(2) Extension Monuments

Объекты-памятники расширений извлекаются из системы с использованием представления [System.Storage].[Tombstone!Extension]. Информация по отслеживанию изменений расширений аналогична той, которая предусматривается для Предметов с добавлением свойства ExtensionId.Extension monument objects are retrieved from the system using the [System.Storage]. [Tombstone! Extension] view. Information on tracking changes to extensions is similar to that provided for Items with the addition of the ExtensionId property.

СтолбецColumn ТипType of ОписаниеDescription ItemIdItemId ItemIdItemId Идентификация предмета, который владеет РасширениемIdentification of the item that owns the Extension ExtensionIdExtensionId ExtensionIdExtensionId Extension ID РасширенияExtension ID Extensions _TypeID_TypeID TypeIdTypeid Тип расширенияExtension type _ChangeTrackingInfo_ChangeTrackingInfo Экземпляр ОЯСВ (CLR) типа ChangeTrackingInfoNLW Instance (CLR) of type ChangeTrackingInfo Информация по отслеживанию изменений для этого расширенияChange tracking information for this extension _IsDeleted_IsDeleted BITBit Это флаг, который равен 0 для действующих предметов и 1 для расширений, которые представляют собой объекты-памятникиThis is a flag that is 0 for active items and 1 for extensions that are monument objects _DeletionWallclock_DeletionWallclock UTCDATETIMEUtcatetime Время/дата местного времени ВКВ в соответствии с партнером, который удалил расширение. Он равен NULL, если расширение является действующим.The time / date of local time of VKV according to the partner who deleted the extension. It is NULL if the extension is valid.

(3) Объект-памятник связей(3) Object-monument of communications

Объекты-памятники связей извлекаются из системы при помощи представления [System.Storage].[Tombstone!Relationship]. Информация об объектах-памятниках связей аналогична той, которая предусматривается для Расширений. Однако предусматривается дополнительная информация по ItemRef цели экземпляра связи. Кроме того, также выбирается объект связи.Connection memorabilia are retrieved from the system using the [System.Storage]. [Tombstone! Relationship] view. Information about objects-monuments of connections is similar to that provided for Extensions. However, additional information is provided on the ItemRef of the link instance target. In addition, a communication object is also selected.

СтолбецColumn ТипType of ОписаниеDescription ItemIdItemId ItemIdItemId Идентификация Предмета, который владеет связью (идентификация конечной точки источника связи)Identification of the Subject that owns the link (identification of the endpoint of the source of communication) RelationshipIdRelationshipId RelationshipIdRelationshipId RelationshipId связиRelationshipId Communication _TypeID_TypeID TypeIdTypeid Тип связиType of communication _ChangeTrackingInfo_ChangeTrackingInfo Экземпляр ОЯСВ (CLR) типа ChangeTrackingInfoNLW Instance (CLR) of type ChangeTrackingInfo Информация по отслеживанию изменений для этой связиChange Tracking Information for this Link _IsDeleted_IsDeleted BITBit Это флаг, который равен 0 для действующих предметов и 1 для расширений, которые представляют собой объекты-памятникиThis is a flag that is 0 for active items and 1 for extensions that are monument objects _DeletionWallclock_DeletionWallclock UTCDATETIMEUtcatetime Время/дата местного времени ВКВ в соответствии с партнером, который удалил связь. Он равен NULL, если связь является действующей.Time / date of local time of VKV in accordance with the partner who deleted the connection. It is NULL if the link is valid. _Relationship_Relationship Экземпляр ОЯСВ (CLR) СвязиNJWS Instance (CLR) Это объект связи для действующего связи. Он равен NULL для связей, которые представляют собой объекты-памятники.This is the communication object for the current communication. It is NULL for relationships that are monument objects. TargetItemReferenceTargetItemReference ItemReferenceItemReference Идентификация конечной точки целиTarget Endpoint Identification

(4) Очистка объектов-памятников(4) Cleaning of monuments

Чтобы предотвратить неограниченный рост информации по объектам-памятникам, хранилище данных предусматривает задачу очистки объектов-памятников. Эта задача определяет, когда может быть отброшена информация по объектам-памятникам. Задача вычисляет границу по локальной версии создания/обновления и затем усекает информацию по объектам-памятникам посредством отбрасывания всех более ранних версий объектов-памятников.To prevent unlimited growth of information on monuments, the data warehouse provides for the task of cleaning monuments. This task determines when information on monuments can be discarded. The task calculates the boundary using the local version of creation / update and then truncates information on the monument objects by discarding all earlier versions of the monument objects.

11. Вспомогательные средства API и функции11. API Helper and Functions

Базовое отображение также обеспечивает ряд вспомогательных функций. Эти функции поставляются для того, чтобы оказать помощь при выполнении общих операций по модели данных.Basic mapping also provides a number of helper functions. These functions are provided to assist in performing common data model operations.

a) Функция [System.Storage].GetItema) Function [System.Storage] .GetItem

Возвращает объект Предмета при данном ItemIdReturns an Item object with this ItemId

////

Item GetItem (ItemId ItemId )Item GetItem (ItemId ItemId)

b) Функция [System.Storage].GetExtensionb) Function [System.Storage] .GetExtension

// Возвращает объект расширения при данных ItemId и ExtensionId// Returns the extension object for the given ItemId and ExtensionId

////

Extension GetExtension (ItemId ItemId, ExtensionId ExtensionId )Extension GetExtension (ItemId ItemId, ExtensionId ExtensionId)

c) Функция [System.Storage].GetRelationshipc) Function [System.Storage] .GetRelationship

// Возвращает объект связи при данных ItemId и RelationshipId// Returns the communication object for the given ItemId and RelationshipId

////

Relationship GetRelationship ( ItemId ItemId, RelationshipId RelationshipId )Relationship GetRelationship (ItemId ItemId, RelationshipId RelationshipId)

12. Метаданные12. Metadata

Существует два типа метаданных, представленных в Хранилище: метаданные экземпляра (тип Предмета и т.д.) и метаданные типа.There are two types of metadata presented in the Repository: instance metadata (Item type, etc.) and type metadata.

а) Метаданные схемыa) Schema metadata

Метаданные схемы хранятся в хранилище данных в качестве экземпляров типов Item из Метасхемы.Schema metadata is stored in the data warehouse as instances of the Item types from the Meta scheme.

b) Метаданные экземпляраb) Instance metadata

Метаданные экземпляра используются приложением для запроса типа Предмета и находят расширения, ассоциированные с Предметом. При данном ItemId для Предмета приложение может запросить глобальное представление предмета для возврата типа Предмета и использовать это значение для запроса представления Meta.Type для возврата информации по объявленному типу Предмета. Например,Instance metadata is used by the application to query the type of the Item and find the extensions associated with the Item. With this ItemId for the Item, the application can request a global representation of the item to return the type of the Item and use this value to request the presentation of Meta.Type to return information about the declared type of the Item. For example,

// Возвращает объект Item метаданных для данного экземпляра Предмета// Returns The Item object metadata for this instance of the Item

////

SELECT m._Item AS metadataInfoObjSELECT m._Item AS metadataInfoObj

FROM [System.Storage].[Item] i INNER JOIN [Meta].[Type] m ON i._TypeId = m.ItemIdFROM [System.Storage]. [Item] i INNER JOIN [Meta]. [Type] m ON i._TypeId = m.ItemId

WHERE i.ItemId = @ItemIdWHERE i.ItemId = @ItemId

Е. ЗАЩИТАE. PROTECTION

В этом разделе описывается модель защиты для платформы хранения настоящего изобретения согласно одному варианту осуществления.This section describes the security model for the storage platform of the present invention according to one embodiment.

1. Обзор1. Overview

Согласно настоящему варианту осуществления степень детализации, с которой задается и вводится в действие политика безопасности платформы хранения, находится на уровне различных операций над предметом в данном хранилище данных; нет возможности обеспечивать защиту для частей предмета отдельно от целого. Модель защиты задает набор принципалов, которым может быть предоставлен доступ или отказано в доступе к выполнению этих операций над предметом посредством списков управления доступом (СУД; ACL's). Каждый СУД (ACL) представляет собой упорядоченную коллекцию записей управления доступом (ЗУД; ACE's).According to the present embodiment, the degree of granularity with which the security policy of the storage platform is set and enforced is at the level of various operations on an item in the data warehouse; there is no way to provide protection for parts of an object separately from the whole. The security model defines a set of principals who can be granted access or denied access to perform these operations on the subject through access control lists (ACL's). Each ACL (ACL) is an ordered collection of access control records (ACEs).

Политика безопасности для предмета может быть полностью описана политикой управления дискреционным доступом и политикой управления системным доступом. Каждый из них представляет собой набор СУД (ACL's). Первый набор (список управления дискреционным доступом (СУДД; DACL's) описывает дискреционный доступ, предоставляемый различным принципалам владельцем предмета, тогда как второй набор СУД (ACL's) упоминается как списки управления системным доступом (СУСД; SALC's), которые задают то, как выполняется аудит системы, когда объектом манипулируют некоторым образом. В дополнение к ним, каждый предмет в хранилище данных ассоциируется с идентификатором безопасности (ИДБ; SID), который соответствует владельцу предмета (ИДБ; SID) Владельца).The security policy for the subject can be fully described by the discretionary access control policy and the system access control policy. Each of them is a set of ACL's. The first set (discretionary access control list (DACL; DACL's) describes the discretionary access granted to various principals by the owner of the item, while the second set of ACL's is referred to as system access control lists (DRMS; SALC's), which specify how the system is audited when the object is manipulated in some way. In addition to them, each item in the data warehouse is associated with a security identifier (IDB; SID) that corresponds to the owner of the item (IDB; SID) of the Owner).

Первичным механизмом для организации предметов в хранилище данных платформы хранения является механизм иерархии включения. Иерархия включения реализуется с использованием связей прикрепления между предметами. Связь прикрепления между двумя предметами А и В, выраженная как «А включает В», позволяет предмету А оказывать влияние на время существования предмета В. В основном, предмет в хранилище данных не может существовать до тех пор, пока не будет связи прикрепления от другого предмета к нему. Связь прикрепления, в дополнение к управлению временем существования предмета, обеспечивает необходимый механизм для распространения политики безопасности для предмета.The primary mechanism for organizing items in the data warehouse of the storage platform is the inclusion hierarchy mechanism. The inclusion hierarchy is implemented using attachment relationships between objects. The attachment relationship between two items A and B, expressed as “A includes B,” allows item A to influence the lifetime of item B. Basically, an item in the data store cannot exist until there is an attachment link from another item to him. The attachment relationship, in addition to managing the lifetime of the item, provides the necessary mechanism for distributing security policies for the item.

Политика безопасности, заданная для каждого предмета, состоит из двух частей - части, которая явно задается для этого предмета, и части, которая наследуется от родителя предмета в хранилище данных. Явно определенная политика безопасности для любого предмета состоит из двух частей - части, которая управляет доступом к рассматриваемому предмету, и части, которая оказывает влияние на политику безопасности, наследуемую всеми ее потомками в иерархии включения. Политика безопасности, наследуемая потомком, представляет собой функцию явно определенной политики и наследуемой политики.The security policy set for each item consists of two parts - the part that is explicitly set for this item, and the part that is inherited from the parent of the item in the data warehouse. An explicitly defined security policy for any item consists of two parts - a part that controls access to the subject in question, and a part that affects the security policy inherited by all its descendants in the inclusion hierarchy. The security policy inherited by a descendant is a function of an explicitly defined policy and inherited policy.

Так как политика безопасности передается при помощи связей прикрепления и также может замещаться на любом предмете, необходимо задать, как определяется действующая политика безопасности для предмета. В настоящем варианте осуществления предмет в иерархии включения хранилища данных наследует СУД (ACL) по каждому пути от корня хранилища к предмету.Since the security policy is transmitted using attachment links and can also be replaced on any item, you must specify how the current security policy for the item is determined. In the present embodiment, an item in the data warehouse inclusion hierarchy inherits an ACL along each path from the storage root to the item.

В наследуемом СУД (ACL) для любого данного пути упорядочение различных ЗУД (ACE's) в СУД (ACL) определяет окончательную политику безопасности, которая вводится в действие. Следующее понятие используется для описания упорядочения ЗУД (ACE) в СУД (ACL). Упорядочение ЗУД (ACE) в СУД (ACL), который наследуется предметом, определяется следующими двумя правилами.In a legacy ACL, for any given path, the ordering of the various ACE's in the ACL determines the final security policy that is enforced. The following concept is used to describe the ordering of ACEs in an ACL. The ordering of the ACE in the ACL, which is inherited by the subject, is determined by the following two rules.

Первое правило расслаивает ЗУД (ACE's), наследуемые от различных предметов на пути к предмету I от корня иерархии включения. ЗУД (ACE's), наследуемые от ближнего контейнера, имеют преимущественное право над записями, наследуемыми от удаленного контейнера. Интуитивно, это предоставляет администратору возможность замещать ЗУД (ACE's), наследуемые от более отдаленных в иерархии включения. Правило следующее:The first rule delaminates ACE's, inherited from various objects on the way to subject I from the root of the inclusion hierarchy. ACE's inherited from the nearest container take precedence over records inherited from the remote container. Intuitively, this provides the administrator with the ability to replace ACE's that inherit from more distant inclusion hierarchies. The rule is as follows:

Для всех L наследованных СУД (ACL's) по предмету IFor all L inherited ACL's in subject I

Для всех предметов I1, I2For all items I1, I2

Для всех ЗУД (ACE's) А1 и А2 в L,For all ACE's A1 and A2 in L,

I1 является предшественником I2, иI1 is the precursor of I2, and

I2 является предшественником I3, иI2 is the precursor of I3, and

А1 является ЗУД (ACE), наследованный от I1, иA1 is an itch (ACE) inherited from I1, and

А2 является ЗУД (ACE), наследованный от I2,A2 is an itch (ACE) inherited from I2,

означает, чтоmeans that

А2 предшествует А1 в LA2 precedes A1 in L

Второе правило упорядочивает ЗУД (ACE's), которые не разрешают доступ к предмету, перед ЗУД (ACE's), которая предоставляет доступ к предмету.The second rule orders ACE's, which do not allow access to the subject, before ACE's, which provides access to the subject.

Для всех L наследованных СУД (ACL's) по предмету IFor all L inherited ACL's in subject I

Для всех предметов I1'For all items I1 '

Для всех ЗУД (ACE's) А1 и А2 в L,For all ACE's A1 and A2 in L,

I1 является предшественником I2 и,I1 is the precursor of I2 and,

А1 является ACCESS_DENIED_ACE, наследованной от I1, иA1 is ACCESS_DENIED_ACE inherited from I1, and

А2 является ACCESS_GRANTED_ACE, наследованной от I1,A2 is ACCESS_GRANTED_ACE inherited from I1,

означает, чтоmeans that

А1 предшествует А2 в LA1 precedes A2 in L

В том случае, когда иерархия включения представляет собой дерево, существует точно один путь от корня дерева к предмету, и предмет имеет точно один наследованный СУД (ACL). В таких случаях СУД (ACL), наследованный предметом, соответствует СУД (ACL), наследуемым файлом (предметом) в существующей модели защиты Windows, на основе относительного упорядочения ЗУД (ACE's) в них.In the case where the inclusion hierarchy is a tree, there is exactly one path from the root of the tree to the item, and the item has exactly one inherited ACL. In such cases, the ACL inherited by the subject corresponds to the ACL inherited by the file (subject) in the existing Windows security model, based on the relative ordering of the ACE's in them.

Однако иерархия включения в хранилище данных представляет собой ориентированный ациклический граф (ОАГ; DAG), так как к предметам разрешено множество связей прикрепления. При таких условиях имеется множество путей к предмету от корня иерархии включения. Так как предмет наследует СУД (ACL) по каждому пути, каждый предмет ассоциируется с коллекцией СУД (ACL's) в противоположность единственному. Следует отметить, что это отличается от традиционной модели файловой системы, где точно один СУД (ACL) ассоциируется с файлом или папкой.However, the inclusion hierarchy in the data warehouse is a directed acyclic graph (OAG; DAG), since many attachment connections are allowed to objects. Under such conditions, there are many paths to the subject from the root of the inclusion hierarchy. Since an item inherits an ACL in each path, each item is associated with a collection of ACL's as opposed to a single one. It should be noted that this differs from the traditional file system model, where exactly one ACL is associated with a file or folder.

Существуют два аспекта, которые должны быть уточнены, когда иерархией включения является ОАГ (DAG), в противоположность дереву. Требуется описание того, как вычисляется действующая политика безопасности для предмета, когда он наследует более одного СУД (ACL) от своих родителей, и то, как они организуются и представляются, имеет непосредственное отношение к администрированию модели защиты для хранилища данных платформы хранения.There are two aspects that need to be clarified when the inclusion hierarchy is DAG, as opposed to a tree. It requires a description of how the current security policy for an item is calculated when it inherits more than one ACL from its parents, and how they are organized and presented is directly related to the administration of the security model for the storage platform data warehouse.

Следующий алгоритм оценивает права доступа для данного принципала к данному предмету. В этом документе используется следующая система обозначений для описания СУД (ACL's), ассоциированных с предметом.The following algorithm evaluates the access rights for a given principal to a given subject. This document uses the following notation to describe ACL's associated with the subject.

Inherited_ACLs(ItemId) - набор СУД (ACL's), наследованных предметом, идентификацией предмета которого является ItemId, от своих родителей в хранилище.Inherited_ACLs (ItemId) - a set of ACL's inherited by the item whose item identification is ItemId from their parents in the repository.

Explicit_ACL(ItemId) - СУД (ACL), явно определенный для предмета, идентификацией которого является ItemId.Explicit_ACL (ItemId) - COURT (ACL), explicitly defined for the item whose identification is ItemId.

NTSTATUSNTSTATUS

ACLAccessCheck(ACLAccessCheck (

PSIDPSID pOwnerSid,pOwnerSid, PDACLPDACL pDacl,pDacl, DWORDDWORD DesiredAccess,DesiredAccess, HANDLEHandle ClientToken,ClientToken PPRIVILEGE_SETPPRIVILEGE_SET pPrivilegeSet,pPrivilegeSet, DWORDDWORD *pGrantedAccess)* pGrantedAccess)

Вышеприведенная подпрограмма возвращает STATUS_SUCCESS, если не было явно отказано в требуемом доступе, и pGrantedAccess определяет, какое из прав, требуемых пользователем, было предоставлено заданным СУД (ACL). Если было явно отказано в любом требуемом доступе, подпрограмма возвращает STATUS_ACCESS_DENIED.The above routine returns STATUS_SUCCESS if the requested access was not explicitly denied, and pGrantedAccess determines which of the rights required by the user was granted by the specified ACL. If any required access was explicitly denied, the routine returns STATUS_ACCESS_DENIED.

NTSTATUSNTSTATUS

WinFSItemAccessCheck(WinFSItemAccessCheck (

WINFS_ITEMIDWINFS_ITEMID ItemId,ItemId, DWORDDWORD DesiredAccess,DesiredAccess, HANDLEHandle ClientToken,ClientToken PPRIVILEGE_SETPPRIVILEGE_SET pPrivilegeSet)pPrivilegeSet)

{{

NTSTATUSNTSTATUS Status;Status PDACLPDACL pExplicitACL = NULL;pExplicitACL = NULL; PDACLPDACL pInheritedACLs = NULL;pInheritedACLs = NULL; DWORDDWORD NumberOfInheritedACLs = 0;NumberOfInheritedACLs = 0;

pExplicitACL = GetExplicitACLForItem(ItemId);pExplicitACL = GetExplicitACLForItem (ItemId);

GetInheritedACLsForItem(ItemId,&pInheritedACLs,&NumberOfInheritedACLs)GetInheritedACLsForItem (ItemId, & pInheritedACLs, & NumberOfInheritedACLs)

Status = ACLAccessCheck(Status = ACLAccessCheck (

pOwnerSid,pOwnerSid,

pExpficitACL,pExpficitACL,

DesiredAccess,DesiredAccess,

ClientToken,ClientToken

pPrivilegeSet,pPrivilegeSet,

&GrantedAccess);&GrantedAccess);

if (Status != STATUS_SUCCESS)if (Status! = STATUS_SUCCESS)

return Status;return Status;

if (DesiredAccess == GrantedAccess)if (DesiredAccess == GrantedAccess)

return STATUS SUCCESS;return STATUS SUCCESS;

for(for (

i = 0;i = 0;

(i < NumberOfInheritedACLs && Status == STATUS_SUCCESS) ;(i <NumberOfInheritedACLs && Status == STATUS_SUCCESS);

i++){i ++) {

GrantedAccessForACL = 0;GrantedAccessForACL = 0;

Status = ACLAccessCheck(Status = ACLAccessCheck (

pOwnerSid,pOwnerSid,

pExpficitACL,pExpficitACL,

DesiredAccess,DesiredAccess,

ClientToken,ClientToken

pPrivilegeSet,pPrivilegeSet,

&GrantedAccessForACL);&GrantedAccessForACL);

if (Status = STATUS_SUCCESS) {if (Status = STATUS_SUCCESS) {

GrantedAccess |= GrantedAccessForACL;GrantedAccess | = GrantedAccessForACL;

}}

}}

If ((Status == STATUS_SUCCESS) &&If ((Status == STATUS_SUCCESS) &&

(GrantedAccess != DesiredAccess)) {(GrantedAccess! = DesiredAccess)) {

Status = STATUS_ACCESS_DENIED;Status = STATUS_ACCESS_DENIED;

}}

return Status;return Status;

}}

Сфера влияния политики безопасности, определенной на любом предмете, охватывает всех потомков предмета в иерархии включения, определенной на хранилище данных. Для всех предметов, где определяется явная политика, изобретатели, фактически, определяют политику, которая наследуется всеми их потомками в иерархии включения. Действительный СУД (ACL), наследованный всеми потомками, получается взятием каждого СУД (ACL), наследованного предметом, и добавлением наследуемых ЗУД (ACE's) в явный СУД (ACL) к началу СУД (ACL). Это упоминается как набор наследуемых СУД (ACL's), ассоциированных с предметом.The scope of the security policy defined on any item encompasses all descendants of the item in the inclusion hierarchy defined on the data warehouse. For all items where an explicit policy is defined, the inventors, in fact, define a policy that is inherited by all their descendants in the inclusion hierarchy. A valid ACL inherited by all descendants is obtained by taking each ACL inherited by the item and adding the inherited ACE's to the explicit ACL to the beginning of the ACL. This is referred to as a set of heritable ACL's associated with the subject.

В отсутствие любой явной спецификации безопасности в иерархии включения с корнем в предмете папки спецификация защиты папки применяется ко всем потомкам этого предмета в иерархии включения. Таким образом, каждый предмет, для которого предусмотрена явная спецификация политики безопасности, определяет зону идентично защищенных предметов, и действительные СУД (ACL's) для всех предметов в зоне представляют собой набор наследуемых СУД (ACL's) для этого предмета. Это полностью определяет зоны в случае иерархии включения, которая представляет собой дерево. Если бы каждая зона должна была ассоциироваться с номером, тогда было бы достаточным просто включить зону, к которой принадлежит предмет, вместе с предметом.In the absence of any explicit security specification in the inclusion hierarchy with a root in the subject of the folder, the folder protection specification applies to all descendants of this subject in the inclusion hierarchy. Thus, each item for which an explicit specification of the security policy is provided defines a zone of identically protected items, and valid ACL's for all items in the zone are a set of inherited ACL's for that item. This fully defines the zones in the case of the inclusion hierarchy, which is a tree. If each zone were to be associated with a number, then it would be sufficient to simply include the zone to which the object belongs, together with the object.

Однако для иерархий включения, которые представляют собой ОАГ (DAG's), точки в иерархии включения, в которых изменяется эффективная политика безопасности, определяются двумя видами предметов. Первый представляет собой предметы, для которых был задан явный СУД (ACL). Обычно ими являются точки в иерархии включения, где администратор явно задал СУД (ACL). Второй представляет собой предметы, которые имеют более одного родителя, и родители имеют различные политики безопасности, ассоциированные с ними. Обычно это предметы, которые представляют собой точки слияния политики безопасности, заданной для тома, и указывают начало новой политики безопасности.However, for inclusion hierarchies, which are DAG's, the points in the inclusion hierarchy at which the effective security policy changes are determined by two kinds of items. The first is items for which an explicit ACL has been set. Typically, these are points in the inclusion hierarchy where the administrator explicitly defined the ACL. The second is items that have more than one parent, and parents have different security policies associated with them. Typically, these are items that represent the merging points of the security policy defined for the volume and indicate the beginning of a new security policy.

С этим определением все предметы в хранилище данных принадлежат к одной из двух категорий - те, которые представляют собой корень идентично защищенной зоны безопасности, и те, которые не являются им. Предметы, которые не определяют зоны безопасности, принадлежат к точно одной зоне безопасности. Как в случае деревьев, действующая защита для предмета может задаваться посредством задания зоны, к которой принадлежит предмет, вместе с предметом. Это приводит к прямой модели администрирования защиты хранилища данных платформы хранения, основанной на различных, идентично защищенных зонах в хранилище.With this definition, all items in the data warehouse belong to one of two categories - those that are the root of the identically protected security zone, and those that are not them. Items that do not define a security zone belong to exactly one security zone. As in the case of trees, the effective protection for an item can be set by specifying the zone to which the item belongs together with the item. This leads to a direct model of the storage platform data warehouse security administration based on different, identically protected areas in the warehouse.

2. Подробное описание модели защиты2. Detailed description of the protection model

В данном разделе приведены подробности того, как предметы защищаются, посредством описания того, как индивидуальные права в Дескрипторе Защиты и содержащиеся в нем СУД (ACL's) воздействуют на различные операции.This section provides details on how items are protected by describing how individual rights in the Security Descriptor and the ACL's contained therein affect various operations.

а) Структура дескриптора защитыa) Security descriptor structure

Перед описанием подробностей модели защиты полезно элементарное описание дескрипторов защиты. Дескриптор защиты содержит информацию по защите, ассоциированную с защищаемым объектом. Дескриптор защиты состоит из структуры SECURITY_DESCRIPTOR и связанной с ней информации по защите. Дескриптор защиты может включать в себя следующую информацию по защите:Before describing the details of a security model, an elementary description of security descriptors is useful. The security descriptor contains security information associated with the protected object. The security descriptor consists of the SECURITY_DESCRIPTOR structure and associated security information. The security descriptor may include the following security information:

1. ИДБ (SID's) для владельца и первичной группы объекта.1. IDB (SID's) for the owner and primary group of the object.

2. СУДД (DACL), который задает права доступа, разрешаемые или отказываемые конкретным пользователям или группам.2. DUDL (DACL), which sets the access rights that are allowed or denied to specific users or groups.

3. СУСД (SACL), который задает типы попыток доступа, которые генерируют записи аудита для объекта.3. DBMS (SACL), which defines the types of access attempts that generate audit records for an object.

4. Набор управляющих битов, которые уточняют смысл дескриптора защиты или его индивидуальных членов.4. A set of control bits that specify the meaning of the security descriptor or its individual members.

Предпочтительно, что приложения не могут непосредственно манипулировать содержимым дескриптора защиты. Имеются функции для установки и извлечения информации по защите в дескрипторе защиты объекта. Кроме того, имеются функции для создания и инициализации дескриптора защиты для нового объекта.Preferably, applications cannot directly manipulate the contents of the security descriptor. There are functions for setting and retrieving security information in the object's security descriptor. In addition, there are functions for creating and initializing a security descriptor for a new object.

Список управления дискреционным доступом (СУДД; DACL) идентифицирует опекунов, которым разрешен или запрещен доступ к защищаемому объекту. Когда процесс пытается обратиться к защищаемому объекту, система проверяет ЗУД (ACE's) в СУДД (DACL) объекта для определения, предоставить ли доступ к нему. Если объект не имеет СУДД (DACL), система предоставляет полный доступ каждому. Если СУДД (DACL) объекта не имеет ЗУД (ACE's), система запрещает все попытки доступа к объекту, так как СУДД (DACL) не предоставляет никаких прав доступа. Система проверяет ЗУД (ACE's) последовательно до тех пор, пока она не обнаружит один или несколько ЗУД (ACE's), которые предоставляют все запрашиваемые права доступа, или до тех пор, пока не будут запрещены любые из запрашиваемых прав доступа.The Discretionary Access Control List (DACL) identifies guardians who are allowed or denied access to the protected object. When a process tries to access the protected object, the system checks the ACE's in the DACL of the object to determine whether to provide access to it. If the object does not have a DACL, the system provides full access to everyone. If the DACL of an object does not have an ACE's, the system prohibits all attempts to access the object, since the DACL does not provide any access rights. The system checks the ACE's sequentially until it detects one or more ACE's that provide all requested access rights, or until any of the requested access rights are denied.

Список управления системным доступом (СУСД; SACL) дает возможность администраторам регистрировать попытки доступа к защищенному объекту. Каждый ЗУД (ACE) задает типы попыток доступа заданным опекуном, которые вызывают генерирование системой записи в журнале регистрации событий в системе защиты. ЗУД (ACE) в СУСД (SACL) может генерировать записи аудита, когда попытка доступа не достигает успеха, когда она достигает успеха или в обоих случаях. СУСД (SACL) также может подать предупредительный сигнал, когда незарегистрированный пользователь пытается получить доступ к объекту.The System Access Control List (SACL; SACL) enables administrators to record attempts to access a protected object. Each ACE defines the types of access attempts by a given guardian that cause the system to generate an event in the security log. The ACE in the SACL can generate audit records when an access attempt is unsuccessful, when it is successful, or both. The SACL can also give an alert when an unregistered user tries to access an object.

Все типы ЗУД (ACE's) содержат следующую информацию по управлению доступом:All types of ACEs contain the following access control information:

1. Идентификатор защиты (ИДБ; SID), который идентифицирует опекуна, к которому применяется ЗУД (ACE).1. A security identifier (IDB; SID) that identifies the guardian to whom the ACE is applied.

2. Маска доступа, которая задает права доступа, управляемые посредством ЗУД (ACE).2. An access mask that sets access rights controlled by an ACE.

3. Флаг, который указывает тип ЗУД (ACE).3. A flag that indicates the type of itch (ACE).

4. Набор битовых флагов, которые определяют, могут ли дочерние контейнеры или объекты наследовать ЗУД (ACE) от первичного объекта, к которому присоединен СУД (ACL).4. A set of bit flags that determine whether child containers or objects can inherit an ACE from the primary object to which the ACL is attached.

В следующей таблице перечислены три типа ЗУД (ACE), поддерживаемые всеми защищаемыми объектами.The following table lists the three types of ACEs supported by all protected objects.

ТипType of ОписаниеDescription Зуд с отказом в доступеAccess Denial Itch Используется в СУДД (DACL) для запрещения прав доступа опекуну.Used by the DACL to deny access rights to a guardian. ЗУД (ACE) с разрешением доступаACE with permission Используется в СУДД (DACL) для разрешения прав доступа опекуну.Used by the DACL to authorize the trustee with access rights. ЗУД (ACE) аудита системыACE Auditing System Используется в СУСД (SACL) для генерирования записи аудита, когда опекун предпринимает попытку использования заданных прав доступа.Used by the SACL to generate an audit record when the guardian attempts to use the specified permissions.

(1) Формат маски доступа(1) Access mask format

Все защищаемые объекты упорядочивают свои права доступа, используя формат маски доступа, показанный на фиг.26. В данном формате младшие 16 битов предназначены для характерных для объекта прав доступа, следующие 7 битов предназначены для стандартных прав доступа, которые применяются к большинству типов объектов, и 4 старших бита используются для задания обобщенных прав доступа, которые каждый тип объекта может отображать на набор стандартных и характерных для объекта прав. Бит ACCESS_SYSTEM_SECURITY соответствует праву доступа к СУСД (SACL) объекта.All protected objects organize their access rights using the access mask format shown in FIG. In this format, the lower 16 bits are for access rights specific to the object, the next 7 bits are for standard access rights that apply to most types of objects, and the 4 high bits are used to specify generalized access rights that each type of object can map to a set of standard and rights specific to the object. The ACCESS_SYSTEM_SECURITY bit corresponds to the SACL access right of the object.

(2) Обобщенные права доступа(2) Generalized access rights

Обобщенные права задаются в 4 старших битах маски. Каждый тип защищаемого объекта отображает эти биты на набор своих стандартных и характерных для объекта прав доступа. Например, объект файла отображает бит GENERIC_READ на стандартные права доступа READ_CONTROL и SYNCHRONIZE и на характерные для объекта права доступа FILE_READ_DATA, FILE_READ_EA и FILE_READ_ATTRIBUTES. Другие типы объектов отображают бит GENERIC_READ на любой набор прав доступа, который является соответствующим для этого типа объекта.Generic rights are set in the 4 high-order bits of the mask. Each type of protected object maps these bits to a set of its standard and object-specific access rights. For example, a file object maps the GENERIC_READ bit to the standard READ_CONTROL and SYNCHRONIZE access rights and to the object-specific access rights FILE_READ_DATA, FILE_READ_EA and FILE_READ_ATTRIBUTES. Other types of objects map the GENERIC_READ bit to any set of permissions that is appropriate for this type of object.

Обобщенные права доступа могут использоваться для задания типа доступа, необходимого при открытии описателя объекта. Это обычно проще, чем задавать все соответствующие стандартные и характерные права. В следующей таблице показаны константы, определенные для обобщенных прав доступа.Generic access rights can be used to specify the type of access required when opening an object handle. This is usually simpler than setting all the relevant standard and specific rights. The following table shows the constants defined for generic access rights.

КонстантаConstant Обобщенный смыслGeneralized meaning GENERIC_ALLGENERIC_ALL Доступ для чтения, записи и исполненияRead, write and execute access GENERIC_EXECUTEGENERIC_EXECUTE Доступ для исполненияExecution Access GENERIC_READGENERIC_READ Доступ для чтенияRead access GENERIC_WRITEGENERIC_WRITE Доступ для записиWrite access

(3) Стандартные права доступа(3) Standard access rights

Каждый тип защищаемого объекта имеет набор прав доступа, которые соответствуют операциям, характерным для этого типа объекта. В дополнение к этим характерным для объекта правам доступа имеется набор стандартных прав доступа, которые соответствуют операциям, общим для большинства типов защищаемых объектов. В следующей таблице показаны константы, определенные для стандартных прав доступа.Each type of protected object has a set of access rights that correspond to operations specific to this type of object. In addition to these object-specific access rights, there is a set of standard access rights that correspond to operations common to most types of protected objects. The following table shows the constants defined for standard permissions.

КонстантаConstant СмыслMeaning DELETEDELETE Право на удаление объекта.The right to delete an object. READ_CONTROLREAD_CONTROL Право на чтение информации в дескрипторе защиты объекта, не включая информацию в СУСД (SACL).The right to read information in the security descriptor of an object, not including information in a DBMS (SACL). SYNCHRONIZESYNCHRONIZE Право на использование объекта для синхронизации. Это дает возможность потоку ожидать до тех пор, пока объект не будет в сигнальном состоянии. Некоторые типы объектов не поддерживают это право доступа.The right to use the object for synchronization. This allows the thread to wait until the object is in a signal state. Some types of objects do not support this access right. WRITE_DACWRITE_DAC Право на модификацию СУДД (DACL) в дескрипторе защиты объекта.The right to modify the DACS in the object security descriptor. WRITE_OWNERWRITE_OWNER Право на изменение владельца в дескрипторе защиты объекта.The right to change the owner in the object security descriptor.

b) Характерные для предмета праваb) Subject-specific rights

В структуре маски доступа по фиг.26 характерные для предмета права размещаются в секции Характерные для объекта права (младшие 16 битов). Так как в настоящем варианте осуществления платформа хранения раскрывает два набора ИПП (API's) для администрирования безопасности - Win32 и ИПП (API) платформы хранения, характерные для объекта права файловой системы должны рассматриваться для того, чтобы мотивировать разработку характерных для объекта прав платформы хранения.In the structure of the access mask of FIG. 26, the rights specific to the subject are placed in the section Rights specific to the object (the lower 16 bits). Since in the present embodiment, the storage platform discloses two sets of APIs for security administration — Win32 and the storage platform API (API), object-specific file system rights should be considered in order to motivate the development of object-specific storage platform rights.

(1) Характерные для объекта права файла и каталога(1) Object-specific file and directory rights

Рассмотрим следующую таблицу:Consider the following table:

Figure 00000001
Figure 00000001

Ссылаясь на вышеприведенную таблицу, следует отметить, что в файловых системах имеются фундаментальные различия между файлами и каталогами, вот почему права файлов и каталогов перекрываются на одних и тех же битах. Файловые системы определяют очень гранулированные права, позволяя приложениям управлять методом поведения этих объектов. Например, они дают возможность приложениям различать Атрибуты (FILE_READ/WRITE_ATTRIBUTES), Расширенные атрибуты и поток DATA, ассоциированный с файлом.Referring to the table above, it should be noted that in file systems there are fundamental differences between files and directories, which is why the rights of files and directories overlap on the same bits. File systems define very granular rights, allowing applications to control the behavior of these objects. For example, they enable applications to distinguish between Attributes (FILE_READ / WRITE_ATTRIBUTES), Extended Attributes, and the DATA stream associated with the file.

Целью модели защиты платформы хранения настоящего изобретения является упрощение модели назначения прав, поэтому приложениям, работающим с предметами хранилища данных (Контактами, Сообщениями электронной почты и т.д.), в основном, нет необходимости различать атрибуты, расширенные атрибуты и потоки данных, например. Однако для файлов и папок сохраняются гранулированные права Win32, и определяется семантика доступа при помощи платформы хранения, так что может обеспечиваться совместимость с приложениями Win32. Это отображение описывается с каждым правом предмета, заданным ниже.The purpose of the storage platform security model of the present invention is to simplify the rights assignment model, therefore, applications working with data storage items (Contacts, Email messages, etc.) basically do not need to distinguish between attributes, advanced attributes and data streams, for example. However, granular Win32 rights are retained for files and folders, and access semantics are determined using the storage platform, so compatibility with Win32 applications can be ensured. This mapping is described with each item right specified below.

Следующие права предметов задаются со связанными с ними допустимыми операциями. Также обеспечиваются эквивалентные права Win32, поддерживающие каждое из этих прав предметов.The following item rights are set with the associated valid operations. Win32 equivalent rights are also provided that support each of these item rights.

(2) WinFSItemRead(2) WinFSItemRead

Это право предоставляет доступ для чтения ко всем элементам предмета, включая предметы, связанные с предметом при помощи внедренных связей. Оно также делает возможным перечисление предметов, связанных с этим предметом при помощи связей прикрепления (известное также как перечень файлов каталога). Оно включает в себя имена предметов, связанных при помощи связей ссылки. Это право отображается на:This right provides read access to all elements of the subject, including subjects related to the subject through embedded links. It also makes it possible to list items associated with this item using attachment links (also known as a list of directory files). It includes the names of items linked through link links. This right is mapped to:

Файл:File:

(FILE_READ_DATA|SYNCHRONIZE)(FILE_READ_DATA | SYNCHRONIZE)

Папку:Folder:

(FILE_LIST_DIRECTORY|SYNCHRONIZE)(FILE_LIST_DIRECTORY | SYNCHRONIZE)

Семантика такая, что приложение по обеспечению защиты может установить WinFSItemReadData и задать маску прав в виде комбинации прав файла, заданных выше.The semantics are such that a security application can install WinFSItemReadData and set the rights mask as a combination of the file rights specified above.

(3) WinFSItemReadAttributes(3) WinFSItemReadAttributes

Это право предоставляет доступ для чтения к базовым атрибутам Предмета почти так же, как файловые системы различают базовые атрибуты файла и потоки данных. Предпочтительно, что этими базовыми атрибутами являются те, которые постоянно находятся в базовом предмете, из которого выводятся все предметы. Это право отображается на:This right provides read access to the basic attributes of an Item in much the same way that file systems distinguish between basic attributes of a file and data streams. Preferably, these basic attributes are those that are constantly in the base item from which all items are derived. This right is mapped to:

Файл:File:

(FILE_READ_ATTRIBUTES)(FILE_READ_ATTRIBUTES)

Папку:Folder:

(FILE_READ_ATTRIBUTES)(FILE_READ_ATTRIBUTES)

(4) WinFSItemWriteAttributes(4) WinFSItemWriteAttributes

Это право предоставляет доступ для записи к базовым атрибутам Предмета почти так же, как файловые системы различают базовые атрибуты файла и потоки данных. Предпочтительно, что эти базовые атрибуты постоянно находятся в базовом предмете, из которого выводятся все предметы. Это право отображается на:This right provides write access to the basic attributes of an Item in much the same way that file systems distinguish between basic attributes of a file and data streams. Preferably, these basic attributes are constantly in the base item from which all items are derived. This right is mapped to:

Файл:File:

(FILE_WRITE_ATTRIBUTES)(FILE_WRITE_ATTRIBUTES)

Папку:Folder:

FILE_WRITE_ATTRIBUTES)FILE_WRITE_ATTRIBUTES)

(5) WinFSItemWrite(5) WinFSItemWrite

Это право предоставляет возможность записи во все элементы предмета, включая предметы, связанные при помощи внедренных связей. Это право также предоставляет возможность добавлять или удалять внедренные связи к другим предметам. Это право отображается на:This right provides the ability to record in all elements of the subject, including items related through embedded links. This right also provides the ability to add or remove embedded links to other items. This right is mapped to:

Файл:File:

(FILE_WRITE_DATA)(FILE_WRITE_DATA)

Папку:Folder:

(FILE_ADD_FILE)(FILE_ADD_FILE)

В хранилище данных платформы хранения нет различия между предметами и папками, так как предметы также могут иметь Связи прикрепления к другим предметам в хранилище данных. Следовательно, если у вас есть права FILE_ADD_SUBDIRECTORY (или FILE_APPEND_DATA), вы можете иметь предмет, который является источником Связей к другим предметам.In the data warehouse of the storage platform, there is no distinction between objects and folders, since objects can also have Attachment Links to other objects in the data warehouse. Therefore, if you have FILE_ADD_SUBDIRECTORY (or FILE_APPEND_DATA) rights, you may have an item that is the source of Links to other items.

(6) WinFSItemAddLink(6) WinFSItemAddLink

Это право предоставляет возможность добавлять Связи прикрепления к предметам в хранилище. Необходимо отметить, что, так как модель защиты для множества Связей прикрепления изменяет защиту предмета и изменения могут обходить WRITE_DAC, если они поступают от точки с более высоким положением в иерархии, WRITE_DAC требуется на предмете назначения, чтобы можно было создавать к нему Связь. Это право отображается на:This right provides the ability to add attachment links to items in storage. It should be noted that, since the security model for many Attachment Links changes the protection of the item and changes can bypass WRITE_DAC if they come from a point with a higher position in the hierarchy, WRITE_DAC is required on the destination to be able to create a Link to it. This right is mapped to:

Файл:File:

(FILE_APPEND_DATA)(FILE_APPEND_DATA)

Папку:Folder:

(FILE_ADD_SUBDIRECTORY)(FILE_ADD_SUBDIRECTORY)

(7) WinFSItemDeleteLink(7) WinFSItemDeleteLink

Это право предоставляет возможность удаления прикрепления к предмету, даже если право на удаление этого предмета не предоставляется принципалу. Это согласуется с моделью файловой системы и способствует очистке. Это право отображается на:This right provides the ability to remove attachment to an item, even if the principal is not granted the right to remove this item. This is consistent with the file system model and contributes to cleanup. This right is mapped to:

Файл:File:

(FILE_DELETE_CHILD) - Отметьте, что файловые системы не имеют файлового эквивалента для этого права, но у изобретателей такое понятие о предметах, имеющих Связи прикрепления к другим, и, следовательно, они переносят это право также для не папок.(FILE_DELETE_CHILD) - Note that file systems do not have a file equivalent for this right, but inventors have such a concept about objects that have Attachments to others, and therefore they transfer this right also to non-folders.

Папку:Folder:

(FILE_DELETE_CHILD)(FILE_DELETE_CHILD)

(8) Права на удаление предмета(8) Rights to delete an item

Предмет становится удаленным, если пропадает последняя Связь прикрепления к предмету. Нет явного понятия удаления предмета. Имеется операция очистки, которая удаляет все Связи прикрепления к предмету, но это возможность более высокого уровня и не является примитивом системы.The item becomes deleted if the last Link of attachment to the item disappears. There is no explicit concept of deleting an item. There is a cleaning operation that removes all Attachment Links to an item, but this is a higher level opportunity and is not a primitive of the system.

Любой предмет, заданный с использованием пути, может быть отсоединен, если удовлетворяется любое одно из двух условий: (1) родительский предмет по этому пути предоставляет доступ для записи субъекту, или (2) стандартные права на сам предмет предоставляют DELETE. Когда удаляется последняя Связь, предмет удаляется из системы. Любой предмет, заданный с использованием ItemID, может быть отсоединен, если стандартные права на сам предмет предоставляют DELETE.Any item specified using the path can be disconnected if either of two conditions is satisfied: (1) the parent item on this path provides write access to the subject, or (2) standard rights to the item itself are granted by DELETE. When the last Link is deleted, the item is removed from the system. Any item specified using the ItemID can be disconnected if standard rights to the item itself are granted by DELETE.

(9) Права на копирование предмета(9) Copying Rights

Предмет может копироваться из источника в папку назначения, если субъекту предоставляется WinFSItemRead на предмет и WinFSItemWrite на папку назначения.An item can be copied from the source to the destination folder if the subject is provided with WinFSItemRead on the item and WinFSItemWrite on the destination folder.

(10) Права на перемещение предмета(10) Rights to move an item

Перемещение файла в файловой системе требует только права DELETE на файл источника и FILE_ADD_FILE на каталог назначения, так как он сохраняет СУД (ACL) на пункт назначения. Однако флаг может задаваться в вызове MoveFileEx (MOVEFILE_COPY_ALLOWED), который позволяет приложению задавать, что в случае перемещения между томами он может допускать семантику CopyFile. Существует 4 потенциальных варианта в отношении того, что происходит с дескриптором защиты при перемещении:Moving a file in the file system requires only DELETE rights to the source file and FILE_ADD_FILE to the destination directory, since it saves the ACL to the destination. However, the flag can be set in a call to MoveFileEx (MOVEFILE_COPY_ALLOWED), which allows the application to specify that if it moves between volumes, it can allow CopyFile semantics. There are 4 potential options for what happens with a security descriptor when moving:

1. Переносит весь СУД (ACL) с файлом - семантика перемещения внутри тома по умолчанию.1. Carries the entire ACL with the file — the default semantics of movement within the volume.

2. Переносит весь СУД (ACL) с файлом и помечает СУД (ACL) как защищенный.2. Carries the entire ACL with the file and marks the ACL as protected.

3. Переносит только явные ЗУД (ACE's) и повторно наследует в пункте назначения.3. Carries only explicit ACEs and re-inherits at destination.

4. Ничего не переносит и повторно наследует в пункте назначения - семантика перемещения между томами по умолчанию - как и при копировании файла.4. Does not transfer anything and re-inherits at the destination - the semantics of moving between volumes by default - as when copying a file.

В настоящей модели защиты, если приложение задает флаг MOVEFILE_COPY_ALLOWED, четвертый вариант выполняется для случаев как между томами, так и внутри тома. Если этот флаг не задан, выполняется второй вариант, если только пунктом назначения не является также та же зона безопасности (т.е. одинаковая семантика наследования). Перемещение на уровне платформы хранения также реализует четвертый вариант и требует READ_DATA на источник почти так же, как было бы при копировании.In the present protection model, if the application sets the MOVEFILE_COPY_ALLOWED flag, the fourth option is performed for cases both between volumes and inside the volume. If this flag is not set, the second option is executed, unless the destination is also the same security zone (i.e., the same inheritance semantics). Moving at the storage platform level also implements the fourth option and requires READ_DATA to the source in much the same way as it would when copying.

(11) Права на просмотр политики безопасности (защиты) на предмет(11) Rights to view security (protection) policies for

Защита предмета может быть просмотрена, если предмет предоставляет стандартное право READ_CONTROL субъекту.The subject protection can be viewed if the subject grants the standard READ_CONTROL right to the subject.

(12) Права на изменение политики безопасности на предмет(12) Subject to change of security policy

Защита предмета может быть изменена, если предмет предоставляет стандартное право WRITE_DAC субъекту. Однако, так как хранилище данных обеспечивает не явное наследование, это имеет последствия на то, как защита может изменяться по иерархиям. Правило такое, что, если корень иерархии предоставляет WRITE_DAC, тогда политика безопасности изменяется на всей иерархии, независимо от того, что конкретные предметы внутри иерархии (или ОАГ; DAG) не предоставляют WRITE_DAC субъекту.The protection of the subject can be changed if the subject grants the standard WRITE_DAC right to the subject. However, since the data warehouse provides implicit inheritance, this has implications on how security can vary across hierarchies. The rule is that if the root of the hierarchy provides WRITE_DAC, then the security policy changes throughout the hierarchy, regardless of the fact that specific items within the hierarchy (or OAS; DAG) do not provide WRITE_DAC to the subject.

(13) Права, которые не имеют прямого эквивалента(13) Rights that do not have a direct equivalent

В настоящем варианте осуществления FILE_EXECUTE (FILE_TRAVERSE для каталогов) не имеют прямого эквивалента в платформе хранения. Модель сохраняет их для совместимости с Win32, но не имеет никаких решений о доступе, выполненных для предметов, основанных на этих правах. Что касается FILE_READ/WRITE_EA, так как предметы хранилища данных не имеют понятия о расширенных атрибутах, не предусмотрена семантика для этого бита. Однако бит остается для совместимости с Win32.In the present embodiment, FILE_EXECUTE (FILE_TRAVERSE for directories) do not have a direct equivalent in the storage platform. The model saves them for compatibility with Win32, but does not have any access decisions made for items based on these rights. As for FILE_READ / WRITE_EA, since the data warehouse items do not have a concept of extended attributes, there is no semantics for this bit. However, the bit remains for compatibility with Win32.

3. Реализация3. Implementation

Все предметы, которые определяют идентично защищенные зоны, имеют запись, ассоциированную с ними в таблице защиты. Таблица защиты определяется следующим образом:All items that define identically protected areas have an entry associated with them in the protection table. The protection table is defined as follows:

Идентификация ПредметаItem Identification Ordpath ПредметаItem Ordpath Явный СУД (ACL) ПредметовExplicit COURT (ACL) of Items СУД (ACL's) путиCOURT (ACL's) ways СУД (ACL's) зоныCOURT (ACL's) zone

Запись Идентификация Предмета представляет собой Идентификацию Предмета корня идентично защищенной зоны безопасности. Запись Ordpath Предмета представляет собой ordpath, ассоциированный с корнем идентично защищенной зоны безопасности. Запись Явный СУД (ACL) Предметов представляет собой явный СУД (ACL), определенный для корня идентично защищенной зоны безопасности. В некоторых случаях им может быть NULL, например, когда определяется новая зона безопасности, так как предмет имеет множество родителей, принадлежащих различным зонам. Запись СУД (ACL's) Пути представляет собой набор СУД (ACL's), наследуемых предметом, и запись СУД (ACL's) Зоны представляет собой набор СУД (ACL's), определенных для идентично защищенной зоны безопасности, ассоциированной с предметом.The Item Identification entry is the Identification of the Root Item of an identically protected security zone. An Ordpath Entry entry is an ordpath associated with the root of an identically protected security zone. The Explicit COURT (ACL) Entry entry is an explicit ACL defined for the root of an identically protected security zone. In some cases, it can be NULL, for example, when a new security zone is defined, since the item has many parents belonging to different zones. The ACL's Path Record is a set of ACL's inherited by the subject, and the Zone ACL's Record is a set of ACL's defined for the identically protected security zone associated with the subject.

Вычисление действующей защиты для любого предмета в данном хранилище усиливает эту таблицу. Чтобы определить политику безопасности, ассоциированную с предметом, получают зону безопасности, ассоциированную с предметом, и извлекают СУД (ACL's), ассоциированные с этой зоной.The calculation of the effective protection for any item in this repository strengthens this table. To determine the security policy associated with the item, obtain the security zone associated with the item and retrieve the ACL's associated with that zone.

Так как политика безопасности, ассоциированная с предметом, изменяется или посредством непосредственного добавления явных СУД (ACL's), или косвенного добавления Связей прикрепления, которые приводят к формированию новых зон безопасности, таблица защиты поддерживается с обновлением данных, чтобы гарантировать, что является действительным вышеупомянутый алгоритм для определения действующей защиты предмета.Since the security policy associated with the subject is changed either by directly adding explicit ACL's, or by indirectly adding attachment links that lead to the creation of new security zones, the protection table is maintained with data updates to ensure that the above algorithm is valid for determining the effective protection of the subject.

Различные изменения в хранилище и сопровождающих алгоритмах для сопровождения таблицы безопасности представляют собой следующие:Various changes to the repository and the accompanying algorithms for maintaining the security table are as follows:

а) Создание нового предмета в контейнереa) Creating a new item in the container

Когда предмет вновь создается в контейнере, он наследует все СУД (ACL's), ассоциированные с контейнером. Так как вновь создаваемый предмет имеет только одного родителя, он принадлежит к той же зоне, что и его родитель. Таким образом, нет необходимости создавать новую запись в таблице защиты.When an item is re-created in the container, it inherits all ACL's associated with the container. Since the newly created item has only one parent, it belongs to the same zone as its parent. Thus, there is no need to create a new entry in the protection table.

b) Добавление явного СУД (ACL) к предметуb) Adding an explicit ACL to the subject

Когда СУД (ACL) добавляется к предмету, он определяет новую зону безопасности для всех его потомков в иерархии включения, которая принадлежит этой же зоне безопасности, что и сам данный предмет. Для всех предметов, которые принадлежат другим зонам безопасности, но являются потомками данного предмета в иерархии включения, зона безопасности остается неизменной, но действующий СУД (ACL), ассоциированный с зоной, изменяется для отражения добавления нового СУД (ACL).When an ACL is added to an item, it defines a new security zone for all its descendants in the inclusion hierarchy, which belongs to the same security zone as the given item. For all items that belong to other security zones but are descendants of the given item in the inclusion hierarchy, the security zone remains unchanged, but the current ACL associated with the zone changes to reflect the addition of a new ACL.

Введение этой новой зоны безопасности может запускать дополнительные определения зоны для всех тех предметов, которые имеют множество Связей прикрепления с предшественниками, которые охватывают старую зону безопасности и вновь определенную зону безопасности. Для всех таких предметов необходимо определить новую зону безопасности и повторить процедуру.The introduction of this new security zone may trigger additional zone definitions for all items that have multiple attachment links with predecessors that cover the old security zone and the newly defined security zone. For all such items, you must define a new security zone and repeat the procedure.

Фиг.27(а), (b) и (с) изображают новую идентично защищенную зону безопасности, вырезаемую из существующей зоны безопасности посредством введения нового явного СУД (ACL). Это указано узлом, обозначенным 2. Однако введение этой новой зоны приводит к дополнительной зоне 3, создаваемой вследствие предмета, имеющего множество Связей прикрепления.27 (a), (b) and (c) depict a new identically protected security zone cut out of an existing security zone by introducing a new explicit ACL. This is indicated by the node designated 2. However, the introduction of this new zone leads to an additional zone 3 created due to an object having a plurality of attachment bonds.

Следующая последовательность обновлений в таблицах защиты отражает разложение идентично защищенных зон безопасности.The following sequence of updates in the protection tables reflects the decomposition of identically protected security zones.

с) Добавление связи прикрепления к предметуc) Adding an attachment link to an item

Когда добавляется Связь прикрепления к предмету, это приводит к возникновению одной из трех возможностей. Если целью Связи прикрепления, т.е. рассматриваемый предмет, является корень зоны безопасности, изменяется действующий СУД (ACL), ассоциированный с зоной, и не требуются дополнительные модификации в таблице защиты. Если зона безопасности источника новой Связи прикрепления идентична зоне безопасности существующих родителей предмета, не требуются изменения. Однако, если предмет теперь имеет родителей, которые принадлежат к различным зонам безопасности, тогда формируется новая зона безопасности с данным предметом в качестве корня зоны безопасности. Это изменение распространяется на все предметы в иерархии включения посредством модифицирования зоны безопасности, ассоциированной с предметом. Все предметы, которые принадлежат к одной и той же зоне безопасности, что и рассматриваемый предмет, и их потомки в иерархии включения должны быть изменены. Если выполнено изменение, все предметы, которые имеют многочисленные Связи прикрепления, должны исследоваться с целью определения, требуются ли дополнительные изменения. Дополнительные изменения могут потребоваться, если любой из этих предметов имеет родителей разных зон безопасности.When an Attachment Link is added to an item, this leads to one of three possibilities. If the purpose of the connection is attachment, i.e. the subject in question is the root of the security zone, the current ACL associated with the zone is changed, and no additional modifications to the protection table are required. If the security zone of the source of the new Attachment Link is identical to the security zone of the existing parents of the item, no change is required. However, if the item now has parents who belong to different security zones, then a new security zone is formed with this item as the root of the security zone. This change applies to all items in the inclusion hierarchy by modifying the security zone associated with the item. All items that belong to the same security zone as the item in question and their descendants in the inclusion hierarchy must be changed. If a change is made, all items that have multiple Attachment Links should be examined to determine if additional changes are required. Additional changes may be required if any of these items has parents of different security zones.

d) Удаление связи прикрепления из предметаd) Removing an attachment link from an item

Когда удаляется Связь прикрепления из предмета, можно свернуть зону безопасности до зоны его родителей, если удовлетворяются определенные условия. Более конкретно, это может быть выполнено при следующих условиях: (1) если удаление Связи прикрепления приводит к предмету, который имеет одного родителя, и явный СУД (ACL) не задан для этого предмета; (2) если удаление Связи прикрепления приводит к предмету, родители которого все находятся в одной и той же зоне безопасности, и явный СУД (ACL) не определен для этого предмета. При таких условиях зона безопасности может помечаться, что она такая же, что и у родителя. Эта отметка должна применяться ко всем предметам, зона безопасности которых соответствует сворачиваемой зоне.When the Attachment Link is removed from the item, you can collapse the security zone to the zone of its parents if certain conditions are met. More specifically, this can be accomplished under the following conditions: (1) if the deletion of the Attachment Link results in an item that has one parent and an explicit ACL is not specified for that item; (2) if the deletion of the Attachment Link results in an item whose parents are all in the same security zone and an explicit ACL is not defined for that item. Under such conditions, the safety zone may be marked as being the same as the parent. This mark should be applied to all items whose safety zone corresponds to the collapsible zone.

е) Удаление явного СУД (ACL) из предметаf) Removing an explicit ACL from an item

Когда из предмета удаляется явный СУД (ACL), можно свернуть зону безопасности с корнем в этом предмете до зоны его родителей. Более конкретно, это можно выполнить, если удаление явного СУД (ACL) приводит к предмету, родители которого в иерархии включения принадлежат к этой же зоне безопасности. При таких условиях зона безопасности может помечаться, что она такая же, что и у родителя, и изменение применяется ко всем предметам, зона безопасности которых соответствует сворачиваемой зоне.When an explicit ACL is removed from the item, you can collapse the security zone with the root in that item to the zone of its parents. More specifically, this can be accomplished if the removal of an explicit ACL results in an item whose parents in the inclusion hierarchy belong to the same security zone. Under such conditions, the safety zone may be marked as being the same as the parent, and the change applies to all items whose safety zone corresponds to the collapsible zone.

f) Модифицирование СУД (ACL), ассоциированного с предметомf) Modification of the ACL associated with the subject

В этом сценарии не требуются новые дополнения к таблице защиты. Обновляется действующий СУД (ACL), ассоциированный с зоной, и новое изменение СУД (ACL) распространяется на зоны безопасности, на которые он оказывает влияние.In this scenario, no new additions to the protection table are required. The current ACL associated with the zone is updated, and a new ACL change extends to the security zones that it affects.

F. УВЕДОМЛЕНИЯ И ОТСЛЕЖИВАНИЕ ИЗМЕНЕНИЙF. NOTIFICATIONS AND TRACKING OF CHANGES

Согласно другому аспекту настоящего изобретения платформа хранения предоставляет возможность уведомления, что дает возможность приложениям отслеживать изменения данных. Эта особенность предназначена, главным образом, для приложений, которые поддерживают изменяющееся состояние или исполняют бизнес-логику на события изменения данных. Приложения регистрируют уведомления на предметы, расширения предметов и связи предметов. Уведомления доставляются асинхронно после фиксирования изменений данных. Приложения могут фильтровать уведомления по типу предмета, расширения и связи, а также типу операции.According to another aspect of the present invention, the storage platform provides notification capability, which enables applications to track data changes. This feature is primarily intended for applications that support a changing state or execute business logic on data change events. Applications register item notifications, item extensions, and item communications. Notifications are delivered asynchronously after committing data changes. Applications can filter notifications by type of subject, extension and communication, as well as type of operation.

Согласно одному варианту осуществления ИПП (API) 322 платформы хранения предоставляет два вида интерфейсов для уведомлений. Во-первых, приложения регистрируют простые события изменения данных, инициируемые изменениями в предметах, расширениях предметов и связях предметов. Во-вторых, приложения создают объекты «наблюдателей» для контролирования наборов предметов, расширений предметов и связей между предметами. Состояние объекта наблюдателя может сохраняться и создаваться заново после сбоя системы или после того, как система перешла в автономный режим для продолжительного периода времени. Единственное уведомление может отражать множество обновлений.According to one embodiment, the storage platform API 322 provides two kinds of notification interfaces. First, applications record simple data change events triggered by changes in items, item extensions, and item relationships. Secondly, applications create objects of "observers" to control sets of objects, extensions of objects and relations between objects. The state of the observer object can be saved and re-created after a system failure or after the system goes offline for an extended period of time. A single notification may reflect many updates.

1. События изменения хранения1. Storage change events

В данном разделе представлено несколько примеров того, как используются интерфейсы уведомлений, предоставляемые ИПП (API) 322 платформы хранения.This section provides some examples of how the notification interfaces provided by the storage platform API 322 are used.

а) Событияa) Events

Item, ItemExtension и ItemRelationship раскрывают события изменения данных, которые используются приложениями для регистрации уведомлений об изменении данных. Следующий образец кода показывает определение обработчиков событий ItemModified и ItemRemoved по базовому классу Item.Item, ItemExtension and ItemRelationship disclose data change events that are used by applications to register data change notifications. The following code sample shows the definition of the ItemModified and ItemRemoved event handlers for the base class Item.

//События//Developments

public event ItemModifiedEventHandler Item_ItemModified; public event ItemModifiedEventHandler Item_ItemModified ;

public event ItemRemovedEventHandler Item_ItemRemoved; public event ItemRemovedEventHandler Item_ItemRemoved ;

Все уведомления несут достаточно данных для извлечения измененного предмета из хранилища данных. Следующий образец кода показывает, как регистрировать события на Item, ItemExtension или ItemRelationship:All notifications carry enough data to retrieve a modified item from the data store. The following code sample shows how to log events on an Item, ItemExtension or ItemRelationship:

myItem.ItemModified += new ItemModifiedEventHandler(this.onItemUpdate);myItem.ItemModified + = new ItemModifiedEventHandler (this.onItemUpdate);

myItem.ItemRemoved += new ItemRemovedEventHandler(this.onItemDelete);myItem.ItemRemoved + = new ItemRemovedEventHandler (this.onItemDelete);

В настоящем варианте осуществления платформа хранения гарантирует, что приложения будут уведомлены, если соответствующий предмет был модифицирован или удален с момента последней доставки уведомления или в случае новой регистрации с момента последней выборки из хранилища данных.In the present embodiment, the storage platform ensures that the applications will be notified if the corresponding item has been modified or deleted since the last delivery of the notification or in the case of a new registration since the last retrieval from the data store.

b) Наблюдателиb) Observers

В настоящем варианте осуществления платформа хранения определяет классы наблюдателей для контролирования объектов, ассоциированных с (1) папкой или иерархией папок, (2) контекстом предмета или (3) конкретным предметом. Для каждой из трех категорий платформа хранения предоставляет конкретные классы наблюдателей, которые контролируют ассоциированные предметы, расширения предметов или связи предметов, например, платформа хранения обеспечивает соответствующие классы FolderItemWatcher, FolderRelationshipWatcher и FolderExtensionWatcher.In the present embodiment, the storage platform defines observer classes for controlling objects associated with (1) a folder or folder hierarchy, (2) the context of an item, or (3) a specific item. For each of the three categories, the storage platform provides specific observer classes that control associated objects, item extensions, or item relationships, for example, the storage platform provides the corresponding classes FolderItemWatcher, FolderRelationshipWatcher and FolderExtensionWatcher.

При создании наблюдателя приложение может запросить уведомления о предварительно существующих предметах, т.е. предметах, расширениях или связях. Этот вариант, главным образом, для приложений, которые сопровождают закрытый кэш предметов. Если не запрашивается, приложения принимают уведомления обо всех обновлениях, которые происходят после того, как был создан объект наблюдателя.When creating an observer, an application may request notifications of pre-existing items, i.e. items, extensions, or links. This option is mainly for applications that accompany a closed item cache. If not requested, applications receive notifications of all updates that occur after the observer object has been created.

Вместе с доставкой уведомлений платформа хранения предоставляет объект «WatcherState». WatcherState может сериализоваться и сохраняться на диске. Состояние наблюдателя впоследствии может использоваться для повторного создания соответствующего наблюдателя после сбоя или при повторном соединении после перехода в автономный режим. Вновь повторно создаваемый наблюдатель будет повторно генерировать неподтвержденные уведомления. Приложения указывают доставку уведомления посредством вызова метода «Exclude» на соответствующее состояние наблюдателя, подавая ссылку на уведомление.Along with the delivery of notifications, the storage platform provides the WatcherState object. WatcherState can be serialized and saved to disk. The state of the observer can subsequently be used to re-create the corresponding observer after a failure or when reconnecting after going offline. The newly re-created observer will re-generate unconfirmed notifications. Applications indicate the delivery of a notification by calling the “Exclude” method to the corresponding state of the observer by submitting a link to the notification.

Платформа хранения доставляет отдельные копии состояния наблюдателя каждому обработчику событий. Состояния наблюдателя, принимаемые при последующих вызовах этого же обработчика событий, предполагают доставку всех ранее принятых уведомлений.The storage platform delivers separate copies of the observer state to each event handler. Observer states received on subsequent calls to the same event handler assume delivery of all previously received notifications.

В качестве примера следующий образец кода показывает определение FolderItemWatcher.As an example, the following code sample shows the definition of a FolderItemWatcher.

Figure 00000002
Figure 00000002

Figure 00000003
Figure 00000003

Следующий образец кода показывает, как создавать объект наблюдателя папки для контролирования содержимого папки. Наблюдатель генерирует уведомления, т.е. события, когда добавляются новые музыкальные предметы или обновляются или удаляются существующие музыкальные предметы. Наблюдатели папок контролируют или конкретную папку, или все папки в иерархии папок.The following code sample shows how to create a folder watcher object to control the contents of a folder. The observer generates notifications, i.e. events when new musical items are added or existing musical items are updated or deleted. Folder watchers control either a specific folder or all folders in a folder hierarchy.

Figure 00000004
Figure 00000004

2. Механизм отслеживания изменений и генерирования уведомлений2. Change tracking and notification mechanism

Платформа хранения предоставляет простой, тем не менее, эффективный механизм для отслеживания изменений данных и генерирования уведомлений. Клиент извлекает уведомления по тому же соединению, что и используемое для извлечения данных. Это в значительной степени упрощает проверки системы безопасности (защиты), устраняет задержки и ограничения на возможные сетевые конфигурации. Уведомления извлекаются посредством вызова операторов выбора. Чтобы предотвратить опрос, клиенты могут использовать особенность «waitfor», предоставляемую процессором 314 базы данных. Фиг.13 изображает базовый принцип уведомлений платформы хранения. Этот запрос waitfor может исполняться синхронно, в этом случае вызывающий поток блокируется до тех пор, пока не будут доступны результаты, или асинхронно, в этом случае поток не блокируется, и результаты возвращаются по отдельному потоку, когда доступны.The storage platform provides a simple, yet effective mechanism for tracking data changes and generating notifications. The client retrieves notifications on the same connection as that used to retrieve the data. This greatly simplifies security (protection) system checks, eliminates delays and restrictions on possible network configurations. Notifications are retrieved by calling select statements. To prevent polling, clients can use the waitfor feature provided by the database processor 314. Fig depicts the basic principle of notifications storage platform. This waitfor request can be executed synchronously, in which case the calling thread is blocked until the results are available, or asynchronously, in this case the thread is not blocked, and the results are returned on a separate thread when available.

Комбинация «waitfor» и «select» привлекательна для контролирования изменений данных, которые входят в конкретный диапазон данных, так как изменения могут контролироваться посредством установки блокировки уведомлений на соответствующий диапазон данных. Это справедливо для многих общих сценариев платформы хранения. Изменения индивидуальных предметов могут эффективно контролироваться посредством установки блокировок уведомлений на соответствующий диапазон данных. Изменения папок и деревьев папок могут контролироваться посредством установки блокировок уведомлений на диапазоны путей. Изменения типов и их подтипов могут контролироваться посредством установки блокировок уведомлений на диапазоны типов.The combination of “waitfor” and “select” is attractive for controlling data changes that fall within a specific data range, since changes can be controlled by setting notification blocking on the corresponding data range. This is true for many common storage platform scenarios. Changes to individual items can be effectively controlled by setting notification locks on the appropriate data range. Changes to folders and folder trees can be controlled by setting notification locks on path ranges. Changes to types and their subtypes can be controlled by setting notification locks on type ranges.

В общих чертах, существуют три отдельные фазы, связанные с обработкой уведомлений: (1) изменение или даже обнаружение данных, (2) соответствие подписки и (3) доставка уведомлений. Исключая синхронную доставку уведомлений, т.е. доставку уведомлений как часть транзакции, выполняющей изменение данных, платформа хранения может реализовывать две формы доставки уведомлений:In general terms, there are three distinct phases associated with the processing of notifications: (1) changing or even detecting data, (2) matching subscriptions and (3) delivery of notifications. Excluding synchronous delivery of notifications, i.e. notification delivery as part of a data change transaction, the storage platform can implement two forms of notification delivery:

1) Немедленное обнаружение событий: Обнаружение событий и соответствие подписки выполняется как часть транзакции обновления. Уведомления вставляются в таблицу, контролируемую подписчиком; и1) Immediate event detection : Event detection and subscription matching is performed as part of the update transaction. Notifications are inserted into the table controlled by the subscriber; and

2) Отложенное обнаружение событий: Обнаружение событий и соответствие подписки выполняется после фиксации транзакции обновления. Впоследствии фактический подписчик или посредник обнаруживают события и генерируют уведомления. 2) Delayed event detection : Event detection and subscription matching is performed after committing the update transaction. Subsequently, the actual subscriber or intermediary detects events and generates notifications.

Немедленное обнаружение событий требует исполнения дополнительного кода как части операций обновления. Это позволяет выполнять сбор данных всех событий, представляющих интерес, включая события, указывающие на изменение относительного состояния.Immediate event detection requires the execution of additional code as part of update operations. This allows you to collect data from all events of interest, including events that indicate a change in relative state.

Отложенное обнаружение событий устраняет необходимость добавления дополнительного кода к операциям обновления. Обнаружение событий выполняется окончательным подписчиком. Отложенное обнаружение событий естественно группирует обнаружение событий и доставку событий и хорошо подходит для инфраструктуры исполнения запросов процессора 314 базы данных (например, SQL Server).Deferred event detection eliminates the need to add additional code to update operations. Event detection is performed by the final subscriber. Deferred event detection naturally groups event detection and event delivery and is well suited to the query execution infrastructure of database processor 314 (e.g., SQL Server).

Отложенное обнаружение событий основывается на регистрации или записи, оставляемых операциями обновления. Платформа хранения поддерживает набор логических временных меток вместе с объектами-памятниками для удаленных предметов данных. При сканировании хранилища данных в отношении изменений клиенты подают временную метку, которая определяет низший предел для обнаружения изменений, и набор временных меток для предотвращения дублирования уведомлений. Приложения могут принимать уведомления для всех изменений, которые произошли после момента времени, указываемого низшим пределом.Deferred event detection is based on recording or recording left by update operations. The storage platform supports a set of logical timestamps along with memorial objects for deleted data items. When scanning the data warehouse for changes, clients provide a timestamp that defines the lowest limit for detecting changes, and a set of timestamps to prevent duplicate notifications. Applications can receive notifications for all changes that occur after a point in time indicated by a lower limit.

Сложные приложения с доступом к основным представлениям могут дополнительно оптимизировать и уменьшать количество операторов ЯСЗ (SQL), необходимых для контролирования потенциально большого набора предметов посредством создания таблиц закрытых параметров и фильтра дубликатов. Приложения со специальными потребностями, такие как те, которые должны поддерживать представления с широкими возможностями, могут использовать доступную интегрированную среду отслеживания изменений для контролирования изменений данных и регенерации их закрытых (частных) снимков.Sophisticated applications with access to basic views can further optimize and reduce the number of SQL statements (SQL) needed to control a potentially large set of items by creating tables of closed parameters and a duplicate filter. Applications with special needs, such as those that must support rich presentation capabilities, can use the available integrated change tracking environment to monitor data changes and regenerate their private (private) snapshots.

Предпочтительно поэтому, что в одном варианте осуществления платформа хранения реализует подход отложенного обнаружения событий, что более подробно описано ниже.It is therefore preferred that, in one embodiment, the storage platform implements a pending event detection approach, which is described in more detail below.

а) Отслеживание измененийa) Change tracking

Все определения предметов, расширений и связей предметов имеют уникальный идентификатор. Отслеживание изменений сопровождает набор логических временных меток для записи моментов времени создания, обновления и удаления для всех предметов данных. Записи объектов-памятников используются для представления удаленных предметов данных.All definitions of items, extensions, and item relationships have a unique identifier. Change tracking accompanies a set of logical timestamps for recording the creation, update, and deletion times for all data items. Records of monument objects are used to represent deleted data objects.

Приложения используют эту информацию для эффективного контроля, был ли конкретный предмет, расширение предмета или связь предмета вновь добавлен, обновлен или удален с тех пор, когда приложение в последний раз обращалось к хранилищу данных. Следующий пример иллюстрирует этот механизм.Applications use this information to effectively control whether a particular item, item extension, or item link has been added, updated, or deleted since the application last accessed the data store. The following example illustrates this mechanism.

Figure 00000005
Figure 00000005

Все удаленные предметы, расширения предметов и связи записываются в соответствующую таблицу объектов-памятников. Шаблон показан ниже.All deleted items, item extensions and communications are recorded in the corresponding table of monuments. The template is shown below.

Figure 00000006
Figure 00000006

По причинам эффективности платформа хранения поддерживает набор глобальных таблиц для предметов, расширений предметов, связей и имен путей. Эти глобальные таблицы поиска могут использоваться приложениями для эффективного контроля диапазонов данных и извлекать ассоциированную информацию о временных метках и типе.For performance reasons, the storage platform supports a set of global tables for items, item extensions, links, and path names. These global lookup tables can be used by applications to effectively control data ranges and retrieve associated timestamp and type information.

b) Управление временными меткамиb) Time stamp management

Логические временные метки являются «локальными» для хранилища базы данных, т.е. тома платформы хранения. Временные метки представляют собой монотонно увеличивающиеся 64-битовые значения. Сохранение единственной метки часто является достаточным для обнаружения, произошло ли изменение данных после последнего подсоединения к тому платформы хранения. Однако в более реалистичных сценариях необходимо сохранять несколько больше временных меток для проверки на дублирование. Причины объясняются ниже.Logical timestamps are "local" to the database store, i.e. storage platform volumes. Timestamps are monotonically increasing 64-bit values. Saving a single label is often sufficient to detect whether a data change has occurred since the last connection to the storage platform volume. However, in more realistic scenarios, you need to save a few more timestamps to check for duplication. The reasons are explained below.

Таблицы реляционных баз данных представляют собой логические абстракции, построенные поверх набора физических структур данных, т.е. В-деревья, кучи и т.д. Присваивание временной метки вновь создаваемой или обновляемой записи не является элементарным действием. Вставка этой записи в лежащие в основе структуры данных может происходить в различные моменты времени, таким образом, приложения могут считать записи неисправными.Relational database tables are logical abstractions built on top of a set of physical data structures, i.e. In-trees, heaps, etc. Assigning a timestamp to a newly created or updated record is not an elementary action. Inserting this record into the underlying data structures can occur at different points in time, so applications may consider the records to be faulty.

Фиг.14 изображает две транзакции, причем обе вставляют новую запись в одно и то же В-дерево. Так как транзакция Т3 вставляет свою запись до того, как планируется вставка транзакцией T2, приложение, сканирующее В-дерево, может видеть записи, вставленные транзакцией Т3, перед записями, вставленными транзакцией Т2. Таким образом, считыватель может неправильно предположить, что он видел все записи, созданные до момента времени «10». Чтобы решить этот вопрос, процессор 314 базы данных предусматривает функцию, которая возвращает низший предел, до которого все обновления были завершены и вставлены в соответствующие лежащие в основе структуры данных. В вышеприведенном примере возвращаемым низшим пределом был бы «5», предполагая, что считыватель начал до того, как была завершена транзакция Т2. Низший предел, предусмотренный процессором 314 базы данных, дает возможность приложениям эффективно определять, какие предметы игнорировать при сканировании базы данных или диапазона данных в отношении изменения данных. В общих чертах, предполагается, что транзакции атомарности, непротиворечивости, изоляции, надежности (АНИН; ACID), таким образом, продолжаются очень короткое время, низшие пределы, как ожидается, очень близки к наиболее недавним распределенным временным меткам. В присутствии длительно продолжающихся транзакций приложения должны сохранять индивидуальные временные метки для обнаружения и отбрасывания дубликатов.Fig. 14 depicts two transactions, both of which insert a new record into the same B-tree. Since transaction T3 inserts its record before it is scheduled to be inserted by transaction T2, the application scanning the B-tree can see the records inserted by transaction T3 before the records inserted by transaction T2. Thus, the reader may incorrectly assume that he saw all the records created before the time point “10”. To solve this issue, the database processor 314 provides a function that returns the lowest limit to which all updates have been completed and inserted into the corresponding underlying data structures. In the above example, the return low would be “5”, assuming the reader started before transaction T2 was completed. The lower limit provided by the database processor 314 enables applications to efficiently determine which items to ignore when scanning a database or data range for data changes. In general, it is assumed that transactions of atomicity, consistency, isolation, reliability (ANIN; ACID) thus last a very short time, the lower limits are expected to be very close to the most recent distributed timestamps. In the presence of long-running transactions, applications must retain individual timestamps to detect and discard duplicates.

с) Обнаружение изменения данных - обнаружение событийc) Data change detection - event detection

При запросе хранилища данных приложения получают низший предел. Впоследствии приложения используют этот предел для сканирования хранилища данных в отношении записей, временная метка создания, обновления или удаления которых больше, чем возвращаемый низший предел. Фиг.15 иллюстрирует этот процесс.When querying the data store, applications receive a lower limit. Subsequently, applications use this limit to scan the data warehouse for records whose timestamp for creating, updating, or deleting is longer than the returned lower limit. 15 illustrates this process.

Чтобы предотвратить дублированные уведомления, приложения запоминают временные метки, которые больше, чем возвращаемый низший предел, и используют их для фильтрации дубликатов. Приложения создают локальные временные таблицы сеанса для эффективного оперирования большим набором временных меток дубликатов. Перед выдачей оператора выбора приложение вставляет все ранее возвращенные временные метки дубликатов и удаляет те, которые старше, чем последний возвращенный низший предел, как изображено ниже.To prevent duplicate notifications, applications remember timestamps that are larger than the returned low limit and use them to filter duplicates. Applications create local temporary session tables for efficiently handling a large set of duplicate timestamps. Before issuing a select statement, the application inserts all previously returned duplicate timestamps and deletes those older than the last returned lower limit, as shown below.

Figure 00000007
Figure 00000007

G. СИНХРОНИЗАЦИЯG. SYNCHRONIZATION

Согласно другому аспекту настоящего изобретения платформа хранения предоставляет службу 330 синхронизации, которая (i) дает возможность множеству экземпляров платформы хранения (каждый со своим собственным хранилищем 302 данных) синхронизировать части своего содержимого в соответствии с гибким набором правил, и (ii) обеспечивает инфраструктуру для третьих сторон, чтобы синхронизировать хранилище данных платформы хранения настоящего изобретения с другими источниками данных, которые реализуют специфические протоколы.According to another aspect of the present invention, the storage platform provides a synchronization service 330 that (i) enables multiple instances of the storage platform (each with its own data store 302) to synchronize parts of its content in accordance with a flexible set of rules, and (ii) provides infrastructure for third parties to synchronize the data warehouse storage platform of the present invention with other data sources that implement specific protocols.

Синхронизация платформы хранения с платформой хранения происходит среди группы участвующих реплик. Например, со ссылкой на фиг.3, может быть желательным обеспечить синхронизацию между хранилищем 302 данных платформы 300 хранения с другим удаленным хранилищем 338 данных под управлением другого экземпляра платформы хранения, возможно выполняющимся на другой компьютерной системе. Общее число членов этой группы необязательно является известным для любой данной реплики в любой данный момент времени.Storage platform synchronization with the storage platform occurs among a group of participating replicas. For example, with reference to FIG. 3, it may be desirable to provide synchronization between the data store 302 of the storage platform 300 with another remote data store 338 under the control of another instance of the storage platform, possibly running on a different computer system. The total number of members in this group is not necessarily known for any given replica at any given time.

Различные реплики могут выполнять изменения независимо (т.е. одновременно). Процесс синхронизации определяется как предоставление сведений каждой реплике об изменениях, сделанных другими репликами. Эта возможность синхронизации, по сути, является со многими ведущими.Different replicas can make changes independently (i.e. at the same time). The synchronization process is defined as providing information to each replica about changes made by other replicas. This synchronization feature, in fact, is with many leading.

Возможность синхронизации настоящего изобретения дает возможность репликам:The ability to synchronize the present invention enables replicas:

- определить, какие изменения известны другой реплике;- determine what changes are known to another replica;

- запросить информацию об изменениях, которые не известны этой реплике;- request information about changes that are not known to this replica;

- передать информацию об изменениях, которые не известны другой реплике;- transmit information about changes that are not known to another replica;

- определить, когда два изменения находятся в конфликте друг с другом;- determine when two changes are in conflict with each other;

- применить изменения локально;- apply the changes locally;

- передать разрешение конфликтов другим репликам для гарантии объединения; и- transfer conflict resolution to other replicas to guarantee merging; and

- разрешить конфликты, основываясь на заданных политиках для разрешения конфликтов.- resolve conflicts based on predefined policies for resolving conflicts.

1. Синхронизация платформы хранения с платформой хранения1. Synchronize the storage platform with the storage platform

Основным применением службы 330 синхронизации платформы хранения настоящего изобретения является синхронизация множества экземпляров платформы хранения (каждый со своим собственным хранилищем данных). Служба синхронизации работает на уровне схем платформы хранения (а не лежащих в основе таблиц процессора 314 базы данных). Таким образом, например, «Области действия» используются для определения наборов синхронизации, как описано ниже.The main application of the storage platform synchronization service 330 of the present invention is the synchronization of multiple instances of the storage platform (each with its own data store). The synchronization service operates at the level of storage platform schemas (rather than the underlying tables of the database processor 314). Thus, for example, “Scopes” are used to define synchronization sets, as described below.

Служба синхронизации работает на принципе «чистых изменений». Вместо того чтобы записывать и посылать индивидуальные операции (такие как транзакционная репликация), служба синхронизации посылает конечный результат этих операций, таким образом, часто объединяя результаты множества операций в единственное результирующее изменение.The synchronization service works on the principle of "clean change." Instead of recording and sending individual operations (such as transactional replication), the synchronization service sends the final result of these operations, thus often combining the results of many operations into a single resultant change.

Служба синхронизации, в основном, не признает границ транзакции. Другими словами, если два изменения выполняются в хранилище данных платформы хранения в одной транзакции, нет гарантии, что эти изменения будут применены ко всем другим репликам атомарным образом - одно может быть показано без другого. Исключением из этого принципа является то, что, если два изменения выполняются в одном Предмете в одной и той же транзакции, тогда гарантируется, что эти изменения будут посланы и применены к другим репликам атомарным образом. Таким образом, Предметы представляют собой единицы непротиворечивости службы синхронизации.The synchronization service basically does not recognize transaction boundaries. In other words, if two changes are made to the storage platform data warehouse in one transaction, there is no guarantee that these changes will be applied to all other replicas atomically - one can be shown without the other. An exception to this principle is that if two changes are made in the same Item in the same transaction, then it is guaranteed that these changes will be sent and applied to other replicas atomically. Thus, Items represent the units of consistency of the synchronization service.

а) Приложения управления синхронизациейa) Synchronization management applications

Любое приложение может подсоединиться к службе синхронизации и инициировать операцию синхронизации. Такое приложение предоставляет все параметры, необходимые для выполнения синхронизации (см. ниже профиль синхронизации). Такие приложения в данном документе упоминаются как Приложения управления синхронизацией (ПУС; SCAs).Any application can connect to the synchronization service and initiate the synchronization operation. Such an application provides all the parameters necessary for synchronization (see the synchronization profile below). Such applications are referred to herein as Synchronization Management Applications (ASNs; SCAs).

При синхронизации двух экземпляров платформы хранения синхронизация инициируется на одной стороне посредством ПУС (SCA). Это ПУС (SCA) информирует локальную службу синхронизации о синхронизации с удаленным партнером. С другой стороны, служба синхронизации приводится в действие сообщениями, посылаемыми службой синхронизации от исходной машины. Она отвечает, основываясь на долговременной информации о конфигурации (см. отображения ниже), присутствующей на машине назначения. Служба синхронизации может выполняться по расписанию или в ответ на события. В этих случаях, службой синхронизации, реализующей расписание, становится ПУС (SCA).When two instances of the storage platform are synchronized, synchronization is initiated on one side through the SCA. This SCA informs the local synchronization service of synchronization with the remote partner. On the other hand, the synchronization service is driven by messages sent by the synchronization service from the source machine. She responds based on long-term configuration information (see mappings below) present on the destination machine. The synchronization service can run as scheduled or in response to events. In these cases, the synchronization service that implements the schedule becomes the SCA.

Чтобы активизировать синхронизацию, должны быть выполнены два шага. Во-первых, разработчик схем должен аннотировать схему платформы хранения соответствующей семантикой синхронизации (обозначая Единицы Изменения, как описано ниже). Во-вторых, синхронизация должна правильно конфигурироваться на всех машинах, имеющих экземпляр платформы хранения, который должен участвовать в синхронизации (как описано ниже).To activate synchronization, two steps must be completed. First, the schema designer must annotate the storage platform schema with the appropriate synchronization semantics (denoting Change Units, as described below). Secondly, synchronization must be configured correctly on all machines that have a storage platform instance that must participate in synchronization (as described below).

b) Аннотирование схемb) Annotating circuits

Фундаментальным понятием службы синхронизации является понятие Единицы Изменения. Единица Изменения представляет собой самую малую часть схемы, которая индивидуально отслеживается платформой хранения. Для каждой Единицы Изменения служба синхронизации может определять, изменилась ли она или не изменилась со времени последней синхронизации.The fundamental concept of synchronization service is the concept of Unit of Change. Unit of Change is the smallest part of a schema that is individually tracked by the storage platform. For each Unit of Change, the synchronization service can determine whether it has changed or has not changed since the last synchronization.

Обозначение Единиц Изменения в схеме служит нескольким целям. Во-первых, оно определяет, как часто служба синхронизации посылает сообщения. Когда выполняется изменение внутри Единицы Изменения, вся Единица Изменения посылается другим репликам, так как службе синхронизации не известно, какая часть Единицы Изменения была изменена. Во-вторых, оно определяет гранулярность обнаружения конфликтов. Когда два одновременных изменения (эти термины подробно определяются в последующих разделах) выполняются в одной единице изменения, служба синхронизации устанавливает конфликт; с другой стороны, если одновременные изменения выполняются в различных единицах изменения, тогда не устанавливается конфликт и изменения автоматически объединяются. В-третьих, оно оказывает сильное влияние на количество метаданных, сохраняемых системой. Большая часть метаданных службы синхронизации сохраняется на основе Единицы Изменения; таким образом, выполнение Единиц Изменения меньшими увеличивает служебные данные синхронизации.The designation of Units of Change in the scheme serves several purposes. First, it determines how often the synchronization service sends messages. When a change is made inside the Change Unit, the entire Change Unit is sent to other replicas, because the synchronization service does not know which part of the Change Unit has been changed. Secondly, it determines the granularity of conflict detection. When two simultaneous changes (these terms are defined in detail in the following sections) are performed in one change unit, the synchronization service establishes a conflict; on the other hand, if simultaneous changes are made in different units of change, then no conflict is established and the changes are automatically combined. Thirdly, it has a strong influence on the amount of metadata stored by the system. Most synchronization service metadata is stored on a Unit of Change basis; thus, making Change Units smaller increases synchronization overhead.

Определение Единиц Изменения требует нахождения правильных компромиссов. По этой причине служба синхронизации дает возможность разработчикам схем участвовать в процессе.Determining Units of Change requires finding the right compromises. For this reason, the synchronization service enables circuit designers to participate in the process.

В одном варианте осуществления служба синхронизации не поддерживает Единицы Изменения, которые больше элемента. Однако она действительно поддерживает возможность задавать разработчиками схем единицы изменений, которые меньше, чем элемент, а именно группирование множества атрибутов элемента в отдельную Единицу Изменения. В этом варианте осуществления это выполняется с использованием следующего синтаксиса:In one embodiment, the synchronization service does not support Change Units that are larger than the item. However, it does support the ability to define change units that are smaller than an element, namely grouping the set of element attributes into a separate Unit of Change. In this embodiment, this is done using the following syntax:

Figure 00000008
Figure 00000008

с) Конфигурация синхронизацииc) Sync configuration

Группа партнеров платформы хранения, которые желают поддерживать некоторые части их данных синхронными, упоминаются как сообщество синхронизации. Когда члены сообщества хотят оставаться в синхронизме, им необязательно представлять данные точно аналогичным образом; другими словами, партнеры синхронизации могут преобразовывать данные, которые они синхронизируют.A group of storage platform partners who wish to keep some parts of their data synchronous are referred to as a synchronization community. When community members want to stay in sync, they don't have to present the data in exactly the same way; in other words, synchronization partners can transform the data that they synchronize.

В сценарии взаимодействия равноправных систем невозможно для равноправных систем поддерживать отображения преобразования для всех их партнеров. Вместо этого, служба синхронизации предпринимает подход определения «Папок Сообщества». Папка сообщества представляет собой абстракцию, которая представляет гипотетическую «совместно используемую папку», с которой синхронизируются все члены сообщества.In a peer-to-peer interaction scenario, it is not possible for peer systems to support transform mappings for all their partners. Instead, the synchronization service takes the approach of defining "Community Folders." A community folder is an abstraction that represents a hypothetical “shared folder” with which all community members synchronize.

Это понятие наилучшим образом иллюстрируется при помощи примера. Если Джо хочет держать папки My Documents своих нескольких компьютеров в синхронизме, Джо определяет папку сообщества, называемую, скажем, JoesDocuments. Затем на каждом компьютере Джо конфигурирует отображение между гипотетической папкой JoesDocuments и локальной папкой My Documents. С этого момента, когда компьютеры Джо синхронизируются друг с другом, они общаются на языке документов в JoesDocuments, а не их локальных предметов. Таким образом, все компьютеры Джо понимают друг друга без необходимости иметь сведения, кем являются другие, - Папка Сообщества становится лингва-франка (общепринятым языком) сообщества синхронизации.This concept is best illustrated with an example. If Joe wants to keep the My Documents folders of his multiple computers in sync, Joe defines a community folder called, say, JoesDocuments. Then, on each computer, Joe configures the mapping between the hypothetical JoesDocuments folder and the local My Documents folder. From now on, when Joe's computers are synchronized with each other, they communicate in the document language in JoesDocuments, rather than their local objects. Thus, all of Joe’s computers understand each other without having to know who the others are — the Community Folder becomes the lingua franca (common language) of the synchronization community.

Конфигурирование службы синхронизации состоит из трех этапов: (1) определения отображений между локальными папками и папками сообщества; (2) определения профилей синхронизации, которые определяют, что синхронизируется (например, с кем синхронизироваться и какие поднаборы должны посылаться и какие - приниматься); и (3) определения расписаний, по которым должны выполняться различные профили синхронизации или выполнять их вручную.Configuring the synchronization service consists of three steps: (1) defining mappings between local folders and community folders; (2) definitions of synchronization profiles that determine what is synchronized (for example, with whom to synchronize and which subsets should be sent and which ones should be received); and (3) defining schedules for which various synchronization profiles should be executed or executed manually.

(1) Папка сообщества - отображения(1) Community Folder - Mappings

Отображения Папки Сообщества хранятся в виде файлов конфигурации РЯР (XML) на индивидуальных машинах. Каждое отображение имеет следующие схемы:Community Folder mappings are stored as RNR (XML) configuration files on individual machines. Each mapping has the following schemes:

/mappings/communityFolder/ mappings / communityFolder

Этот элемент именует папку сообщества, для которой предназначено это отображение. Имя придерживается правил синтаксиса Папок.This element refers to the community folder for which this mapping is intended. The name adheres to Folder syntax rules.

/mappings/localFolder/ mappings / localFolder

Этот элемент именует локальную папку, в которую преобразуется отображение. Имя придерживается правил синтаксиса Папок. Папка должна уже существовать, чтобы отображение было действительным. Предметы в этой папке рассматриваются для синхронизации на это отображение.This item refers to the local folder into which the mapping is converted. The name adheres to Folder syntax rules. The folder must already exist for the display to be valid. Items in this folder are considered to synchronize to this display.

/mappings/transformations/ mappings / transformations

Этот элемент определяет, как преобразовывать предметы из папки сообщества в локальную папку и обратно. Если отсутствует или пустая, не выполняется преобразование. В частности, это означает, что не отображаются ИД (ID). Эта конфигурация используется, главным образом, для создания кэша Папки.This element defines how to convert items from the community folder to the local folder and vice versa. If absent or empty, no conversion is performed. In particular, this means that no IDs are displayed. This configuration is mainly used to create the Mailbox cache.

/mappings/transformations/mapIDs/ mappings / transformations / mapIDs

Этот элемент запрашивает, чтобы вновь генерируемые локальные ИД (ID) присваивались всем предметам, отображаемым из папки сообщества, а не повторно использовать ИД (ID) сообщества. Период выполнения Синхронизации сохраняет отображения ИД (ID) для преобразования предметов туда и обратно.This element requests that the newly generated local IDs (IDs) be assigned to all items displayed from the community folder, rather than reusing the community IDs. The synchronization execution period saves the display of IDs for converting items back and forth.

/mappings/transformations/localRoot/ mappings / transformations / localRoot

Этот элемент запрашивает, чтобы все корневые предметы в папке сообщества были сделаны дочерними заданного корня.This member requests that all root items in the community folder be made children of the given root.

/mappings/runAs/ mappings / runAs

Этот элемент управляет, под чьими полномочиями обрабатываются запросы в отношении этого отображения. Если отсутствуют, предполагается отправитель.This element controls under whose authority requests are processed regarding this mapping. If absent, the sender is assumed.

/mappings/runAs/sender/ mappings / runAs / sender

Присутствие этого элемента указывает на то, что должен имитироваться отправитель сообщений для этого отображения, и запросы должны обрабатываться под его параметрами доступа.The presence of this element indicates that the message sender should be simulated for this display, and requests should be processed under its access parameters.

(2) Профили(2) Profiles

Профиль синхронизации представляет собой полный набор параметров, необходимых для запуска синхронизации. Он поставляется посредством ПУС (SCA) Периоду выполнения Синхронизации для инициирования синхронизации. Профили синхронизации для синхронизации платформы хранения с платформой хранения содержат следующую информацию:A synchronization profile is a complete set of parameters needed to start synchronization. It is delivered via a SCA to the Synchronization Run Period to initiate synchronization. The synchronization profiles for synchronizing the storage platform with the storage platform contain the following information:

- Локальную Папку, служащую в качестве источника и назначения для изменений;- Local Folder serving as a source and destination for changes;

- Имя Удаленной папки для синхронизации с ней - эта Папка должна быть опубликована от удаленного партнера посредством отображения, как определено выше;- The name of the Remote Folder to synchronize with it - this Folder must be published from the remote partner by means of display, as defined above;

- Направление - служба синхронизации поддерживает синхронизацию только в режиме отправки, только в режиме приема и в режиме отправки-приема;- Direction - the synchronization service supports synchronization only in send mode, only in receive mode and in send-receive mode;

- Локальный Фильтр - выбирает, какую локальную информацию посылать удаленному партнеру. Выражается как запрос платформы хранения по локальной папке;- Local Filter - selects what local information to send to the remote partner. Expressed as a storage platform request for a local folder;

- Удаленный Фильтр - выбирает, какую удаленную информацию извлекать из удаленного партнера - выражается как запрос платформы хранения по папке сообщества;- Remote Filter - selects what remote information to retrieve from a remote partner - expressed as a request to the storage platform for the community folder;

- Преобразования - определяют, как преобразовывать предметы в локальный формат и из него;- Transformations - determine how to convert objects to and from the local format;

- Локальная защита - задает, должны ли изменения, извлекаемые из удаленной конечной точки, применяться при разрешениях удаленной конечной точки (имитированной) или пользователя, инициирующего синхронизацию локально; и- Local protection - defines whether the changes extracted from the remote endpoint should be applied at the permissions of the remote endpoint (simulated) or the user initiating synchronization locally; and

- Политика разрешения конфликтов - задает, должны ли конфликты отклоняться, регистрироваться или автоматически разрешаться - в последнем случае она задает, какой механизм разрешения конфликтов использовать, а также конфигурационные параметры для него.- Conflict resolution policy - sets whether conflicts should be rejected, registered, or automatically resolved - in the latter case, it determines which conflict resolution mechanism to use, as well as configuration parameters for it.

Служба синхронизации предусматривает класс ОЯСВ (CLR) периода выполнения, который позволяет выполнять простое построение Профилей Синхронизации. Профили также могут сериализоваться в файлы РЯР (XML) и из них для легкого хранения (часто вместе с расписаниями). Однако нет стандартного места в платформе хранения, где хранятся все профили; ПУС (SCAs) имеют право создавать профиль на месте даже без обеспечения его постоянства. Следует отметить, что нет необходимости иметь локальное отображение для инициирования синхронизации. Вся информация о синхронизации может задаваться в профиле. Отображение, однако, требуется для того, чтобы отвечать на запросы синхронизации, инициируемые удаленной стороной.The Synchronization Service provides the CLR class of the execution period, which allows you to easily build Synchronization Profiles. Profiles can also be serialized to and from RPN files (XML) for easy storage (often along with schedules). However, there is no standard place in the storage platform where all profiles are stored; CCP (SCAs) have the right to create a profile in place even without ensuring its permanence. It should be noted that there is no need to have a local mapping to initiate synchronization. All synchronization information can be set in the profile. The mapping, however, is required in order to respond to synchronization requests initiated by the remote side.

(3) Расписания(3) Schedules

В одном варианте осуществления служба синхронизации не обеспечивает свою собственную инфраструктуру планирования. Вместо этого она основывается на том, что другой компонент выполняет эту задачу - Windows Scheduler, имеющийся в операционной системе Microsoft Windows. Служба синхронизации включает в себя утилиту, работающую в режиме командной строки, которая действует в качестве ПУС (SCA), и запускает синхронизацию, основываясь на профиле синхронизации, сохраненном в РЯР (XML)-файле. Эта утилита делает очень легким конфигурирование Windows Scheduler для выполнения синхронизации или по расписанию, или в ответ на события, такие как вход пользователя в систему или выход его из системы.In one embodiment, the synchronization service does not provide its own scheduling infrastructure. Instead, it is based on the fact that another component performs this task - the Windows Scheduler, which is available in the Microsoft Windows operating system. The synchronization service includes a command-line utility that acts as a SCA and starts synchronization based on the synchronization profile stored in the .pnr (XML) file. This utility makes it very easy to configure the Windows Scheduler to synchronize, either on schedule or in response to events such as a user logging in or logging out of the system.

d) Оперирование конфликтамиd) Conflict handling

Оперирование конфликтами в службе синхронизации делится на три этапа: (1) обнаружение конфликтов, которое происходит в момент времени применения изменений, - этот этап определяет, может ли изменение безопасно быть применено; (2) автоматическое разрешение и регистрация конфликтов - во время этого этапа (который происходит непосредственно после обнаружения конфликта) обращаются к средствам автоматического разрешения конфликтов, чтобы выяснить, может ли быть разрешен конфликт - если нет, конфликт может быть, необязательно, зарегистрирован; и (3) инспектирование и разрешение конфликтов - этот этап имеет место, если были зарегистрированы некоторые конфликты, и происходит вне контекста сеанса синхронизации - в этот момент времени зарегистрированные конфликты могут разрешаться и удаляться из журнала.Conflict handling in the synchronization service is divided into three stages: (1) conflict detection that occurs at the time the changes are applied — this stage determines whether the change can be safely applied; (2) automatic resolution and registration of conflicts - during this stage (which occurs immediately after the conflict is detected), they turn to the means of automatic conflict resolution to find out whether a conflict can be resolved - if not, the conflict can be optionally registered; and (3) inspection and resolution of conflicts - this stage takes place if some conflicts have been recorded, and occurs outside the context of the synchronization session - at this point in time, registered conflicts can be resolved and deleted from the log.

(1) Обнаружение конфликтов(1) Conflict Detection

В настоящем варианте осуществления служба синхронизации обнаруживает два типа конфликтов: основанные на сведениях и основанные на ограничениях.In the present embodiment, the synchronization service detects two types of conflicts: information-based and constraint-based.

(а) Основанные на сведениях конфликты(a) Information-based conflicts

Основанные на сведениях конфликты происходят тогда, когда две реплики выполняют независимые изменения в одной и той же Единице Изменений. Два изменения называются независимыми, если они выполняются без сведений друг о друге, другими словами, версия первого не охватывается сведениями о втором, и наоборот. Служба синхронизации автоматически обнаруживает все такие конфликты, основанные на сведениях реплик, как описано выше.Information-based conflicts occur when two replicas make independent changes in the same Unit of Change. Two changes are called independent if they are performed without information about each other, in other words, the version of the first is not covered by information about the second, and vice versa. The synchronization service automatically detects all such conflicts based on replica information, as described above.

Иногда бывает полезным рассматривать конфликты как разветвления в предыстории версий единицы изменений. Если не имеют место конфликты за время существования единицы изменений, ее предыстория версий представляет собой простую цепочку - каждое изменение происходит после предыдущего. В случае основанных на сведениях конфликтов два изменения происходят параллельно, вызывая разделение цепочки, и она становится деревом версий.It is sometimes useful to consider conflicts as branching in the history of versions of a unit of change. If there are no conflicts during the existence of a unit of change, its history of versions is a simple chain - each change occurs after the previous one. In the case of information-based conflicts, two changes occur in parallel, causing the chain to split, and it becomes a version tree.

(b) Основанные на ограничениях конфликты(b) Restriction-based conflicts

Существуют случаи, когда два независимых изменения нарушают ограничение целостности, когда они применяются вместе. Например, две реплики, создающие файл с одинаковым именем в одном и том же каталоге, могут вызвать то, что будет иметь место такой конфликт.There are cases where two independent changes violate integrity constraints when applied together. For example, two replicas creating a file with the same name in the same directory can cause this conflict to occur.

Основанный на ограничениях конфликт вовлекает два независимых изменения (аналогично основанному на сведениях конфликту), но они не оказывают воздействия на одну и ту же единицу изменений. Скорее, они оказывают воздействие на различные единицы изменений, но с ограничением, существующим между ними.A constraint-based conflict involves two independent changes (similar to a knowledge-based conflict), but they do not affect the same unit of change. Rather, they affect different units of change, but with the constraint that exists between them.

Служба синхронизации обнаруживает нарушения ограничений в момент времени применения изменений и автоматически устанавливает основанные на ограничениях конфликты. Разрешение основанных на ограничениях конфликтов обычно требует части программы, настраиваемой пользователем, которая модифицирует изменения так, чтобы не нарушать ограничение. Служба синхронизации не предусматривает механизм общего назначения для выполнения этого.The synchronization service detects constraint violations at the time the changes are applied and automatically establishes constraint-based conflicts. Resolving constraint-based conflicts usually requires a user-configurable part of the program that modifies the changes so as not to violate the constraint. The synchronization service does not provide a general purpose mechanism to accomplish this.

(2) Обработка конфликтов(2) Conflict Handling

Когда обнаруживается конфликт, служба синхронизации может предпринять одно из трех действий (выбираемых инициатором синхронизации в Профиле Синхронизации): (1) отклонить изменение, возвращая его отправителю; (2) зарегистрировать конфликт в журнале конфликтов; или (3) автоматически разрешить конфликт.When a conflict is detected, the synchronization service can take one of three actions (selected by the initiator of synchronization in the Synchronization Profile): (1) reject the change, returning it to the sender; (2) register the conflict in the conflict log; or (3) automatically resolve the conflict.

Если изменение отклоняется, служба синхронизации действует так, как если бы изменение не поступило бы на реплику. Неподтверждение приема посылается обратно инициатору. Эта политика разрешения полезна, главным образом, на автономных репликах (таких как файловые серверы), где недопустима регистрация конфликтов. Вместо этого, такие реплики заставляют других иметь дело с конфликтами посредством отклонения их.If the change is rejected, the synchronization service acts as if the change did not arrive at the replica. Non-acknowledgment is sent back to the initiator. This resolution policy is mainly useful on stand-alone replicas (such as file servers) where conflict logging is not allowed. Instead, such cues make others deal with conflicts by rejecting them.

Инициаторы синхронизации конфигурируют разрешение конфликтов в их Профилях Синхронизации. Служба синхронизации поддерживает объединение множества средств разрешения конфликтов в одном профиле следующим образом: во-первых, посредством задания списка средств разрешения конфликтов для испытания одного за другим до тех пор, пока один из них не добьется успеха; и, во-вторых, посредством ассоциации средств разрешения конфликтов с типами конфликтов, например, направляя основанные на сведениях обновления-обновления конфликты одному средству разрешения, но все другие конфликты - на регистрацию.Sync initiators configure conflict resolution in their Synchronization Profiles. The synchronization service supports combining multiple conflict resolution tools in one profile as follows: firstly, by defining a list of conflict resolution tools to test one by one until one of them succeeds; and secondly, by associating conflict resolution tools with conflict types, for example, directing conflict-based update-update information to a single resolution tool, but all other conflicts to registration.

(а) Автоматическое разрешение конфликтов(a) Automatic conflict resolution

Служба синхронизации предусматривает ряд средств разрешения конфликтов по умолчанию. Этот список включает в себя:Synchronization provides a number of default conflict resolution tools. This list includes:

- локальные выигрыши: игнорировать поступающие изменения, если они в конфликте с локально хранимыми данными;- local wins: ignore incoming changes if they are in conflict with locally stored data;

- удаленные выигрыши: игнорировать локальные данные, если они в конфликте с поступающими изменениями;- remote wins: ignore local data if they are in conflict with incoming changes;

- выигрыши последнего автора: выбор или локальных выигрышей, или удаленных выигрышей на единицу изменений, основываясь на временной метке изменения (отметьте, что служба синхронизации, в основном, не полагается на значения часов; это средство разрешения конфликтов является единственным исключением для этого правила);- wins of the last author: the choice of either local wins or remote wins per unit of change, based on the time stamp of the change (note that the synchronization service does not rely mainly on clock values; this means of resolving conflicts is the only exception to this rule);

- детерминированный: выбор выигрывающего так, чтобы гарантировать, что он является одинаковым на всех репликах, но не значащий в других отношениях - один вариант осуществления служб синхронизации использует лексикографические сравнения ИД (ID) партнеров для реализации этой особенности.- deterministic: the choice of the winner so as to ensure that it is the same on all replicas, but not meaningful in other respects - one embodiment of the implementation of synchronization services uses lexicographic comparisons of partner IDs to implement this feature.

Кроме того, НППО (ISV) может реализовывать и устанавливать свои собственные средства разрешения конфликтов. Специализированные средства разрешения конфликтов могут принимать конфигурационные параметры; такие параметры должны задаваться посредством ПУС (SCA) в разделе Разрешение Конфликтов Профиля Синхронизации.In addition, an NPV (ISV) can implement and install its own conflict resolution tools. Specialized conflict resolution tools can accept configuration parameters; such parameters should be set via the SCA in the Conflict Resolution section of the Synchronization Profile.

Когда средство разрешения конфликтов оперирует конфликтом, оно возвращает список операций, которые следует выполнить (вместо конфликтующего изменения) обратно в рабочую среду. Служба синхронизации затем применяет эти операции, имеющие правильно скорректированные удаленные сведения, чтобы включить то, что принял во внимание обработчик конфликтов.When a conflict resolver handles a conflict, it returns a list of operations that should be performed (instead of a conflicting change) back to the production environment. The synchronization service then applies these operations that have correctly adjusted remote information to include what the conflict handler took into account.

Возможно, что обнаруживается другой конфликт при применении разрешения. В таком случае новый конфликт должен быть разрешен до возобновления исходной обработки.It is possible that another conflict is detected when applying the resolution. In this case, a new conflict must be resolved before resuming initial processing.

При рассматривании конфликтов в качестве ветвей в предыстории версий предмета разрешения конфликтов могут рассматриваться как соединения, объединяющие две ветви для образования одной точки. Таким образом, разрешения конфликтов превращают предыстории версий в ОАГ (DAGs).When considering conflicts as branches in the history of versions of the subject of conflict resolution, they can be considered as compounds that combine two branches to form one point. In this way, conflict resolution turns version histories into DAGs.

(b) Регистрация конфликтов(b) Conflict Records

Очень частным видом механизма разрешения конфликтов является Регистратор Конфликтов. Служба синхронизации регистрирует конфликты в качестве Предметов типа ConflictRecord. Эти записи ссылаются обратно на предметы, которые находятся в конфликте (если только сами предметы не были удалены). Каждая запись конфликта содержит поступающее изменение, которое вызвало конфликт; тип конфликта: обновление-обновление, обновление-удаление, удаление-обновление, вставка-вставка или ограничение; и версию поступающего изменения и сведения реплики, посылающей его. Зарегистрированные конфликты доступны для инспектирования и разрешения, как описано ниже.A very private type of conflict resolution mechanism is the Conflict Recorder. The Synchronization Service registers conflicts as Items of type ConflictRecord. These records refer back to items that are in conflict (unless the items themselves have been deleted). Each conflict record contains an incoming change that caused the conflict; type of conflict: update-update, update-delete, delete-update, insert-insert or restriction; and the version of the incoming change and the details of the replica sending it. Reported conflicts are available for inspection and resolution, as described below.

(с) Инспектирование и разрешение конфликтов(c) Inspection and resolution of conflicts

Служба синхронизации предусматривает ИПП (API) для приложений для проверки журнала конфликтов и предложения разрешений конфликтов в нем. ИПП (API) дает возможность приложению перечислять все конфликты или конфликты, относящиеся к данному Предмету. Он также дает возможность таким приложениям разрешать зарегистрированные конфликты одним из трех путей: (1) удаленные выигрыши - принимая зарегистрированное изменение и перезаписывая конфликтующее локальное изменение; (2) локальные выигрыши - игнорируя конфликтующие части зарегистрированного изменения; и (3) предложить новое изменение - где приложение предлагает объединение, которое, по его мнению, разрешает конфликт. Если конфликты разрешены приложением, служба синхронизации удаляет их из журнала.The synchronization service provides an API (API) for applications to check the conflict log and offer conflict resolution in it. API (API) enables the application to list all conflicts or conflicts related to this Item. It also enables such applications to resolve recorded conflicts in one of three ways: (1) remote wins — accepting the registered change and overwriting the conflicting local change; (2) local wins - ignoring the conflicting parts of the registered change; and (3) propose a new change - where the application offers a pool that, in its opinion, resolves the conflict. If conflicts are resolved by the application, the synchronization service removes them from the log.

(d) Слияние реплик и распространение разрешений конфликтов(d) Merging replicas and distributing conflict resolution

В сложных сценариях синхронизации один и тот же конфликт может обнаруживаться на множестве реплик. Если это происходит, могут произойти следующие вещи: (1) конфликт может быть разрешен на одной реплике, и разрешение может быть послано другой; (2) конфликт автоматически разрешается на обеих репликах; или (3) конфликт разрешается вручную на обеих репликах (посредством ИПП (API) инспектирования конфликтов).In complex synchronization scenarios, the same conflict can be detected on multiple replicas. If this happens, the following things can happen: (1) a conflict can be resolved on one replica, and a resolution can be sent on another; (2) the conflict is automatically resolved on both replicas; or (3) the conflict is resolved manually on both replicas (through the Conflict Inspection API).

Чтобы обеспечить слияние, служба синхронизации направляет разрешения конфликтов другим репликам. Когда изменение, которое разрешает конфликт, поступает на реплику, служба синхронизации автоматически находит любые записи конфликтов в журнале, которые разрешаются этим обновлением, и устраняет их. В этом смысле разрешение конфликта на одной реплике связывается по всем другим репликам.To ensure merging, the synchronization service routes conflict resolution to other replicas. When a change that resolves the conflict arrives at the replica, the synchronization service automatically finds any conflict entries in the log that are resolved by this update and eliminates them. In this sense, conflict resolution on one replica is linked across all other replicas.

Если выбираются другие выигрывающие посредством других реплик для одного и того же конфликта, служба синхронизации применяет принцип связывания разрешения конфликта и выбирает одно из двух разрешений для автоматического выигрыша относительно другого. Выигрывающий выбирается детерминированным образом, который гарантированно дает одинаковые результаты в любое время (один вариант осуществления использует лексикографические сравнения ИД (ID) реплик).If other winners are selected through different replicas for the same conflict, the synchronization service applies the principle of binding conflict resolution and selects one of two resolutions to automatically win relative to the other. The winner is selected in a deterministic manner that is guaranteed to give the same results at any time (one embodiment uses lexicographic comparisons of replica IDs).

Если различные «новые изменения» предлагаются разными репликами для одного и того же конфликта, служба синхронизации рассматривает этот новый конфликт как специальный конфликт и использует Регистратор Конфликта для предотвращения его распространения на другие реплики. Такая ситуация обычно возникает при ручном разрешении конфликтов.If different “new changes” are offered by different replicas for the same conflict, the synchronization service considers this new conflict as a special conflict and uses the Conflict Recorder to prevent it from spreading to other replicas. This situation usually occurs when manually resolving conflicts.

2. Синхронизация с хранилищами данных не платформ хранения2. Synchronization with data warehouses of non-storage platforms

Согласно другому аспекту платформы хранения настоящего изобретения, платформа хранения обеспечивает архитектуру, чтобы НППО (ISVs) реализовали Адаптеры Синхронизации, которые дают возможность синхронизации платформы хранения с унаследованными системами, такими как Microsoft Exchange, AD (Active Directory), Hotmail и др. Адаптеры Синхронизации имеют преимущества по сравнению с многими Службами Синхронизации, предусматриваемыми службой синхронизации, как описано ниже.According to another aspect of the storage platform of the present invention, the storage platform provides an architecture for NPVs (ISVs) to implement Synchronization Adapters, which enable the storage platform to synchronize with legacy systems such as Microsoft Exchange, AD (Active Directory), Hotmail, and others. Synchronization Adapters have advantages over the many Synchronization Services provided by the synchronization service, as described below.

Несмотря на название, нет необходимости реализовывать Адаптеры Синхронизации в виде дополнительных программных модулей для некоторой архитектуры платформы хранения. Если требуется, «адаптером синхронизации» просто может быть любое приложение, которое использует интерфейсы рабочей среды службы синхронизации для получения служб, таких как перечисление и применение изменений.Despite the name, there is no need to implement Sync Adapters as additional software modules for some storage platform architecture. If required, the “synchronization adapter” simply can be any application that uses the synchronization service workspace interfaces to receive services, such as enumerating and applying changes.

Чтобы сделать для других более простым конфигурирование и выполнение синхронизации для данной машины базы данных, поддерживается раскрытие составителями Адаптера Синхронизации стандартного интерфейса Адаптера Синхронизации, который выполняет синхронизацию при наличии Профиля Синхронизации, как описано выше. Профиль предоставляет конфигурационную информацию для адаптера, некоторую часть из которой адаптеры передают Рабочей среде Синхронизации для управления службами рабочей среды (например, Папки для синхронизации).To make it easier for others to configure and perform synchronization for this database machine, the developers of the Sync Adapter support the disclosure of the standard interface of the Sync Adapter, which performs synchronization with the Sync Profile as described above. The profile provides configuration information for the adapter, some of which the adapters pass to the Synchronization Environment to manage the services of the environment (for example, Folders for synchronization).

а) Службы синхронизацииa) Sync services

Служба синхронизации предоставляет ряд служб синхронизации для составителей адаптеров. В остальной части этого раздела удобно ссылаться на машину, на которой платформа хранения выполняет синхронизацию в качестве «клиента», и машину базы данных не платформы хранения, с которой адаптер общается как с «сервером».The synchronization service provides a number of synchronization services for adapter compilers. In the rest of this section, it is convenient to refer to the machine on which the storage platform synchronizes as a “client”, and the database machine is not a storage platform with which the adapter communicates as a “server”.

(1) Перечисление изменений(1) Listing Changes

Основываясь на данных отслеживания изменений, поддерживаемых службой синхронизации, Перечисление Изменений дает возможность адаптерам синхронизации легко перечислять изменения, которые произошли, в Папке хранилища данных, с момента совершения попытки последней синхронизации с этим партнером.Based on the change tracking data supported by the synchronization service, Change Enumeration enables synchronization adapters to easily list the changes that have occurred in the Data Warehouse Folder since the last synchronization attempt was made with this partner.

Изменения перечисляются, основываясь на принципе «точки привязки» - непрозрачной структуры, которая представляет информацию о последней синхронизации. Привязка принимает вид Сведений платформы хранения, как описано в предыдущих разделах. Адаптеры Синхронизации, использующие службы перечисления изменений, делятся на две большие категории: те, которые используют «хранимые привязки», в сравнении с теми, которые используют «поставляемые привязки».Changes are listed based on the principle of the "anchor point" - an opaque structure that represents information about the latest synchronization. The binding takes the form of Information storage platform, as described in the previous sections. Sync adapters using change enumeration services fall into two broad categories: those that use “stored bindings” versus those that use “supplied bindings”.

Отличие основывается на том, где хранится информация о последней синхронизации - на клиенте или на сервере. Часто является более легким для адаптеров хранить эту информацию на клиенте - машина базы данных часто не может удобно хранить эту информацию. С другой стороны, если множество клиентов синхронизируются с одной машиной базы данных, хранение этой информации на клиенте является неэффективным и в некоторых случаях некорректным - это делает одного клиента несведущим об изменениях, которые другой клиент уже протолкнул на сервер. Если адаптер хочет использовать хранимую на сервере привязку, адаптеру нужно подать ее обратно на платформу хранения в момент перечисления изменений.The difference is based on where the information about the last synchronization is stored - on the client or on the server. It is often easier for adapters to store this information on the client — a database machine often cannot conveniently store this information. On the other hand, if many clients are synchronized with one database machine, storing this information on the client is inefficient and in some cases incorrect - this makes one client unaware of changes that another client has already pushed to the server. If the adapter wants to use the binding stored on the server, the adapter needs to submit it back to the storage platform at the time the changes are enumerated.

Чтобы платформа хранения поддерживала привязку (или для локального, или удаленного хранения), платформе хранения необходимо предоставить сведения об изменениях, которые были успешно применены на сервере. Эти и только эти изменения могут быть включены в привязку. Во время перечисления изменений Адаптеры Синхронизации используют интерфейс Подтверждения приема для сообщения, какие изменения были успешно применены. В конце синхронизации адаптеры, использующие поставляемые привязки, должны считать новую привязку (которая включает все успешно примененные изменения) и послать ее на свою машину базы данных.For the storage platform to support binding (either for local or remote storage), the storage platform must be provided with information about the changes that were successfully applied on the server. These and only these changes can be included in the binding. During enumeration of changes, Synchronization Adapters use the Acknowledgment interface to report which changes have been successfully applied. At the end of synchronization, adapters that use the supplied bindings must read the new binding (which includes all successfully applied changes) and send it to their database machine.

Часто Адаптерам необходимо хранить характерные для адаптеров данные вместе с предметами, которые они вставляют в хранилище данных платформы хранения. Общими примерами таких данных являются удаленные ИД (ID) и удаленные версии (временные метки). Служба синхронизации предоставляет механизм для хранения этих данных, и Перечисление Изменений предоставляет механизм для приема этих дополнительных данных вместе с возвращаемыми изменениями. Это в большинстве случаев устраняет необходимость для адаптеров повторно запрашивать базу данных.Often, adapters need to store adapter-specific data along with the items that they insert into the storage platform data warehouse. Common examples of such data are remote IDs and remote versions (timestamps). The synchronization service provides a mechanism for storing this data, and Enumeration of Changes provides a mechanism for receiving this additional data along with the returned changes. This in most cases eliminates the need for adapters to re-query the database.

(2) Применение изменений(2) Application of changes

Применение Изменений дает возможность Адаптерам Синхронизации применять изменения, принятые от их машины базы данных, к локальной платформе хранения. Как ожидается, адаптеры преобразуют изменения в схему платформы хранения.Applying Changes enables Sync Adapters to apply the changes received from their database machine to the local storage platform. The adapters are expected to translate the changes into a storage platform schema.

Основным назначением применения изменений является автоматическое обнаружение конфликтов. Как в случае синхронизации платформы хранения с платформой хранения, конфликт определяется как два перекрывающихся изменения, выполняемых без сведений друг о друге. Когда адаптеры используют Применение Изменений, они должны задать привязку, в отношении какого конфликта выполняется обнаружение. Применение Изменений устанавливает конфликт, если обнаруживается перекрывающееся локальное изменение, которое не охватывается сведениями адаптера. Аналогично Перечислению Изменений адаптеры могут использовать или хранимые, или поставляемые привязки. Применение Изменений поддерживает эффективное хранение характерных для адаптера метаданных. Такие данные могут быть присоединены адаптером к применяемым изменениям и могут быть сохранены службой синхронизации. Данные могут быть возвращены при следующем перечислении изменений.The main purpose of applying changes is automatic conflict detection. As in the case of synchronizing the storage platform with the storage platform, a conflict is defined as two overlapping changes that are performed without information about each other. When adapters use Apply Changes, they must specify the binding for which conflict is being detected. Applying Changes sets a conflict if an overlapping local change is detected that is not covered by the adapter. Like Change Enumeration, adapters can use either stored or supplied bindings. Applying Changes supports the efficient storage of adapter-specific metadata. Such data can be attached by the adapter to the applied changes and can be saved by the synchronization service. Data may be returned the next time the change is listed.

(3) Разрешение конфликтов(3) Conflict Resolution

Механизмы Разрешения Конфликтов, описанные выше (варианты регистрации и автоматического разрешения), также доступны для адаптеров синхронизации. Адаптеры синхронизации могут задавать политику для разрешения конфликтов при применении изменений. Если задано, конфликты могут передаваться на заданный обработчик конфликтов и разрешаться (если возможно). Конфликты также могут регистрироваться. Возможно, что адаптер может обнаруживать конфликт при попытке применения локального изменения к машине базы данных. В таком случае адаптер может все же передавать конфликт среде выполнения Синхронизации для разрешения в соответствии с политикой. Кроме того, Адаптеры синхронизации могут запрашивать, чтобы любые конфликты, обнаруживаемые службой синхронизации, посылались обратно к ним для обработки. Это особенно удобно в случае, когда машина базы данных может хранить или разрешать конфликты.The Conflict Resolution Mechanisms described above (registration and automatic resolution options) are also available for synchronization adapters. Sync adapters can set policies to resolve conflicts when changes are applied. If specified, conflicts can be transmitted to the specified conflict handler and resolved (if possible). Conflicts can also be logged. It is possible that the adapter might detect a conflict when trying to apply a local change to the database machine. In this case, the adapter can still transmit the conflict to the Synchronization runtime for resolution in accordance with the policy. In addition, Synchronization Adapters may request that any conflicts detected by the synchronization service be sent back to them for processing. This is especially useful when the database machine can store or resolve conflicts.

b) Реализация адаптераb) adapter implementation

Хотя некоторые «адаптеры» представляют собой просто приложения, использующие интерфейсы среды выполнения, поддерживается реализация адаптерами стандартных интерфейсов адаптера. Эти интерфейсы дают возможность Приложениям Управления Синхронизацией: запрашивать, чтобы адаптер выполнял синхронизацию в соответствии с данным Профилем Синхронизации; аннулировать активные синхронизации; и принимать отчет о ходе выполнения (процент завершения) активной (текущей) синхронизации.Although some “adapters” are simply applications that use runtime interfaces, adapters support standard adapter interfaces. These interfaces enable Synchronization Management Applications: to request that the adapter synchronize in accordance with this Synchronization Profile; cancel active synchronization; and receive a progress report (percent completion) of the active (current) synchronization.

3. Защита3. Protection

Служба синхронизации старается вносить минимально возможное в модель защиты, реализуемую платформой хранения. Чем определять новые права для синхронизации, используются существующие права. Конкретно,The synchronization service tries to make the smallest possible in the security model implemented by the storage platform. How to define new rights for synchronization, existing rights are used. Specifically,

- любой, кто может прочитать Предмет хранилища данных, может перечислить изменения для этого предмета;- anyone who can read the Data Warehouse Item can list the changes for this item;

- любой, кто может записать в Предмет хранилища данных, может применить изменения к этому предмету; и- anyone who can write to a Data Warehouse Item can apply changes to this item; and

- любой, кто может расширить Предмет хранилища данных, может ассоциировать метаданные синхронизации с этим предметом.- anyone who can expand a Data Warehouse Item can associate synchronization metadata with this item.

Служба синхронизации не поддерживает информацию защиты авторства. Когда выполняется изменение в реплике А пользователем U и направляется реплике В, то теряется тот факт, что изменение первоначально было сделано в А (или посредством U). Если В направляет это изменение реплике С, то это выполняется под авторством В, а не А. Это приводит к следующему ограничению: если реплике не доверяется выполнение своих собственных изменений в предмете, она не может направлять изменения, сделанные другими.Sync does not support copyright information. When a change is made to replica A by user U and sent to replica B, the fact that the change was originally made to A (or through U) is lost. If B directs this change to replica C, then it is done by B, not A. This leads to the following restriction: if the replica is not trusted to make its own changes to the item, it cannot direct the changes made by others.

Когда инициируется служба синхронизации, она выполняется Приложением Управления Синхронизацией. Служба синхронизации имитирует идентификацию ПУС (SCA) и выполняет все операции (как локальные, так и удаленные) под этой идентификацией. Для иллюстрации отметьте, что пользователь U не может инициировать извлечение локальной службой синхронизации изменений из удаленной платформы хранения для предметов, к которым у пользователя U нет доступа для чтения.When the synchronization service is initiated, it is executed by the Synchronization Management Application. The synchronization service imitates the identification of the CCP (SCA) and performs all operations (both local and remote) under this authentication. To illustrate, note that user U cannot initiate a local synchronization service pulling changes from a remote storage platform for items that user U does not have read access to.

4. Управляемость4. Manageability

Контролирование распределенным сообществом реплик является сложной проблемой. Служба синхронизации может использовать алгоритм «проекции» для сбора и распределения информации о состоянии реплик. Свойства алгоритма проекции гарантируют, что информация о всех сконфигурированных репликах, в конце концов, собирается и что обнаруживаются поврежденные (неотвечающие) реплики.Controlling a distributed community of replicas is a complex issue. The synchronization service can use the “projection” algorithm to collect and distribute information about the state of replicas. The properties of the projection algorithm ensure that information about all configured replicas is ultimately collected and that corrupted (non-responding) replicas are detected.

Эта информация о контролировании сообщества делается доступной на каждой реплике. Инструментальные средства контролирования могут выполняться на произвольно выбранной реплике для проверки этой информации о контролировании и принятия административных решений. Любые изменения конфигурации должны выполняться непосредственно на репликах, на которые оказывается воздействие.This community monitoring information is made available on each replica. Monitoring tools can be run on a randomly selected replica to verify this monitoring information and make administrative decisions. Any configuration changes must be made directly to the affected replicas.

H. ВОЗМОЖНОСТЬ ВЗАИМОДЕЙСТВИЯ С ТРАДИЦИОННЫМИ ФАЙЛОВЫМИ СИСТЕМАМИH. POSSIBILITY OF INTERACTION WITH TRADITIONAL FILE SYSTEMS

Как упомянуто выше, платформа хранения настоящего изобретения, по меньшей мере в некоторых вариантах осуществления, предназначена для реализации в виде интегральной части аппаратной/программной интерфейсной системы компьютерной системы. Например, платформа хранения настоящего изобретения может быть реализована в виде интегральной части операционной системы, такой как семейство операционных систем Microsoft Windows. При такой возможности ИПП (API) платформы хранения становится частью ИПП (API) операционной системы, посредством которых программы приложений взаимодействуют с операционной системой. Таким образом, платформа хранения становится средством, посредством которого программы приложений хранят информацию об операционной системе, и основанная на Предметах модель данных платформы хранения поэтому заменяет традиционную файловую систему такой операционной системы. Например, как реализовано в семействе операционных систем Microsoft Windows, платформа хранения может заменять файловую систему ФСНТ (NTFS), реализованную в этой операционной системе. В настоящее время программы приложений обращаются к службам файловой системы ФСНТ (NTFS) при помощи ИПП (API's) Win32, раскрываемых семейством операционных систем Windows.As mentioned above, the storage platform of the present invention, in at least some embodiments, is intended to be implemented as an integral part of the hardware / software interface system of a computer system. For example, the storage platform of the present invention can be implemented as an integral part of an operating system, such as the Microsoft Windows family of operating systems. With this capability, the storage platform API (API) becomes part of the operating system API (API) through which application programs interact with the operating system. Thus, the storage platform becomes the means by which application programs store information about the operating system, and the Item-based data model of the storage platform therefore replaces the traditional file system of such an operating system. For example, as implemented in the Microsoft Windows family of operating systems, the storage platform can replace the FSNT file system (NTFS) implemented in this operating system. Currently, application programs access the FSNT file system services (NTFS) using the Win32 APIs, which are exposed by the Windows operating system family.

Признавая, однако, что полная замена файловой системы ФСНТ (NTFS) платформой хранения настоящего изобретения потребовала бы запись существующих, основанных на Win32 программ приложений, и такая запись может быть нежелательной, было бы полезным, чтобы платформа хранения настоящего изобретения обеспечивала некоторую возможность взаимодействия с существующими файловыми системами, такими как ФСНТ (NTFS). В одном варианте осуществления настоящего изобретения поэтому платформа хранения дает возможность программам приложений, которые основываются на модели программирования Win32, обращаться к содержимому хранилища данных платформы хранения, а также к традиционной файловой системе ФСНТ (NTFS). С этой целью платформа хранения использует соглашение об именовании, которое представляет собой поднабор соглашений об именовании Win32, чтобы способствовать легкой возможности взаимодействия. Далее, платформа хранения поддерживает обращение к файлам и каталогам, хранимым на томе платформы хранения, при помощи ИПП (API) Win32.Recognizing, however, that a complete replacement of the NTFS file system (NTFS) with the storage platform of the present invention would require recording existing Win32-based application programs, and such recording may be undesirable, it would be useful if the storage platform of the present invention provides some interoperability with existing file systems such as FSNT (NTFS). In one embodiment of the present invention, therefore, the storage platform enables application programs that rely on the Win32 programming model to access the contents of the storage of the storage platform data as well as the traditional NTFS file system. To this end, the storage platform uses a naming convention, which is a subset of Win32 naming conventions, to facilitate easy interoperability. Further, the storage platform supports accessing files and directories stored on the volume of the storage platform using the Win32 API.

1. Модель для возможности взаимодействия1. A model for interoperability

Согласно данному аспекту настоящего изобретения и согласно примерному варианту осуществления, описанному выше, платформа хранения реализует одно пространство имен, в котором могут быть организованы нефайловые и файловые предметы. С этой моделью достигаются следующие преимущества:According to this aspect of the present invention and according to the exemplary embodiment described above, the storage platform implements one namespace in which non-file and file objects can be organized. The following benefits are achieved with this model:

1. Папки в хранилище данных могут содержать как файловые, так и нефайловые предметы, таким образом, представляя единственное пространство имен для файловых и схематизированных данных. Кроме того, она также предоставляет унифицированную модель защиты, совместного использования и администрирования для всех пользовательских данных.1. Folders in the data warehouse can contain both file and non-file objects, thus representing a single namespace for file and schematized data. In addition, it also provides a unified model of protection, sharing and administration for all user data.

2. Так как и файловые, и нефайловые предметы являются доступными с использованием ИПП (API's) платформы хранения и в этом подходе для файлов не налагаются специальные правила, она представляет более безошибочную модель программирования для работы с ней разработчиков приложений.2. Since both file and non-file objects are accessible using the storage platform API (API's) and there are no special rules for files in this approach, it represents a more error-free programming model for application developers to work with it.

3. Все операции пространства имен проходят через платформу хранения и, следовательно, обрабатываются синхронно. Важно отметить, что сильное распространение (promotion) свойств (отделяемых от содержимого файла) все же происходит асинхронно, но синхронные операции обеспечивают значительно более предсказуемую среду для пользователей и приложений.3. All namespace operations go through the storage platform and, therefore, are processed synchronously. It is important to note that the strong distribution (promotion) of properties (separated from the contents of the file) still occurs asynchronously, but synchronous operations provide a much more predictable environment for users and applications.

В результате этой модели в настоящем варианте осуществления возможности поиска могут не предоставляться по источникам данных, которые не мигрируют в хранилище данных платформы хранения. Они включает в себя съемные носители, удаленные серверы и файлы на локальном диске. Предусматривается Адаптер Синхронизации, который явно показывает прокси-предметы (ярлыки + метаданные распространения) в платформе хранения для предметов, постоянно находящихся во внешних файловых системах. Прокси-предметы не пытаются имитировать файлы или в смысле иерархии пространства имен источника данных, или в смысле защиты.As a result of this model, in the present embodiment, search capabilities may not be provided by data sources that do not migrate to the storage platform data warehouse. They include removable media, remote servers, and files on the local drive. A Sync Adapter is provided, which explicitly shows proxy items (shortcuts + distribution metadata) in the storage platform for items that reside on external file systems. Proxy objects do not try to simulate files either in the sense of the hierarchy of the data source namespace or in the sense of protection.

Симметрия, достигаемая на модели пространства имен и программирования между файловым и нефайловым содержимым, обеспечивает лучший путь для миграции во времени приложениями содержимого из файловых систем в более структурированные предметы в хранилище данных платформы хранения. Посредством обеспечения собственного типа файловых предметов в хранилище данных платформы хранения программы приложений могут перемещать файловые данные в платформу хранения, в то же самое время все же имея возможность манипулирования этими данными при помощи Win32. В конце концов, программы приложений могут полностью мигрировать (переносить) в ИПП (API) платформы хранения и структурировать свои данные на основе Предметов платформы хранения, а не файлов.The symmetry achieved on the model of the namespace and programming between file and non-file content provides the best way for applications to migrate content over time from file systems to more structured objects in the storage platform data warehouse. By providing their own type of file objects in the storage platform data warehouse, application programs can move file data to the storage platform, while still having the ability to manipulate this data using Win32. In the end, application programs can completely migrate (migrate) to storage platform APIs and structure their data based on Storage platform Items, not files.

2. Особенности хранилища данных2. Data Warehouse Features

Чтобы обеспечить требуемый уровень возможности взаимодействия, в одном варианте осуществления реализуются следующие особенности хранилища данных платформы хранения.In order to provide the required level of interoperability, in one embodiment, the following features of the storage platform data warehouse are implemented.

а) Не томa) Not that

Хранилище данных платформы хранения не раскрывается в качестве отдельного тома файловой системы. Платформа хранения на новом уровне использует FILESTREAMы, непосредственно хостируемые на ФСНТ (NTFS). Таким образом, нет изменения формата на диске, тем самым устраняется любая необходимость раскрытия платформы хранения в качестве новой файловой системы на уровне тома.The storage platform data warehouse is not disclosed as a separate file system volume. The storage platform at a new level uses FILESTREAMs directly hosted on the FSNT (NTFS). Thus, there is no change in format on the disk, thereby eliminating any need to expand the storage platform as a new file system at the volume level.

Вместо этого, хранилище данных (пространство имен) формируется в соответствии с томом ФСНТ (NTFS). База данных и FILESTREAMы, поддерживающие эту часть пространства имен, располагаются на томе ФСНТ (NTFS), с которым ассоциируется хранилище данных платформы хранения. Также предусматривается хранилище данных, соответствующее системному тому.Instead, a data warehouse (namespace) is configured according to the FSST (NTFS) volume. The database and FILESTREAMs that support this part of the namespace are located on the FSNT volume (NTFS) with which the storage platform data warehouse is associated. A data repository corresponding to the system volume is also provided.

b) Структура хранилищаb) Storage structure

Структура хранилища наилучшим образом иллюстрируется примером. Рассмотрим в качестве примера дерево каталогов на системном томе машины, названной HomeMachine, как изображено на фиг.16. В соответствии с особенностью настоящего изобретения возможности взаимодействия с файловой системой, соответствующей накопителю с:\, имеется хранилище данных платформы хранения, раскрытое для ИПП (API's) Win32 при помощи совместно используемого ресурса универсального соглашения об именовании (УСИ; UNC), названного, например, «WinFSOnC». Это делает ассоциированное хранилище данных доступным посредством следующего имени УСИ (UNC):The storage structure is best illustrated by an example. Consider, as an example, the directory tree on the system volume of a machine called HomeMachine , as shown in FIG. In accordance with a feature of the present invention, the ability to interact with a file system corresponding to a drive with: \ has a storage platform data store disclosed for Win32 APIs using a shared resource of a universal naming convention (USI; UNC) named, for example, "WinFSOnC". This makes the associated data warehouse accessible through the following WSI name (UNC):

\\HomeMachine\WinFSOnC.\\ HomeMachine \ WinFSOnC.

В данном варианте осуществления файлы и/или папки должны явно мигрировать (переноситься) с ФСНТ (NTFS) на платформу хранения. Поэтому, если пользователь желает переместить папку My Document в хранилище данных платформы хранения, чтобы он воспользовался всеми дополнительными особенностями поиска/категоризации, предлагаемыми платформой хранения, иерархия будет выглядеть такой, как показано на фиг.17. Важно отметить, что эти папки фактически перемещаются в этом примере. Другим вопросом, который следует отметить, является то, что пространство имен перемещается в платформу хранения, фактические потоки переименовываются как FILESTREAMы с соответствующими указателями, подключаемыми в платформе хранения.In this embodiment, the files and / or folders must explicitly migrate (migrate) from the FSNT (NTFS) to the storage platform. Therefore, if the user wants to move the My Document folder to the storage platform data warehouse so that he takes advantage of all the additional search / categorization features offered by the storage platform, the hierarchy will look as shown in Fig. 17. It is important to note that these folders actually move in this example. Another issue that should be noted is that the namespace is moved to the storage platform, the actual threads are renamed as FILESTREAMs with the corresponding pointers connected in the storage platform.

с) Не все файлы мигрируютc) Not all files migrate

Файлы, которые соответствуют пользовательским данным или которые требуют поиска/категоризации, которые предоставляет платформа хранения, являются кандидатами на миграцию в хранилище данных платформы хранения. Предпочтительно, что, чтобы ограничить вопросы совместимости программ приложений с платформой хранения, набор файлов, которые мигрируют в платформу хранения настоящего изобретения, в контексте операционной системы Microsoft Windows, ограничиваются файлами в папке MyDocuments, папке Favorites в Internet Explorer (IE), папке History в IE и файлами .ini в Desktop в папке Documents and Settings. Предпочтительно, что не разрешается миграция системных файлов Windows.Files that match user data or that require the search / categorization that the storage platform provides are candidates for migration to the storage platform data warehouse. Preferably, in order to limit the compatibility of application programs with the storage platform, the set of files that migrate to the storage platform of the present invention, in the context of the Microsoft Windows operating system, is limited to the files in the MyDocuments folder, the Favorites folder in Internet Explorer (IE), the History folder in IE and .ini files in Desktop in the Documents and Settings folder. Preferably, Windows system file migration is not allowed.

d) Доступ пространства имен ФСНТ (NTFS) к файлам платформы храненияd) FSNT Namespace Access (NTFS) to Storage Platform Files

В варианте осуществления, описанном в данном документе, желательно, чтобы к файлам, мигрируемым в платформу хранения, не было доступа от пространства имен ФСНТ (NTFS), даже если фактические файловые потоки хранятся в ФСНТ (NTFS). Таким образом, исключаются сложные факторы блокирования и защиты, которые возникают из многопоточной реализации.In the embodiment described herein, it is desirable that files migrated to the storage platform are not accessible from the NTFS namespace, even if the actual file streams are stored in NTFS. This eliminates the complex blocking and protection factors that arise from a multi-threaded implementation.

е) Ожидаемые буквы пространства имен/накопителяe) The expected namespace / drive letters

Доступ к файлам и папкам в платформе хранения обеспечивается посредством имени УСИ (UNC) в виде \\<имя машины>\<WinfsShareName>. Для класса приложений, которые требуют буквы накопителей для работы, буква накопителя может отображаться на это имя УСИ (UNC).Access to files and folders in the storage platform is provided through the name of the USI (UNC) in the form \\ <machine name> \ <WinfsShareName>. For a class of applications that require a drive letter to work, the drive letter can be mapped to that name, the UNC.

I. ИПП (API) ПЛАТФОРМЫ ХРАНЕНИЯI. STI PLATFORMS (API)

Как упомянуто выше, платформа хранения содержит ИПП (API), который дает возможность программам приложений обращаться к особенностям и возможностям платформы хранения, описанным выше, и обращаться к предметам, хранимым в хранилище данных. В данном разделе описывается один вариант осуществления ИПП (API) платформы хранения в платформе хранения настоящего изобретения.As mentioned above, the storage platform contains an API (API) that enables application programs to access the features and capabilities of the storage platform described above and access items stored in the data warehouse. This section describes one embodiment of a storage platform API in a storage platform of the present invention.

Фиг.19 изображает базовую архитектуру ИПП (API) платформы хранения согласно настоящему варианту осуществления. ИПП (API) платформы хранения использует SQLClient 1900 для взаимодействия с локальным хранилищем 302 данных и также может использовать SQLClient 1900 для взаимодействия с удаленными хранилищами данных (например, хранилищем 340 данных). Локальное хранилище 302 также может взаимодействовать с удаленным хранилищем 340 данных с использованием или Распределенного процессора запросов (РПЗ; DQP), или при помощи службы синхронизации платформы хранения, описанной выше. ИПП (API) 322 платформы хранения также служит в качестве ИПП (API) моста для уведомлений хранилища данных, передачи подписок приложений средству обработки 332 уведомлений и маршрутизации уведомлений к приложению (например, приложению 350а, 350b или 350с), что также описано выше. В одном варианте осуществления ИПП (API) 322 платформы хранения также может определять ограниченную архитектуру «поставщика», так что он может обращаться к данным в Microsoft Exchange и AD.FIG. 19 shows a basic architecture of an API (API) of a storage platform according to the present embodiment. The storage platform API uses the SQLClient 1900 to interact with local data store 302 and can also use the SQLClient 1900 to interact with remote data stores (eg, data store 340). Local storage 302 can also interact with remote data storage 340 using either a Distributed Query Processor (RPQ; DQP), or using the storage platform synchronization service described above. The storage platform API 322 also serves as a bridge for the data warehouse notifications, transferring application subscriptions to the notification processing tool 332, and routing notifications to the application (e.g., application 350a, 350b or 350c), which is also described above. In one embodiment, the storage platform API 322 can also define a limited “provider” architecture so that it can access data in Microsoft Exchange and AD.

1. Обзор1. Overview

Механизм доступа к данным настоящего варианта осуществления ИПП (API) платформы хранения настоящего изобретения касается четырех областей: запрос, навигация, действия, события.The data access mechanism of the present embodiment of the IPP (API) of the storage platform of the present invention relates to four areas: request, navigation, actions, events.

ЗапросInquiry

В одном варианте осуществления хранилище данных платформы хранения реализуется на процессоре 314 реляционной базы данных; как результат, полностью выразительная сила языка ЯСЗ (SQL) присуща платформе хранения. Объекты запроса более высокого уровня обеспечивают упрощенную модель для запроса хранилища, но не могут инкапсулировать полную выразительную силу хранения.In one embodiment, the storage platform data warehouse is implemented on a relational database processor 314; as a result, the fully expressive power of the SQL language is inherent in the storage platform. Higher-level request objects provide a simplified model for requesting storage, but cannot encapsulate the full expressive power of storage.

НавигацияNavigation

Модель данных платформы хранения строит систему с широкими возможностями и расширяемого типа на абстракциях лежащей в основе базы данных. Для разработчика данные платформы хранения представляют собой сеть предметов. ИПП (API) платформы хранения позволяет выполнять навигацию от предмета к предмету при помощи фильтрации, связей, папок и т.д. Это является более высоким уровнем абстракции, чем базовые запросы ЯСЗ (SQL); одновременно, это позволяет использовать мощные возможности фильтрации и навигации с хорошо известными шаблонами кодирования ОЯСВ (CLR).The data model of the storage platform builds a system with wide capabilities and extensible type on the abstractions of the underlying database. For a developer, storage platform data is a network of items. The storage platform API allows you to navigate from item to item using filtering, links, folders, etc. This is a higher level of abstraction than basic SQL (SQL) queries; at the same time, it allows you to use powerful filtering and navigation capabilities with well-known NLW (CRL) coding patterns.

ДействияActions

ИПП (API) платформы хранения раскрывает общие действия над всеми предметами - Create, Delete, Update; они раскрываются в виде методов объектов. Кроме того, характерные для домена действия, такие как SendMail, CheckFreeBusy и т.д., также доступны как методы. Интегрированная среда ИПП (API) использует четко определенные шаблоны, которые НППО (ISV's) могут использовать для добавления возможностей посредством определения дополнительных действий.The storage platform API (API) reveals common actions on all objects - Create, Delete, Update; they are expanded as object methods. In addition, domain-specific actions, such as SendMail, CheckFreeBusy, etc., are also available as methods. The integrated API environment (API) uses well-defined patterns that ISPs can use to add capabilities by defining additional actions.

СобытияDevelopments

Данные в платформе хранения являются динамическими. Чтобы дать возможность приложениям реагировать, когда изменяются данные в хранилище, ИПП (API) раскрывают для разработчика мощные возможности по обработке событий, подписки и уведомлений.The data in the storage platform is dynamic. To enable applications to respond when data in the repository changes, the APIs provide the developer with powerful capabilities for handling events, subscriptions and notifications.

2. Именование и области действия2. Naming and scopes

Полезно указать отличие между пространством имен и именованием. Термин пространство имен, как он широко используется, ссылается на множество всех имен, доступных в некоторой системе. Системой может быть схема РЯР (XML), программа, Всемирная паутина, множество всех сайтов ftp (и их содержимого) и т.д. Именование представляет собой процесс или алгоритм, используемый для присвоения уникальных имен всем сущностям, представляющим интерес, в пространстве имен. Таким образом, именование представляет интерес, так как желательно однозначно ссылаться на данную единицу в пространстве имен. Таким образом, термин «пространство имен» в том виде, как он используется в данном документе, ссылается на множество всех имен, доступных во всех экземплярах платформы хранения в универсуме. Предметы представляют собой именованные сущности в пространстве имен платформы хранения. Соглашение об именовании УСИ (UNC) используется для гарантии единственности имен предметов. Каждый предмет в каждом хранилище платформы хранения в универсуме является адресуемым по имени УСИ (UNC).It is useful to point out the difference between a namespace and a naming convention . The term namespace , as it is widely used, refers to the set of all names available on some system. The system can be a RNR (XML) scheme, a program, the World Wide Web, the set of all ftp sites (and their contents), etc. Naming is a process or algorithm used to assign unique names to all entities of interest in a namespace. Thus, naming is of interest, since it is desirable to uniquely refer to a given unit in the namespace. Thus, the term “namespace,” as used herein, refers to the set of all names available in all instances of the storage platform in the universe. Items are named entities in the storage platform namespace. The WSI Naming Agreement (UNC) is used to guarantee the uniqueness of item names. Each item in each storage of the storage platform in the universe is addressable by the name of USI (UNC).

Наивысшим организационным уровнем в пространстве имен платформы хранения является служба, которая представляет собой просто экземпляр платформы хранения. Следующим уровнем организации является том. Том представляет собой наибольший автономный контейнер предметов. Каждый экземпляр платформы хранения содержит один или несколько томов. Внутри тома находятся предметы. Предметы представляют собой элементарные единицы данных в платформе хранения.The highest organizational level in the storage platform namespace is a service , which is simply an instance of the storage platform. The next level of organization is volume . A volume is the largest standalone item container. Each storage platform instance contains one or more volumes. Inside the volume are objects . Items are elementary data units in a storage platform.

Данные в реальном мире почти всегда организуются в соответствии с некоторой системой, которая имеет смысл в данном домене. В основе всех таких схем организации данных лежит понятие о делении совокупности наших данных на именованные группы. Как описано выше, это понятие моделируется в платформе хранения принципом Папки. Папка представляет собой специальный тип Предмета; существует 2 типа Папок: Папки Включения и Виртуальные Папки.Data in the real world is almost always organized according to some system that makes sense in a given domain. The basis of all such data organization schemes is the concept of dividing the aggregate of our data into named groups. As described above, this concept is modeled on a storage platform using the Folder principle. A folder is a special type of Item; There are 2 types of Folders: Power Folders and Virtual Folders.

Ссылаясь на фиг.18, Папка Включения представляет собой предмет, который содержит Связи прикрепления к другим Предметам и эквивалентен общему принципу папки файловой системы. Каждый Предмет «включается» по меньшей мере в одну папку включения.Referring to FIG. 18, an Include Folder is an item that contains Attachment Links to other Items and is equivalent to the general principle of a file system folder. Each Item is “included” in at least one inclusion folder.

Виртуальная Папка представляет собой более динамичный путь организации коллекции Предметов; это просто имя, данное набору Предметов - набор или перечисляется явно, или задается по запросу. Виртуальная Папка сама представляет собой Предмет и может рассматриваться как представляющая набор Связей (не прикрепления) к набору Предметов.Virtual Folder is a more dynamic way to organize a collection of Items; it is simply the name given to the set of Items — the set is either listed explicitly or specified upon request. The Virtual Folder itself is an Item and can be considered as representing a set of Links (not attachments) to a set of Items.

Иногда существует необходимость моделирования более сжатого представления включения; например, документ Word, внедренный в сообщение электронной почты, в известном смысле, привязывается более плотно к своему контейнеру, чем, например, файл, содержащийся в папке. Это представление выражается принципом Внедренных Предметов. Внедренный Предмет имеет специальный вид связи, которая ссылается на другой Предмет; ссылаемый Предмет может привязываться или иным образом подвергаться манипуляции только в пределах контекста включающего Предмета.Sometimes there is a need to model a more concise representation of inclusion; for example, a Word document embedded in an e-mail message, in a sense, is tied more tightly to its container than, for example, a file contained in a folder. This view is expressed by the principle of Embedded Objects. An Embedded Item has a special kind of communication that refers to another Item; the referenced Item may be attached or otherwise manipulated only within the context of the including Item.

Наконец, платформа хранения предоставляет понятие категорий как способ классификации Предметов и Элементов. Каждый Предмет или Элемент в платформе хранения может иметь ассоциированную с ним одну или несколько категорий. Категория, по существу, представляет собой просто имя, которым тегируется (помечается) Предмет/Элемент. Это имя может использоваться при поисках. Модель данных платформы хранения позволяет выполнять определение иерархии категорий, таким образом, позволяя осуществлять древовидную классификацию данных.Finally, the storage platform provides the concept of categories as a way to classify Items and Elements. Each Item or Item in the storage platform may have one or more categories associated with it. The category, in essence, is simply the name by which the Item / Element is tagged (marked). This name can be used in searches. The data model of the storage platform allows you to define a hierarchy of categories, thus allowing for tree-based classification of data.

Однозначное имя для данного предмета представляет собой тройку: (<serviceName>, <volumeID>, <ItemID>). Некоторые предметы (конкретно, Folder и VirtualFolder) представляют собой коллекции других предметов. Это приводит к альтернативному способу идентификации предметов: (<serviceName>, <volumeID>, <itemPath>).The unique name for this item is a triple: (<serviceName>, <volumeID>, <ItemID>). Some items (specifically Folder and VirtualFolder) are collections of other items. This leads to an alternative way to identify items: (<serviceName>, <volumeID>, <itemPath>).

Имена платформы хранения включают в себя понятие контекста службы: контекст службы представляет собой имя, которое отображается на пару (<volumeName>, <path>). Оно идентифицирует предмет или набор предметов - например, папку, виртуальную папку и т.д. С принципом контекста службы именем УСИ (UNC) для любого предмета в пространстве имен платформы хранения становится:Storage platform names include the concept of a service context: a service context is a name that maps to a pair (<volumeName>, <path>). It identifies an item or set of items - for example, a folder, virtual folder, etc. With the service context principle, the name of the USI (UNC) for any item in the storage platform namespace becomes:

\\<serviceName>\<serviceContext>\<itemPath>\\ <serviceName> \ <serviceContext> \ <itemPath>

Пользователи могут создавать и удалять контексты службы. Также, корневой каталог в каждом томе имеет предварительно определенный контекст: volume-name$.Users can create and delete service contexts. Also, the root directory in each volume has a predefined context: volume-name $.

ItemContext оценивает запрос (например, операцию Find) посредством ограничения результатов, возвращаемых тем Предметам, которые находятся на заданном пути.The ItemContext evaluates the query (for example, the Find operation) by limiting the results returned to those Items that are on the given path.

3. Компоненты ИПП (API) платформы хранения3. Components of the Storage Platform API

Фиг.20 схематически представляет различные компоненты ИПП (API) платформы хранения согласно настоящему варианту осуществления изобретения. ИПП (API) платформы хранения состоит из следующих компонентов: (1) классов 2002 данных, которые представляют типы элементов и предметов платформы хранения, (2) интегрированной среды 2004 выполнения, которая управляет обеспечением постоянства объекта и предусматривает классы 2006 поддержки; и (3) инструментальных средств 2008, которые используются для генерирования классов ОЯСВ (CLR) из схем платформы хранения.20 schematically represents various components of a storage platform API (API) according to the present embodiment. The storage platform API (API) consists of the following components: (1) data classes 2002, which represent the types of items and items of the storage platform, (2) an integrated execution environment 2004 that manages the persistence of the object and provides support classes 2006; and (3) 2008 tools that are used to generate CLR classes from storage platform schemas.

Согласно одному аспекту настоящего изобретения в течение периода проектирования автор схемы подает документ 2010 схемы и код для методов 2012 домена набору инструментальных средств 2008 периода проектирования ИПП (API) платформы хранения. Эти инструментальные средства генерируют классы 2002 данных на стороне клиента и схему 2014 хранилища и определения 2016 классов хранилища для этой схемы. «Домен» относится к конкретной схеме; например, изобретатели говорят о методах домена для классов в схеме Контактов и т.д. Эти классы 2002 данных используются во время прогона разработчиком приложения во взаимодействии с классами 2006 интегрированной среды выполнения ИПП (API) платформы хранения для манипулирования данными платформы хранения.According to one aspect of the present invention, during the design period, the schema author submits the schema document 2010 and code for the domain methods 2012 to the storage platform API set 2008 tool kit. These tools generate client-side data classes 2002 and a storage schema 2014 and definitions of 2016 storage classes for this schema. “Domain” refers to a particular scheme; for example, inventors talk about domain methods for classes in the Contacts schema, etc. These 2002 data classes are used during an application developer run in conjunction with the 2006 classes of the storage platform APIs (APIs) for manipulating storage platform data.

С целью иллюстрации различных аспектов ИПП (API) платформы хранения настоящего изобретения представляются примеры, основанные на примерной схеме Контактов. Графическое представление этой примерной схемы иллюстрируется на фиг.21А и 21В.In order to illustrate various aspects of the storage APIs of the present invention, examples are provided based on an exemplary Contacts scheme. A graphical representation of this exemplary diagram is illustrated in FIGS. 21A and 21B.

4. Классы данных4. Data classes

Согласно аспекту настоящего изобретения каждый тип Предмета, Расширения предмета и Элемента, а также каждая Связь в хранилище данных платформы хранения имеет соответствующий класс в ИПП (API) платформы хранения. Грубо, поля типа отображаются на поля класса. Каждый предмет, расширение предмета и элемент в платформе хранения доступен как объект соответствующего класса в ИПП (API) платформы хранения. Разработчик может запрашивать создание, модифицирование или удаление этих объектов.According to an aspect of the present invention, each type of Item, Item and Element Extension, and also each Link in the storage platform data warehouse has a corresponding class in the storage platform API (API). Roughly, type fields are mapped to class fields. Each item, item extension, and item in the storage platform is available as an object of the corresponding class in the storage platform API. A developer may request the creation, modification, or deletion of these objects.

Платформа хранения содержит первоначальный набор схем. Каждая схема определяет набор типов Предметов и Элементов и набор Связей. Следующее представляет собой один вариант осуществления алгоритма для генерирования классов данных из этих сущностей схемы:The storage platform contains an initial set of schemas. Each scheme defines a set of types of Items and Elements and a set of Links. The following is one embodiment of an algorithm for generating data classes from these schema entities:

Для каждой схемы S:For each circuit S:

Для каждого Предмета I в S генерируется класс, названный System.Storage.S.I. Этот класс имеет следующие члены:For each Item I in S, a class called System.Storage.S.I is generated. This class has the following members:

- Перегруженные конструкторы, включающие в себя конструкторы, которые дают возможность задавать первоначальные папку и имя нового предмета.- Overloaded constructors, including constructors that make it possible to set the initial folder and name of the new item.

- Свойство для каждого поля в I. Если поле является многозначным, свойство будет представлять собой коллекцию соответствующего типа Element.- A property for each field in I. If the field is multi-valued, the property will be a collection of the corresponding Element type.

- Перегруженный статический метод, который находит множество предметов, соответствующих фильтру (например, метод, названный «FindAll»).- An overloaded static method that finds many items matching the filter (for example, a method called “FindAll”).

- Перегруженный статический метод, который находит единственный предмет, соответствующий фильтру (например, метод, названный «FindOne»).- An overloaded static method that finds the only item matching the filter (for example, a method called “FindOne”).

- Статический метод, который находит предмет по его ИД (ID) (например, метод, названный «FindByID»).- A static method that finds an item by its ID (for example, a method called “FindByID”).

- Статический метод, который находит предмет по его имени относительно ItemContext (например, метод, названный «FindByName»).- A static method that finds an item by its name relative to ItemContext (for example, a method called “FindByName”).

- Метод, который сохраняет изменения в предмете (например, метод, названный «Update»).- A method that saves changes to an item (for example, a method called “Update”).

- Перегруженные статические методы Create, которые создают новые экземпляры предмета. Эти методы позволяют различным образом задавать первоначальную папку предмета.- Overloaded static methods Create, which create new instances of the subject. These methods allow you to set the initial folder of the item in various ways.

Для каждого Элемента Е в S генерируется класс, названный System.Storage.S.E. Этот класс имеет следующие члены:For each Element E in S, a class called System.Storage.S.E is generated. This class has the following members:

- Свойство для каждого поля в Е. Если поле является многозначным, свойство будет коллекцией соответствующих типов Element.- A property for each field in E. If the field is multi-valued, the property will be a collection of the corresponding Element types.

Для каждого Элемента Е в S генерируется класс, названный System.Storage.S.ECollection. Этот класс придерживается общих директив .NET Framework для сильно типизированных классов коллекций. Для основанных на Связях типов элементов этот класс также будет включать в себя следующие члены:For each Element E in S, a class called System.Storage.S.ECollection is generated. This class follows the general .NET Framework directives for strongly typed collection classes. For Relationship-based item types, this class will also include the following members:

- Перегруженный метод, который находит множество объектов Item, которые соответствуют фильтру, который неявно включает в себя предмет, в котором коллекция проявляется в роли источника. Перегрузки включают в себя некоторые, которые позволяют выполнять фильтрацию, основанную на подтипе Item (например, метод, названный «FindAllTargetItems»).- An overloaded method that finds many Item objects that match a filter that implicitly includes an item in which the collection appears as a source. Overloads include some that allow filtering based on the Item subtype (for example, a method called “FindAllTargetItems”).

- Перегруженный метод, который находит единственный объект Item, который соответствует фильтру, который неявно включает в себя предмет, в котором коллекция проявляется в роли источника. Перегрузки включают в себя некоторые, которые позволяют выполнять фильтрацию, основанную на подтипе Item (например, метод, названный «FindOneTargetItem»).- An overloaded method that finds a single Item object that matches a filter that implicitly includes an item in which the collection appears as a source. Overloads include some that allow filtering based on the Item subtype (for example, a method called “FindOneTargetItem”).

- Перегруженный метод, который находит объекты типа вложенного элемента, который соответствует фильтру, который неявно включает в себя предмет, в котором коллекция проявляется в роли источника (например, метод, названный «FindAllRelationships»).- An overloaded method that finds objects such as a nested element that matches a filter that implicitly includes an item in which the collection appears as a source (for example, a method called “FindAllRelationships”).

- Перегруженный метод, который находит объекты типа вложенного элемента, который соответствует фильтру, который неявно включает в себя предмет, в котором коллекция проявляется в роли источника (например, метод, названный «FindAllRelationshipsForTarget»).- An overloaded method that finds objects such as a nested element that matches a filter that implicitly includes an item in which the collection appears as a source (for example, a method called "FindAllRelationshipsForTarget").

- Перегруженный метод, который находит единственный объект типа вложенного элемента, который соответствует фильтру, который неявно включает в себя предмет, в котором коллекция проявляется в роли источника (например, метод, названный «FindOneRelationship»).- An overloaded method that finds a single object such as a nested element that matches a filter that implicitly includes an object in which the collection appears as a source (for example, a method called “FindOneRelationship”).

- Перегруженный метод, который находит единственный объект типа вложенного элемента, который соответствует фильтру, который неявно включает в себя предмет, в котором коллекция проявляется в роли источника (например, метод, названный «FindOneRelationshipForTarget»).- An overloaded method that finds a single object such as a nested element that matches a filter that implicitly includes an object in which the collection appears as a source (for example, a method called "FindOneRelationshipForTarget").

Для Связи R в S генерируется класс, названный System.Storage.S.R. Этот класс имеет один или два подкласса, зависящие от того, задает ли одна или обе роли связи поле конечной точки.For Link R, a class called System.Storage.S.R is generated in S. This class has one or two subclasses, depending on whether one or both of the communication roles defines an endpoint field.

Классы также генерируются таким же образом для каждого Расширения Предмета, который был создан.Classes are also generated in the same way for each Item Extension that was created.

Классы данных существуют в пространстве имен System.Storage.<Имясхемы>, где <Имясхемы> представляет собой имя соответствующей схемы, такой как Контакты, Файлы и т.д. Например, все классы, соответствующие схеме Контакты, находятся в пространстве имен System.Storage.Contacts.Data classes exist in the System.Storage namespace. <Names>, where <Names> is the name of the corresponding schema, such as Contacts, Files, etc. For example, all classes matching the Contacts schema are in the System.Storage.Contacts namespace.

В качестве примера, со ссылкой на фиг.21А и 21В, схема контактов приводит к следующим классам, содержащимся в пространстве имен System.Storage.Contact:As an example, with reference to FIGS. 21A and 21B, the contact diagram leads to the following classes contained in the System.Storage.Contact namespace:

- Предметы: Item, Folder, WellKnownFolder, LocalMachineDataFolder, UserDataFolder, Principal, Service, GroupService, PersonService, PresenceService, ContactService, ADService, Person, User, Group, Organization, HouseHold- Items : Item, Folder, WellKnownFolder, LocalMachineDataFolder, UserDataFolder, Principal, Service, GroupService, PersonService, PresenceService, ContactService, ADService, Person, User, Group, Organization, HouseHold

- Элементы: NestedElementBase, NestedElement, IdentityKey, SecurityID, EAddress, ContactEAddress, TelehoneNumber, SMTPEAddress, InstantMessagingAddress, Template, Profile, FullName, FamilyEvent, BasicPresence, WindowsPresence, Relationship, TemplateRelationship, LocationRelationship, FamilyEventLocationRelationship, HouseHoldLocationRelationship, RoleOccupancy, EmployeeData, GroupMemberShip, OrganizationLocationRelationship, HouseHoldMemberData, FamilyData, SpouseData, ChildData- Elements : NestedElementBase, NestedElement, IdentityKey, SecurityID, EAddress, ContactEAddress, TelehoneNumber, SMTPEAddress, InstantMessagingAddress, Template, Profile, FullName, FamilyEvent, BasicPresence, WindowsPresence, Relationship, TemplateRelationship, Relation, Relation, Relation, Relation, Relation, Relation, Relation, Relation , HouseHoldMemberData, FamilyData, SpouseData, ChildData

В качестве другого примера подробная структура типа Person, как определено в схеме Contacts, показана в РЯР (XML) ниже:As another example, the detailed structure of the Person type, as defined in the Contacts schema, is shown in the RNR (XML) below:

<Type Name="Person" MajorVersion="1" MinorVersion="0"<Type Name = "Person" MajorVersion = "1" MinorVersion = "0"

ExtendsType="Core.Principal" ExtendsVersion="1">ExtendsType = "Core.Principal" ExtendsVersion = "1">

<Field Names="Birthdate" Type="the storage platformTypes.datetime"<Field Names = "Birthdate" Type = "the storage platformTypes.datetime"

Nullable="true" TypeMajorVersion="1"/>Nullable = "true" TypeMajorVersion = "1" />

<Field Name="Gender" Type="Base.CategoryRef"<Field Name = "Gender" Type = "Base.CategoryRef"

Nullable="true" MultiValued="false"Nullable = "true" MultiValued = "false"

TypeMajorVersion="l"/>TypeMajorVersion = "l" />

<Field Name="PersonalNames" Type="Contact.FullName"<Field Name = "PersonalNames" Type = "Contact.FullName"

Nullable="true" MultiValued="true"Nullable = "true" MultiValued = "true"

TypeMajorVersion="1"/>TypeMajorVersion = "1" />

<Field Name="PersonalEAddresses" Type="Core.EAddress"<Field Name = "PersonalEAddresses" Type = "Core.EAddress"

Nullable="true" MultiValued="true"Nullable = "true" MultiValued = "true"

TypeMajorVersion="1"/>TypeMajorVersion = "1" />

<Field Name="PersonalPostalAddresses"<Field Name = "PersonalPostalAddresses"

Type="Core.PostalAddress" Nullable="true"Type = "Core.PostalAddress" Nullable = "true"

MultiValued="true" TypeMajorVersion="1"/>MultiValued = "true" TypeMajorVersion = "1" />

<Field Name="PersonalPicture" Type="the storage platformTypes.image"<Field Name = "PersonalPicture" Type = "the storage platformTypes.image"

Nullable="true" TypeMajorVersion="1"/>Nullable = "true" TypeMajorVersion = "1" />

<Field Name="Notes" Type="Core.RichText" Nullable="true"<Field Name = "Notes" Type = "Core.RichText" Nullable = "true"

MultiValued="true" TypeMajorVersion="1"/>MultiValued = "true" TypeMajorVersion = "1" />

<Field Name="Profession" Type="Base.CategoryRef"<Field Name = "Profession" Type = "Base.CategoryRef"

Nullable="true" MultiValued="true"Nullable = "true" MultiValued = "true"

TypeMajorVersion="1"/>TypeMajorVersion = "1" />

<Field Name="DataSource" Type="Base.IdentityKey"<Field Name = "DataSource" Type = "Base.IdentityKey"

Nullable="true" MultiValued="true"Nullable = "true" MultiValued = "true"

TypeMajorVersion="1"/>TypeMajorVersion = "1" />

<Field Name="ExpirationDate" Type="the storage platformTypes.datetime"<Field Name = "ExpirationDate" Type = "the storage platformTypes.datetime"

Nullable="true" TypeMajorVersion="1"/>Nullable = "true" TypeMajorVersion = "1" />

<Field Name="HasAllAddressBookData" Type="the storage platformTypes.bit"<Field Name = "HasAllAddressBookData" Type = "the storage platformTypes.bit"

Nullable="true" TypeMajorVersion="1"/>Nullable = "true" TypeMajorVersion = "1" />

<Field Name="EmployeeOf" Type="Contact.EmployeeData"<Field Name = "EmployeeOf" Type = "Contact.EmployeeData"

Nullable="true" MultiValued="true"Nullable = "true" MultiValued = "true"

TypeMajorVersion="1"/>TypeMajorVersion = "1" />

</Type></Type>

Этот тип приводит к следующему классу (показаны только открытые члены):This type leads to the following class (only public members are shown):

partial public class Person :partial public class Person:

System.Storage.Core.Principal,System.Storage.Core.Principal,

System.Windows.Data.IDataUnitSystem.Windows.Data.IDataUnit

{{

public System.Data.SqlTypes.SqlDateTimepublic System.Data.SqlTypes.SqlDateTime

Birthdate { get; set; }Birthdate {get; set; }

public System.Storage.Base.CategoryRefpublic System.Storage.Base.CategoryRef

Gender { get; set: )Gender {get; set:)

public System.Storage.Contact.FullNameCollectionpublic System.Storage.Contact.FullNameCollection

PersonalNames { get; }PersonalNames {get; }

public System.Storage.Core.EAddressCollectionpublic System.Storage.Core.EAddressCollection

PersonalEAddresses { get; }PersonalEAddresses {get; }

public System.Storage.Core.PostalAddressCollectionpublic System.Storage.Core.PostalAddressCollection

PersonalPostalAddresses { get; }PersonalPostalAddresses {get; }

public System.Data.SqlTypes.SqlBinarypublic System.Data.SqlTypes.SqlBinary

PersonalPicture { get; set; }PersonalPicture {get; set; }

public System.Storage.Core.RichTextCollectionpublic System.Storage.Core.RichTextCollection

Notes { get; }Notes {get; }

public System.Storage.Base.CategoryRefCollectionpublic System.Storage.Base.CategoryRefCollection

Profession { get; }Profession {get; }

public System.Storage.Base.IdentityKeyCollectionpublic System.Storage.Base.IdentityKeyCollection

DataSource { get; }DataSource {get; }

public System.Data.SqlTypes.SqlDateTimepublic System.Data.SqlTypes.SqlDateTime

ExpirationDate { get; set; }ExpirationDate {get; set; }

public System.Data.SqlTypes.SqlBooleanpublic System.Data.SqlTypes.SqlBoolean

HasAllAddressBookData { get; set; }HasAllAddressBookData {get; set; }

public System.Storage.Contact.EmployeeDataCollectionpublic System.Storage.Contact.EmployeeDataCollection

EmployeeOf { get; }EmployeeOf {get; }

public Person();public Person ();

public Person( System.Storage.Base.Folder folder, string name );public Person (System.Storage.Base.Folder folder, string name);

public static new System.Storage.FindResultpublic static new System.Storage.FindResult

FindAll( System.Storage.ItemStore store);FindAll (System.Storage.ItemStore store);

public static new System.Storage.FindResultpublic static new System.Storage.FindResult

FindAll(FindAll (

System.Storage.ItemStore store,System.Storage.ItemStore store,

string filter );string filter);

public static new Personpublic static new Person

FindOne(FindOne (

System.Storage.ItemStore store,System.Storage.ItemStore store,

string filter );string filter);

public new eventpublic new event

System.Windows.Data.PropertyChangedEventHandlerSystem.Windows.Data.PropertyChangedEventHandler

PropertyChangedHandler;PropertyChangedHandler;

public static new Personpublic static new Person

FindByID(FindByID (

System.Storage.ItemStore store,System.Storage.ItemStore store,

long item_key );long item_key);

}}

В качестве еще другого примера подробная структура типа TelephoneNumber, как определено в схеме Contacts, показана в РЯР (XML) ниже:As another example, the detailed structure of the TelephoneNumber type, as defined in the Contacts schema, is shown in the NEX (XML) below:

<Type Name="TelephoneNumber" ExtendsType="Core.EAddress"<Type Name = "TelephoneNumber" ExtendsType = "Core.EAddress"

MajorVersion="1" MinorVersion="0" ExtendsVersion="1">MajorVersion = "1" MinorVersion = "0" ExtendsVersion = "1">

<Field Name="CountryCode" Type="the storage platformTypes.nvarchar(50)"<Field Name = "CountryCode" Type = "the storage platformTypes.nvarchar (50)"

Nullable="true" MultiValued="false"Nullable = "true" MultiValued = "false"

TypeMajorVersion="1"/>TypeMajorVersion = "1" />

<Field Name="AreaCode" Type="the storage platformTypes.nvarchar(256)"<Field Name = "AreaCode" Type = "the storage platformTypes.nvarchar (256)"

Nullable="true" TypeMajorVersion="1"/>Nullable = "true" TypeMajorVersion = "1" />

<Field Name="Number" Type="the storage platformTypes.nvarchar(256)"<Field Name = "Number" Type = "the storage platformTypes.nvarchar (256)"

Nullable="true" TypeMajorVersion="1"/>Nullable = "true" TypeMajorVersion = "1" />

<Field Name="Extension" Type="the storage platformTypes.nvarchar(256)"<Field Name = "Extension" Type = "the storage platformTypes.nvarchar (256)"

Nullable="true" TypeMajorVersion="1"/>Nullable = "true" TypeMajorVersion = "1" />

<Field Name="PIN" Type="the storage platformTypes.nvarchar(50)"<Field Name = "PIN" Type = "the storage platformTypes.nvarchar (50)"

Nullable="true" TypeMajorVersion="1"/>Nullable = "true" TypeMajorVersion = "1" />

</Type></Type>

Этот тип приводит к следующему классу (показаны только открытые члены):This type leads to the following class (only public members are shown):

partial public class TelephoneNumber:partial public class TelephoneNumber:

System.Storage.Core.EAddress,System.Storage.Core.EAddress,

System.Windows.Data.IDataUnitSystem.Windows.Data.IDataUnit

{{

public System.Data.SqlTypes.SqlString CountryCodepublic System.Data.SqlTypes.SqlString CountryCode

{ get; set; }{get; set; }

public System.Data.SqlTypes.SqlString AreaCodepublic System.Data.SqlTypes.SqlString AreaCode

{ get; set; }{get; set; }

public System.Data.SqlTypes.SqlString Numberpublic System.Data.SqlTypes.SqlString Number

{ get; set; }{get; set; }

public System.Data.SqlTypes.SqlString Extensionpublic System.Data.SqlTypes.SqlString Extension

{ get; set; }{get; set; }

public System.Data.SqlTypes.SqlString PINpublic System.Data.SqlTypes.SqlString PIN

{ get; set; }{get; set; }

public TelephoneNumber();public TelephoneNumber ();

public new eventpublic new event

System.Windows.Data.PropertyChangedEventHandlerSystem.Windows.Data.PropertyChangedEventHandler

PropertyChangedHandler;PropertyChangedHandler;

}}

Иерархия классов, являющаяся следствием данной схемы, прямо отражает иерархию типов в этой схеме. В качестве примера рассмотрим типы Item, определенные в схеме Contact (см. фиг.21А и 21В). Иерархия классов, соответствующая этому в ИПП (API) платформы хранения, будет следующей:The class hierarchy resulting from this scheme directly reflects the type hierarchy in this scheme. As an example, consider the Item types defined in the Contact schema (see FIGS. 21A and 21B). The class hierarchy corresponding to this in the storage platform API (API) will be as follows:

ObjectObject

DataClassDataClass

ElementBaseElementbase

RootItemBaseRootoottase

ItemItem

PrincipalPrincipal

GroupGroup

HouseholdHousehold

OrganizationOrganization

PersonPerson

UserUser

ServiceService

PresenceServicePresence service

ContactServiceContactService

ADServiceADService

RootNestedBaseRootootbase

…(Классы Element)... (Element Classes)

Еще другая схема, схема, которая дает возможность представлять все носители аудио/видео в системе (конвертированные звуковые файлы, звуковые компакт-диски, цифровые многофункциональные диски (ЦМД; DVD), домашнее видео и т.д.), позволяет пользователям/приложениям хранить, организовывать, выполнять поиск и манипулировать различными видами носителей аудио/видео. Базовая схема документов носителей является достаточно обобщенной, чтобы представлять любые носители, и расширения для этой базовой схемы предназначены для оперирования характерными для домена свойствами отдельно для носителей аудио и видео. Эта схема, и многие, многие другие, как предполагается, работают прямо или косвенно под Основной схемой.Another scheme, a scheme that makes it possible to represent all media of audio / video in the system (converted audio files, audio CDs, digital multifunction disks (DTM; DVD), home video, etc.), allows users / applications to store , organize, search, and manipulate various types of audio / video media. The basic layout of media documents is sufficiently generalized to represent any media, and extensions to this basic layout are designed to handle domain-specific properties separately for audio and video media. This scheme, and many, many others, is supposed to work directly or indirectly under the Basic scheme.

5. Интегрированная среда выполнения5. Integrated runtime

Базовая модель программирования ИПП (API) платформы хранения представляет собой персистентность (постоянство) объектов. Программы приложений (или «приложения») выполняют поиск в хранилище и извлекают объекты, представляющие данные в хранилище. Приложения модифицируют извлекаемые объекты или создают новые объекты, затем вызывают распространение этих изменений в хранилище. Этот процесс управляется объектом ItemContext. Поиски исполняются с использованием объекта ItemSearcher, и результаты поиска являются доступными при помощи объекта FindResult.The basic storage platform API (API) programming model is the persistence of objects. Application programs (or “applications”) search the store and retrieve objects that represent the data in the store. Applications modify retrieved objects or create new objects, then cause these changes to spread to the repository. This process is controlled by an ItemContext. Searches are performed using the ItemSearcher object, and search results are available using the FindResult object.

а) Классы интегрированной среды выполненияa) Integrated Runtime Classes

Согласно другому обладающему признаками изобретения аспекту ИПП (API) платформы хранения интегрированная среда выполнения реализует ряд классов для поддержки работы классов данных. Эти классы интегрированной среды определяют общий набор методов поведения для классов данных и вместе с классами данных обеспечивают базовую модель программирования для ИПП (API) платформы хранения. Классы в интегрированной среде выполнения принадлежат пространству имен System.Storage. В настоящем варианте осуществления классы интегрированной среды содержат следующие основные классы: ItemContext, ItemSearcher и FindResult. Также могут предусматриваться другие второстепенные классы, значения перечисления и делегаты.According to another aspect of the storage platform API (API) of the storage platform, the integrated runtime implements a number of classes to support the operation of data classes. These integrated environment classes define a common set of behaviors for data classes and, together with data classes, provide a basic programming model for the storage platform API. Classes in the integrated runtime belong to the System.Storage namespace. In the present embodiment, the integrated environment classes contain the following main classes: ItemContext, ItemSearcher and FindResult. Other minor classes, enumeration values, and delegates may also be provided.

(1) ItemContext(1) ItemContext

Объект ItemContext (i) представляет набор доменов предмета, в котором программа приложения хочет выполнить поиск, (ii) поддерживает информацию о состоянии для каждого объекта, который представляет состояние данных, извлекаемых из платформы хранения, и (iii) управляет транзакциями, используемыми при взаимодействии с платформой хранения и любой файловой системой, с которой может взаимодействовать платформа хранения.The ItemContext object (i) represents the set of domains of the subject in which the application program wants to search, (ii) maintains state information for each object that represents the state of the data retrieved from the storage platform, and (iii) manages the transactions used in interacting with a storage platform and any file system with which a storage platform can interact.

В качестве процессора постоянства объектов ItemContext предусматривает следующие службы:ItemContext provides the following services as the persistence processor for objects:

1. Десериализует данные, считанные из хранилища, в объекты.1. Deserializes data read from storage into objects.

2. Сопровождает идентификацию объекта (один и тот же объект используется для представления данного предмета независимо от того, сколько раз этот предмет был включен в результат запросов).2. Accompany the identification of the object (the same object is used to represent the given subject, regardless of how many times this subject has been included in the query result).

3. Отслеживает состояние объекта.3. Tracks the condition of the object.

ItemContext также выполняет ряд служб, уникальных для платформы хранения:ItemContext also runs a number of services unique to the storage platform:

1. Генерирует и исполняет операции updategram платформы хранения, необходимые для обеспечения постоянства изменений.1. Generates and executes updategram operations of the storage platform, necessary to ensure the constancy of changes.

2. Создает соединения с множеством хранилищ данных, необходимых для осуществления прямой навигации по связям ссылок и для модифицирования и сохранения объектов, извлеченных из многодоменного поиска.2. Creates connections to a variety of data storages necessary for direct navigation through link relationships and for modifying and saving objects retrieved from a multi-domain search.

3. Обеспечивает, что поддерживаемые файлами предметы правильно обновляются, когда сохраняются изменения в объекте (объектах), представляющем этот предмет.3. Ensures that items supported by files are updated correctly when changes are saved to the item (s) representing the item.

4. Управляет транзакциями по множеству соединений платформы хранения и, когда выполняется обновление данных, хранимых в поддерживаемых файлами предметах и свойствах файловых потоков, транзакционной файловой системы.4. Manages transactions across multiple storage platform connections and when updating data stored in file-supported items and file stream properties, a transactional file system is updated.

5. Выполняет операции создания, копирования, перемещения и удаления предметов, которые учитывают семантику связей платформы хранения, поддерживаемые файлами предметы и типизированные свойства потоков.5. Performs operations of creating, copying, moving, and deleting items that take into account the semantics of storage platform relationships, file-supported items, and typed stream properties.

В Приложении А представлен листинг исходного кода класса ItemContext согласно одному варианту осуществления.Appendix A presents a listing of the source code for the ItemContext class according to one embodiment.

(2) ItemSearcher(2) ItemSearcher

Класс ItemSearcher поддерживает простые поиски, которые возвращают целые объекты Item, потоки объектов Item или потоки значений, проецируемых из Item. ItemSearcher инкапсулирует основную функциональную возможность, которая является общей для всех этих: принцип типа цели и параметризованных фильтров, которые применяются к этому типу цели. ItemSearcher также дает возможность предварительной компиляции или подготовки искателей в качестве оптимизации, когда этот же поиск будет исполняться по множеству типов. В Приложении В представлен листинг исходного кода класса ItemSearcher и несколько близкородственных классов согласно одному варианту осуществления.The ItemSearcher class supports simple searches that return whole Item objects, Item object streams, or value streams projected from Item. ItemSearcher encapsulates a core functionality that is common to all of these: the principle of the type of target and the parameterized filters that apply to this type of target. ItemSearcher also provides the ability to pre-compile or prepare crawlers as an optimization, when the same search will be performed on many types. Appendix B provides a source code listing of the ItemSearcher class and several closely related classes according to one embodiment.

(а) Тип цели(a) Type of target

Тип цели поиска устанавливается при построении ItemSearcher. Типом цели является тип ОЯСВ (CLR), который отображается на запрашиваемый экстент хранилищем данных. Конкретно, именно тип ОЯСВ (CLR) отображается на тип предмета, связи и расширение предмета, а также схематизированные представления.The type of search target is set when building ItemSearcher. The target type is the CLR type, which is mapped to the requested extent by the data store. Specifically, it is the type of NLW (CLR) that is mapped to the type of subject, communication and extension of the subject, as well as schematized representations.

При извлечении искателя, используя метод ItemContext.GetSearcher, тип цели искателя задается в качестве параметра. Когда статический метод GetSearcher вызывается на тип предмета, связи или расширения предмета (например, Person.GetSearcher), типом цели является тип предмета, связи или расширения предмета.When retrieving a crawler using the ItemContext.GetSearcher method, the crawler target type is set as a parameter. When the GetSearcher static method is called on the type of an item, link, or extension of an item (for example, Person.GetSearcher), the type of target is the type of item, link, or extension of the item.

Выражения поиска, предусмотренные в ItemSearcher (например, фильтр поиска и при помощи вариантов поиска или определения проекции), всегда являются относительными для типа цели поиска. Эти выражения могут задавать свойства типа цели (включая свойства вложенных элементов) и могут задавать соединения для связи и расширений предметов, как описано в другом месте.Search expressions provided in ItemSearcher (for example, a search filter and using search options or projection definitions) are always relative to the type of search target. These expressions can specify properties such as goals (including properties of nested elements) and can specify connections for communication and extensions of objects, as described elsewhere.

Тип цели поиска делается доступным при помощи свойства только для чтения (например, свойство ItemSearcher.Type).The type of search target is made available using a read-only property (for example, the ItemSearcher.Type property).

(b) Фильтры(b) Filters

ItemSearcher содержит свойство для задания фильтров (например, свойство, именованное «Filters» в виде коллекции объектов SearchExpression), которое определяет фильтр, используемый в поиске. Все фильтры в коллекции объединяются с использованием оператора логического И, когда выполняется поиск. Фильтр может содержать ссылки на параметры. Значения параметров задаются при помощи свойства Parameters.ItemSearcher contains a property for defining filters (for example, a property named “Filters” as a collection of SearchExpression objects) that defines the filter used in the search. All filters in the collection are combined using the logical AND operator when a search is performed. The filter may contain links to parameters. Parameter values are set using the Parameters property.

(с) Подготовка поисков(c) Preparing searches

В тех ситуациях, когда один и тот же поиск должен выполняться неоднократно, возможно, только с изменениями параметров, может быть получено некоторое улучшение рабочих характеристик посредством предварительной компиляции или подготовки поиска. Это выполняется с набором методов подготовки ItemSearcher (например, метод для подготовки Find, который возвращает один или несколько Предметов, возможно, называемый «PrepareFind», и метод для подготовки Find, который возвращает проекцию, возможно, называемый «PrepareProject»). Например:In situations where the same search must be performed repeatedly, perhaps only with parameter changes, some improvement in performance can be obtained by pre-compiling or preparing the search. This is accomplished with a set of ItemSearcher preparation methods (for example, a method for preparing Find that returns one or more Items, possibly called “PrepareFind”, and a method for preparing Find, which returns a projection, possibly called “PrepareProject”). For example:

ItemSearcher searcher = …;ItemSearcher searcher = ...;

PreparedFind pf = searcher.PrepareFind();PreparedFind pf = searcher.PrepareFind ();

...

result = pf.FindAll();result = pf.FindAll ();

...

result = pf.FindAll();result = pf.FindAll ();

(d) Варианты поиска(d) Search options

Имеется ряд вариантов, которые могут быть применены к простому поиску. Они могут задаваться, например, в объекте FindOptions и передаваться методам Find. Например:There are a number of options that can be applied to a simple search. They can be set, for example, in a FindOptions object and passed to Find methods. For example:

ItemSearcher searcher = Person.GetSearcher( context );ItemSearcher searcher = Person.GetSearcher (context);

FindOptions options = new FindOptions();FindOptions options = new FindOptions ();

options.MaxResults = 10;options.MaxResults = 10;

options.SortOptions.Add( "PersonalNames.Surname", SortOrder.Ascending);options.SortOptions.Add ("PersonalNames.Surname", SortOrder.Ascending);

FindResult result = searcher.FindAll( options );FindResult result = searcher.FindAll (options);

Для удобства варианты сортировки также могут передаваться непосредственно методам Find:For convenience, sorting options can also be passed directly to Find methods:

ItemSearcher searcher = Person.GetSearcher( context );ItemSearcher searcher = Person.GetSearcher (context);

FindResult result = searcher.FindAll(FindResult result = searcher.FindAll (

new SortOption( "PersonalNames.Surname", SortOrder.Ascending ));new SortOption ("PersonalNames.Surname", SortOrder.Ascending));

Вариант DelayLoad определяет, загружаются ли значения больших двоичных свойств, когда извлекаются результаты поиска, или задерживается ли загрузка до тех пор, пока не будут выполнены ссылки на них. Вариант MaxResults определяет максимальное количество результатов, которые возвращаются. Он эквивалентен заданию TOP в запросе ЯСЗ (SQL). Он очень часто используется совместно с сортировкой.The DelayLoad variant determines whether binary large property values are loaded when the search results are retrieved, or whether the load is delayed until they are referenced. The MaxResults variant determines the maximum number of results that are returned. It is equivalent to the TOP statement in the SQL (SQL) query. It is very often used in conjunction with sorting.

Последовательность объектов SortOption может задаваться (например, используя свойство FindOptions.SortOptions). Результаты поиска будут сортироваться так, как задано первым объектом SortOption, затем, как задано вторым объектом SortOption и т.д. SortOption задает выражение поиска, которое указывает свойство, которое будет использоваться для сортировки. Выражение задает одно из следующих:The sequence of SortOption objects can be specified (for example, using the FindOptions.SortOptions property). Search results will be sorted as specified by the first SortOption object, then as specified by the second SortOption object, etc. SortOption defines a search expression that indicates the property that will be used for sorting. The expression specifies one of the following:

1) скалярное свойство в типе цели поиска;1) scalar property in the type of search target;

2) скалярное свойство во вложенном элементе, который может быть вызван из типа цели поиска посредством прохождения по свойствам с единственным значением; или2) a scalar property in a nested element that can be called from the type of the search target by going through properties with a single value; or

3) результат функции агрегирования с действительным аргументом (например, Max, применяемым к скалярному свойству во вложенном элементе, который может быть вызван из типа цели поиска посредством прохождения по свойствам с множеством значений или связи).3) the result of the aggregation function with a valid argument (for example, Max applied to a scalar property in a nested element, which can be called from the type of the search target by passing through properties with many values or relationships).

Например, предположим, что типом цели поиска является System.Storage.Contact.Person:For example, suppose the type of search target is System.Storage.Contact.Person:

1. «Birthdate» - действительный, дата рождения представляет собой скалярное свойство типа Person;1. “Birthdate” - valid, date of birth is a scalar property of type Person;

2. «PersonalNames.Surname» - недействительный, PersonalNames представляет собой свойство с множеством значений, и не использовалась функция агрегирования;2. "PersonalNames.Surname" - invalid, PersonalNames is a property with many values, and the aggregation function was not used;

3. «Count(PersonalNames)» - действительный, число PersonalNames.3. "Count (PersonalNames)" is a valid number of PersonalNames.

4. «Case(Contact.MemberOfHousehold).Household.HouseholdEAddresses.StartDate» - недействительный, использует связь и свойства с множеством значений без функции агрегирования.4. "Case (Contact.MemberOfHousehold) .Household.HouseholdEAddresses.StartDate" - invalid, uses a connection and properties with many values without an aggregation function.

5. «Max(Cast(Contact.MemberOfHousehold).Household.HouseholdEAddresses.StartDate)» - действительный, наиболее недавняя начальная дата домашнего электронного адреса.5. “Max (Cast (Contact.MemberOfHousehold) .Household.HouseholdEAddresses.StartDate)” is the valid, most recent start date for the home email address.

(3) Поток результатов предметов («FindResult»)(3) Stream of item results (“FindResult”)

ItemSearcher (например, при помощи метода FindAll) возвращает объект, который может использоваться для доступа к объектам, возвращаемым в результате поиска (например, объект «FindResult»). В Приложении С представлен листинг исходного кода класса FindResult и несколько близкородственных классов согласно их одному варианту осуществления.ItemSearcher (for example, using the FindAll method) returns an object that can be used to access objects returned from the search (for example, the FindResult object). Appendix C presents a listing of the source code for the FindResult class and several closely related classes according to one embodiment thereof.

Существуют два отдельных способа для получения результатов от объекта FindResult: использование шаблона считывателя, определенного посредством IObjectReader (и IAsyncObjectReader), и использование шаблона перечислителя, определенного посредством IEnumerable и IEnumerator. Шаблон перечислителя является стандартным в ОЯСВ (CLR) и поддерживает языковые конструкции, подобные foreach в C#. Например:There are two separate ways to get results from a FindResult object: using a reader template defined by IObjectReader (and IAsyncObjectReader), and using an enumerator template defined by IEnumerable and IEnumerator. An enumerator pattern is standard in CLR and supports language constructs like foreach in C #. For example:

ItemSearcher searcher = Person.GetSearcher( context );ItemSearcher searcher = Person.GetSearcher (context);

searcher.Filters.Add( "PersonalNames.Surname = 'Smith'");searcher.Filters.Add ("PersonalNames.Surname = 'Smith'");

FindResult result = searcher.FindAll();FindResult result = searcher.FindAll ();

foreach( Person person in result)…;foreach (Person person in result) ...;

Поддерживается шаблон считывателя, так как он делает возможным более эффективную обработку результатов посредством устранения копирования данных в некоторых случаях. Например:The reader template is supported, as it enables more efficient processing of results by eliminating data copying in some cases. For example:

ItemSearcher searcher = Person.GetSearcher( context );ItemSearcher searcher = Person.GetSearcher (context);

searcher.Filters.Add( "PersonalNames.SurName = 'Smith'");searcher.Filters.Add ("PersonalNames.SurName = 'Smith'");

FindResult result = searcher.FindAll();FindResult result = searcher.FindAll ();

while( result.Read())while (result.Read ())

{{

Person person = (Person)result.Current;Person person = (Person) result.Current;

...

}}

Кроме того, шаблон считывателя поддерживает асинхронную операцию:In addition, the reader template supports asynchronous operation:

ItemSearcher searcher = Person.GetSearcher( context );ItemSearcher searcher = Person.GetSearcher (context);

searcher.Filters.Add( "PersonalNames.SurName = 'Smith'");searcher.Filters.Add ("PersonalNames.SurName = 'Smith'");

FindResult result = searcher.FindAll();FindResult result = searcher.FindAll ();

IAsyncResult asyncResult = result.BeginRead( new AsyncCallback( MyCallback ));IAsyncResult asyncResult = result.BeginRead (new AsyncCallback (MyCallback));

void MyCallback( IAsyncResult asyncResult)void MyCallback (IAsyncResult asyncResult)

{{

if( result.EndRead( asyncResult))if (result.EndRead (asyncResult))

{{

Person person = (Person)result.Current;Person person = (Person) result.Current;

...

}}

}}

В настоящем варианте осуществления FindResult должен быть закрыт, когда он больше не нужен. Это может быть выполнено посредством вызова метода Close или использования языковых конструкций, таких как оператор using в C#. Например:In the present embodiment, FindResult should be closed when it is no longer needed. This can be accomplished by calling the Close method or using language constructs such as the using statement in C #. For example:

ItemSearcher searcher = Person.GetSearcher( context );ItemSearcher searcher = Person.GetSearcher (context);

searcher.Filters.Add( "PersonalNames.SurName = 'Smith'" );searcher.Filters.Add ("PersonalNames.SurName = 'Smith'");

using( FindResult result = searcher.FindAll())using (FindResult result = searcher.FindAll ())

{{

while( result.Read())while (result.Read ())

{{

Person person = (Person)result.Current;Person person = (Person) result.Current;

...

}}

}}

b) Интегрированная среда выполнения в работеb) Integrated runtime at work

Фиг.22 иллюстрирует интегрированную среду выполнения в работе. Интегрированная среда выполнения работает следующим образом:22 illustrates an integrated runtime in operation. The integrated runtime works as follows:

1. Приложение 350а, 350b или 350с связывается с предметом в платформе хранения.1. The application 350a, 350b or 350c communicates with an item in a storage platform.

2. Интегрированная среда 2004 создает объект 2202 ItemContext, соответствующий привязанному предмету, и возвращает его приложению.2. The 2004 Integrated Environment creates an ItemContext 2202 corresponding to the attached item and returns it to the application.

3. Приложение подает Find на этот ItemContext для получения коллекции Предметов; возвращаемая коллекция концептуально представляет собой граф 2204 объектов (вследствие связей).3. The application submits Find to this ItemContext to obtain a collection of Items; the returned collection conceptually represents a graph 2204 objects (due to relationships).

4. Приложение изменяет, удаляет и вставляет данные.4. The application modifies, deletes and inserts data.

5. Приложение сохраняет изменения посредством вызова метода Update().5. The application saves the changes by calling the Update () method.

с) Общие шаблоны программированияc) General programming patterns

В данном разделе представлено множество примеров того, как классы интегрированной среды ИПП (API) платформы хранения могут использоваться для манипулирования предметами в хранилище данных.This section provides many examples of how storage platform APIs (APIs) classes can be used to manipulate items in a data warehouse.

(1) Открытие и закрытие объектов ItemContext(1) Opening and closing ItemContext objects

Приложение получает объект ItemContext, который оно будет использовать для взаимодействия с хранилищем данных, например, посредством вызова статического метода ItemContext.Open и предоставления пути или путей, которые идентифицируют домены предметов, которые будут ассоциироваться с ItemContext. Домены Предметов ограничивают область действия поисков, выполняемых с использованием ItemContext, так что только предмет домена и предметы, содержащиеся в этом предмете, будут подвергаться поиску. Примерами являются следующие:The application receives an ItemContext object that it will use to interact with the data store, for example, by calling the static method ItemContext.Open and providing a path or paths that identify the domains of the items that will be associated with the ItemContext. Item Domains limit the scope of searches performed using the ItemContext, so that only the domain item and items contained in this item will be searched. Examples are the following:

Открыть ItemContext с совместно используемым ресурсом платформы хранения DefaultStore на локальном компьютереOpen ItemContext with the shared resource of the DefaultStore storage platform on the local computer

ItemContext ic = ItemContext.Open();ItemContext ic = ItemContext.Open ();

Открыть ItemContext с данным совместно используемым ресурсом платформы храненияOpen ItemContext with this shared storage platform resource

ItemContext ic = ItemContext.Open( @"\\myserver1\DefaultStore");ItemContext ic = ItemContext.Open (@ "\\ myserver1 \ DefaultStore");

Открыть ItemContext с предметом под совместно используемым ресурсом платформы храненияOpen ItemContext with an item under a shared platform resource

ItemContext ic = ItemContext.Open( @"\\myserver1\WinFSSpecs\api\m6");ItemContext ic = ItemContext.Open (@ "\\ myserver1 \ WinFSSpecs \ api \ m6");

Открыть ItemContext с множеством доменов предметовOpen ItemContext with multiple item domains

ItemContext ic = ItemContext.Open( @"\\myserver1\My Documents",ItemContext ic = ItemContext.Open (@ "\\ myserver1 \ My Documents",

@"\\jane1\My Documents",@ "\\ jane1 \ My Documents",

@"\\jane2\My Documents");@ "\\ jane2 \ My Documents");

Когда ItemContext больше не нужен, он должен быть закрыт.When an ItemContext is no longer needed, it should be closed.

Явное Закрытие ItemContextExplicit Closing ItemContext

ItemContext ic = ItemContext.Open();ItemContext ic = ItemContext.Open ();

...

ic.Close();ic.Close ();

Закрытие ItemContext оператором usingClosing an ItemContext with a using statement

using( ItemContext ic = ItemContext.Open())using (ItemContext ic = ItemContext.Open ())

{{

…;...;

}}

(2) Поиск объектов(2) Object Search

Согласно другому аспекту настоящего изобретения ИПП (API) платформы хранения предоставляет упрощенную модель запросов, которая дает возможность программистам приложения формировать запросы, основанные на различных свойствах предметов в хранилище данных, таким образом, который отделяет программиста приложения от подробностей языка запросов лежащего в основе процессора базы данных.According to another aspect of the present invention, the storage platform API provides a simplified query model that enables application programmers to generate queries based on various properties of items in a data warehouse, in a way that separates the application programmer from the details of the query language of the underlying database processor .

Приложения могут выполнять поиск по доменам, задаваемым тогда, когда ItemContext был открыт, используя объект ItemSearcher, возвращаемый методом ItemContext.GetSearcher. К результатам поиска обращаются с использованием объекта FindResult. Предположим следующие объявления для примеров ниже:Applications can search the domains specified when the ItemContext was opened using the ItemSearcher returned by the ItemContext.GetSearcher method. Search results are accessed using the FindResult object. Assume the following declarations for examples below:

ItemContext ic = …;ItemContext ic = ...;

ItemSearcher searcher = null;ItemSearcher searcher = null;

FindResult result = null;FindResult result = null;

Item item = null;Item item = null;

Relationship relationship = null;Relationship relationship = null;

ItemExtension itemExtension = null;ItemExtension itemExtension = null;

Базовый шаблон поиска включает в себя использование объекта ItemSearcher, извлекаемого из ItemContext посредством вызова метода GetSearcher.A basic search pattern involves using an ItemSearcher object retrieved from an ItemContext by calling the GetSearcher method.

Поиск всех предметов данного типаSearch for all items of this type

searcher = ic.GetSearcher( typeof( Person ));searcher = ic.GetSearcher (typeof (Person));

result = searcher.FindAll();result = searcher.FindAll ();

foreach( Person p in result) …;foreach (Person p in result) ...;

Поиск предметов данного типа, которые удовлетворяют фильтруSearch for items of this type that match the filter

searcher = ic.GetSearcher( typeof( Person ));searcher = ic.GetSearcher (typeof (Person));

searcher.Filters.Add( "PersonalNames.Surname = 'Smith'");searcher.Filters.Add ("PersonalNames.Surname = 'Smith'");

result = searcher.FindAll();result = searcher.FindAll ();

foreach( Person p in result) …;foreach (Person p in result) ...;

Использовать параметр в строке фильтраUse parameter in filter string

searcher = ic.GetSearcher( typeof( Person ));searcher = ic.GetSearcher (typeof (Person));

searcher.Filters.Add( "Birthdate < @Date");searcher.Filters.Add ("Birthdate <@Date");

searcher.Parameters["Date"] = someDate;searcher.Parameters ["Date"] = someDate;

result = searcher.FindAll();result = searcher.FindAll ();

foreach( Person p in result) …;foreach (Person p in result) ...;

Поиск связей данного типа и удовлетворяющих фильтруSearch for relations of this type and satisfying the filter

searcher = ic.GetSearcher( typeof( EmployeeEmployer));searcher = ic.GetSearcher (typeof (EmployeeEmployer));

searcher.Filters.Add( "StartDate <= @Date AND (EndDate >= @Date OR isnull(EndDate))");searcher.Filters.Add ("StartDate <= @Date AND (EndDate> = @Date OR isnull (EndDate))");

searcher.Parameters["Date"] = someDate;searcher.Parameters ["Date"] = someDate;

result = searcher.FindAll();result = searcher.FindAll ();

Foreach( EmployeeEmployer ee in result) …;Foreach (EmployeeEmployer ee in result) ...;

Поиск предметов со связями данного типа и удовлетворяющими фильтруSearch for items with this type of relationship and matching the filter

searcher = ic.GetSearcher( typeof( Folder));searcher = ic.GetSearcher (typeof (Folder));

searcher.Filters.Add( "MemberRelationships.Name like 'A%'"); // См. [ApiRel]searcher.Filters.Add ("MemberRelationships.Name like 'A%'"); // See [ApiRel]

result = searcher.FindAll();result = searcher.FindAll ();

Foreach( Folder f in result) …;Foreach (Folder f in result) ...;

Поиск расширений предмета данного типа и удовлетворяющих фильтруSearch for item extensions of this type and matching the filter

searcher = ic.GetSearcher( typeof( ShellExtension ));searcher = ic.GetSearcher (typeof (ShellExtension));

searcher.Filters.Add( "Keywords.Value = 'Foo'");searcher.Filters.Add ("Keywords.value = 'foo'");

result = searcher.FindAll();result = searcher.FindAll ();

foreach( ShellExtension se in result) …;foreach (ShellExtension se in result) ...;

Поиск предметов с расширениями предметов данного типа и удовлетворяющих фильтруSearch for items with extensions of items of this type and matching the filter

searcher = ic.GetSearcher( typeof( Person ));searcher = ic.GetSearcher (typeof (Person));

searcher.Filters.Add( "Extensions.Cast(@Type).Keywords.Value = 'Foo'"); // См. [ApiExt]searcher.Filters.Add ("Extensions.Cast (@Type) .Keywords.Value = 'Foo'"); // See [ApiExt]

searcher.Parameters["Type"] = typeof( ShellExtension );searcher.Parameters ["Type"] = typeof (ShellExtension);

result = searcher.FindAll();result = searcher.FindAll ();

foreach( Person p in result) …;foreach (Person p in result) ...;

(а) Варианты поиска(a) Search options

Могут быть заданы различные варианты при выполнении поиска, включая сортировку, загрузку с задержкой и ограничение количества результатов.Various options can be specified when performing a search, including sorting, delayed loading, and limiting the number of results.

Сортировка результатов поискаSort Search Results

searcher = ic.GetSearcher( typeof( Person ));searcher = ic.GetSearcher (typeof (Person));

searcher.Filters.Add( "PersonalNames.Surname = 'Smith'" );searcher.Filters.Add ("PersonalNames.Surname = 'Smith'");

SearchOptions options = new SearchOptions();SearchOptions options = new SearchOptions ();

options.SortOptions.Add( new SortOption( "Birthdate", SortOrder.Ascending ));options.SortOptions.Add (new SortOption ("Birthdate", SortOrder.Ascending));

result = searcher.FindAll( options );result = searcher.FindAll (options);

foreach( Person p in result) …;foreach (Person p in result) ...;

// Доступна краткая форма// Short form available

searcher = ic.GetSearcher( typeof( Person ));searcher = ic.GetSearcher (typeof (Person));

searcher.Filters.Add( "PersonalNames.Surname = 'Smith'" );searcher.Filters.Add ("PersonalNames.Surname = 'Smith'");

result = searcher.FindAll( new SortOption( "Birthdate", SortOrder.Ascending ));result = searcher.FindAll (new SortOption ("Birthdate", SortOrder.Ascending));

foreach( Person p in result) …;foreach (Person p in result) ...;

Ограничить количество результатовLimit the number of results

searcher= ic.GetSearcher( typeof( Person ));searcher = ic.GetSearcher (typeof (Person));

searcher.Filters.Add( "PersonalNames.Surname = 'Smith'" );searcher.Filters.Add ("PersonalNames.Surname = 'Smith'");

SearchOptions options = new SearchOptions();SearchOptions options = new SearchOptions ();

options.MaxResults = 10;options.MaxResults = 10;

result = searcher.FindAll( options );result = searcher.FindAll (options);

foreach( Person p in result) …;foreach (Person p in result) ...;

(b) FindOne и FindOnly(b) FindOne and FindOnly

В случае, когда является полезным извлечение только первого результата, особенно при задании критерия сортировки. Кроме того, как ожидается, некоторые поиски возвращают только один объект и не ожидается, что не возвращают объектов.In the case where it is useful to extract only the first result, especially when specifying the sorting criterion. Also, as expected, some searches return only one object and are not expected to return no objects.

Поиск одного объектаSingle Object Search

searcher = ic.GetSearcher( typeof( Person ));searcher = ic.GetSearcher (typeof (Person));

searcher.Filters.Add( "PersonalNames.Surname = 'Smith'" );searcher.Filters.Add ("PersonalNames.Surname = 'Smith'");

Person p = searcher.FindOne( new SortOption( "Birthdate" SortOrder.Ascending )) as Person;Person p = searcher.FindOne (new SortOption ("Birthdate" SortOrder.Ascending)) as Person;

if( p != null)…;if (p! = null) ...;

Поиск единственного объекта, который, как ожидается, всегда существуетSearch for the only object that is expected to always exist

searcher = ic.GetSearcher( typeof( Person ));searcher = ic.GetSearcher (typeof (Person));

searcher.Filters.Add( "PersonalNames[Surname = 'Smith' AND Givenname 'John']");searcher.Filters.Add ("PersonalNames [Surname = 'Smith' AND Givenname 'John']");

trytry

{{

Person p = searcher.FindOnly();Person p = searcher.FindOnly ();

…;...;

}}

catch( Exception e )catch (Exception e)

{{

…;...;

}}

(с) Краткие формы поиска по ItemContext(c) Short search forms for ItemContext

Также существует несколько сокращенных методов по ItemContext, которые делают максимально легким исполнение простых поисков.There are also some abbreviated ItemContext methods that make simple searches as easy as possible.

Поиск с использованием краткой формы ItemContext.FindAllSearch using the short form ItemContext.FindAll

result = ic.FindAll( typeof( Person ), "PersonalNames.Surname = 'Smith'" );result = ic.FindAll (typeof (Person), "PersonalNames.Surname = 'Smith'");

foreach( Person p in result ) …;foreach (Person p in result) ...;

Поиск с использованием краткой формы ItemContext.FindOneSearch using the short form ItemContext.FindOne

Person p = ic.FindOne( typeof( Person ), "PersonalNames.Surname = 'Smith'") as Person;Person p = ic.FindOne (typeof (Person), "PersonalNames.Surname = 'Smith'") as Person;

(d) Поиск по ИД (ID) или пути(d) Search by ID or path

Кроме того, Предметы, связи и расширения предметов могут извлекаться посредством предоставления их ИД (ID). Предметы также могут извлекаться по пути.In addition, Items, links, and item extensions can be retrieved by providing their ID. Items can also be retrieved along the way.

Получить предметы, связи и расширения предметов по их ИД (ID)Get items, links, and item extensions by their ID

item = ic.FindItemById( iid );item = ic.FindItemById (iid);

relationship = ic.FindRelationshipById( iid, rid );relationship = ic.FindRelationshipById (iid, rid);

itemExtension = ic.FindItemExtensionById( iid, eid );itemExtension = ic.FindItemExtensionById (iid, eid);

Получить предметы по путиGet items along the way

// Только один домен// Only one domain

item = ic.FindItemByPath( @"temp\foo.txt");item = ic.FindItemByPath (@ "temp \ foo.txt");

// Один или много доменов// One or many domains

result = ic.FindAllItemsByPath( @"temp\foo.txt");result = ic.FindAllItemsByPath (@ "temp \ foo.txt");

foreach( Item I in result) …;foreach (Item I in result) ...;

(е) Шаблон GetSearcher (f) GetSearcher Template

Имеется много мест в ИПП (API) платформы хранения, где желательно предусмотреть вспомогательный метод, который исполняет поиск в контексте другого объекта или с конкретными параметрами. Шаблон GetSearcher делает возможными такие сценарии. Существует много методов GetSearcher в ИПП (API). Каждый возвращает ItemSearcher, предварительно сконфигурированный на выполнение данного поиска. Например:There are many places in the storage platform API (API) where it is desirable to provide an auxiliary method that performs a search in the context of another object or with specific parameters. The GetSearcher template makes such scenarios possible. There are many GetSearcher methods in the API. Each returns an ItemSearcher preconfigured to perform this search. For example:

searcher = itemContext.GetSearcher();searcher = itemContext.GetSearcher ();

searcher = Person.GetSearcher();searcher = Person.GetSearcher ();

searcher = EmployeeEmployer.GetSearcherGivenEmployer( organization );searcher = EmployeeEmployer.GetSearcherGivenEmployer (organization);

searcher = person.GetSearcherForReports();searcher = person.GetSearcherForReports ();

Можно добавить дополнительные фильтры перед выполнением поиска:You can add additional filters before performing a search:

searcher = person.GetSearcherForReports();searcher = person.GetSearcherForReports ();

searcher.Filters.Add( "PersonalNames.Surname= 'Smith'" );searcher.Filters.Add ("PersonalNames.Surname = 'Smith'");

Можно выбрать, сколько хотите результатов:You can choose how many results you want:

FindResult findResult = searcher.FindAll();FindResult findResult = searcher.FindAll ();

Person person = searcher.FindOne();Person person = searcher.FindOne ();

(3) Обновление хранилища(3) Storage update

Если объект был извлечен посредством поиска, он может модифицироваться приложением, как необходимо. Новые объекты также могут создаваться и ассоциироваться с существующими объектами. Если приложение сделало все изменения, которые формируют логическую группу, приложение вызывает ItemContext.Update для обеспечения постоянства этих изменений в хранилище. Согласно еще другому аспекту ИПП (API) платформы хранения настоящего изобретения, ИПП (API) собирает изменения в предмете, сделанные программой приложения, и затем организует их в корректные обновления, требуемые процессором базы данных (или любым видом процессора хранения), на котором реализовано хранилище данных. Это делает возможным выполнение программистами приложения изменений предмета в памяти, в то же самое время оставляя сложность обновлений хранилища данных для ИПП (API).If an object was retrieved through a search, it can be modified by the application as needed. New objects can also be created and associated with existing objects. If the application has made all the changes that form the logical group, the application calls ItemContext.Update to ensure that these changes are persistent in the repository. According to another aspect of the storage platform API (API) of the present invention, the API collects changes to the subject made by the application program and then organizes them into the correct updates required by the database processor (or any kind of storage processor) on which the storage is implemented data. This makes it possible for application programmers to make changes to an item in memory, while at the same time leaving the complexity of data warehouse updates for the API.

Сохранить Изменения в Единственном ПредметеSave Changes to a Single Item

Person p = ic.FindItemById( pid ) as Person;Person p = ic.FindItemById (pid) as Person;

p.DisplayName = "foo";p.DisplayName = "foo";

p.TelephoneNumbers.Add( new TelephoneNumber( "425-555-1234"));p.TelephoneNumbers.Add (new TelephoneNumber ("425-555-1234"));

ic.Update();ic.Update ();

Сохранить Изменения во Множестве ПредметовSave Changes to Many Items

Household h1 = ic.FindItemById( hid1 ) as Household;Household h1 = ic.FindItemById (hid1) as Household;

Household h2 = ic.FindItemById( hid2 ) as Household;Household h2 = ic.FindItemById (hid2) as Household;

Person p = ic.FindItemById( pid ) as Person;Person p = ic.FindItemById (pid) as Person;

h1.MemberRelationships.Remove( p );h1.MemberRelationships.Remove (p);

h2.MemberRelationships.Add( p );h2.MemberRelationships.Add (p);

ic.Update();ic.Update ();

Создать новый ПредметCreate New Item

Folder f = ic.FindItemById( fid ) as Folder;Folder f = ic.FindItemById (fid) as Folder;

Person p = new Person();Person p = new Person ();

p.DisplayName = "foo";p.DisplayName = "foo";

f.Relationships.Add( new FolderMember( p, "foo" ));f.Relationships.Add (new FolderMember (p, "foo"));

ic.Update();ic.Update ();

// Или используя краткую форму…// Or using the short form ...

Folder f = ic.FindItemById( fid) as Folder;Folder f = ic.FindItemById (fid) as Folder;

Person p = new Person();Person p = new Person ();

p.DisplayName = "foo";p.DisplayName = "foo";

f.MemberRelationships.Add( p, "foo" );f.MemberRelationships.Add (p, "foo");

ic.Update();ic.Update ();

Удалить связи (и, возможно, Предмет цели)Remove links (and possibly Target)

searcher = ic.GetSearcher( typeof( FolderMember ));searcher = ic.GetSearcher (typeof (FolderMember));

searcher.Filters.Add( "SourceItemId=@fid" );searcher.Filters.Add ("SourceItemId = @ fid");

searcher.Filters.Add( "TargetItemId=@pid" );searcher.Filters.Add ("TargetItemId = @ pid");

searcher.Parameters.Add( "fid", fid );searcher.Parameters.Add ("fid", fid);

searcher.Parameters.Add( "pid", pid );searcher.Parameters.Add ("pid", pid);

foreach( FolderMember fm in searcher.FindAll()) fm.MarkForDelete();foreach (FolderMember fm in searcher.FindAll ()) fm.MarkForDelete ();

ic.Update();ic.Update ();

// Или используя краткую форму…// Or using the short form ...

Folder f = ic.FindItemById( fid ) as Folder;Folder f = ic.FindItemById (fid) as Folder;

f.MemberRelationships.Remove( pid );f.MemberRelationships.Remove (pid);

ic.Update();ic.Update ();

Добавить Расширение ПредметаAdd Item Extension

Item item = ic.FindItemById( iid);Item item = ic.FindItemById (iid);

MyExtension me = new MyExtension();MyExtension me = new MyExtension ();

me.Foo = "bar";me.Foo = "bar";

item.Extensions.Add( me );item.Extensions.Add (me);

ic.Update();ic.Update ();

Удалить Расширения ПредметаDelete Item Extensions

searcher = ic.GetSearcher( typeof( MyExtension ));searcher = ic.GetSearcher (typeof (MyExtension));

searcher.Filters.Add( "ItemId=@iid" );searcher.Filters.Add ("ItemId = @ iid");

searcher.Parameters.Add( "iid", iid );searcher.Parameters.Add ("iid", iid);

foreach( MyExtension me in searcher.FindAll()) me.MarkForDelete();foreach (MyExtension me in searcher.FindAll ()) me.MarkForDelete ();

ic.Update();ic.Update ();

// Или используя краткую форму…// Or using the short form ...

Item i = ic.FindItemById( iid );Item i = ic.FindItemById (iid);

i.Extensions.Remove( typeof( MyExtension ));i.Extensions.Remove (typeof (MyExtension));

ic.Update();ic.Update ();

6. Защита6. Protection

Со ссылкой на раздел II.E выше (Защита) в настоящем варианте осуществления ИПП (API) платформы хранения имеется пять методов, доступных в Item Context, для извлечения и модифицирования политики обеспечения безопасности, ассоциированной с предметом в хранилище. Ими являются:With reference to section II.E above (Security), in the present embodiment of the storage platform API (API), there are five methods available in the Item Context for retrieving and modifying the security policy associated with the item in storage. They are:

1. GetItemSecurity;1. GetItemSecurity;

2. SetItemSecurity;2. SetItemSecurity;

3. GetPathSecurity;3. GetPathSecurity;

4. SetPathSecurity;4. SetPathSecurity;

5. GetEffectiveItemSecurity.5. GetEffectiveItemSecurity.

GetItemSecurity и SetItemSecurity обеспечивают механизм для извлечения и модифицирования явного СУД (ACL), ассоциированного с предметом. Этот СУД (ACL) является независимым от путей, которые существуют к предмету, и будет в действии независимо от связей прикрепления, для которых этот предмет выступает в качестве цели. Это дает возможность администраторам делать выводы о защите предмета независимо от путей, которые существуют к предмету, если они этого желают.GetItemSecurity and SetItemSecurity provide a mechanism for retrieving and modifying the explicit ACL associated with an item. This COURT (ACL) is independent of the paths that exist to the subject, and will be in effect regardless of the attachment relationships for which the subject acts as a target. This enables administrators to draw conclusions about the protection of the subject, regardless of the paths that exist to the subject, if they wish.

GetPathSecurity и SetPathSecurity обеспечивают механизм для извлечения и модифицирования СУД (ACL), который существует в предмете вследствие связи прикрепления от другой папки. Этот СУД (ACL) состоит из СУД (ACL) различных предшественников предмета по рассматриваемому пути вместе с явным СУД (ACL), если есть, предоставляемым для этого пути. Различие между этим СУД (ACL) и СУД (ACL) в предыдущем случае заключается в том, что этот СУД (ACL) остается в действии только до тех пор, пока существует соответствующая связь прикрепления, тогда как явный СУД (ACL) предмета не зависит ни от какой связи прикрепления к предмету.GetPathSecurity and SetPathSecurity provide a mechanism for extracting and modifying the ACL that exists in an item due to an attachment link from another folder. This COURT (ACL) consists of a COURT (ACL) of various subject predecessors along the path in question along with an explicit ACL, if any, provided for that path. The difference between this COURT (ACL) and COURT (ACL) in the previous case is that this COURT (ACL) remains in effect only as long as there is a corresponding attachment relationship, while the explicit COURT (ACL) of the item is independent of from what connection attachment to the subject.

СУД (ACL), который может быть установлен на предмете при помощи SetItemSecurity и SetPathSecurity, ограничивается до наследуемых и характерных для объекта ЗУД (ACE's). Они не могут содержать никакую ЗУД (ACE), отмеченную как наследованная.The ACL, which can be set on the subject using SetItemSecurity and SetPathSecurity, is limited to inherited and characteristic of the ACE's. They cannot contain any ACE that is marked as inherited.

GetEffectiveItemSecurity извлекает основанные на различных путях СУД (ACL), а также явный СУД (ACL) на предмете. Это отражает политику авторизации, действующую на данном предмете.GetEffectiveItemSecurity retrieves the various path-based ACLs as well as the explicit ACL on the subject. This reflects the authorization policy in force on this subject.

7. Поддержка связей7. Communication support

Как описано выше, модель данных платформы хранения определяет «связи», которые дают возможность предметам быть связанными друг с другом. Когда генерируются классы данных для схемы, следующие классы получаются для каждого типа связи:As described above, the storage platform data model defines “connections” that enable objects to be connected to each other. When data classes for a schema are generated, the following classes are obtained for each type of relationship:

1. Класс, который представляет саму связь. Этот класс выводится из класса Relationship и содержит члены, характерные для типа связи.1. The class that represents the relationship itself. This class derives from the Relationship class and contains members specific to the relationship type.

2. Сильно типизированный класс «виртуальной» коллекции. Этот класс выводится из VirtualRelationshipCollection и дает возможность экземплярам связи создаваться и удаляться.2. Strongly typed class of the "virtual" collection. This class derives from VirtualRelationshipCollection and allows connection instances to be created and deleted.

В данном разделе описывается поддержка связей в ИПП (API) платформы хранения.This section describes link support in the storage platform API.

а) Базовые типы связейa) Basic types of relationships

ИПП (API) платформы хранения предусматривает несколько типов в пространстве имен System.Storage, которые формируют базу ИПП (API) связей. Ими являются:The storage platform API (API) provides several types in the System.Storage namespace that form the base of the API relationship. They are:

1. Relationship - базовый тип всех классов связей1. Relationship - the basic type of all relationship classes

2. VirtualRelationshipCollection - базовый тип для всех коллекций связей2. VirtualRelationshipCollection - the base type for all link collections

3. ItemReference, ItemIdReference, ItemPathReference - представляют типы ссылки на предмет; связи между этими типами изображены на фиг.11.3. ItemReference, ItemIdReference, ItemPathReference - represent types of links to the item; the relationship between these types is shown in Fig.11.

(1) Класс Relationship(1) Relationship class

Нижеследующее представляет собой базовый класс для классов связей.The following is a base class for link classes.

public abstract class Relationship : StoreObjectpublic abstract class Relationship: StoreObject

{{

// Создать со значениями по умолчанию.// Create with default values.

protected Relationship( ItemIDReference targetItemReference);protected Relationship (ItemIDReference targetItemReference);

// Информирует связь, что она была добавлена в коллекцию связей.// Informs the link that it has been added to the link collection.

// Объект опрашивает коллекцию с целью определения предмета// The object polls the collection to determine the item

// источника, контекста предмета и т.д.// source, subject context, etc.

internal AddedToCollection( VirtualRelationshipCollection collection );internal AddedToCollection (VirtualRelationshipCollection collection);

// ИД (ID) связи.// ID of the communication.

public RelationshipId RelationshipId { get; }public RelationshipId RelationshipId {get; }

// ИД (ID) предмета источника.// ID of the source item.

public ItemId SourceItemId { get; }public ItemId SourceItemId {get; }

// Получить предмет источника.// Get the source item.

public Item SourceItem { get; }public Item SourceItem {get; }

// Ссылка на предмет цели.// Link to the subject of the target.

public ItemIdReference TargetItemReference { get; }public ItemIdReference TargetItemReference {get; }

// Получить предмет цели (вызвать// Get the subject of the target (call

// TargetItemReference.GetItem()).// TargetItemReference.GetItem ()).

public Item TargetItem { get; }public Item TargetItem {get; }

// Определить, имеет ли ItemContext уже соединение с доменом// Determine if ItemContext already has a domain connection

// предмета цели (вызывает// target object (calls

// TargetItemReference.IsDomainConnected).// TargetItemReference.IsDomainConnected).

public bool IsTargetDomainConnected { get; }public bool IsTargetDomainConnected {get; }

// Имя предмета цели в пространстве имен. Имя должно быть// The name of the target in the namespace. Name must be

// уникальным по всем связям прикрепления предмета// unique in all attachment connections

// источника.// source.

public OptionalValue<string> Name {get; set;}public OptionalValue <string> Name {get; set;}

// Определяет, является ли это связью прикрепления или// Determines if this is an attachment relationship or

// ссылки.// links.

public OptionalValue<bool> IsOwned {get; set;}public OptionalValue <bool> IsOwned {get; set;}

}}

(2) Класс ItemReference(2) ItemReference Class

Нижеследующее представляет собой базовый класс для типов ссылки на предмет.The following is a base class for item reference types.

public abstract class ItemReference : NestedElementpublic abstract class ItemReference: NestedElement

{{

// Создать со значениями по умолчанию.// Create with default values.

protected ItemReference();protected ItemReference ();

// Возвращает ссылаемый предмет.// Returns the referenced item.

public virtual Item GetItem();public virtual Item GetItem ();

// Определяет, было ли установлено соединение с доменом// Determines if a connection has been made to the domain

// ссылаемого предмета.// referenced item.

public virtual bool IsDomainConnected();public virtual bool IsDomainConnected ();

}}

Объекты ItemReference могут идентифицировать предметы, которые существуют в хранилище, кроме хранилища, в котором постоянно находится сама ссылка на предмет. Каждый производный тип задает то, как ссылка на удаленное хранилище создается и используется. Реализации GetItem и IsDomainConnected в производных классах используют многодоменную поддержку ItemContext для загрузки предметов из необходимого домена и определения, установлено ли уже соединение с доменом.ItemReference objects can identify items that exist in the repository, except for the repository in which the reference to the item itself is constantly located. Each derived type defines how the link to the remote store is created and used. The GetItem and IsDomainConnected implementations in the derived classes use ItemContext multi-domain support to load items from the required domain and determine if a connection to the domain has already been established.

(3) Класс ItemIdReference(3) Class ItemIdReference

Нижеследующее представляет собой класс ItemIdReference - ссылку на Предмет, которая использует ИД (ID) предмета для идентификации предмета цели (целевого предмета).The following is the ItemIdReference class — a reference to an Item that uses the item ID to identify the target item (target item).

public class ItemIdReference : ItemReferencepublic class ItemIdReference: ItemReference

{{

// Строит новую ItemIdReference со значениями по// Builds a new ItemIdReference with values by

// умолчанию.// default.

public ItemIdReference();public ItemIdReference ();

// Строит новую ItemIdReference к заданному предмету.// Builds a new ItemIdReference to the given item.

// Домен, ассоциированный с Предметом, используется в// The domain associated with the Item is used in

// качестве локатора.// as a locator.

public ItemIdReference( Item item );public ItemIdReference (Item item);

// Строит новую ItemIdReference с пустым локатором и// Builds a new ItemIdReference with an empty locator and

// данным ИД (ID) предмета цели.// given the ID of the target.

public ItemIdReference( ItemId itemId );public ItemIdReference (ItemId itemId);

// Строит новую ItemIdReference с данным локатором и// Builds a new ItemIdReference with the given locator and

// значениями ИД (ID) предмета.// the values of the ID of the item.

public ItemIdReference( string locator, ItemId itemId );public ItemIdReference (string locator, ItemId itemId);

// ИД (ID) предмета цели.// ID of the target item.

public ItemId ItemId {get; set;}public ItemId ItemId {get; set;}

// Путь, идентифицирующий, что предмет WinFS, который// A path identifying that a WinFS item that

// содержит предмет цели, в своем домене. Если равен null,// contains the subject of the target in its domain. If null,

// домен, который содержит предмет, неизвестен.// the domain that contains the item is unknown.

public OptionalValue<string> Locator {get; set;}public OptionalValue <string> Locator {get; set;}

// Определяет, установлено ли соединение с доменом// Determines if a connection is made to a domain

// ссылаемого предмета.// referenced item.

public override bool IsDomainConnected();public override bool IsDomainConnected ();

// Извлекает ссылаемый предмет.// Retrieves the referenced item.

public override Item GetItem();public override Item GetItem ();

}}

GetItem и IsDomainConnected используют многодоменную поддержку ItemContext для загрузки предметов из необходимого домена и определения, было ли уже установлено соединение с доменом. Эта особенность еще не реализована.GetItem and IsDomainConnected use the multi-domain ItemContext support to load items from the required domain and determine if a connection to the domain has already been established. This feature has not yet been implemented.

(4) Класс ItemPathReference(4) Class ItemPathReference

Класс ItemPathReference представляет собой ссылку на предмет, которая использует путь для идентификации предмета цели. Код для класса следующий:The ItemPathReference class is a reference to an item that uses a path to identify the item of the target. The code for the class is as follows:

public class ItemPathReference : ItemReferencepublic class ItemPathReference: ItemReference

{{

// Строит ссылку на путь к предмету со значениями по// Builds a link to the path to the item with values by

// умолчанию.// default.

public ItemPathReference();public ItemPathReference ();

// Строит ссылку на путь к предмету без локатора и с данным// Builds a link to the path to the item without a locator and with this

// путем.// path.

public ItemPathReference( string path );public ItemPathReference (string path);

// Строит ссылку на путь к предмету с данным локатором и// Builds a link to the path to the item with the given locator and

// путем.// path.

public ItemPathReference( string locator, string path );public ItemPathReference (string locator, string path);

// Путь, идентифицирующий, что предмет WinFS, который// A path identifying that a WinFS item that

// содержит предмет цели, в своем домене.// contains the subject of the target in its domain.

public OptionalValue<string> Locator {get; set;}public OptionalValue <string> Locator {get; set;}

// Путь к предмету цели относительно домена предмета,// Path to the subject of the target relative to the domain of the subject,

// заданного локатором.// specified by the locator.

public string Path {get; set;}public string Path {get; set;}

// Определяет, было ли установлено соединение к домену// Determines if a connection has been made to the domain

// ссылаемого предмета.// referenced item.

public override bool IsDomainConnected();public override bool IsDomainConnected ();

// Извлекает ссылаемый предмет.// Retrieves the referenced item.

public override Item GetItem();public override Item GetItem ();

}}

GetItem и IsDomainConnected используют многодоменную поддержку ItemContext для загрузки предметов из необходимого домена и определения, было ли уже установлено соединение с доменом.GetItem and IsDomainConnected use the multi-domain ItemContext support to load items from the required domain and determine if a connection to the domain has already been established.

(5) Структура RelationshipId(5) RelationshipId Structure

Структура RelationshipId инкапсулирует ГУИД (GUID) ИД (ID) связи.The RelationshipId structure encapsulates the GUID of a communication ID.

public class RelationshipIdpublic class RelationshipId

{{

// Генерирует новый ГУИД (GUID) ИД (ID) связей.// Generates a new GUID (ID) links.

public static RelationshipId NewRelationshipId();public static RelationshipId NewRelationshipId ();

// Инициализирует новым ГУИД (GUID) ИД (ID) связи.// Initializes a new GUID (GUID) communication ID (ID).

public RelationshipId();public RelationshipId ();

// Инициализирует заданным ГУИД (GUID).// Initializes with the given GUID.

public RelationshipId( Guid id );public RelationshipId (Guid id);

// Инициализирует строковым представлением ГУИД (GUID).// Initializes the string representation of the GUID.

public RelationshipId( string id );public RelationshipId (string id);

// Возвращает строковое представление ГУИД (GUID) ИД (ID) связи.// Returns a string representation of the GUID of the communication ID.

public override string ToString();public override string ToString ();

// Преобразует экземпляр System.Guid в экземпляр// Convert an instance of System.Guid to an instance

// RelationshipId.// RelationshipId.

public static implicit operator RelationshipId(Guid guid);public static implicit operator RelationshipId (Guid guid);

// Преобразует экземпляр RelationshipId в экземпляр// Converts an instance of RelationshipId to an instance

// System.Guid.// System.Guid.

public static implicit operator Guid(RelationshipId relationshipId);public static implicit operator Guid (RelationshipId relationshipId);

}}

Этот размерный тип заключает в оболочку guid, так что параметры и свойства могут сильно типизироваться в качестве ИД (ID) связи. OptionalValue<RelationshipId> должен использоваться, когда ИД (ID) связи является обнуляемым. Значение Empty, такое как предоставляемое посредством System.Guid.Empty, не раскрывается. RelationshipId не может быть построено с пустым значением. Когда конструктор по умолчанию используется для создания RelationshipId, создается новый ГУИД (GUID).This dimensional type wraps guid so that parameters and properties can be strongly typed as the binding ID. OptionalValue <RelationshipId> should be used when the communication ID is nullable. An Empty value, such as that provided by System.Guid.Empty, is not expanded. RelationshipId cannot be built with an empty value. When the default constructor is used to create the RelationshipId, a new GUID is created.

(6) Класс VirtualRelationshipCollection(6) VirtualRelationshipCollection class

Класс VirtualRelationshipCollection реализует коллекцию объектов связи, которая включают в себя объекты из хранилища данных, плюс новые объекты, которые были добавлены к коллекции, но не включает объекты, которые были удалены из хранилища. Объекты заданного типа связи с данным ИД (ID) предмета источника включены в коллекцию.The VirtualRelationshipCollection class implements a collection of communication objects, which includes objects from the data store, plus new objects that were added to the collection, but do not include objects that were deleted from the store. Objects of a given type of communication with a given source object ID are included in the collection.

Он представляет собой базовый класс для класса коллекции связей, который генерируется для каждого типа связи. Этот класс может использоваться в качестве типа свойства в типе предмета источника для предоставления доступа и обеспечения легкой манипуляции данными связями предмета.It is the base class for the link collection class that is generated for each type of link. This class can be used as a property type in a source item type to provide access and provide easy manipulation of these item relationships.

Перечисление содержимого VirtualRelationshipCollection требует того, чтобы потенциально большое количество объектов связи загружалось из хранилища. Приложения должны использовать свойство Count для определения того, сколько связей может быть загружено, до того как они перечислят содержимое коллекции. Добавление и удаление объектов в/из коллекции не требует загрузки связей из хранилища.Enumerating the contents of a VirtualRelationshipCollection requires a potentially large number of link objects to be loaded from storage. Applications should use the Count property to determine how many links can be loaded before they list the contents of the collection. Adding and removing objects to / from the collection does not require loading links from the repository.

Для эффективности предпочтительно, чтобы приложения выполняли поиск связей, которые удовлетворяют конкретным критериям, вместо перечисления всех связей предмета, используя объект VirtualRelationshipCollection. Добавление объектов связи к коллекции побуждает создание представленных связей в хранилище, когда вызывается ItemContext.Update. Удаление объектов связи из коллекции вызывает удаление представленной связи в хранилище, когда вызывается ItemContext.Update. Виртуальная коллекция содержит корректный набор объектов независимо от того, добавляется/удаляется ли или нет объект связи при помощи коллекции Item.Relationships или любой другой коллекции связей этого предмета.For efficiency, it is preferable that applications search for relationships that meet specific criteria, instead of listing all the relationships of the item using the VirtualRelationshipCollection object. Adding link objects to the collection encourages the creation of the presented links in the repository when ItemContext.Update is called. Removing link objects from the collection causes the presented link to be deleted in the repository when ItemContext.Update is called. The virtual collection contains the correct set of objects regardless of whether the link object is added / removed using the Item.Relationships collection or any other link collection of this item.

Следующий код определяет класс VirtualRelationshipCollection:The following code defines the VirtualRelationshipCollection class:

public abstract class VirtualRelationshipCollection : ICollectionpublic abstract class VirtualRelationshipCollection: ICollection

{{

// Коллекция будет содержать связи заданного типа,// The collection will contain relationships of the given type,

// владельцем которых является предмет, идентифицированный// owned by the item identified

// посредством itemId.// via itemId.

protected VirtualRelationshipCollection( ItemContext itemContext,protected VirtualRelationshipCollection (ItemContext itemContext,

ItemId itemId,ItemId itemId,

Type relationshipType);Type relationshipType);

// Перечислитель будет возвращать все объекты, извлекаемые// The enumerator will return all objects retrieved

// из хранилища, без любого объекта, который с состоянием// from the repository, without any object that has a state

// Deleted, в дополнение к объектам, которые имеют состояние// Deleted, in addition to objects that have state

// Inserted.// Inserted.

public IEnumerator GetEnumerator();public IEnumerator GetEnumerator ();

// Возвращает число количества объектов связи, которые// Returns the number of the number of communication objects that

// возвращались бы перечислителем. Это число вычисляется без// would be returned by the enumerator. This number is calculated without

// необходимости извлечения всех объектов из хранилища.// need to retrieve all objects from the repository.

public int Count { get; }public int Count {get; }

// Всегда возвращает false.// Always returns false.

public bool ICollection.IsSynchronized() { get; }public bool ICollection.IsSynchronized () {get; }

// Всегда возвращает этот объект.// Always returns this object.

public object ICollection.SyncRoot { get; }public object ICollection.SyncRoot {get; }

// Выполняет поиск необходимых объектов в хранилище.// Searches for the required objects in the repository.

public void Refresh();public void Refresh ();

// Добавляет заданную связь к коллекции. Объект должен иметь// Adds the given relationship to the collection. The object must have

// состояние Constructed или Removed. Если состоянием// state Constructed or Removed. If condition

// является Constructed, оно меняется на Added. Если// is Constructed, it changes to Added. If

// состоянием является Removed, оно меняется на Retrieved// the state is Removed, it changes to Retrieved

// или Modified, что подходит. ИД (ID) предмета источника связи// or Modified, which is appropriate. ID of the subject of the communication source

// должен быть тем же самым, что и ИД (ID) предмета источника,// must be the same as the source object ID

// предоставленный тогда, когда коллекция была составлена.// provided when the collection was compiled.

protected void Add( Relationship relationship );protected void Add (Relationship relationship);

// Удаляет заданную связь из коллекции. Состоянием объекта// Removes the specified association from the collection. State of the object

// должно быть Added, Retrieved или Modified. Если// must be Added, Retrieved or Modified. If

// состоянием объекта является Added, оно будет установлено// the state of the object is Added, it will be set

// в Constructed. Если состоянием объекта является Retrieved// in Constructed. If the state of the object is Retrieved

// или Modified, оно будет установлено в Removed. ИД (ID)// or Modified, it will be installed in Removed. ID

// предмета источника связи должен быть тем же самым, что и// the subject of the communication source must be the same as

// ИД (ID) предмета источника, предоставленный тогда, когда// ID of the source item provided when

// коллекция была составлена.// collection has been compiled.

protected void Remove( Relationship relationship );protected void Remove (Relationship relationship);

// Объекты, которые были удалены из коллекции.// Objects that have been removed from the collection.

public ICollection RemovedRelationships { get; }public ICollection RemovedRelationships {get; }

// Объекты, которые были добавлены к коллекции.// Objects that have been added to the collection.

public ICollection AddedRelationships { get; }public ICollection AddedRelationships {get; }

// Объекты, которые были извлечены из хранилища. Эта// Objects that were retrieved from storage. This

// коллекция будет пустой до тех пор, пока не будет// collection will be empty until it is

// перечислена VirtualRelationshipCollection, или вызвано// listed VirtualRelationshipCollection, or called

// Refresh (получение этого значения свойства не является// Refresh (getting this property value is not

// причиной наполнения коллекции).// the reason for filling the collection).

public ICollection StoredRelationships { get; }public ICollection StoredRelationships {get; }

// Асинхронные методы.// Asynchronous methods.

public IAsyncResult BeginGetCount( IAsyncCallback callback, object state );public IAsyncResult BeginGetCount (IAsyncCallback callback, object state);

public int EndGetCount( IAsyncResult asyncResult);public int EndGetCount (IAsyncResult asyncResult);

public IAsyncResult BeginRefresh( IAsyncCallback callback, object state );public IAsyncResult BeginRefresh (IAsyncCallback callback, object state);

public void EndRefresh( IAsyncResult asyncResult);public void EndRefresh (IAsyncResult asyncResult);

}}

b) Генерируемые типы связейb) Generated link types

При генерировании классов для схемы платформы хранения класс генерируется для каждого объявления связи. В дополнение к классу, который представляет саму связь, класс коллекций связей также генерируется для каждой связи. Эти классы используются в качестве типа свойств в классах предметов источника или цели связей.When generating classes for a storage platform scheme, a class is generated for each link declaration. In addition to the class that represents the link itself, a link collection class is also generated for each link. These classes are used as the type of properties in source object classes or relationship targets.

В данном разделе описываются классы, которые генерируются с использованием ряда классов «прототипа». Т.е. при наличии заданного объявления связи описывается класс, который генерируется. Важно отметить, что имена класса, типа и конечной точки, используемые в классах прототипа, представляют собой заполнители для имен, задаваемых в схеме для связи, и не должны восприниматься буквально.This section describes the classes that are generated using a number of prototype classes. Those. if there is a given link declaration, the class that is generated is described. It is important to note that the class, type, and endpoint names used in the prototype classes are placeholders for the names specified in the schema for communication, and should not be taken literally.

(1) Генерируемые типы связей(1) Generated link types

В данном разделе описываются классы, которые генерируются для каждого типа связи. Например:This section describes the classes that are generated for each type of relationship. For example:

Relationship Name="RelationshipPrototype" BaseType="Holding">Relationship Name = " RelationshipPrototype " BaseType = "Holding">

<Source Name="Head" ItemType="Foo"/><Source Name = " Head " ItemType = "Foo"/>

<Target Name="Tail" ItemType="Bar" ReferenceType="ItemIDReference" /><Target Name = " Tail " ItemType = "Bar" ReferenceType = "ItemIDReference"/>

<Property Name="SomeProperty" Type="WinFSTypes.String" /><Property Name = "SomeProperty" Type = "WinFSTypes.String" />

</Relationship></Relationship>

При наличии этого определения связи будут генерироваться классы RelationshipPrototype и RelationshipPrototypeCollection. Класс RelationshipPrototype представляет саму связь. Класс RelationshipPrototypeCollection обеспечивает доступ к экземплярам RelationshipPrototype, которые имеют заданный предмет в качестве конечной точки источника.With this relationship definition, the RelationshipPrototype and RelationshipPrototype Collection classes will be generated. The RelationshipPrototype class represents the relationship itself. The RelationshipPrototype Collection class provides access to RelationshipPrototype instances that have the specified item as the source endpoint.

(2) Класс RelationshipPrototype(2) RelationshipPrototype class

Это прототипный класс связей для связи прикрепления, названный «HoldingRelationshipPrototype», где конечная точка источника называется «Head» и задает тип предмета «Foo», и конечная точка цели называется «Tail» и задает тип предмета «Bar». Он определяется следующим образом:This is a prototype attachment linkage class called “ HoldingRelationshipPrototype” , where the source endpoint is named “ Head ” and sets the item type to “Foo”, and the target endpoint is called “ Tail ” and sets the item type to “Bar”. It is defined as follows:

public class RelationshipPrototype: Relationshippublic class RelationshipPrototype : Relationship

{{

public RelationshipPrototype( Bar tailItem );public RelationshipPrototype (Bar tail Item);

public RelationshipPrototype( Bar tailItem, string name);public RelationshipPrototype (Bar tail Item, string name);

public RelationshipPrototype( Bar tailItem, string name, bool IsOwned );public RelationshipPrototype (Bar tail Item, string name, bool IsOwned);

public RelationshipPrototype( Bar tailItem, bool IsOwned );public RelationshipPrototype (Bar tail Item, bool IsOwned);

public RelationshipPrototype( ItemIdReference tailItemReference);public RelationshipPrototype (ItemIdReference tail ItemReference);

// Получает предмет Head (вызывает base.SourceItem).// Gets the Head object (calls base.SourceItem).

public Foo HeadItem { get; }public Foo Head Item {get; }

// Получает предмет Tail (вызывает base.TargetItem).// Get the Tail item (calls base.TargetItem).

public Bar TailItem { get; }public Bar Tail Item {get; }

// Представляет дополнительные свойства, объявленные в схеме для связи. Они// Represents additional properties declared in the schema for communication. They

// генерируются точно так, как для свойств в типе предмета или вложенного элемента.// generated exactly as for properties in the type of an object or nested element.

public string SomeProperty {get; set;}public string SomeProperty {get; set;}

public static ItemSearcher GetSearcher( ItemContext itemContext);public static ItemSearcher GetSearcher (ItemContext itemContext);

public static ItemSearcher GetSearcher( Foo headItem );public static ItemSearcher GetSearcher (Foo head Item);

public static FindResult FindAll( string filter );public static FindResult FindAll (string filter);

public static RelationshipPrototype FindOne( string filter );public static RelationshipPrototype FindOne (string filter);

public static RelationshipPrototype FindOnly( string filter );public static RelationshipPrototype FindOnly (string filter);

}}

(3) Класс RelationshipPrototypeCollection(3) RelationshipPrototypeCollection Class

Это прототипный класс, генерируемый с классом RelationshipPrototype, который поддерживает коллекцию экземпляров связей RelationshipPrototype, владельцем которых является заданный предмет. Он определяется следующим образом:This prototype class generated by the class RelationshipPrototype, which maintains a collection of copies of communications RelationshipPrototype, owned by the specified object. It is defined as follows:

public class RelationshipPrototypeCollection : VirtualRelationshipCollectionpublic class RelationshipPrototype Collection: VirtualRelationshipCollection

{{

public RelationshipPrototypeCollection( ItemContext itemContext,public RelationshipPrototype Collection (ItemContext itemContext,

ItemId headItemId);ItemId head ItemId);

public void Add( RelationshipPrototype relationship );public void Add ( RelationshipPrototype relationship);

public RelationshipPrototype Add( Bar bar );public RelationshipPrototype Add (Bar bar);

public RelationshipPrototype Add( Bar bar, string name );public RelationshipPrototype Add (Bar bar, string name);

public RelationshipPrototype Add( Bar bar, string name, bool IsOwned );public RelationshipPrototype Add (Bar bar, string name, bool IsOwned);

public RelationshipPrototype Add( Bar bar, bool IsOwned );public RelationshipPrototype Add (Bar bar, bool IsOwned);

public void Remove( RelationshipPrototype relationship );public void Remove ( RelationshipPrototype relationship);

public void Remove( Bar bar );public void Remove (Bar bar);

public void Remove( ItemId barItemId );public void Remove (ItemId barItemId);

public void Remove( RelationshipId relationshipId );public void Remove (RelationshipId relationshipId);

public void Remove( string name );public void Remove (string name);

}}

c) Поддержка связей в классе Itemc) Support for relationships in the Item class

Класс Item содержит свойство Relationships, которое обеспечивает доступ к связям, в которых этот предмет является источником связи. Свойство Relationships имеет тип RelationshipCollection.The Item class contains the Relationships property, which provides access to the relationships in which this item is the source of the relationship. The Relationships property is of type RelationshipCollection.

(1) Класс Item(1) Item class

Следующий код показывает свойства контекста связи класса Item:The following code shows the context context properties of the Item class:

public abstract class Item : StoreObjectpublic abstract class Item: StoreObject

{{

...

// Коллекция связей, в которой этот предмет является источником.// A collection of links in which this item is the source.

public RelationshipCollection Relationships {get;}public RelationshipCollection Relationships {get;}

...

}}

(2) Класс RelationshipCollection(2) RelationshipCollection class

Этот класс обеспечивает доступ к экземплярам связей, в которых данный предмет является источником связи. Он определяется следующим образом:This class provides access to instances of relationships in which the subject is the source of the relationship. It is defined as follows:

public class RelationshipCollection : VirtualRelationshipCollectionpublic class RelationshipCollection: VirtualRelationshipCollection

{{

public RelationshipCollection( ItemContext itemContext,public RelationshipCollection (ItemContext itemContext,

ItemId headItemId );ItemId head ItemId);

public void Add( Relationship relationship );public void Add (Relationship relationship);

public Relationship Add( Bar bar );public Relationship Add (Bar bar);

public Relationship Add( Bar bar, string name );public Relationship Add (Bar bar, string name);

public Relationship Add( Bar bar, string name, bool IsOwned );public Relationship Add (Bar bar, string name, bool IsOwned);

public Relationship Add( Bar bar, bool IsOwned );public Relationship Add (Bar bar, bool IsOwned);

public void Remove( Relationship relationship );public void Remove (Relationship relationship);

public void Remove( Bar bar );public void Remove (Bar bar);

public void Remove( ItemId barItemId );public void Remove (ItemId barItemId);

public void Remove( RelationshipId relationshipId );public void Remove (RelationshipId relationshipId);

public void Remove( string name );public void Remove (string name);

}}

d) Поддержка связей в выражениях поискаd) Support for relationships in search expressions

Можно задавать прохождение соединения между связями и соответствующими предметами в выражении поиска.You can specify the progress of the connection between the connections and the corresponding objects in the search expression.

(1) Прохождение от предметов к связям(1) Passage from items to links

Когда текущий контекст выражения поиска представляет собой набор предметов, соединение между предметами и экземплярами связей, где предмет является источником, может быть выполнено с использованием свойства Item.Relationships. Присоединение к связям конкретного типа может задаваться с использованием оператора Cast выражения поиска.When the current context of the search expression is a collection of items, the connection between items and link instances where the item is the source can be made using the Item.Relationships property. Joining a specific type of relationship can be specified using the Cast operator of a search expression.

Коллекции сильно типизированных связей (например, Folder.MemberRelationships) также могут использоваться в выражении поиска. Приведение к типу связи является неявным.Strongly typed link collections (e.g. Folder.MemberRelationships) can also be used in a search expression. Casting to a connection type is implicit.

Если набор связей был установлен, свойства этой связи доступны для использования в предикатах или в качестве цели проекции. При использовании для задания цели проекции будет возвращаться набор связей. Например, следующий оператор будет находить всех людей, относящихся к организации, где свойство StartDate связей имеет значение, большее или равное «1/1/2000».If a set of relationships has been established, the properties of this relationship are available for use in predicates or as a projection target. When used to set a projection target, a set of relationships will be returned. For example, the following statement will find all people in the organization where the StartDate property of the links has a value greater than or equal to “1/1/2000”.

FindResult result = Person.FindAll( context,FindResult result = Person.FindAll (context,

"Relationships.Cast(Contact.EmployeeOfOrganization).StartDate > '1/1/2000'");"Relationships. Cast (Contact.EmployeeOfOrganization). StartDate>'1/1/2000'");

Если тип Person имеет свойство EmployerContext типа EmployeeSideEmployerEmployeeRelationships (генерируемый для типа связей EmployeeEmployer), это может быть записано как:If the Person type has an EmployerContext property of the EmployeeSideEmployerEmployeeRelationships type (generated for the EmployeeEmployer association type), this can be written as:

FindResult result = Person.FindAll( context,FindResult result = Person.FindAll (context,

"EmployerRelationships.StartDate > '1/1/2000'" );"EmployerRelationships.StartDate> '1/1/2000'");

(2) Прохождение от связей к предметам(2) Passage from links to objects

Когда текущий контекст выражения поиска представляет собой набор связей, прохождение соединения от связи к любой конечной точки связи может выполняться посредством задания имени конечной точки. Если был установлен набор относящихся предметов, свойства этих предметов являются доступными для использования в предикатах или в качестве цели проекции. При использовании для задания цели проекции будет возвращаться набор предметов. Например, следующий оператор будет находить все связи EmployeeOfOrganization (независимо от организации), где фамилией служащего является имя «Smith».When the current context of the search expression is a set of links, the passage of the connection from the link to any endpoint of the link can be performed by specifying the name of the endpoint. If a set of related objects has been installed, the properties of these objects are available for use in predicates or as a projection target. When used to set a projection target, a set of items will be returned. For example, the following statement will find all EmployeeOfOrganization relationships (regardless of organization), where the employee’s last name is Smith.

FindResult result = EmployeeOfOrganization.FindAll( context,FindResult result = EmployeeOfOrganization.FindAll (context,

"Employee.PersonalNames[SurName='Smith']");" Employee .PersonalNames [SurName = 'Smith']");

Оператор Cast выражения поиска может использоваться для фильтрации типа предмета конечной точки. Например, чтобы найти все экземпляры связи MemberOfFolder, где членом является предмет Person с фамилией «Smith»:The Cast operator of a search expression can be used to filter the type of an endpoint item. For example, to find all instances of the MemberOfFolder relationship, where the member is Person with the last name “Smith”:

FindResult result = MemberOfFolder.FindAll( context,FindResult result = MemberOfFolder.FindAll (context,

"Member.Cast(Contact.Person).PersonalNames[Surname='Smith']");"Member.Cast (Contact.Person) .PersonalNames [Surname = 'Smith']");

(3) Объединение прохождения связи(3) Combining communications

Предыдущие два шаблона, прохождение от предметов к связям и от связей к предметам, могут объединяться для достижения сколь угодно сложных прохождений. Например, чтобы найти все организации со служащим, который имеет фамилию «Smith»:The previous two patterns, passing from objects to connections and from connections to objects, can be combined to achieve arbitrarily complex walkthroughs. For example, to find all organizations with an employee who has the last name "Smith":

FindResult result = Organization.FindAll( context,FindResult result = Organization.FindAll (context,

"EmployeeRelationships." +"EmployeeRelationships." +

"Employee." +"Employee." +

"PersonalNames[SurName = 'Smith']");"PersonalNames [SurName = 'Smith']");

Пример ниже находит все предметы Person, представляющие людей, которые живут в семье, которая находится в районе «New York» (TODO: это больше не поддерживается… какая альтернатива).The example below finds all Person objects representing people who live in a family located in the New York area (TODO: this is no longer supported ... what an alternative).

FindResult result = Person.FindAll( context,FindResult result = Person.FindAll (context,

"Relationships.Cast(Contact.MemberOfHousehold)." +"Relationships.Cast (Contact.MemberOfHousehold)." +

"Household." +"Household." +

"Relationships.Cast(Contact.LocationOfHousehold)." +"Relationships.Cast (Contact.LocationOfHousehold)." +

"MetropolitonRegion = 'New York'");"MetropolitonRegion = 'New York'");

е) Примеры использования поддержки связейe) Examples of using linking support

Нижеследующее представляет собой примеры того, как поддержка связей в ИПП (API) платформы хранения может использоваться для манипулирования связями. Для примеров ниже предположим следующие объявления:The following are examples of how communications support in a storage platform API can be used to manipulate communications. For the examples below, suppose the following declarations:

ItemContext ic =…;ItemContext ic = ...;

ItemId fid = …;// ИД (ID) предмета папкиItemId fid = ...; // ID of the folder item

Folder folder = Folder.FindById( ic, fid );Folder folder = Folder.FindById (ic, fid);

ItemId sid = …; // ИД (ID) предмета источника.ItemId sid = ...; // ID of the source item.

Item source = Item.FindById( ic, sid );Item source = Item.FindById (ic, sid);

ItemId tid = …; // ИД (ID) предмета цели.ItemId tid = ...; // ID of the target item.

Item target = Item.FindById( ic, tid );Item target = Item.FindById (ic, tid);

ItemSearcher searcher = null;ItemSearcher searcher = null;

(1) Поиск связей(1) Search for links

Можно выполнять поиск связей источника или цели. Фильтры могут использоваться для выбора связей заданного типа и которые имеют данные значения свойств. Фильтры также могут использоваться для выбора связей, основываясь на относящемся типе предмета или значениях свойств. Например, могут выполняться следующие поиски:You can search for source or target relationships. Filters can be used to select relationships of a given type and which have given property values. Filters can also be used to select relationships based on the related item type or property values. For example, the following searches may be performed:

Все связи, где данный предмет является источникомAll communications where this item is the source

searcher = Relationship.GetSearcher( folder );searcher = Relationship.GetSearcher (folder);

foreach( Relationship relationship in searcher.FindAll())…;foreach (Relationship relationship in searcher.FindAll ()) ...;

Все связи, где данный предмет является источником, который имеет имя, которое соответствует «А%»All communications where this item is a source that has a name that matches “A%”

searcher = Relationship.GetSearcher( folder );searcher = Relationship.GetSearcher (folder);

searcher.Filters.Add( "Name like 'A%'");searcher.Filters.Add ("Name like 'A%'");

foreach( Relationship relationship in searcher.FindAll() )…;foreach (Relationship relationship in searcher.FindAll ()) ...;

Все связи FolderMember, где данный предмет является источникомAll communications of FolderMember where this item is the source

searcher = FolderMember.GetSearcher( folder );searcher = FolderMember.GetSearcher (folder);

foreach( FolderMember folderMember in searcher.FindAll())…;foreach (FolderMember folderMember in searcher.FindAll ()) ...;

Все связи FolderMember, где данный предмет является источником и имя, подобное «А%»All communications of FolderMember, where the given subject is a source and a name similar to "A%"

searcher = FolderMember.GetSearcher( folder );searcher = FolderMember.GetSearcher (folder);

searcher.Filters.Add( "Name like 'A%'");searcher.Filters.Add ("Name like 'A%'");

foreach( FolderMember folderMember in searcher.FindAll())…;foreach (FolderMember folderMember in searcher.FindAll ()) ...;

Все связи FolderMember, где предметом цели является PersonAll FolderMember connections where the subject of the target is Person

searcher = FolderMember.GetSearcher( folder );searcher = FolderMember.GetSearcher (folder);

searcher.Filters.Add( "MemberItem.Cast(Person)" );searcher.Filters.Add ("MemberItem.Cast (Person)");

foreach( FolderMember folderMember in searcher.FindAll())…;foreach (FolderMember folderMember in searcher.FindAll ()) ...;

Все связи FolderMember, где предметом цели является Person с фамилией «Smith»All communications of FolderMember, where the subject of the target is Person with the surname “Smith”

searcher = FolderMember.GetSearcher( folder );searcher = FolderMember.GetSearcher (folder);

searcher.Filters.Add( "MemberItem.Cast(Person).PersonalNames.Surname='Smith'" );searcher.Filters.Add ("MemberItem.Cast (Person) .PersonalNames.Surname = 'Smith'");

foreach( FolderMember folderMember in searcher.FindAll())…;foreach (FolderMember folderMember in searcher.FindAll ()) ...;

В дополнение к ИПП (API) GetSearcher, показанном выше, каждый класс связей поддерживает статические ИПП (API) FindAll, FindOne и FindOnly. Кроме того, тип связей может задаваться при вызове ItemContext.GetSearcher, ItemContext.FindAll, ItemContext.FindOne или ItemContext.FindOnly.In addition to the GetSearcher APIs shown above, each link class supports the FindAll, FindOne, and FindOnly static APIs. In addition, the type of links can be specified when calling ItemContext.GetSearcher, ItemContext.FindAll, ItemContext.FindOne or ItemContext.FindOnly.

(2) Навигация от связи к предметам источника и цели(2) Navigation from communication to source and target objects

Если объект связи был извлечен посредством поиска, можно выполнять «навигацию» к предмету цели или источника. Базовый класс связей предусматривает свойства SourceItem и TargetItem, которые возвращают объект Item. Генерируемый класс связей предусматривает эквивалентные сильно типизированные и именованные свойства (например, FolderMember.FolderItem и FolderMember.MemberItem). Например:If the communication object was retrieved by searching, you can "navigate" to the subject of the target or source. The base relationship class provides the SourceItem and TargetItem properties that return an Item object. The generated link class provides equivalent strongly typed and named properties (e.g., FolderMember.FolderItem and FolderMember.MemberItem). For example:

Выполнить навигацию к предмету источника и цели для связи с именем «Foo»Navigate to the source item and target to associate with the name “Foo”

searcher = Relationship.GetSearcher();searcher = Relationship.GetSearcher ();

searcher.Filters.Add( "Name='Foo'" );searcher.Filters.Add ("Name = 'Foo'");

foreach( Relationship relationship in searcher.FindAll())foreach (Relationship relationship in searcher.FindAll ())

{{

Item source = relationship.SourceItem;Item source = relationship.SourceItem;

Item target = relationship.TargetItem;Item target = relationship.TargetItem;

}}

Выполнить навигацию к предмету целиNavigate to a target item

searcher = FolderMember.GetSearcher( folder );searcher = FolderMember.GetSearcher (folder);

searcher.Filters.Add( "Name like 'A%'" );searcher.Filters.Add ("Name like 'A%'");

foreach( FolderMember folderMember in searcher.FindAll() )foreach (FolderMember folderMember in searcher.FindAll ())

{{

Item member = folderMember.TargetItem;Item member = folderMember.TargetItem;

...

}}

Навигация к предмету цели работает, даже если предмет цели не находится в домене, где была обнаружена связь. В таких случаях ИПП (API) платформы хранения открывает соединение к домену цели, когда необходимо. Приложения могут определить, потребуется ли соединение перед извлечением предмета цели.Navigation to the target item works even if the target item is not in the domain where the connection was detected. In such cases, the storage platform API (API) opens a connection to the target domain when necessary. Applications can determine if a connection is required before retrieving the target item.

Проверить предмет цели в неприсоединенном доменеVerify Target in an Unconnected Domain

searcher = Relationship.GetSearcher( source );searcher = Relationship.GetSearcher (source);

foreach( Relationship relationship in searcher.FindAll())foreach (Relationship relationship in searcher.FindAll ())

{{

if( relationship.IsTargetDomainConnected)if (relationship.IsTargetDomainConnected)

{{

Item member = relationship.TargetItem;Item member = relationship.TargetItem;

...

}}

}}

(3) Навигация от предметов источника к связям(3) Navigation from source items to links

При наличии объекта предмета можно выполнять навигацию к связям, для которых этот предмет является источником без выполнения явного поиска. Это выполняется с использованием свойства коллекции Item.Relationships или сильно типизированного свойства коллекции, такого как Folder.MemberRelationships. От связи можно выполнять навигацию к предмету цели. Такая навигация работает, даже если предмет цели не находится в домене цели, ассоциированном с ItemContext предмета источника, включая тот случай, когда предмет цели не находится в этом же хранилище, что и предмет цели. Например:If you have an item’s object, you can navigate to the links for which the item is the source without performing an explicit search. This is accomplished using the collection property Item.Relationships or a strongly typed collection property such as Folder.MemberRelationships. From communication, you can navigate to the target item. Such navigation works even if the target is not in the target domain associated with the ItemContext of the source, including the case when the target is not in the same store as the target. For example:

Выполнить навигацию от Предмета Источника к Связи к Предметам ЦелиNavigate from a Source Item to a Link to Target Items

Console.WriteLine( "Предмет {0} является источником следующих связей:", source.ItemId);Console.WriteLine ("The subject {0} is the source of the following relationships:", source.ItemId);

foreach( Relationship relationship in source.Relationships)foreach (Relationship relationship in source.Relationships)

{{

Item target = relationship.TargetItem;Item target = relationship.TargetItem;

Console.WriteLine(" {0} ==> {1}", relationship.RelationshipId, target.ItemId );Console.WriteLine ("{0} ==> {1}", relationship.RelationshipId, target.ItemId);

}}

Выполнить навигацию от Предмета Папки к Связям Foldermember к Предметам ЦелиNavigate from Folder Subject to Foldermember Links to Target Subjects

Console.WriteLine( "Предмет {0} является источником следующих связей:", folder.ItemId );Console.WriteLine ("The subject {0} is the source of the following links:", folder.ItemId);

foreach( FolderMember folderMember in folder.MemberRelationships )foreach (FolderMember folderMember in folder.MemberRelationships)

{{

Item target = folderMember.GetMemberItem();Item target = folderMember.GetMemberItem ();

Console.WriteLine(" {0} ==> {1}", folderMember.RelationshipId, target.ItemId );Console.WriteLine ("{0} ==> {1}", folderMember.RelationshipId, target.ItemId);

}}

Предмет может иметь многие связи, поэтому приложения должны быть осторожны при перечислении коллекции связей. В общем, должен использоваться поиск для идентификации конкретных связей, представляющих интерес, вместо перечисления всей коллекции. Все же, если основанная на коллекции модель программирования для связей является достаточно ценной и предметы со многими связями в достаточном количестве, то обосновывается опасность неправильного использования разработчиком. Приложения могут проверять количество связей в коллекции и использовать другую модель программирования, если необходимо. Например:An item can have many links, so applications should be careful when listing a collection of links. In general, a search should be used to identify specific relationships of interest, rather than listing the entire collection. Nevertheless, if the collection-based programming model for links is valuable enough and items with many links in sufficient quantity, then the danger of improper use by the developer is justified. Applications can check the number of links in the collection and use a different programming model, if necessary. For example:

Проверить размер коллекции связейCheck link collection size

if( folder.MemberRelationships.Count > 1000 )if (folder.MemberRelationships.Count> 1000)

{{

Console.WriteLine( "Слишком много связей!" );Console.WriteLine ("Too many links!");

}}

elseelse

{{

...

}}

Коллекции связей, описанные выше, являются «виртуальными» в том смысле, что они фактически не заполняются объектами, которые представляют каждую связь, если только приложение не предпринимает попытку выполнить перечисление коллекции. Если коллекция перечисляется, результаты отражают то, что находится в хранилище, плюс то, что было добавлено приложением, но еще не сохранено, но не любые связи, которые были удалены приложением, но не сохранены.The link collections described above are “virtual” in the sense that they are not actually populated with objects that represent each link, unless the application attempts to enumerate the collection. If the collection is listed, the results reflect what is in the repository, plus what was added by the application but not yet saved, but not any links that were deleted by the application but not saved.

(4) Создание связей (и предметов)(4) Creating links (and items)

Новые связи создаются посредством создания объекта связи, добавления его в коллекцию связей в предмете источника и обновления ItemContext. Чтобы создать новый предмет, должна быть создана связь прикрепления или внедрения. Например:New links are created by creating a link object, adding it to the link collection in the source item and updating the ItemContext. To create a new item, an attachment or embedment relationship must be created. For example:

Добавить новый предмет в существующую папкуAdd a new item to an existing folder

Bar bar = new Bar();Bar bar = new Bar ();

folder.Relationships.Add( new FolderMember( bar, "name"));folder.Relationships.Add (new FolderMember (bar, "name"));

ic.Update();ic.Update ();

// Или// Or

Bar bar = new Bar();Bar bar = new Bar ();

folder.MemberRelationships.Add( new FolderMember( bar, "name"));folder.MemberRelationships.Add (new FolderMember (bar, "name"));

ic.Update();ic.Update ();

// Или// Or

Bar bar = new Bar();Bar bar = new Bar ();

folder.MemberRelationships.Add( bar, name );folder.MemberRelationships.Add (bar, name);

ic.Update();ic.Update ();

Добавить существующий предмет в существующую папкуAdd existing item to existing folder

folder.MemberRelationships.Add( target, "name" );folder.MemberRelationships.Add (target, "name");

ic.Update();ic.Update ();

Добавить существующий предмет в новую папкуAdd existing item to new folder

Folder existingFolder = ic.FindItemById( fid ) as Folder;Folder existingFolder = ic.FindItemById (fid) as Folder;

Folder newFolder = new Folder();Folder newFolder = new Folder ();

existingFolder.MemberRelationships.Add( newFolder, "a name" );existingFolder.MemberRelationships.Add (newFolder, "a name");

newFolder.MemberRelationships.Add( target, "a name" );newFolder.MemberRelationships.Add (target, "a name");

ic.Update();ic.Update ();

Добавить новый предмет в новую папкуAdd new item to new folder

Folder existingFolder = ic.FindItemById( fid ) as Folder;Folder existingFolder = ic.FindItemById (fid) as Folder;

Folder newFolder = new Folder();Folder newFolder = new Folder ();

existingFolder.MemberRelationships.Add( newFolder, "a name" );existingFolder.MemberRelationships.Add (newFolder, "a name");

Bar bar = new Bar();Bar bar = new Bar ();

newFolder.MemberRelationships.Add( bar, "a name" );newFolder.MemberRelationships.Add (bar, "a name");

ic.Update();ic.Update ();

(5) Удаление связей (и предметов)(5) Removing links (and items)

Удалить связь прикрепленияRemove attachment link

// Если предмет источника и ИД (ID) связей известны …// If the source item and the link ID are known ...

RelationshipId rid = …;RelationshipId rid = ...;

Relationship r = ic.FindRelationshipById( fid, rid );Relationship r = ic.FindRelationshipById (fid, rid);

r.MarkForDelete;r.MarkForDelete;

ic.Update();ic.Update ();

// Иначе …// Otherwise ...

folder.MemberRelationships.Remove( target );folder.MemberRelationships.Remove (target);

ic.Update();ic.Update ();

8. «Расширение» ИПП (API) платформы хранения8. “Extension” of the storage platform API (API)

Как отмечено выше, каждая схема платформы хранения приводит к набору классов. Эти классы имеют стандартные методы, такие как Find*, и также имеют свойства для получения и установки значений полей. Эти классы и связанные с ними методы образуют основу ИПП (API) платформы хранения.As noted above, each storage platform schema leads to a set of classes. These classes have standard methods such as Find *, and also have properties for getting and setting field values. These classes and their associated methods form the basis of the storage platform API.

а) Методы поведения доменаa) Domain behavior methods

В дополнение к этим стандартным методам каждая схема имеет набор характерных для домена методов для этого. Изобретатели называют их методами поведения доменов. Например, некоторыми из методов поведения доменов в схеме Contact являются:In addition to these standard methods, each circuit has a set of domain-specific methods for this. Inventors call them domain behavior methods. For example, some of the domain behavior methods in the Contact schema are:

- Является ли адрес электронной почты действительным?- Is the email address valid?

- Для данной папки получить коллекцию всех членов папки.- For this folder, get a collection of all members of the folder.

- Для данного ИД (ID) предмета получить объект, представляющий этот предмет.- For a given item ID, get the object representing this item.

- Для данного Person получить его оперативное состояние.- For a given Person, get his operational status.

- Вспомогательные функции для создания нового контакта или временного контакта.- Helper functions to create a new contact or temporary contact.

- И т.п.- Etc.

Важно отметить, что, хотя изобретатели делают различие между «стандартными» методами поведения (Find* и т.д.) и методами поведения доменов, они просто выглядят как методы для программиста. Различие между этими методами заключается в том, что стандартные методы поведения генерируются автоматически из файлов схемы инструментальными средствами периода проектирования ИПП (API) платформы хранения, тогда как методы поведения доменов жестко программируются.It is important to note that while inventors make a distinction between “standard” behavior methods (Find *, etc.) and domain behavior methods, they just look like methods for a programmer. The difference between these methods is that standard behaviors are automatically generated from the schema files by the tools of the storage platform API (API) design period, while domain behaviors are hard-coded.

По своей природе эти методы поведения доменов должны создаваться вручную. Это приводит к практической проблеме: первоначальная версия С# требует, чтобы вся реализация класса была внутри одного файла. Таким образом, это приводит к необходимости редактирования файлов автоматически генерируемых классов, чтобы добавить методы поведения доменов. Само по себе это может быть проблемой.By their nature, these domain behaviors must be created manually. This leads to a practical problem: the initial version of C # requires that the entire implementation of the class be inside a single file. Thus, this makes it necessary to edit files of automatically generated classes in order to add domain behavior methods. This in itself can be a problem.

Особенность, названная частичные классы, была введена в C# для проблем, таких как эти. По существу, частичный класс позволяет реализации класса охватывать множество файлов. Частичный класс представляет собой то же, что и регулярный класс, за исключением того, что его объявлению предшествует частичное ключевое слово:A feature called partial classes has been introduced in C # for problems such as these. Essentially, a partial class allows class implementations to span multiple files. A partial class is the same as a regular class, except that its declaration is preceded by a partial keyword:

partial public class Person : DerivedItemBasepartial public class Person: DerivedItemBase

{{

// реализация// implementation

}}

Теперь методы поведения домена для Person могут быть помещены в другой файл, подобно этому:Now the domain behavior methods for Person can be placed in another file, like this:

partial public class Personpartial public class Person

{{

public EmailAddress PrimaryEmailAddresspublic EmailAddress PrimaryEmailAddress

{{

get {/*реализация*/}get {/ * implementation * /}

}}

}}

b) Дополнительные методы поведенияb) Additional behaviors

Классы данных с методами поведения доменов образуют основу, на которой создают разработчики приложений. Однако не является ни возможным, ни желательным, чтобы классы данных раскрывали любой потенциальный метод поведения, относящийся к этим данным. Платформа хранения позволяет разработчику создавать на базовой функциональной возможности, предлагаемой посредством ИПП (API) платформы хранения. Базовым шаблоном здесь является запись класса, методы которого принимают один или несколько классов платформы хранения в качестве параметров. Например, дополнительные классы для отправки сообщения электронной почты с использованием Microsoft Outlook или с использованием Microsoft Windows Messenger могут быть такими, которые приведены ниже:Data classes with domain behavior methods form the foundation on which application developers create. However, it is neither possible nor desirable for the data classes to reveal any potential behavior method related to that data. The storage platform allows the developer to build on the basic functionality offered through the storage platform API. The basic template here is a class entry whose methods take one or more classes of the storage platform as parameters. For example, additional classes for sending e-mail using Microsoft Outlook or using Microsoft Windows Messenger may be as follows:

MailMessage m = MailMessage.FindOne(…);MailMessage m = MailMessage.FindOne (...);

OutlookEMailServices.SendMessage(m);OutlookEMailServices.SendMessage (m);

Person p = Person.FindOne(…);Person p = Person.FindOne (...);

WindowsMessagerServices m = new WindowsMessagerServices(p);WindowsMessagerServices m = new WindowsMessagerServices (p);

m.MessageReceived += new MessageReceivedHandler( f );m.MessageReceived + = new MessageReceivedHandler (f);

m.SendMessage("Hello");m.SendMessage ("Hello");

Эти дополнительные классы могут регистрироваться в платформе хранения. Данные регистрации ассоциируются с метаданными схемы, которые платформа хранения поддерживает для каждого установленного типа платформы хранения. Эти метаданные хранятся в качестве предметов платформы хранения и могут быть запрошены.These additional classes can be registered on the storage platform. Registration data is associated with schema metadata that the storage platform supports for each installed type of storage platform. This metadata is stored as storage platform items and may be requested.

Регистрация дополнительных классов представляет собой мощную особенность; например, она делает возможным следующий сценарий: Щелчок правой кнопкой мыши на объекте Person в проводнике Оболочки и набор допустимых действий может быть выведен из дополнительных классов, зарегистрированных для Person.Registration of additional classes is a powerful feature; for example, it makes the following scenario possible: Right-clicking on a Person object in the Shell Explorer and a set of valid actions can be deduced from additional classes registered for Person.

с) Дополнительные методы поведения в качестве поставщиков службc) Additional behaviors as service providers

В настоящем варианте осуществления ИПП (API) платформы хранения предусматривает механизм, посредством которого дополнительные классы могут регистрироваться как «службы» для данного типа. Это позволяет приложению установить и получить поставщиков служб (= дополнительные классы) данного типа. Дополнительные классы, желающие использовать этот механизм, должны реализовывать общеизвестный интерфейс; например:In the present embodiment, the storage platform API (API) provides a mechanism by which additional classes can be registered as “services” for a given type. This allows the application to install and obtain service providers (= additional classes) of this type. Additional classes that wish to use this mechanism must implement a well-known interface; eg:

interface IChatServicesinterface IChatServices

{{

void SendMessage(string msg);void SendMessage (string msg);

event MessageReceivedHandler MessageReceived;event MessageReceivedHandler MessageReceived;

}}

class WindowsMessengerServices: IChatServicesclass WindowsMessengerServices: IChatServices

{{

...

}}

class YahooMessengerServices: IChatServicesclass YahooMessengerServices: IChatServices

{{

...

}}

Все классы данных ИПП (API) платформы хранения реализуют интерфейс ICachedServiceProvider. Этот интерфейс расширяет интерфейс System.IServiceProvider следующим образом:All storage platform API data classes (APIs) implement the ICachedServiceProvider interface. This interface extends the System.IServiceProvider interface as follows:

interface ICachedServiceProvider: System.IServiceProviderinterface ICachedServiceProvider: System.IServiceProvider

{{

void SetService(System.Type type, Object provider);void SetService (System.Type type, Object provider);

void RemoteService(System.Type type);void RemoteService (System.Type type);

}}

Используя этот интерфейс, приложения могут установить экземпляр поставщика служб, а также запросить поставщика служб конкретного типа.Using this interface, applications can install an instance of a service provider and also request a specific type of service provider.

Чтобы поддерживать этот интерфейс, класс данных платформы хранения сопровождает хэш-таблицу поставщиков служб с ключом по типу. Когда запрашивается поставщик служб, реализация сначала выполняет поиск в хэш-таблице для проверки, был ли задан поставщик служб заданного типа. Если не был, используется зарегистрированная инфраструктура поставщика служб для идентификации поставщика служб заданного типа. Затем создается экземпляр этого поставщика, добавляется в хэш-таблицу и возвращается. Отметьте, что также возможно, что совместно используемый метод класса данных запрашивает поставщика служб и направляет операцию этому поставщику. Например, это может использоваться для предоставления метода Send класса сообщений почты, который использует систему электронной почты, заданную пользователем.To support this interface, the storage platform data class maintains a hash table of service providers with a key of type. When a service provider is requested, the implementation first searches the hash table to check whether a service provider of the specified type has been specified. If not, the registered service provider infrastructure is used to identify the service provider of the specified type. Then an instance of this provider is created, added to the hash table and returned. Note that it is also possible that the shared data class method queries the service provider and directs the operation to that provider. For example, this can be used to provide the Send method of a mail message class that uses a user-defined email system.

9. Интегрированная среда периода проектирования9. Integrated design period environment

В данном разделе описывается то, как Схема платформы хранения превращается в классы ИПП (API) платформы хранения на клиенте и классы ОПТ (UDT) на сервере согласно настоящему варианту осуществления изобретения. Схема на фиг.24 изображает участвующие компоненты.This section describes how the Storage Platform Schema is transformed into Client Storage Platform APIs and Storage Classes (UDT) on the server according to the present embodiment. The diagram in FIG. 24 shows the components involved.

Со ссылкой на фиг.24, типы в схеме содержатся в РЯР (XML)-файле (блок 1). Этот файл также содержит ограничения уровня поля и уровня предмета, ассоциированные со схемой. Генератор (xfs2cs.exe - блок 2) Класса платформы хранения принимает этот файл и генерирует частичные классы для ОПТ (UDT) (блок 5) хранилища и частичные классы для классов (блок 3) клиента. Для каждого домена схемы существуют дополнительные методы, которые изобретатели называют методами поведения доменов. Существуют методы поведения доменов, которые имеют смысл на хранилище (блок 7), на клиенте (блок 6) и в обоих местах (блок 4). Код в блоках 4, 6 и 7 пишется вручную (не генерируется автоматически). Частичные классы в блоках 3, 4 и 6 вместе образуют полную реализацию классов для классов доменов ИПП (API) платформы хранения. Блоки 3, 4 и 6 компилируются (блок 8), формируя классы ИПП (API) платформы хранения - блок 11 (фактически, ИПП (API) платформы хранения представляет собой результат компиляции блоков 3, 4 и 6, которые являются следствием всех начальных доменов схемы). В дополнение к классам доменов также существуют дополнительные классы, которые реализуют дополнительный метод поведения. Эти классы используют один или несколько классов в одном или нескольких доменах схемы. Это представлено блоком 10. Частичные классы в блоках 4, 5 и 7 вместе формируют полную реализацию классов для классов ОПТ (UDT) сервера. Блоки 4, 5 и 7 компилируются (блок 9), формируя сборку ОПТ (UDT) на стороне сервера - блок 12 (фактически, сборка ОПТ (UDT) на стороне сервера представляет собой результат компилятора плюс компиляции блоков 4, 5 и 7, которые являются результатом всех начальных доменов схемы). Модуль (блок 13) Генератора команд динамичной библиотеки данных (ДБД; DDL) принимает сборку (блок 12) ОПТ (UDT) и файл (блок 1) Схемы и устанавливает их на хранилище данных. Этот процесс задействует, среди прочих вещей, генерирование таблиц и представлений для типов в каждой схеме.With reference to FIG. 24, the types in the schema are contained in a .pdf (XML) file (block 1). This file also contains the field level and item level restrictions associated with the circuit. The generator (xfs2cs.exe - block 2) of the Storage Platform Class accepts this file and generates partial classes for the opt-in (UDT) (block 5) of the storage and partial classes for the classes (block 3) of the client. For each schema domain, there are additional methods that the inventors call domain behavior methods. There are domain behavior methods that make sense on the repository (block 7), on the client (block 6), and in both places (block 4). The code in blocks 4, 6 and 7 is written manually (not automatically generated). The partial classes in blocks 3, 4, and 6 together form the full implementation of the classes for the API classes of the storage platform domains. Blocks 3, 4, and 6 are compiled (block 8) to form storage platform API classes - block 11 (in fact, the storage platform API (API) is the result of compiling blocks 3, 4, and 6, which are the result of all the initial domains of the scheme ) In addition to domain classes, there are additional classes that implement an additional behavior method. These classes use one or more classes in one or more schema domains. This is represented by block 10. The partial classes in blocks 4, 5, and 7 together form the complete implementation of the classes for the classes of the opt-in (UDT) server. Blocks 4, 5, and 7 are compiled (block 9), forming a server-side OPT assembly (UDT) - block 12 (in fact, server-side OPT assembly (UDT) is the result of the compiler plus compiling blocks 4, 5 and 7, which are result of all the initial domains of the scheme). The module (block 13) of the Dynamic Data Library Command Generator (DBD; DDL) receives the assembly (block 12) of the OPT (UDT) and the file (block 1) of the Scheme and installs them in the data warehouse. This process involves, among other things, generating tables and views for types in each schema.

10. Формализм запроса10. Request formalism

Обращаясь к основам, шаблон приложения при использовании ИПП (API) платформы хранения представляет собой: Открыть ItemContext; использовать Find с критерием фильтра для извлечения требуемых объектов; выполнить операцию над объектами и послать изменения обратно в хранилище. Данный раздел касается синтаксиса того, что используется в строке фильтра.Turning to the basics, the application template when using the storage platform API (API) is: Open ItemContext; use Find with filter criteria to retrieve the required objects; perform an operation on objects and send the changes back to the repository. This section deals with the syntax of what is used in the filter string.

Строка фильтра, предусматриваемая тогда, когда выполняется поиск объектов данных платформы хранения, описывает условия, которым свойства объектов должны удовлетворять, чтобы они были возвращены. Синтаксис, используемый в ИПП (API) платформы хранения, поддерживает приведение типов и прохождение связей.The filter string provided when a search for storage platform data objects is performed describes the conditions that the properties of objects must satisfy in order to be returned. The syntax used in the storage platform API (API) supports type casting and association.

а) Основы фильтровa) Filter Basics

Строка фильтра является или пустой, указывая, что все объекты заданного типа должны быть возвращены, или булевым выражением, которому должен удовлетворять каждый возвращаемый объект. Выражение ссылается на свойства объекта. Среда выполнения ИПП (API) платформы хранения знает, как эти имена свойств отображаются на имена полей типа платформы хранения и, в конечном счете, на представления ЯСЗ (SQL), поддерживаемые хранилищем платформы хранения.The filter string is either empty, indicating that all objects of a given type should be returned, or a Boolean expression that each returned object must satisfy. The expression refers to the properties of the object. The storage platform APIs for the storage platform know how these property names map to field names such as the storage platform and, ultimately, to SQL Server views supported by storage platform storage.

Рассмотрим следующие примеры:Consider the following examples:

// Найти всех людей// Find all the people

FindResult res1 = Person.FindAll(ctx)FindResult res1 = Person.FindAll (ctx)

// Найти всех людей, которые имеют значение свойства Gender// Find all people who have a Gender property value

// равным «Male»// equal to "Male"

FindResult res2 = Person.FindAll(ctx, "Gender='Male'")FindResult res2 = Person.FindAll (ctx, "Gender = 'Male'")

// Найти всех людей, которые имеют значение свойства Gender// Find all people who have a Gender property value

// равным «Male» и которые были рождены в последнем тысячелетии.// equal to "Male" and who were born in the last millennium.

FindResult res3 = Person.FindAll(FindResult res3 = Person.FindAll (

ctx,ctx

"Gender= 'Male' And Birthdate < '1/1/2001'")"Gender = 'Male' And Birthdate <'1/1/2001'")

Свойства вложенных объектов также могут использоваться в фильтре. Например:Properties of nested objects can also be used in the filter. For example:

// Найти всех людей, которые были модифицированы в последние 24 часа// Find all people who have been modified in the last 24 hours

FindResult res1 = Person.FindAll(FindResult res1 = Person.FindAll (

ctx,ctx

String.Format("Item.Modified > '{0}'",DateTime.Now.Subtract(new TimeSpan(24,0,0))));String.Format ("Item.Modified> '{0}'", DateTime.Now.Subtract (new TimeSpan (24,0,0))));

Для коллекций можно фильтровать члены, используя условие в квадратных скобках. Например:For collections, you can filter members using the condition in square brackets. For example:

// Найти всех людей с именем «John» и фамилией// Find all people with the name "John" and last name

//«Smith»// "Smith"

FindResult res1 = Person.FindAll(FindResult res1 = Person.FindAll (

ctx,ctx

"PersonalNames[GivenName='John' And Surname='Smith']")"PersonalNames [GivenName = 'John' And Surname = 'Smith']")

// Найти всех людей с непосредственным адресом от поставщика 'x'// Find all people with a direct address from provider 'x'

// и с категорией оперативного состояния 'y'// and with operational status category 'y'

FindResult res2 = Person.FindAll(FindResult res2 = Person.FindAll (

ctx,ctx

"PersonalRealtimeAddress[ProviderURI='x'].BasicPresence." +"PersonalRealtimeAddress [ProviderURI = 'x']. BasicPresence." +

"OnlineStatus.Category='y'")"OnlineStatus.Category = 'y'")

Следующий пример перечисляет всех людей, которые родились после 31/12/1999:The following example lists all people who were born after 12/31/1999:

ItemContext ctx = ItemContext.Open("Work Contacts");ItemContext ctx = ItemContext.Open ("Work Contacts");

FindResult results =FindResult results =

Person.FindAll( ctx, "Birthdate > '12/31/1999'" );Person.FindAll (ctx, "Birthdate> '12 / 31/1999 '");

foreach( Person person in results)foreach (Person person in results)

Console. WriteLine(person.DisplayName);Console WriteLine (person.DisplayName);

ctx.Close();ctx.Close ();

Строка 1 создает новый объект ItemContext для доступа к «Work Contacts» на совместно используемом ресурсе платформы хранения на локальном компьютере. Строки 3 и 4 получают коллекцию объектов Person, где свойство Birthdate задает дату после 31/12/1999, как задано выражением «Birthdate > '12/31/1999'». Исполнение этой операции FindAll иллюстрируется на фиг.23.Line 1 creates a new ItemContext to access the “Work Contacts” on the shared storage platform resource on the local computer. Lines 3 and 4 receive a collection of Person objects, where the Birthdate property sets the date after 31/12/1999, as specified by the expression "Birthdate> '12 / 31/1999 '." The execution of this FindAll operation is illustrated in FIG.

b) Приведение типовb) Type casting

Часто бывает так, что тип значения, хранимого в свойстве, выводится из типа с объявленными свойствами. Например, свойство PersonalEAddresses в Person содержит коллекцию типов, выведенных из EAddress, таких как EMailAddress и TelephoneNumber. Чтобы отфильтровать на основе телефонного кода зоны, необходимо приведение из типа EAddress в тип TelephoneNumber:It often happens that the type of value stored in a property is inferred from the type with declared properties. For example, the PersonalEAddresses property in Person contains a collection of types derived from EAddress, such as EMailAddress and TelephoneNumber. To filter based on the telephone code of the zone, you need a cast from the EAddress type to the TelephoneNumber type:

// Найти всех людей с телефонным номером в коде зоны 425// Find all people with a phone number in area code 425

FindResult res1 = Person.FindAll(FindResult res1 = Person.FindAll (

ctx,ctx

"PersonalEAddresses." +"PersonalEAddresses." +

"Cast(System.Storage.Contact.TelephoneNumber)). " +"Cast (System.Storage.Contact.TelephoneNumber))." +

"AreaCode='425'");"AreaCode = '425'");

// Альтернативно, можно передать имя типа следующим образом:// Alternatively, you can pass the type name as follows:

FindResult res1 = Person.FindAll(FindResult res1 = Person.FindAll (

ctx,ctx

String.Format("PersonalEAddresses.Cast({0})).AreaCode='425'",String.Format ("PersonalEAddresses.Cast ({0})). AreaCode = '425'",

typeof(TelephoneNumber).FullName))typeof (TelephoneNumber) .FullName))

с) Синтаксис фильтраc) Filter syntax

Ниже представлено описание синтаксиса фильтра, поддерживаемого ИПП (API) платформы хранения, согласно одному варианту осуществления.The following is a description of the filter syntax supported by the storage platform API (API) according to one embodiment.

Filter ::= EmptyFilter | ConditionFilter :: = EmptyFilter | Condition

EmptyFilter ::=EmptyFilter :: =

Condition ::= SimpleCondition | CompoundCondition |Condition :: = SimpleCondition | CompoundCondition |

ParenthesizedConditionParentalized condition

SimpleCondition ::= ExistanceCheck | ComparisonSimpleCondition :: = ExistanceCheck | Comparison

ExistanceCheck ::= PropertyReferenceExistanceCheck :: = PropertyReference

Comparison ::= PropertyReference ComparisonOp ConstantComparison :: = PropertyReference ComparisonOp Constant

CompoundCondition ::= SimpleCondition BooleanOp ConditionCompoundCondition :: = SimpleCondition BooleanOp Condition

ParenthesizedCondition ::= '(' Condition ') 'ParenthesizedCondition :: = '(' Condition ')'

ComparisonOp ::= '!= ' | '==' | '=' | '<' | '>' | '>=' | '<='ComparisonOp :: = '! =' | '==' | '=' | '<' | '>' | '> =' | '<='

BooleanOp ::= 'And ' | '&&' | 'Or ' | '||'BooleanOp :: = 'And' | '&&' | 'Or' | '||'

Constant ::= StringConstant | NumericConstantConstant :: = StringConstant | NumericConstant

StringConstant ::= ''' (любой символ Уникода)* '''StringConstant :: = '''( any Unicode character ) *'''

Примечание: вставленные знаки ' отключаются посредством дублированияNote: inserted characters' are disabled by duplication.

NumericConstant ::= 0-9*NumericConstant :: = 0-9 *

PropertyReference ::= SimplePropertyName | CompoundPropertyNamePropertyReference :: = SimplePropertyName | CompoundPropertyName

SimplePropertyName ::= (все символы Уникода за исключением '.' и пробела)* Filter?SimplePropertyName :: = ( all Unicode characters except '.' And space ) * Filter?

Filter ::= ' [' Condition '] 'Filter :: = '[' Condition ']'

CompoundPropertyName ::=CompoundPropertyName :: =

(TypeCast | RelationshipTraversal | SimplePropertyName) '.' PropertyReference(TypeCast | RelationshipTraversal | SimplePropertyName) '.' PropertyReference

Typecast ::= 'Cast(' TypeName ')'Typecast :: = 'Cast (' TypeName ')'

RelationshipTraversal ::= TraversalToSource | TraversalToTargetRelationshipTraversal :: = TraversalToSource | TraversalToTarget

TraversalToSource ::= 'Source(' FullRelationshipName ')'TraversalToSource :: = 'Source (' FullRelationshipName ')'

TraversalToTarget ::= 'Target(' FullRelationshipName ')'TraversalToTarget :: = 'Target (' FullRelationshipName ')'

TypeName ::= полное уточненное имя типа ОЯСВ (CLR) TypeName :: = fully qualified name of the type of NLDW (CLR)

FullRelationshipName ::= SchemaName '.' RelationshipNameFullRelationshipName :: = SchemaName '.' RelationshipName

SchemaName ::= the storage platformNameSchemaName :: = the storage platformName

RelationshipName ::= the storage platformNameRelationshipName :: = the storage platformName

the storage platformName ::= как определено в [SchemaDef] the storage platformName :: = as defined in [SchemaDef]

11. Удаленное взаимодействие11. Remote interaction

а) Локальная/удаленная прозрачность в ИПП (API)a) Local / remote transparency in the API (API)

Доступ к данным в платформе хранения нацелен на локальный экземпляр платформы хранения. Локальный экземпляр служит в качестве маршрутизатора, если запрос (или часть его) ссылается на удаленные данные. Уровень ИПП (API), таким образом, обеспечивает локальную/удаленную прозрачность: нет структурного различия в ИПП (API) между доступом к локальным и удаленным данным. Это просто функция запрашиваемой области действия.Access to data in the storage platform targets a local instance of the storage platform. The local instance serves as a router if the request (or part of it) refers to remote data. The API level thus provides local / remote transparency: there is no structural difference in the API (API) between access to local and remote data. This is just a feature of the requested scope.

Хранилище данных платформы хранения также реализует распределенные запросы; таким образом, можно соединиться с локальным экземпляром платформы хранения и выполнить запрос, который включает в себя предметы с различных томов, некоторые из которых находятся на локальном хранилище, а другие - на удаленном хранилище. Хранилище объединяет результаты и представляет их приложению. С точки зрения ИПП (API) платформы хранения (и, следовательно, разработчика приложения) любой удаленный доступ является полностью прямым и прозрачным.The storage platform data warehouse also implements distributed queries; in this way, you can connect to a local instance of the storage platform and run a query that includes items from different volumes, some of which are located on local storage and others on remote storage. The repository combines the results and presents them to the application. From the perspective of the storage platform API (and therefore the application developer), any remote access is completely direct and transparent.

ИПП (API) платформы хранения дает приложению возможность определить, представляет ли данный объект ItemContext (возвращаемый методом ItemContext.Open) локальное или удаленное соединение с использованием свойства IsRemote - это свойство объекта ItemContext. Среди других вещей приложению может потребоваться обеспечение визуальной обратной связи, чтобы способствовать установке ожидаемых пользователем результатов рабочих характеристик, надежности и т.д.The storage platform API allows the application to determine whether a given ItemContext (returned by the ItemContext.Open method) represents a local or remote connection using the IsRemote property - this is a property of the ItemContext. Among other things, an application may need to provide visual feedback in order to facilitate the installation of user-expected performance, reliability, etc.

b) Реализация платформой хранения удаленного взаимодействияb) Implementation of the remoting storage platform

Хранилища данных платформы хранения общаются друг с другом с использованием специального поставщика СВОБД (OLEDB), который выполняется по протоколу передачи гипертекста (ППГТ (HTTP);) (поставщик СВОБД (OLEDB) по умолчанию использует протокол передачи потока табличных данных (ПТД; TDS)). В одном варианте осуществления распределенный запрос обрабатывается функциональной возможностью OPENROWSET по умолчанию процессора реляционной базы данных. Специальная определяемая пользователем функция (ОПФ (UDF)) DoRemoteQuery(server, queryText) предоставляется для выполнения фактического удаленного взаимодействия.The storage platform data warehouses communicate with each other using a special provider of OLEDB (OLEDB), which is implemented using the Hypertext Transfer Protocol (HTTP); (the OLEDB provider uses the table data stream transfer protocol (PDD; TDS by default) . In one embodiment, the distributed query is processed by the OPENROWSET default functionality of the relational database processor. A special user-defined function (UDF) DoRemoteQuery (server, queryText) is provided to perform the actual remote interaction.

с) Доступ к хранилищам не платформы храненияc) Access to non-storage platform storage

В одном варианте осуществления платформы хранения настоящего изобретения нет обобщенной архитектуры поставщика, которая дает возможность любому хранилищу участвовать в доступе к данным платформы хранения. Однако предусматривается ограниченная архитектура поставщика для конкретного случая Microsoft Exchange и Microsoft Active Directory (AD). Это означает, что разработчики могут использовать ИПП (API) платформы хранения и обращаться к данным в AD и Exchange, как если бы они были в платформе хранения, но что данные, к которым они могут обращаться, ограничиваются схематизированными типами платформы хранения. Таким образом, адресная книга (= коллекция типов Person платформы хранения) поддерживается в AD, и почта, календарь и контакты поддерживаются для Exchange.In one embodiment of the storage platform of the present invention, there is no generic provider architecture that enables any storage to participate in accessing the storage platform data. However, there is a limited provider architecture for the specific case of Microsoft Exchange and Microsoft Active Directory (AD). This means that developers can use the storage platform APIs and access data in AD and Exchange as if they were in a storage platform, but that the data they can access is limited to the schematized types of storage platform. Thus, the address book (= collection of Person types of the storage platform) is supported in AD, and mail, calendar, and contacts are supported for Exchange.

d) Связи с РФС (DFS)d) RFU Relations (DFS)

Распространитель свойств платформы хранения не распространяет за пределы точек монтирования. Даже если пространство имен является достаточно наполненным для доступа через точки монтирования, запросы не проходят через них. Тома платформы хранения могут выглядеть как листья в дереве РФС (DFS).The distributor of storage platform properties does not extend beyond mount points. Even if the namespace is full enough to access through mount points, requests do not go through them. Storage platform volumes can look like leaves in an RFF tree (DFS).

е) Связи к ГАР (GXA)/Indigof) Links to GAR (GXA) / Indigo

Разработчик может использовать ИПП (API) платформы хранения для раскрытия «головной части ГАР (GXA)» в верхней части хранилища данных. Концептуально, это не отличается от создания любой другой веб-службы. ИПП (API) платформы хранения не взаимодействует с хранилищем данных платформы хранения с использованием ГАР (GXA). Как упомянуто выше, ИПП (API) взаимодействует с локальным хранилищем, используя ПТД (TDS); любое удаленное взаимодействие управляется локальным хранилищем, используя службу синхронизации.A developer can use the storage platform API (API) to deploy the “GAR Headend (GXA)” at the top of the data warehouse. Conceptually, this is no different from creating any other web service. The storage platform API (API) does not interact with the storage platform data warehouse using the GAR (GXA). As mentioned above, the API (API) interacts with local storage using the PDD (TDS); any remote interaction is controlled by local storage using the synchronization service.

12. Ограничения12. Limitations

Модель данных платформы хранения допускает ограничение значений на типы. Эти ограничения оцениваются на хранилище автоматически, и процесс является прозрачным для пользователя. Отметьте, что ограничения проверяются на сервере. Отметив это, иногда желательно предоставить разработчику гибкость в проверке, что входные данные удовлетворяют ограничениям, не вызывая непроизводительных затрат полного обхода для сервера. Это является особенно полезным в интерактивных приложениях, где конечный пользователь вводит данные, которые используются для заполнения объекта. ИПП (API) платформы хранения обеспечивает эту возможность.The storage platform data model allows type limits. These restrictions are evaluated on the repository automatically, and the process is transparent to the user. Note that restrictions are checked on the server. Having noted this, it is sometimes desirable to provide the developer with the flexibility to verify that the input meets the constraints without causing the overhead of a full crawl for the server. This is especially useful in interactive applications where the end user enters data that is used to populate an object. The storage platform API (API) provides this capability.

Вспомним, что Схема платформы хранения задается в РЯР (XML)-файле, который используется платформой хранения для генерирования соответствующих объектов базы данных, представляющих схему. Он также используется интегрированной средой периода проектирования ИПП (API) платформы хранения для автоматического генерирования классов.Recall that a storage platform schema is defined in a .png (XML) file that is used by the storage platform to generate the corresponding database objects representing the schema. It is also used by the Storage Platform Integrated Environment Design Period (API) framework to automatically generate classes.

Вот частичный листинг РЯР (XML)-файла, используемого для генерирования схемы Contacts:Here is a partial listing of the RNR (XML) file used to generate the Contacts schema:

<Schema Name="Contacts" MajorVersion="1" MinorVersion="8"><Schema Name = "Contacts" MajorVersion = "1" MinorVersion = "8">

<ReferencedSchema Name="Base" MajorVersion="1" /><ReferencedSchema Name = "Base" MajorVersion = "1" />

<Type Name="Person" MajorVersion="1" MinorVersion="0"<Type Name = "Person" MajorVersion = "1" MinorVersion = "0"

ExtendsType="Principal" ExtendsVersion="1">ExtendsType = "Principal" ExtendsVersion = "1">

<Field Name="Birthdate" Type="the storage platformTypes.datetime"<Field Name = "Birthdate" Type = "the storage platformTypes.datetime"

Nullable="true" MultiValued="false" />Nullable = "true" MultiValued = "false" />

<Field Name="Gender" Type="the storage platformTypes.nvarchar(16)"<Field Name = "Gender" Type = "the storage platformTypes.nvarchar (16)"

Nullable="true" MultiValued="false" />Nullable = "true" MultiValued = "false" />

<Field Name="PersonalNames" Type="FullName" TypeMajorVersion="1"<Field Name = "PersonalNames" Type = "FullName" TypeMajorVersion = "1"

Nullable="true" MultiValued="true" />Nullable = "true" MultiValued = "true" />

<Field Name="PersonalEAddresses" Type="EAddress"<Field Name = "PersonalEAddresses" Type = "EAddress"

TypeMajorVersion="1" Nullable="true" MultiValued="true" />TypeMajorVersion = "1" Nullable = "true" MultiValued = "true" />

<Field Name="PersonalPostalAddresses" Type="PostalAddress"<Field Name = "PersonalPostalAddresses" Type = "PostalAddress"

TypeMajorVersion="1" Nullable="true" MultiValued="true" />TypeMajorVersion = "1" Nullable = "true" MultiValued = "true" />

<Check>expression</Check><Check> expression </Check>

</Type></Type>

...

...

</Schema></Schema>

Теги Проверки в РЯР (XML) выше задают ограничения на тип Person. Может быть более одного тега проверки. Вышеупомянутое ограничение, как правило, проверяется в хранилище. Чтобы задать, что ограничение также может явно проверяться приложением, вышеупомянутый РЯР (XML) модифицируется подобно приведенному ниже:The validation tags in the RNR (XML) above define restrictions on the type Person. There can be more than one validation tag. The above limitation is usually checked in the repository. To specify that the constraint can also be explicitly checked by the application, the aforementioned RNR (XML) is modified like the one below:

<Schema Name="Contacts" MajorVersion="1" MinorVersion="8"><Schema Name = "Contacts" MajorVersion = "1" MinorVersion = "8">

<ReferencedSchema Name="Base" MajorVersion="1" /><ReferencedSchema Name = "Base" MajorVersion = "1" />

<Type Name="Person" …><Type Name = "Person" ...>

<Field Name="Birthdate" Type="the storage platformTypes.datetime"<Field Name = "Birthdate" Type = "the storage platformTypes.datetime"

Nullable="true" MultiValued="false" />Nullable = "true" MultiValued = "false" />

...

<Check InApplication="true">expression</Check><Check InApplication = "true"> expression </Check>

</Type></Type>

...

...

</Schema></Schema>

Отметьте новый атрибут «InApplication» элемента <Check>, который устанавливается в true. Это обуславливает выявление ИПП (API) платформы хранения ограничения в ИПП (API) при помощи метода экземпляра класса Person, названного Validate(). Приложение может вызывать этот метод объекта для обеспечения того, что данные являются действительными, и для предотвращения потенциально бесполезного полного обхода для сервера. Он возвращает булево выражение для индикации результатов проверки. Отметьте, что ограничения на значения все же применяются на сервере, независимо от того, вызывает или нет клиент метод <объект>.Validate(). Вот пример того, как может использоваться Validate:Note the new "InApplication" attribute of the <Check> element, which is set to true. This causes the detection of an API (API) storage platform restrictions in the API (API) using an instance of the Person class called Validate (). An application can call this object method to ensure that the data is valid, and to prevent a potentially useless full crawl for the server. It returns a boolean expression to indicate the results of the check. Note that value restrictions still apply on the server, regardless of whether or not the client calls the <object> .Validate () method. Here is an example of how Validate can be used:

ItemContext ctx = ItemContext.Open();ItemContext ctx = ItemContext.Open ();

//Создать контакт в папке пользователя My Contacts.// Create a contact in the user folder My Contacts.

Folder f = UserDataFolder.FindMyPersonalContactsFolder( ctx );Folder f = UserDataFolder.FindMyPersonalContactsFolder (ctx);

Person p = new Person( f );Person p = new Person (f);

// Создать дату рождения личности// Create the person’s birthday

p.Birthdate = new DateTime( 1959, 6, 9 );p.Birthdate = new DateTime (1959, 6, 9);

// Добавить имя, категоризированное как персональное имя// Add a name categorized as a personal name

FullName name = new FullName( FullName.Category.PrimaryName );FullName name = new FullName (FullName.Category.PrimaryName);

name.GivenName = "Joe";name.GivenName = "Joe";

name.Surname = "Smith";name.Surname = "Smith";

p.PersonalNames.Add( name );p.PersonalNames.Add (name);

// проверить объект Person// check the Person object

if (p.Validate() == false)if (p.Validate () == false)

{{

// данные не представляют действительной личности// data does not represent a valid person

}}

// сохранить изменения// save changes

p.Update();p.Update ();

ctx.Close();ctx.Close ();

Существует множество путей доступа к хранилищу платформы хранения - ИПП (API) платформы хранения, ADO.Net, открытый интерфейс взаимодействия с базами данных (ОИВБД (ODBC)), СВОБД (OLEDB) и объекты данных ActiveX (ADO). Это поднимает вопрос проверки надежности ограничений, т.е. как можно гарантировать, что данные, записанные из, например, ОИВБД (ODBC), проходят через одни и те же ограничения целостности данных, что и данные, записанные из ИПП (API) платформы хранения. Так как все ограничения проверяются в хранилище, ограничения являются теперь надежными. Независимо от того, какой путь ИПП (API) используют для доступа к хранилищу, все записи в хранилище фильтруются при помощи проверок ограничений в хранилище.There are many ways to access storage platform storage — the storage platform's API (API), ADO.Net, the open database interface (ODBC), SRED (OLEDB), and ActiveX data objects (ADO). This raises the question of checking the reliability of constraints, i.e. how can we guarantee that data recorded from, for example, ODIVB, pass through the same data integrity restrictions as data written from the storage platform API (API). Since all restrictions are checked in the repository, the restrictions are now reliable. Regardless of which API path (API) is used to access the repository, all records in the repository are filtered using checks of restrictions in the repository.

13. Совместное использование13. Sharing

Совместно используемый ресурс в платформе хранения имеет вид:The shared resource in the storage platform is:

\\<Имя СДИ>\<Служба контекста>,\\ <SDI Name> \ <Context Service>,

где <Имя СДИ> представляет собой имя службы доменных имен (СДИ; DNS) машины, и <Служба контекста> представляет собой папку включения, виртуальную папку или предмет в томе на этой машине. Например, предположим, что машина «Johns_Desktop» имеет том, названный Johns_Information, и в этом томе существует папка, названная Contacts_Categories; эта папка содержит папку, названную Work, которая имеет рабочие контакты для John:where <SDI Name> is the name of the domain name service (DNS; DNS) of the machine, and <Context Service> is the inclusion folder, virtual folder, or item in the volume on this machine. For example, suppose the Johns_Desktop machine has a volume named Johns_Information, and in this volume there is a folder called Contacts_Categories; this folder contains a folder called Work, which has work contacts for John:

\\Johns_Desktop\Johns_Information$\Contacts_Categories\Work\\ Johns_Desktop \ Johns_Information $ \ Contacts_Categories \ Work

Она может совместно использоваться как «WorkContacts». С определением этого совместно используемого ресурса \\Johns_Desktop\WorkContacts\JaneSmith представляет собой имя, действительное для платформы хранения и идентифицирует предмет Person JaneSmith.It can be shared as WorkContacts. With the definition of this shared resource, \\ Johns_Desktop \ WorkContacts \ JaneSmith is the name valid for the storage platform and identifies the Person JaneSmith object.

а) Представление совместно используемого ресурсаa) Presentation of a shared resource

Тип предмета совместно используемого ресурса имеет следующие свойства: имя совместно используемого ресурса и цель совместно используемого ресурса (это может быть связь неприкрепления). Например, вышеупомянутым именем совместно используемого ресурса является WorkContacts, и целью является Contacts_Categories\Work на томе Johns_Information. Ниже представлен фрагмент схемы для типа Share:The type of the shared resource object has the following properties: the name of the shared resource and the purpose of the shared resource (this may be a non-attachment relationship). For example, the aforementioned shared resource name is WorkContacts, and the target is Contacts_Categories \ Work on the Johns_Information volume. Below is a fragment of the diagram for the Share type:

<Schema<Schema

xmlns="http://schemas.microsoft.com/winfs/2002/11/18/schema"xmlns = "http://schemas.microsoft.com/winfs/2002/11/18/schema"

Name="Share" MajorVersion="1" MinorVersion="0">Name = "Share" MajorVersion = "1" MinorVersion = "0">

<ReferencedSchema Name="Base" MajorVersion="l"/><ReferencedSchema Name = "Base" MajorVersion = "l" />

<ReferencedSchema Name="the storage platformTypes" MajorVersion="l"/><ReferencedSchema Name = "the storage platformTypes" MajorVersion = "l" />

<Type Name="Share" MajorVersion="1" MinorVersion="0"<Type Name = "Share" MajorVersion = "1" MinorVersion = "0"

ExtendsType="Base.Item" ExtendsVersion="1">ExtendsType = "Base.Item" ExtendsVersion = "1">

<Field Name="Name" Type="the storage platformTypes.nvarchar(512)"<Field Name = "Name" Type = "the storage platformTypes.nvarchar (512)"

TypeMajorVersion="1"/>TypeMajorVersion = "1" />

<Field Name="Target" Type="Base.RelationshipData" TypeMajorVersion="1"/><Field Name = "Target" Type = "Base.RelationshipData" TypeMajorVersion = "1" />

</Type></Type>

</Schema></Schema>

b) Управление совместно используемыми ресурсамиb) Shared Resource Management

Так как совместно используемый ресурс представляет собой предмет, совместно используемыми ресурсами можно управлять, как и другими предметами. Совместно используемый ресурс может создаваться, удаляться и модифицироваться. Также обеспечивается защита совместно используемого ресурса аналогично другим предметам платформы хранения.Since a shared resource is an item, shared resources can be managed, like other items. A shared resource can be created, deleted, and modified. Shared resource protection is also provided, similar to other storage platform items.

с) Доступ к совместно используемым ресурсамc) Access to shared resources

Приложение обращается к совместно используемому ресурсу удаленной платформы хранения посредством передачи имени совместно используемого ресурса (например, \\Johns_Desktop\WorkContacts) ИПП (API) платформы хранения в вызове метода ItemContext.Open(). ItemContext.Open возвращает экземпляр объекта ItemContext. ИПП (API) платформы хранения затем взаимодействует со службой локальной платформы хранения (вспомним, что обращение к совместно используемым ресурсам удаленной платформы хранения выполняется при помощи локальной платформы хранения). В свою очередь, служба локальной платформы хранения взаимодействует со службой удаленной платформы хранения (например, на машине Johns_Desktop) с данным именем совместно используемого ресурса (например, WorkContacts). Служба удаленной платформы хранения затем преобразует WorkContacts в Contacts_Categories\Work и открывает его. После этого запрос и другие операции выполняются точно так же, как другие области действия.The application accesses the shared resource of the remote storage platform by passing the name of the shared resource (for example, \\ Johns_Desktop \ WorkContacts) to the storage platform API in the call to the ItemContext.Open () method. ItemContext.Open returns an instance of the ItemContext. The storage platform API (API) then interacts with the local storage platform service (recall that access to the shared resources of the remote storage platform is performed using the local storage platform). In turn, the local storage platform service interacts with the remote storage platform service (for example, on a Johns_Desktop machine) with a given shared resource name (for example, WorkContacts). The Remote Storage Platform service then converts WorkContacts to Contacts_Categories \ Work and opens it. After that, the request and other operations are performed in the same way as other scopes.

d) Обнаруживаемостьd) Detectability

В одном варианте осуществления программа приложения может обнаруживать совместно используемые ресурсы, доступные на данном <Имя СДИ>, следующим образом. Согласно первому способу ИПП (API) платформы хранения принимает имя СДИ (DNS) (например, Johns_Desktop) в качестве параметра области действия в методе ItemContext.Open(). ИПП (API) платформы хранения затем соединяется с хранилищем платформы хранения с этим именем СДИ (DNS) в качестве части строки соединения. С этим соединением единственно возможным, что приложение может сделать, является вызов ItemContext.FindAll(typeof(Share)). Служба платформы хранения затем объединяет все совместно используемые ресурсы на всех присоединенных томах и возвращает коллекцию совместно используемых ресурсов. Согласно второму способу на локальной машине администратор легко может обнаружить совместно используемые ресурсы на конкретном томе посредством FindAll(typeof(Share)) или конкретную папку посредством FindAll(typeof(Share), "Target(ShareDestination).Id=FolderId").In one embodiment, the application program can detect the shared resources available on this <LED Name>, as follows. According to the first method, the storage platform API (API) accepts the name of the DNS (DNS) (for example, Johns_Desktop) as the scope parameter in the ItemContext.Open () method. The storage platform API (IPP) is then connected to the storage of the storage platform with this SDI name (DNS) as part of the connection string. With this connection, the only possible thing the application can do is call ItemContext.FindAll (typeof (Share)). The storage platform service then consolidates all shared resources on all attached volumes and returns a collection of shared resources. According to the second method, on the local machine, the administrator can easily find shared resources on a specific volume using FindAll (typeof (Share)) or a specific folder using FindAll (typeof (Share), "Target (ShareDestination) .Id = FolderId").

14. Семантика Find14. Semantics of Find

Методы Find* (независимо от того, вызываются ли они на объект ItemContext или на индивидуальный предмет), в основном, применяются к Предметам (включая внедренные предметы) в данном контексте. Вложенные элементы не имеют Find - над ними нельзя выполнять поиск независимо от их включающих Предметов. Это согласуется с семантикой, требуемой моделью данных платформы хранения, где вложенные элементы выводят свою «идентификацию» из включающего предмета. Чтобы сделать это представление более ясным, здесь приведены примеры действительных и недействительных операций поиска:Find * methods (regardless of whether they are called on an ItemContext or an individual item) are mainly applied to Items (including embedded items) in this context. Nested items do not have Find - you cannot search on them regardless of their including Items. This is consistent with the semantics required by the storage platform data model, where nested elements derive their “identity” from the enclosing item. To make this clearer, examples of valid and invalid search operations are given here:

а) Покажите все телефонные номера в системе, которые имеют код зоны 206?a) Show all the phone numbers in the system that have area code 206?

Недействительный, так как поиск выполняется по телефонным номерам - элемент - без ссылки на предмет.Invalid because the search is performed by phone numbers - item - without a link to the item.

b) покажите все телефонные номера во всех Person, которые имеют код зоны 206?b) show all phone numbers in all Person that have area code 206?

Недействительный, даже если ссылается на Person (=предмет), критерий поиска не задействует этот предмет.Invalid, even if it refers to Person (= item), the search criteria does not include this item.

с) Показать все телефонные номера Murali (=одна единственная личность), которые имеют код зоны 206?c) Show all Murali phone numbers (= one single person) that have area code 206?

Действительный, так как существует критерий поиска по Предмету (Личность по имени «Murali»). Исключением из этого правила являются типы вложенных элементов, выводимые непосредственно или косвенно из типа Base.Relationship. Эти типы могут запрашиваться индивидуально при помощи классов связей. Такие запросы могут поддерживаться, так как реализация платформы хранения использует «главную таблицу связывания» для хранения элементов Relationship вместо внедрения их в ОПТ (UDTs) предмета.Valid because there is a search criterion for an Item (Person named "Murali"). An exception to this rule are types of nested elements that are derived directly or indirectly from the Base.Relationship type. These types can be requested individually using link classes. Such queries can be supported, since the storage platform implementation uses the “main linking table” to store Relationship elements instead of embedding them in the object's UDTs.

15. ИПП (API) контактов платформы хранения15. IPP (API) contacts storage platform

В этом разделе приводится обзор ИПП (API) Контактов платформы хранения. Схема, поддерживаемая ИПП (API) Контактов, показана на фиг.21А и 21В.This section provides an overview of the Storage Platform Contacts API. The circuitry supported by the IPP (API) of the Contacts is shown in FIGS. 21A and 21B.

а) Обзор System.Storage.Contacta) System.Storage.Contact Overview

ИПП (API) платформы хранения включает в себя пространство имен для работы с предметами и элементами в схеме Contacts. Это пространство имен называется System.Storage.Contact.The storage platform API (API) includes a namespace for working with objects and elements in the Contacts schema. This namespace is called System.Storage.Contact.

Эта схема имеет, например, следующие классы:This scheme has, for example, the following classes:

- Предметы: UserDataFolder, User, Person, ADService, Service, Group, Organization, Principal, Location - Items : UserDataFolder, User, Person, ADService, Service, Group, Organization, Principal, Location

- Элементы: Profile, PostalAddress, EmailAddress, TelephoneNumber, RealTimeAddress, EAddress, FullName, BasicPresence, GroupMembership, RoleOccupancy - Elements : Profile, PostalAddress, EmailAddress, TelephoneNumber, RealTimeAddress, EAddress, FullName, BasicPresence, GroupMembership, RoleOccupancy

b) Методы поведения доменовb) Domain Behaviors

Ниже представлен список методов поведения доменов для схемы Contacts. Если рассматривать с достаточно высокого уровня, методы поведения доменов делятся на хорошо распознаваемые категории:The following is a list of domain behavior methods for the Contacts schema. When viewed from a sufficiently high level, domain behavior methods fall into well-recognized categories:

- Статические вспомогательные функции, например, Person.CreatePersonalContact() для создания нового персонального контакта;- Static helper functions, for example, Person.CreatePersonalContact () to create a new personal contact;

- Вспомогательные функции экземпляров, например, user.AutoLoginToAllProfiles(), которая регистрирует пользователя (экземпляр класса User) во всех профилях, которые отмечены для автоматической регистрации;- Helper functions of instances, for example, user.AutoLoginToAllProfiles (), which registers the user (an instance of the User class) in all profiles that are marked for automatic registration;

- CategoryGUID, например, Category.Home, Category.Work и т.д.;- CategoryGUID, for example, Category.Home, Category.Work, etc .;

- Производные свойства, например, emailAddress() - возвращает строку, которая объединяет имя пользователя и поля домена данного emailAddress (=экземпляр класса EmailAddress); и - Derived properties, for example, emailAddress () - returns a string that combines the username and domain fields of the given emailAddress (= instance of the EmailAddress class); and

- Производные коллекции, например, person.PersonalEmailAddresses - при наличии экземпляра класса Person получаем ее персональные адреса электронной почты.- Derived collections, for example, person.PersonalEmailAddresses - if you have an instance of the Person class, we get her personal email addresses.

В таблице ниже приведен для каждого класса в Контактах, который имеет методы поведения доменов, список этих методов и категория, к которой они принадлежат.The table below shows for each class in Contacts that has domain behavior methods, a list of these methods and the category to which they belong.

BasicPresenceBasicpresence Унифицированные идентификаторы ресурса (УИР; URI) категорииUnified Resource Identifiers (URIs) categories UnknownCategoryURI, OfflineCategoryURI, BusyCategoryURI, AwayCategoryURI, OnlineCategoryURIUnknownCategoryURI, OfflineCategoryURI, BusyCategoryURI, AwayCategoryURI, OnlineCategoryURI Статические вспомогательные функцииStatic Helper Functions ConvertPresenceStateToString - форматирует состояние присутствия в качестве локализованной строки (фактически необходимо добавить локализацию; именно то, что делает дружественная английская строка в настоящее время).ConvertPresenceStateToString - formats the presence state as a localized string (in fact, you need to add localization; exactly what friendly English string currently does). CategoryCategory ГУИД (ID) категорииGUID category Home, Work, Primary, Secondary, Cell, Fax, PagerHome, Work, Primary, Secondary, Cell, Fax, Pager EmailAddressEmailAddress Производные свойстваDerived Properties Address - объединяет имя пользователя и доменAddress - combines the username and domain Статические вспомогательные функцииStatic Helper Functions IsValidEmailAddressIsValidEmailAddress FolderFolder Производные свойстваDerived Properties GetChildItemCollection - создает коллекцию предметов, основанную на Targets из FolderMembership.GetChildItemCollection - Creates a collection of items based on the Targets from the FolderMembership. Статические вспомогательные функцииStatic Helper Functions GetKnownFolder - специализированные запросы для получения общеизвестных папокGetKnownFolder - specialized queries for getting well-known folders AddToPersonalContacts - добавляет предмет к общеизвестной папке персональных контактовAddToPersonalContacts - Adds an item to the well-known personal contacts folder ItemsItems Статические вспомогательные функцииStatic Helper Functions GetItemFromID - выполняет запрос, основанный на ИД (ID)GetItemFromID - Executes a request based on an ID RelationshipRelationship Вспомогательные функции экземпляраHelper Instance Functions BindToTarget - возвращает Item для TargetBindToTarget - returns Item for Target PersonPerson Производные коллекцииDerived Collections PersonalRealtimeAddresses, PersonalEmailAddresses, PersonalTelephoneNumbersPersonalRealtimeAddresses, PersonalEmailAddresses, PersonalTelephoneNumbers Производные свойстваDerived Properties OnlineStatus, OnlineStatusIconSource, PrimaryEmailAddress, PrimarySecurityIDOnlineStatus, OnlineStatusIconSource, PrimaryEmailAddress, PrimarySecurityID Статические вспомогательные функцииStatic Helper Functions CreatePersonalContact, CreateTemporaryContact - создает новую личность в общеизвестной папкеCreatePersonalContact, CreateTemporaryContact - creates a new identity in a well-known folder GetCurrentUser - получает Person для зарегистрированного в настоящее время пользователяGetCurrentUser - Get Person for the currently logged in user SecurityIDSecurityid Производные свойстваDerived Properties UserName, DomainName, DomainUserNameUserName, DomainName, DomainUserName TelephoneNumberTelephoneNumber Вспомогательные функции экземпляраHelper Instance Functions SetFromUserInputString - выполняет синтаксический разбор строки телефонного номера на частиSetFromUserInputString - Parses a telephone number string into parts Статические вспомогательные функцииStatic Helper Functions ParseNumber - выполняет синтаксический разбор строки телефонного номера на частиParseNumber - Parses a phone number string into parts UserUser Вспомогательные функции экземпляраHelper Instance Functions AutoLoginToAllProfiles - регистрирует все профили, которые отмечены для автоматической регистрацииAutoLoginToAllProfiles - logs all profiles that are marked for automatic registration

16. ИПП (API) файла платформы хранения16. IPP (API) of the storage platform file

В данном разделе представлен обзор ИПП (API) Файла платформы хранения согласно одному варианту осуществления настоящего изобретения.This section provides an overview of the Storage Platform File APIs according to one embodiment of the present invention.

а) Введениеa) Introduction

(1) Отражение тома ФСНТ (NTFS) в платформе хранения(1) Reflection of the FSST volume (NTFS) in the storage platform

Платформа хранения обеспечивает способ индексирования по содержимому в существующих томах ФСНТ (NTFS). Это выполняется посредством извлечения («распространения») свойств из каждого файлового потока или каталога в ФСНТ (NTFS) и сохранения этих свойств в качестве Предметов в платформе хранения.The storage platform provides a way to index by content in existing volumes of FSNT (NTFS). This is done by extracting (“distributing”) the properties from each file stream or directory into the NTFS and storing these properties as Items in the storage platform.

Схема Файла платформы хранения определяет два типа предметов - File и Directory - для хранения распространенных сущностей файловой системы. Тип Directory представляет собой подтип типа Folder; он представляет собой папку включения, которая содержит другие предметы Directory или предметы File.The Storage Platform File Schema defines two types of items - File and Directory - for storing common file system entities. The Directory type is a subtype of the Folder type; it is an inclusion folder that contains other Directory objects or File objects.

Предмет Directory может содержать предметы Directory и File; он не может содержать предметы любого другого типа. Что касается платформы хранения, то предметы Directory и File являются только для чтения из любого ИПП (API) доступа к данным. Служба диспетчера распространения файловой системы (FSPM) асинхронно распространяет измененные свойства в платформу хранения. Свойства предметов File и Directory могут быть изменены посредством ИПП (API) Win32. ИПП (API) платформы хранения может использоваться для считывания любых свойств этих предметов, включая поток, ассоциированный с предметом File.A Directory object can contain Directory and File objects; it cannot contain items of any other type. As for the storage platform, the Directory and File objects are read-only from any data access API. The File System Distribution Manager (FSPM) service asynchronously distributes the changed properties to the storage platform. The properties of File and Directory objects can be changed using the Win32 API. The storage platform API can be used to read any properties of these items, including the stream associated with the File item.

(2) Создание File и Directory в пространстве имен платформы хранения(2) Creating a File and Directory in the storage platform namespace

Когда том ФСНТ (NTFS) становится распространенным до тома платформы хранения, все файлы и каталоги в нем находятся в конкретной части этого тома. Эта область является только для чтения со стороны платформы хранения; FSPM может создать новые каталоги и файлы и/или изменить свойства существующих предметов.When an FSNT volume (NTFS) becomes common before a storage platform volume, all files and directories in it are located in a specific part of that volume. This area is read-only on the storage platform side; FSPM can create new directories and files and / or modify the properties of existing items.

Остальная часть пространства имен этого тома может содержать обычный диапазон типов предметов платформы хранения - Principal, Organization, Document, Folder и т.д. Платформа хранения также позволяет создавать Файлы и Каталоги в любой части пространства имен платформы хранения. Эти «родные» Файлы и Каталоги не имеют эквивалентов в файловой системе ФСНТ (NTFS); они хранятся исключительно в платформе хранения. Кроме того, изменения в свойствах немедленно становятся видимыми.The rest of the namespace of this volume may contain the usual range of types of storage platform items — Principal, Organization, Document, Folder, etc. The storage platform also allows you to create Files and Directories in any part of the storage platform namespace. These "native" Files and Directories have no equivalents in the FSNT file system (NTFS); they are stored exclusively in the storage platform. In addition, changes in properties immediately become visible.

Однако модель программирования остается такой же: они все же остаются только для чтения, что касается ИПП (APIs) доступа к данным платформы хранения. «Родные» Файлы и Каталоги должны обновляться с использованием ИПП (APIs) Win32. Это упрощает интеллектуальную модель разработчика, которая представляет собой:However, the programming model remains the same: they nevertheless remain read-only, as for the APIs for accessing storage platform data. Native Files and Directories must be updated using Win32 APIs. This simplifies the intelligent developer model, which is:

1. Любой тип предмета платформы хранения может создаваться в любом месте в пространстве имен (если только не предотвращается разрешениями, конечно).1. Any type of storage platform item can be created anywhere in the namespace (unless it is prevented by permissions, of course).

2. Любой тип предмета платформы хранения может считываться с использованием ИПП (API) платформы хранения.2. Any type of storage platform item can be read using the storage platform's API (API).

3. Любые типы предметов платформы хранения являются записываемыми с использованием ИПП (API) платформы хранения, за исключением File и Directory.3. Any type of storage platform item is recordable using the storage platform's API (API), with the exception of File and Directory.

4. Для записи в предметы File и Directory независимо от того, где они находятся в пространстве имен, использовать ИПП (API) Win32.4. To write to File and Directory objects, regardless of where they are in the namespace, use the Win32 API.

5. Изменения в предметах File/Directory в пространстве имен «распространения» могут не появляться немедленно в платформе хранения; в пространстве имен «без распространения» изменения отражаются немедленно в платформе хранения.5. Changes to File / Directory objects in the “distribution” namespace may not appear immediately in the storage platform; in the “without distribution” namespace, changes are reflected immediately in the storage platform.

b) Схема файлаb) File schema

Фиг.25 иллюстрирует схему, на которой основывается ИПП (API) Файла.25 illustrates a diagram on which a File API is based.

с) Обзор System.Storage.Filesc) System.Storage.Files Overview

ИПП (API) платформы хранения включает в себя пространство имен для работы с файловыми объектами. Это пространство имен называется System.Storage.Files. Члены данных классов в System.Storage.Files непосредственно отражают информацию, хранимую в хранилище платформы хранения; «распространяется» эта информация из объектов файловой системы или эта информация может создаваться собственным образом с использованием ИПП (API) Win32. Пространство имен System.Storage.Files имеет два класса: FileItem и DirectoryItem. Члены этих классов и их методы легко могут быть предсказаны при взгляде на диаграмму схемы на фиг.25. FileItem и DirectoryItem только считываются из ИПП (API) платформы хранения. Чтобы модифицировать их, необходимо использовать ИПП (API) Win32 или классы в System.IO.The storage platform API (API) includes a namespace for working with file objects. This namespace is called System.Storage.Files. The members of these classes in System.Storage.Files directly reflect the information stored in the storage of the storage platform; This information is “distributed” from file system objects or this information can be created in its own way using the Win32 API. The System.Storage.Files namespace has two classes: FileItem and DirectoryItem. The members of these classes and their methods can easily be predicted by looking at the diagram diagram in FIG. 25. FileItem and DirectoryItem are only read from the storage platform APIs. To modify them, you must use the Win32 API or classes in System.IO.

d) Примеры кодаd) Code examples

в данном разделе представлено три примера кода, иллюстрирующие использование классов в System.Storage.Files.this section provides three code examples that illustrate the use of classes in System.Storage.Files.

(1) Открытие файла и запись в него(1) Opening a file and writing to it

Этот пример показывает, как выполнить «традиционную» манипуляцию над файлом.This example shows how to perform “traditional” file manipulation.

ItemContext ctx = ItemContext.Open();ItemContext ctx = ItemContext.Open ();

FileItem f = FileItem.FindByPath(ctx, @"\My Documents\billg.ppt");FileItem f = FileItem.FindByPath (ctx, @ "\ My Documents \ billg.ppt");

// пример оперирования свойствами файла - убедитесь, что файл// example of handling file properties - make sure the file

// не только для чтения// not only for reading

if (!f.IsReadOnly)if (! f.IsReadOnly)

{{

FileStream fs = f.OpenWrite();FileStream fs = f.OpenWrite ();

// Считать, записать, закрыть файловый поток fs// Read, write, close the fs file stream

}}

ctx.Close();ctx.Close ();

Строка 3 использует метод FindByPath для открытия файла. Строка 7 показывает использование свойства после его распространения IsReadOnly для проверки, является ли файл записываемым. Если да, тогда на строке 9 изобретатели используют метод OpenWrite() объекта FileItem для получения файлового потока.Line 3 uses the FindByPath method to open the file. Line 7 shows the use of the property after it is distributed IsReadOnly to check if the file is writable. If so, then on line 9, the inventors use the OpenWrite () method of the FileItem object to obtain a file stream.

(2) Использование запросов(2) Using queries

Так как хранилище платформы хранения хранит свойства, распространенные из файловой системы, можно легко выполнить мощные запросы по файлам. В данном примере перечисляются все файлы, модифицированные за последние три дня:Because storage platform storage stores properties that are distributed from the file system, powerful file queries can be easily performed. This example lists all files modified in the last three days:

// Перечислить все файлы, модифицированные за последние 3 дня// List all files modified in the last 3 days

FindResult result = FileItem.FindAll(FindResult result = FileItem.FindAll (

ctx,ctx

"Modified >= '{0}'","Modified> = '{0}'",

DateTime.Now.AddDays(-3));DateTime.Now.AddDays (-3));

foreach ( FileItem file in result )foreach (FileItem file in result)

{{

...

}}

Вот другой пример использования запросов - в этом примере выполняется поиск всех записываемых файлов определенного типа (= расширение):Here is another example of using queries - in this example, all recorded files of a certain type are searched (= extension):

// Найти все записываемые файлы .cs в конкретном каталоге.// Find all writable .cs files in a specific directory.

// Эквивалент: dir c:\win\src\api\*.cs /a-r-d// Equivalent: dir c: \ win \ src \ api \ *. Cs / a-r-d

DirectoryItem dir =DirectoryItem dir =

DirectoryItem.FindByPath(ctx, @"c:\win\src\api");DirectoryItem.FindByPath (ctx, @ "c: \ win \ src \ api");

FindResult result = dir.GetFiles(FindResult result = dir.GetFiles (

"Extension='cs' and IsReadOnly=false");"Extension = 'cs' and IsReadOnly = false");

foreach ( File file in result )foreach (File file in result)

{{

...

}}

е) Методы поведения доменовe) Domain Behaviors

В одном варианте осуществления, в дополнение к стандартным свойствам и методам, класс файлов также имеет методы поведения доменов (свойства и методы с ручным кодированием). Эти методы поведения, в основном, основываются на методах в соответствующих классах System.IO.In one embodiment, in addition to the standard properties and methods, the file class also has domain behavior methods (manually encoded properties and methods). These behaviors are mainly based on the methods in the corresponding System.IO classes.

J. ЗАКЛЮЧЕНИЕJ. CONCLUSION

Как иллюстрирует вышеупомянутое, настоящее изобретение относится к платформе хранения для организации, поиска и совместного использования данных. Платформа хранения настоящего изобретения распространяет и расширяет принципы хранения данных за пределы существующих файловых систем и систем баз данных и предназначена для того, чтобы быть хранилищем для всех типов данных, включая структурированные, неструктурированные или полуструктурированные данные, такие как реляционные (табличные) данные, РЯР (XML) и новую форму данных, названную Предметы. Посредством ее общей базы хранения и схематизированных данных платформа хранения настоящего изобретения позволяет выполнять более эффективную разработку приложений для заказчиков, специалистов в области анализа и обработки информации и предприятий. Она предлагает мощный и расширяемый интерфейс прикладного программирования, который не только делает доступными возможности, присущие ее модели данных, но также охватывает и расширяет существующую файловую систему и методы обращения к базам данных. Понятно, что в описанных выше вариантах осуществления могут быть сделаны изменения без отступления от их широких идей изобретения. Следовательно, настоящее изобретение не ограничивается конкретными описанными вариантами осуществления, но оно предназначено для того, чтобы охватывать все модификации, которые находятся в рамках сущности и объема изобретения, определенного в прилагаемой формуле изобретения.As the foregoing illustrates, the present invention relates to a storage platform for organizing, retrieving and sharing data. The storage platform of the present invention extends and extends the principles of data storage beyond existing file systems and database systems and is intended to be a repository for all types of data, including structured, unstructured or semi-structured data, such as relational (tabular) data, RNR ( XML) and a new data form called Items. Through its common storage base and schematized data, the storage platform of the present invention enables more efficient application development for customers, information analysis and processing specialists, and enterprises. It offers a powerful and extensible application programming interface that not only makes available the capabilities inherent in its data model, but also extends and extends the existing file system and database access methods. It is understood that in the embodiments described above, changes can be made without departing from their broad ideas of the invention. Therefore, the present invention is not limited to the specific described embodiments, but it is intended to cover all modifications that fall within the spirit and scope of the invention defined in the appended claims.

Как очевидно из вышеупомянутого, все или части различных систем, способов и аспектов настоящего изобретения могут реализовываться в виде программного кода (т.е. инструкций). Этот программный код может запоминаться на считываемых компьютером носителях, таких как магнитные, электрические или оптические носители данных, включая без ограничения дискеты, компакт-диски (CD-ROM), перезаписываемые компакт-диски (CD-RW), ЦМД, предназначенные только для чтения (DVD-ROM), перезаписываемые ЦМД (DVD-RAM), магнитную ленту, флэш-память, накопитель на жестких дисках или любой другой считываемый машиной носитель данных, в котором, когда программный код загружается и исполняется машиной, такой как компьютер или сервер, машина становится устройством для осуществления на практике изобретения. Настоящее изобретение также может осуществляться в виде программного кода, который передается по некоторой среде передачи данных, такой как по электрическим проводам или кабелям, по оптоволоконным кабелям, по сети, включая Интернет или интрасеть, или при помощи любого другого вида передачи, при которой, когда программный код принимается и загружается и исполняется машиной, такой как компьютер, машина становится устройством для осуществления на практике изобретения. При реализации на процессоре общего назначения программный код объединяется с процессором и обеспечивает уникальное устройство, которое работает аналогично специальным логическим схемам.As is apparent from the above, all or parts of the various systems, methods, and aspects of the present invention may be implemented as program code (i.e., instructions). This program code can be stored on computer-readable media such as magnetic, electrical or optical storage media, including but not limited to floppy disks, compact discs (CD-ROM), rewritable compact discs (CD-RW), read-only DTMs (DVD-ROM), rewritable digital media (DVD-RAM), magnetic tape, flash memory, hard drive or any other machine-readable storage medium in which, when program code is downloaded and executed by a machine, such as a computer or server, the car becomes mouth A tool for practicing the invention. The present invention can also be implemented in the form of program code that is transmitted over some data transmission medium, such as via electric wires or cables, via fiber optic cables, via a network, including the Internet or an intranet, or by any other type of transmission in which, when the program code is received and downloaded and executed by a machine, such as a computer, the machine becomes a device for practicing the invention. When implemented on a general-purpose processor, the program code combines with the processor and provides a unique device that works similarly to special logic circuits.

ПРИЛОЖЕНИЕ АAPPENDIX A

namespace System.Storagenamespace System.Storage

{{

abstract class ItemContext: IDisposable, IServiceProviderabstract class ItemContext: IDisposable, IServiceProvider

{{

Члены создания и управления ItemContextMembers creating and managing ItemContext

// Приложения не могут ни непосредственно создавать объекты// Applications cannot create objects directly

// ItemContext, ни выводить классы из ItemContext.// ItemContext, nor derive classes from ItemContext.

interal ItemContext();interal ItemContext ();

// Создать ItemContext, который может использоваться для// Create an ItemContext that can be used to

// поиска заданных путей, или, если не задан путь, // search for given paths, or if no path is specified,

// хранилища по умолчанию на локальном компьютере.// default storages on the local computer.

public static ItemContext Open();public static ItemContext Open ();

public static ItemContext Open( string path );public static ItemContext Open (string path);

public static ItemContext Open( params string[] paths );public static ItemContext Open (params string [] paths);

// Возвращает пути, заданные тогда, когда был создан// Returns the paths specified when it was created

// ItemContext.// ItemContext.

public string[] GetOpenPaths();public string [] GetOpenPaths ();

// Создать копию этого ItemContext. Копия будет иметь// Create a copy of this ItemContext. Copy will have

// независимое состояние транзакции, кэширования и// independent state of transaction, caching and

// обновления. Кэш первоначально будет пустой. Ожидается,// updates. The cache will initially be empty. Expected,

// что использование клонированного ItemContext будет более// that using a cloned ItemContext will be more

// эффективным, чем открытие нового ItemContext, используя// efficient than opening a new ItemContext using

// этот же домен(ы) предметов.// same domain (s) of items.

public ItemContext Clone();public ItemContext Clone ();

// Закрыть ItemContext. Любая попытка использования// Close ItemContext. Any attempt to use

// ItemContext, после того как он будет закрыт, будет// ItemContext, after it is closed, will be

// приводить к ObjectDisposedException.// throw an ObjectDisposedException.

public void Close();public void Close ();

void IDisposable.Dispose();void IDisposable.Dispose ();

// True, если любой домен, заданный, когда был открыт// True, if any domain specified when it was opened

// ItemContext, разрешен для удаленного компьютера.// ItemContext, allowed for the remote computer.

public bool IsRemote { get; }public bool IsRemote {get; }

// Возвращает объект, который может обеспечить запрашиваемый// Returns an object that the requested one can provide

// тип службы. Возвращает null, если не может быть// type of service. Returns null if cannot be

// предоставлена запрашиваемая служба. Использование шаблона// requested service provided. Using a template

// IServiceProvider делает возможным факторизацию ИПП (API),// IServiceProvider makes factorization of APIs possible,

// которые нормально не используются и могут запутать// which are normally not used and can be confusing

// разработчиков, из класса ItemContext. ItemContext может// developers, from the ItemContext class. ItemContext can

// предоставлять следующие виды служб: IItemSerialization,// provide the following types of services: IItemSerialization,

// IStoreObjectCache// IStoreObjectCache

public object GetService( Type serviceType );public object GetService (Type serviceType);

Относящиеся к обновлению членыUpgrade related members

// Сохранить изменения, представленные всеми// Save Changes Submitted By Everyone

// модифицированными объектами и всеми объектами,// modified objects and all objects,

// переданными MarkForCreate или MarkForDelete. Может// passed to MarkForCreate or MarkForDelete. Can

// создавать UpdateCollisionException, если обнаруживается// throw UpdateCollisionException if detected

// конфликт обновления.// update conflict.

public void Update();public void Update ();

// Сохранить изменения, представленные заданными объектами.// Save the changes represented by the given objects.

// Объекты должны быть или модифицированы, или переданы// Objects must be either modified or transferred

// MarkForCreate или MarkForDelete, иначе создается// MarkForCreate or MarkForDelete, otherwise created

// ArgumentException. Может создавать// ArgumentException. Can create

// UpdateCollisionException, если обнаруживается конфликт// UpdateCollisionException if a conflict is detected

// обновления.// updates.

public void Update( object objectToUpdate );public void Update (object objectToUpdate);

public void Update( IEnumerable objectsToUpdate );public void Update (IEnumerable objectsToUpdate);

// Регенерирует содержимое заданных объектов из хранилища.// Regenerates the contents of the specified objects from the repository.

// Если объект был модифицирован, изменения// If the object has been modified, change

// перезаписываются, и объект больше не рассматривается// overwrite, and the object is no longer considered

// модифицированным. Создает ArgumentException, если// modified. Throws an ArgumentException if

// задается что-то, кроме предмета, расширения предмета или// something other than an item, an item extension, or

// связи.// communication.

public void Refresh( object objectToRefresh );public void Refresh (object objectToRefresh);

public void Refresh( IEnumerable objectsToRefresh );public void Refresh (IEnumerable objectsToRefresh);

// Устанавливается, когда обновление обнаруживает, что// Set when the update detects that

// данные были изменены в хранилище между тем, когда// data has been changed in the storage between when

// модифицированный объект извлекался, и когда была// the modified object was retrieved, and when it was

// предпринята попытка сохранить его. Если не// an attempt was made to save it. If not

// зарегистрирован обработчик событий, обновление создает// event handler registered, update creates

// исключительную ситуацию. Если зарегистрирован обработчик// exception. If a handler is registered

// событий, он может создать исключительную ситуацию для// events, it can create an exception for

// преждевременного прекращения обновления, вызвать// prematurely stop updating, call

// перезапись модифицированным объектом данных в хранилище// overwrite the modified data object in the storage

// или объединить изменения, сделанные в хранилище и в// or merge changes made to the repository and to

// объекте.// object.

public event ChangeCollisionEventHandler UpdateCollision;public event ChangeCollisionEventHandler UpdateCollision;

// Устанавливается в различных точках во время обработки// Set at various points during processing

// обновления для предоставления информации о ходе процесса// updates to provide information on the progress of the process

// обновления.// updates.

public event UpdateProgressEventhandler UpdateProgress;public event UpdateProgressEventhandler UpdateProgress;

// Асинхронные версии Обновления// Asynchronous Version Updates

public IAsyncResult BeginUpdate( IAsyncCallback callback, object state );public IAsyncResult BeginUpdate (IAsyncCallback callback, object state);

public IAsyncResult BeginUpdate( object objectToUpdate,public IAsyncResult BeginUpdate (object objectToUpdate,

IAsyncCallback callback,IAsyncCallback callback,

object state );object state);

public IAsyncResult BeginUpdate( IEnumerable objectsToUpdate,public IAsyncResult BeginUpdate (IEnumerable objectsToUpdate,

IAsyncCallback callback,IAsyncCallback callback,

object state );object state);

public void EndUpdate( IAsyncResult result);public void EndUpdate (IAsyncResult result);

// Асинхронные версии регенерации// Asynchronous versions of regeneration

public IAsyncResult BeginRefresh( object objectToRefresh,public IAsyncResult BeginRefresh (object objectToRefresh,

IAsyncCallback callback,IAsyncCallback callback,

object state );object state);

public IAsyncResult BeginRefresh( IEnumerable objectsToRefresh,public IAsyncResult BeginRefresh (IEnumerable objectsToRefresh,

IAsyncCallback callback,IAsyncCallback callback,

object state );object state);

public void EndRefresh( IAsyncResult result );public void EndRefresh (IAsyncResult result);

Относящиеся к транзакции членыTransactional Members

// Начать транзакцию с заданным уровнем изолирования.// Start the transaction with the specified isolation level.

// Уровнем изолирования по умолчанию является ReadCommited.// The default isolation level is ReadCommited.

// Во всех случаях запускается распределенная транзакция,// In all cases, a distributed transaction is triggered,

// так как она может, по необходимости, охватывать// since it can, if necessary, cover

// типизированные свойства предметов потока изменений.// typed properties of the items in the change flow.

public Transaction BeginTransaction();public Transaction BeginTransaction ();

public Transaction BeginTransaction( System.Data.IsolationLevel isolationLevel );public Transaction BeginTransaction (System.Data.IsolationLevel isolationLevel);

Относящиеся к поиску членыSearch Related Members

// Создает ItemSearcher, который будет выполнять поиск этого// Creates An ItemSearcher That Will Search For This

// контекста предмета для объектов заданного типа.// subject context for objects of a given type.

// Создает ArgumentException, если задается тип, отличный от// Throws an ArgumentException if a type other than

// предмета, связи или расширения предмета.// subject, communication or extension of the subject.

public ItemSearcher GetSearcher( Type type );public ItemSearcher GetSearcher (Type type);

// Находит предмет по его ИД (ID).// Finds the item by its ID.

public Item FindItemById( ItemId ItemId );public Item FindItemById (ItemId ItemId);

// Находит предмет по его пути. Путь может быть абсолютным// Finds an item along its path. The path may be absolute

// или относительным. Если он относительный, то создается// or relative. If it is relative, then it is created

// NotSupportedException, если были заданы многочисленные// NotSupportedException if multiple

// домены предметов, когда был открыт ItemContext.// item domains when ItemContext was opened.

// Возвращает null, если не существует такого предмета.// Returns null if no such item exists.

// Создает соединение к части \\машина\совместно // Creates a connection to the \\ machine \ part

// используемый ресурс домена для извлечения предмета.// used domain resource to retrieve the item.

// Предмет будет ассоциирован с этим доменом.// The item will be associated with this domain.

public Item FindItemByPath( string path );public Item FindItemByPath (string path);

// Находит предмет по его пути. Путь является относительным// Finds an item along its path. Path is relative

// по отношению к заданному домену предметов. Создает// in relation to the given domain of objects. Creates

// соединение к заданному домену для извлечения предмета.// connection to the specified domain to retrieve the item.

// Предмет будет ассоциирован с этим доменом. Возвращает// The item will be associated with this domain. Returns

// null, если не существует такого предмета.// null if no such item exists.

public Item FindItemByPath( string domain, string path );public Item FindItemByPath (string domain, string path);

// Находит набор предметов по пути. Путь является// Finds a set of items along the way. The way is

// относительным по отношению к заданным доменам предметов,// relative to the given domains of objects,

// когда был открыт ItemContext. Возвращает пустой// when the ItemContext was opened. Returns empty

// результат, если не существует такого предмета.// result if no such item exists.

public FindResult FindAllItemsByPath( string path );public FindResult FindAllItemsByPath (string path);

// Находит связь по ее ИД (ID).// Finds a relationship by its ID.

public Relationship FindRelationshipById( ItemId itemID,public Relationship FindRelationshipById (ItemId itemID,

RelationshipId relationshipId );RelationshipId relationshipId);

// Находит расширение предмета по его ИД (ID).// Finds the extension of the item by its ID.

public ItemExtension FindItemExtensionById( ItemId itemId,public ItemExtension FindItemExtensionById (ItemId itemId,

ItemExtensionId itemExtensionId );ItemExtensionId itemExtensionId);

// Находит все предметы, связи или расширения предметов// Finds all items, links, or item extensions

// заданного типа, необязательно удовлетворяющих данному// of the specified type, not necessarily satisfying the given

// фильтру. Создает ArgumentException, если задается тип,// filter. Throws an ArgumentException if a type is specified,

// отличный от одного из этих.// different from one of these.

public FindResult FindAll( Type type);public FindResult FindAll (Type type);

public FindResult FindAll( Type type, string filter );public FindResult FindAll (Type type, string filter);

// Находит любой предмет, связь или расширение предмета// Find any item, link, or extension of the item

// заданного типа, который удовлетворяет данному типу.// a given type that satisfies the given type.

// Создает ArgumentException, если задается тип, отличный от// Throws an ArgumentException if a type other than

// одного из этих. Возвращает null, если не обнаруживается// one of these. Returns null if not detected

// такой объект.// such an object.

public object FindOne( Type type, string filter );public object FindOne (Type type, string filter);

// Находит предмет, связь или расширение предмета// Finds an item, link, or extension of the item

// заданного типа, который удовлетворяет данному фильтру.// a given type that matches the given filter.

// Создает ArgumentException, если задается тип, отличный от// Throws an ArgumentException if a type other than

// одного из этих. Создает ObjectNotFoundException, если не// one of these. Throws an ObjectNotFoundException, if not

// был обнаружен такой объект. Создает// such an object was detected. Creates

// MultipleObjectsFoundException, если было обнаружено более// MultipleObjectsFoundException if more than one has been detected

// одного объекта.// single object.

public object FindOnly( Type type, string filter );public object FindOnly (Type type, string filter);

// Возвращает true, если существует предмет, связь или// Returns true if an item, relationship, or

// расширения предмета заданного типа, который удовлетворяет// extensions of an item of a given type that satisfies

// данному фильтру. Создает ArgumentException, если задается// this filter. Throws an ArgumentException if set

// тип, отличный от одного из этих.// type other than one of these.

public bool Exists( Type type, string filter );public bool Exists (Type type, string filter);

// Задает, сколько объектов, возвращенных поиском, относятся// Specifies how many objects returned by the search are related

// к карте идентификации объектов, поддерживаемой// to the object identification map supported by

// посредством ItemContext.// via ItemContext.

public SearchCollisionMode SearchCollisionMode { get; set; }public SearchCollisionMode SearchCollisionMode {get; set; }

// Устанавливается, когда задается PreserveModifiedObjects// Set when PreserveModifiedObjects is set

// для ResultMapping. Это событие дает возможность// for ResultMapping. This event provides an opportunity

// селективного обновления приложением модифицированного// selective update by application modified

// объекта данными, извлеченными поиском.// the object with the data retrieved by the search.

public event ChangeCollisionEventHandler SearchCollision;public event ChangeCollisionEventHandler SearchCollision;

// Встраивает объект из другого ItemContext в контекст этого// Embeds an object from another ItemContext in the context of this

// предмета. Если объект, представляющий один и тот же// subject. If an object representing the same

// предмет, связь или расширение предмета, уже не существует// item, link or extension of the item no longer exists

// в этой карте идентификации ItemContext, клон объекта// in this identification map ItemContext, object clone

// создается и добавляется к карте. Если объект// created and added to the map. If the object

// действительно существует, он обновляется состоянием и// really exists, it is updated by state and

// содержимым заданного объекта способом, который является// the contents of the given object in a way that is

// совместимым с SearchCollisionMode.// compatible with SearchCollisionMode.

public Item IncorporateItem( Item item );public Item IncorporateItem (Item item);

public Relationship IncorporateRelationship( Relationship relationship );public Relationship Incorporate Relationhip (Relationship relationship);

public ItemExtension IncorporateItemExtension( ItemExtension itemExtension );public ItemExtension IncorporateItemExtension (ItemExtension itemExtension);

}}

// Обработчик для событий ItemContext.UpdateCollision и// Handler for ItemContext.UpdateCollision and

// ItemSearcher.SearchCollision.// ItemSearcher.SearchCollision.

public delegate void ChangeCollisionEventHandler( object source,public delegate void ChangeCollisionEventHandler (object source,

ChangeCollisionEventArgs args );ChangeCollisionEventArgs args);

// Аргументы для делегата ChangeCollisionEventHandler.// Arguments for the delegate ChangeCollisionEventHandler.

public class ChangeCollisionEventArgs : EventArgspublic class ChangeCollisionEventArgs: EventArgs

{{

// Модифицированный объект предмета, расширения предмета или// Modified object of the item, extension of the item or

// связи.// communication.

public object ModifiedObject { get; }public object ModifiedObject {get; }

// Свойства из хранилища.// Properties from the repository.

public IDictionary StoredProperties { get; }public IDictionary StoredProperties {get; }

}}

// Обработчик для ItemContext.UpdateProgress.// Handler for ItemContext.UpdateProgress.

public delegate void UpdateProgressEventHandler( ItemContext item Context,public delegate void UpdateProgressEventHandler (ItemContext item Context,

UpdateProgressEventArgs args );UpdateProgressEventArgs args);

// Аргументы для делегата UpdateProgressEventHandler// Arguments for the delegate UpdateProgressEventHandler

public class ChangeCollisionEventArgs : EventArgspublic class ChangeCollisionEventArgs: EventArgs

{{

// Текущая операция обновления.// Current update operation.

public UpdateOperation CurrentOperation { get; }public UpdateOperation CurrentOperation {get; }

// Объект, который обновляется в настоящий момент.// The object that is currently being updated.

public object CurrentObject { get; }public object CurrentObject {get; }

}}

// Задает, сколько объектов, возвращаемых поиском, относятся// Specifies how many objects returned by the search are related

// к карте идентификации объектов, поддерживаемой// to the object identification map supported by

// посредством ItemContext.// via ItemContext.

public enum SearchCollisionModepublic enum SearchCollisionMode

{{

// Указывает, что новые объекты должны быть созданы и// Indicates that new objects should be created and

// возвращены. Игнорируются объекты, представляющие один и// returned. Ignored objects representing one and

// тот же предмет, расширение предмета или связь в карте// same item, item extension or map link

// идентификации. Если задается этот вариант, не// identification. If this option is specified, do not

// устанавливается событие SearchCollision.// Set the SearchCollision event.

DoNotMapSearchResults,DoNotMapSearchResults,

// Указывает, что объекты из карты идентификации должны быть// Indicates that the objects from the identification map should be

// возвращены. Если содержимое объекта было модифицировано// returned. If the contents of the object has been modified

// приложением, сохраняется содержимое модифицированного// application, the contents of the modified

// объекта. Если объект не был модифицирован, его содержимое// object. If the object has not been modified, its contents

// обновляется данными, возвращаемыми поиском. Приложение// updated with the data returned by the search. application

// может предоставить обработчик для события SearchCollision// can provide a handler for the SearchCollision event

// и селективно обновить объект, как требуется.// and selectively update the object as required.

PreserveModifiedObjects,PreserveModifiedObjects,

// Указывает, что объекты из карты идентификации должны быть// Indicates that the objects from the identification map should be

// возвращены. Содержимое объекта обновляется данными,// returned. The contents of the object are updated with data,

// возвращаемыми поиском, даже если объект был модифицирован// returned by the search, even if the object was modified

// приложением. Если задается этот вариант, не будет// application. If this option is specified, it will not

// устанавливаться событие SearchCollision.// set the SearchCollision event.

OverwriteModifiedObjectsOverwriteModifiedObjects

}}

// Текущая операция обновления.// Current update operation.

public enum UpdateOperationpublic enum UpdateOperation

{{

// Предусматривается тогда, когда вызывается в первый раз// Provided when first called

// Update. CurrentObject будет равным null.// Update. CurrentObject will be null.

OverallUpdateStarting,OverallUpdateStarting,

// Предусматривается как раз перед тем, как Update// Provided just before Update

// возвращает результат после успешного обновления.// returns the result after a successful update.

// CurrentObject будет равным null.// CurrentObject will be null.

OverallUpdateCompletedSucessfuIly,OverallUpdateCompletedSucessfuIly,

// Предусматривается как раз перед тем, как Update создает // Provided just before Update creates

// исключительную ситуацию. CurrentObject будет представлять// exception. CurrentObject will represent

// собой объект исключительной ситуации.// is an exception object.

OverallUpdateCompletedUnsuccessfully,OverallUpdateCompletedUnsuccessfully,

// Предусматривается тогда, когда запускается обновление// Provided when update starts

// объекта. CurrentObject будет ссылаться на объект, который// object. CurrentObject will reference the object that

// будет использоваться для обновленных.// will be used for updated.

ObjectUpdateStaring,ObjectUpdateStaring,

// Предусматривается, когда необходимо новое соединение.// Provided when a new connection is needed.

// CurrentObject будет представлять собой строку, которая// CurrentObject will be a string that

// содержит путь, идентифицирующий домен предметов,// contains a path identifying the domain of objects,

// переданный ItemContext.Open или извлеченный из поля// passed ItemContext.Open or retrieved from the field

// Location связи.// Location connection.

OpeningConnectionOpeningconnection

}}

}}

ПРИЛОЖЕНИЕ ВANNEX B

namespace System.Storagenamespace System.Storage

{{

// Выполняет поиск по конкретному типу в контексте предмета.// Searches for a specific type in the context of the item.

public class ItemSearcherpublic class ItemSearcher

{{

КонструкторыConstructors

public ItemSearcher();public ItemSearcher ();

public ItemSearcher( Type targetType, ItemContext context );public ItemSearcher (Type targetType, ItemContext context);

public ItemSearcher( Type targetType, ItemContext context,public ItemSearcher (Type targetType, ItemContext context,

params SearchExpression[] filters );params SearchExpression [] filters);

СвойстваThe properties

// Фильтры, используемые для идентификации совпадающих// Filters used to identify matching

// объектов.// objects.

public SearchExpressionCollection Filters {get;}public SearchExpressionCollection Filters {get;}

// ItemContext, который задает домены, в которых будет выполняться поиск// ItemContext, which sets the domains to be searched

public ItemContext ItemContext {get; set;}public ItemContext ItemContext {get; set;}

// Коллекция параметров поиска.// Collection of search parameters.

public ParameterCollection Parameters {get;}public ParameterCollection Parameters {get;}

// Тип, по отношению к которому искатель будет работать. Для// Type with respect to which the crawler will work. For

// простых поисков это тип объекта, который будет возвращен.// simple searches is the type of object to be returned.

public Type TargetType {get; set;}public Type TargetType {get; set;}

Методы поискаSearch methods

// Находит объекты TargetType, которые удовлетворяют// Find TargetType objects that satisfy

// условиям, заданным посредством Filters. Возвращает пустой// conditions specified by Filters. Returns empty

// FindResult, если не существует таких объектов.// FindResult if no such objects exist.

public FindResult FindAll();public FindResult FindAll ();

public FindResult FindAll( FindOptions findOptions );public FindResult FindAll (FindOptions findOptions);

public FindResult FindAll( params SortOption[] sortOptions );public FindResult FindAll (params SortOption [] sortOptions);

// Находит любой один объект TargetType, который// Find any single TargetType object that

// удовлетворяет условиям, заданным посредством Filters.// satisfies the conditions specified by Filters.

// Возвращает null, если не существует таких объектов.// Returns null if no such objects exist.

public object FindOne();public object FindOne ();

public object FindOne( FindOptions findOptions );public object FindOne (FindOptions findOptions);

public object FindOne( params SortOption[] sortOptions );public object FindOne (params SortOption [] sortOptions);

// Находит объект TargetType, который удовлетворяет// Finds a TargetType object that satisfies

// условиям, заданным посредством Filters. Создает// conditions specified by Filters. Creates

// ObjectNotFoundException, если не был найден такой объект.// ObjectNotFoundException if no such object was found.

// Создает MultipleObjectsFoundException, если было найдено// Throws MultipleObjectsFoundException if found

// более одного объекта.// more than one object.

public object FindOnly();public object FindOnly ();

public object FindOnly( FindOptions findOptions );public object FindOnly (FindOptions findOptions);

// Определяет, существует ли объект TargetType, который// Determines if a TargetType exists that

// удовлетворяет условиям, заданным посредством Filters.// satisfies the conditions specified by Filters.

public bool Exists();public bool Exists ();

// Создает объект, который может использоваться для того,// Creates an object that can be used to

// чтобы более эффективно исполнять один и тот же поиск// to do the same search more efficiently

// неоднократно.// repeatedly.

public PreparedFind PrepareFind();public PreparedFind PrepareFind ();

public PreparedFind PrepareFind( FindOptions findOptions );public PreparedFind PrepareFind (FindOptions findOptions);

public PreparedFind PrepareFind( params SortOption[] sortOptions );public PreparedFind PrepareFind (params SortOption [] sortOptions);

// Извлекает количество записей, которое будет возвращаться// Retrieves the number of records to be returned

// посредством FindAll().// via FindAll ().

public int GetCount();public int GetCount ();

// Асинхронные версии различных методов.// Asynchronous versions of various methods.

public IAsyncResult BeginFindAll( AsyncCallback callback,public IAsyncResult BeginFindAll (AsyncCallback callback,

object state );object state);

public IAsyncResult BeginFindAll( FindOptions findOptions,public IAsyncResult BeginFindAll (FindOptions findOptions,

AsyncCallback callback,AsyncCallback callback,

object state );object state);

public IAsyncResult BeginFindAll( SortOption[] sortOptions,public IAsyncResult BeginFindAll (SortOption [] sortOptions,

AsyncCallback callback,AsyncCallback callback,

object state );object state);

public FindResult EndFindAll( IAsyncResult ar );public FindResult EndFindAll (IAsyncResult ar);

public IAsyncResult BeginFindOne( AsyncCallback callback,public IAsyncResult BeginFindOne (AsyncCallback callback,

object state );object state);

public IAsyncResult BeginFindOne( FindOptions findOptions,public IAsyncResult BeginFindOne (FindOptions findOptions,

AsyncCallback callback,AsyncCallback callback,

object state );object state);

public IAsyncResult BeginFindOne( SortOption[] sortOptions,public IAsyncResult BeginFindOne (SortOption [] sortOptions,

AsyncCallback callback,AsyncCallback callback,

object state );object state);

public object EndFindOne( IAsyncResult asyncResult);public object EndFindOne (IAsyncResult asyncResult);

public IAsyncResult BeginFindOnly( AsyncCallback callback,public IAsyncResult BeginFindOnly (AsyncCallback callback,

object state );object state);

public IAsyncResult BeginFindOnly( FindOptions findOptions,public IAsyncResult BeginFindOnly (FindOptions findOptions,

AsyncCallback callback,AsyncCallback callback,

object state );object state);

public IAsyncResult BeginFindOnly( SortOption[] sortOptions,public IAsyncResult BeginFindOnly (SortOption [] sortOptions,

AsyncCallback callback,AsyncCallback callback,

object state );object state);

public object EndFindOnly( IAsyncResult asyncResult );public object EndFindOnly (IAsyncResult asyncResult);

public IAsyncResult BeginGetCount( AsyncCallback callback,public IAsyncResult BeginGetCount (AsyncCallback callback,

object state );object state);

public int EndGetCount( IAsyncResult asyncResult );public int EndGetCount (IAsyncResult asyncResult);

public IAsyncResult BeginExists( AsyncCallback callback,public IAsyncResult BeginExists (AsyncCallback callback,

object state );object state);

public bool EndExists( IAsyncResult asyncResult );public bool EndExists (IAsyncResult asyncResult);

// Варианты, используемые при выполнении поиска.// Options used when performing the search.

public class FindOptionspublic class FindOptions

{{

public FindOptions();public FindOptions ();

public FindOptions( params SortOption[] sortOptions );public FindOptions (params SortOption [] sortOptions);

// Задает, должны ли загружаться с задержкой загружаемые с задержкой поля.// Specifies whether to load delayed fields.

public bool DelayLoad {get; set;}public bool DelayLoad {get; set;}

// Количество совпадений, которые возвращаются.// The number of matches that are returned.

public int MaxResults {get; set;}public int MaxResults {get; set;}

// Коллекция вариантов поиска.// Collection of search options.

public SortOptionCollection SortOptions {get;}public SortOptionCollection SortOptions {get;}

}}

// Представляет имя и значение параметра.// Represents the name and value of the parameter.

public class Parameterpublic class Parameter

{{

// Инициализирует объект Parameter именем и значением.// Initializes the Parameter object by name and value.

public Parameter( string name, object value );public Parameter (string name, object value);

// Имя параметра.// Name of the parameter.

public string Name {get;}public string Name {get;}

// Значение параметра.// The value of the parameter.

public object Value {get; set;}public object Value {get; set;}

}}

// Коллекция пар имя/значение параметра.// Collection of parameter name / value pairs.

public class ParameterCollection : ICollectionpublic class ParameterCollection: ICollection

{{

public ParameterCollection();public ParameterCollection ();

public int Count {get;}public int Count {get;}

public object this[string name] {get; set;}public object this [string name] {get; set;}

public object SyncRoot {get;}public object SyncRoot {get;}

public void Add( Parameter parameter );public void Add (Parameter parameter);

public Parameter Add( string name, object value );public Parameter Add (string name, object value);

public bool Contains( Parameter parameter);public bool Contains (Parameter parameter);

public bool Contains( string name );public bool Contains (string name);

public void CopyTo( Parameter[] array, int index );public void CopyTo (Parameter [] array, int index);

void ICollection.CopyTo( Array array, int index );void ICollection.CopyTo (Array array, int index);

IEnumerator IEnumerable.GetEnumerator();IEnumerator IEnumerable.GetEnumerator ();

public void Remove( Parameter parameter );public void Remove (Parameter parameter);

public void Remove( string name );public void Remove (string name);

}}

// Представляет поиск, который был оптимизирован для// Represents a search that has been optimized for

// многократного исполнения.// multiple execution.

public class PreparedFindpublic class PreparedFind

{{

public ItemContext ItemContext {get;}public ItemContext ItemContext {get;}

public ParameterCollection Parameters {get;}public ParameterCollection Parameters {get;}

public FindResult FindAll();public FindResult FindAll ();

public object FindOne();public object FindOne ();

public object FindOnly();public object FindOnly ();

public bool Exists();public bool Exists ();

}}

// Задает варианты сортировки, используемые в поиске.// Specifies the sorting options used in the search.

public class SortOptionpublic class SortOption

{{

// Инициализирует объект значениями по умолчанию.// Initializes the object with default values.

public SortOption();public SortOption ();

// Инициализирует объект SortOptions посредством// Initializes the SortOptions object by

// SearchExpression, порядка.// SearchExpression, order.

public SortOption( SearchExpression searchExpression, SortOrder order );public SortOption (SearchExpression searchExpression, SortOrder order);

// Поиск SearchExpression, который идентифицирует свойство,// Search for SearchExpression that identifies the property,

// которое будет сортироваться.// which will be sorted.

public SearchExpression Expression {get; set;}public SearchExpression Expression {get; set;}

// Задает порядок сортировки по возрастанию или убыванию.// Sets the sort order in ascending or descending order.

public SortOrder Order {get; set;}public SortOrder Order {get; set;}

}}

// Коллекция объектов вариантов сортировки.// Collection of objects of sorting options.

public class SortOptionCollection : IListpublic class SortOptionCollection: IList

{{

public SortOptionCollection();public SortOptionCollection ();

public SortOption this[int index] {get; set;}public SortOption this [int index] {get; set;}

public int Add( SortOption value );public int Add (SortOption value);

public int Add( SearchExpression expression, SortOrder order );public int Add (SearchExpression expression, SortOrder order);

int IList.Add( object value );int IList.Add (object value);

public void Clear();public void Clear ();

public bool Contains( SortOption value );public bool Contains (SortOption value);

bool IList.Contains( object value );bool IList.Contains (object value);

public void CopyTo( SortOption[] array, int index );public void CopyTo (SortOption [] array, int index);

void ICollection.CopyTo( Array array, int index );void ICollection.CopyTo (Array array, int index);

public int Count {get;}public int Count {get;}

IEnumerator IEnumerable.GetEnumerator();IEnumerator IEnumerable.GetEnumerator ();

public void Insert( int index, SortOption value );public void Insert (int index, SortOption value);

void IList.Insert( int index, object value );void IList.Insert (int index, object value);

public int IndexOf( SortOption value );public int IndexOf (SortOption value);

int IList.IndexOf( object value );int IList.IndexOf (object value);

public void Remove( SortOption value );public void Remove (SortOption value);

void IList.Remove( object value );void IList.Remove (object value);

public void RemoveAt( int index );public void RemoveAt (int index);

public object SyncRoot {get;}public object SyncRoot {get;}

}}

// Задает порядок сортировки, используя объект SortOption.// Sets the sort order using the SortOption object.

public enum SortOrderpublic enum SortOrder

{{

Ascending,Ascending,

DescendingDescending

}}

}}

ПРИЛОЖЕНИЕ СAPPENDIX C

namespace System.Storagenamespace System.Storage

{{

public abstract class FindResult: IAsyncObjectReaderpublic abstract class FindResult: IAsyncObjectReader

{{

public FindResult();public FindResult ();

// Перемещает FindResult в следующую позицию в результате.// Moves FindResult to the next position in the result.

public bool Read();public bool Read ();

public IAsyncResult BeginRead( AsyncCallback callback, object state );public IAsyncResult BeginRead (AsyncCallback callback, object state);

public bool EndRead( IAsyncResult asyncResult);public bool EndRead (IAsyncResult asyncResult);

// Текущий объект.// The current object.

public object Current {get;}public object Current {get;}

// Возвращает, содержит ли или нет FindResult какие-либо// Returns whether or not FindResult contains any

// объекты.// objects.

public bool HasResults {get;}public bool HasResults {get;}

// Возвращает, закрыт ли или нет FindResult.// Returns whether or not FindResult is closed.

public bool IsClosed {get;}public bool IsClosed {get;}

// Возвращает тип предметов в этом FindResult.// Returns the type of items in this FindResult.

public Type ObjectType {get;}public Type ObjectType {get;}

// Закрывает FindResult// Closes FindResult

public void Close();public void Close ();

void IDisposable.Dispose();void IDisposable.Dispose ();

// Возвращает перечислитель по FindResult, начиная с текущей// Returns an enumerator by FindResult, starting from the current

// позиции. Продвижение любого перечислителя по FindResult // position. Promotion of any enumerator on FindResult

// продвигает все перечислители, а также сам FindResult.// promotes all enumerators, as well as FindResult itself.

IEnumerator IEnumerable.GetEnumerator();IEnumerator IEnumerable.GetEnumerator ();

public FindResultEnumerator GetEnumerator();public FindResultEnumerator GetEnumerator ();

}}

public abstract class FindResultEnumerator : IEnumerator, IDisposablepublic abstract class FindResultEnumerator: IEnumerator, IDisposable

{{

public abstract object Current { get; }public abstract object Current {get; }

public abstract bool MoveNext();public abstract bool MoveNext ();

public abstract void Reset();public abstract void Reset ();

public abstract void Close();public abstract void Close ();

void IDisposable.Dispose();void IDisposable.Dispose ();

}}

}}

namespace Systemnamespace system

{{

// Общий интерфейс для итерации по объектам.// General interface for iterating over objects.

public interface IObjectReader : IEnumerable, IDisposablepublic interface IObjectReader: IEnumerable, IDisposable

{{

object Current {get;}object Current {get;}

bool IsClosed {get;}bool IsClosed {get;}

bool HasResults {get;}bool HasResults {get;}

Type ObjectType {get;}Type ObjectType {get;}

bool Read();bool Read ();

void Close();void Close ();

}}

// Добавляет асинхронные методы к IObjectReader// Adds asynchronous methods to IObjectReader

public interface IAsyncObjectReader : IObjectReaderpublic interface IAsyncObjectReader: IObjectReader

{{

IAsyncResult BeginRead( AsyncCallback callback, object state );IAsyncResult BeginRead (AsyncCallback callback, object state);

bool EndRead( IAsyncResult result );bool EndRead (IAsyncResult result);

}}

}}

Claims (14)

1. Способ управления хранилищем данных, заключающийся в том, что:
организуют хранилище данных таким образом, что хранилище данных содержит:
Предмет;
Элемент;
Множество Связей, содержащих связи Включения и Ссылки, причем связи Включения управляют временем существования Предметов, причем упомянутые связи Включения классифицируют на связи Прикрепления и Внедрения, причем Предмет удаляют, когда удаляют все связи Прикрепления для Предмета;
причем упомянутый Предмет представляет собой единицу данных, хранимую в хранилище данных, и имеет, по меньшей мере, один из типа или подтипа и включает в себя упомянутый Элемент и упомянутое Множество Связей, причем упомянутый Элемент представляет собой экземпляр типа, содержащий одно или несколько полей, и причем упомянутое множество Связей представляет собой связывание, по меньшей мере, между двумя Предметами;
Базовую Схему, которая устанавливает структуру для создания и организации каждого Предмета и устанавливает основополагающий набор свойств; и
Основную Схему, которая определяет набор основных типов, причем каждый Предмет характеризуется в, по меньшей мере, одном основном типе, основанном на типе Предмета или подтипе Предмета.
1. The method of managing the data warehouse, which consists in the fact that:
organize the data warehouse in such a way that the data warehouse contains:
Thing;
Element;
Many Links containing Inclusion and Referencing links, and Inclusion links control the life of the Items, and the mentioned Inclusion links are classified into Attachment and Deployment links, and the Item is deleted when all Attachment links for the Item are deleted;
moreover, said Item is a data unit stored in a data warehouse and has at least one of a type or subtype and includes said Item and said Set of Links, said Item being an instance of a type containing one or more fields, and wherein said plurality of Bonds is a bonding between at least two Items;
A Basic Scheme that establishes a structure for the creation and organization of each Item and establishes a fundamental set of properties; and
A Basic Scheme that defines a set of basic types, each Item being characterized in at least one basic type based on the type of the Item or the subtype of the Item.
2. Способ по п.1, в котором дополнительно организуют хранилище данных таким образом, что хранилище данных содержит множество Предметов, причем упомянутое множество Предметов содержит Папку Предметов и, по меньшей мере, один другой Предмет, который является членом упомянутой Папки Предметов.2. The method according to claim 1, in which the data warehouse is further organized in such a way that the data warehouse contains a plurality of Items, said plurality of Items comprising a Folder of Items and at least one other Item that is a member of said Item Folder. 3. Способ по п.1, в котором дополнительно организуют хранилище данных таким образом, что хранилище данных содержит множество Предметов, причем упомянутое множество Предметов содержит Категорию и по меньшей мере один другой Предмет, который является членом упомянутой Категории.3. The method according to claim 1, in which the data warehouse is further arranged in such a way that the data store contains a plurality of Items, said plurality of Items containing a Category and at least one other Item that is a member of said Category. 4. Способ по п.1, в котором дополнительно организуют хранилище данных таким образом, что хранилище данных содержит второй Элемент, и в котором упомянутая Связь содержит упомянутый второй Элемент.4. The method according to claim 1, in which the data warehouse is further arranged in such a way that the data store contains a second Element, and wherein said Communication contains said second Element. 5. Способ по п.1, в котором каждый Предмет из набора основных Предметов выводят из Общего Единственного Базового Предмета.5. The method according to claim 1, in which each Item from a set of core Items is derived from a Common Single Base Item. 6. Способ по п.1, в котором упомянутый Общий Единственный Базовый Предмет представляет собой основополагающий Предмет в Базовой Схеме.6. The method according to claim 1, in which the aforementioned General Unique Basic Subject is a fundamental Subject in the Basic Scheme. 7. Считываемый компьютером носитель, содержащий исполняемые компьютером инструкции для выполнения этапов, на которых:
организуют хранилище данных таким образом, что хранилище данных содержит:
Предмет;
Элемент;
Множество Связей, содержащих связи Включения и Ссылки, причем связи Включения управляют временем существования Предметов, причем упомянутые связи Включения классифицируют на связи Прикрепления и Внедрения, причем Предмет удаляют, когда удаляют все связи Прикрепления для Предмета;
причем упомянутый Предмет представляет собой единицу данных, хранимую в хранилище данных, и имеет, по меньшей мере, один из типа или подтипа и включает в себя упомянутый Элемент и упомянутое Множество Связей, причем упомянутый Элемент представляет собой экземпляр типа, содержащий одно или несколько полей, и причем упомянутое Множество Связей представляет собой связывание, по меньшей мере, между двумя Предметами;
Базовую Схему, которая устанавливает структуру для создания и организации каждого Предмета и устанавливает основополагающий набор свойств; и
Основную Схему, которая определяет набор основных типов, причем каждый Предмет характеризуется в, по меньшей мере, одном основном типе, основанном на типе Предмета или подтипе Предмета.
7. Computer-readable media containing computer-executable instructions for performing steps in which:
organize the data warehouse in such a way that the data warehouse contains:
Thing;
Element;
Many Links containing Inclusion and Referencing links, and Inclusion links control the life of the Items, and the mentioned Inclusion links are classified into Attachment and Deployment links, and the Item is deleted when all Attachment links for the Item are deleted;
moreover, said Item is a data unit stored in a data warehouse and has at least one of a type or subtype and includes said Item and said Set of Links, said Item being an instance of a type containing one or more fields, and wherein said Set of Links is a linking between at least two Items;
A Basic Scheme that establishes a structure for the creation and organization of each Item and establishes a fundamental set of properties; and
A Basic Scheme that defines a set of basic types, each Item being characterized in at least one basic type based on the type of the Item or the subtype of the Item.
8. Считываемый компьютером носитель по п.7, дополнительно содержащий исполняемые компьютером инструкции для организации хранилища данных таким образом, что хранилище данных содержит множество Предметов, причем упомянутое множество Предметов содержит Папку Предметов и, по меньшей мере, один другой Предмет, который является членом упомянутой Папки Предметов.8. The computer-readable medium of claim 7, further comprising computer-executable instructions for organizing the data warehouse in such a way that the data store contains a plurality of Items, said plurality of Items comprising a Folder of Items and at least one other Item that is a member of said Item Folders. 9. Считываемый компьютером носитель по п.7, дополнительно содержащий исполняемые компьютером инструкции для организации хранилища данных таким образом, что хранилище данных содержит множество Предметов, причем упомянутое множество Предметов содержит Категорию и по меньшей мере один другой Предмет, который является членом упомянутой Категории.9. The computer-readable medium according to claim 7, further comprising computer-executable instructions for organizing the data warehouse in such a way that the data warehouse contains a plurality of Items, said plurality of Items containing a Category and at least one other Item that is a member of said Category. 10. Считываемый компьютером носитель по п.7, дополнительно содержащий исполняемые компьютером инструкции для организации хранилища данных таким образом, что хранилище данных содержит второй Элемент, и в котором упомянутая Связь содержит упомянутый второй Элемент.10. The computer-readable medium of claim 7, further comprising computer-executable instructions for organizing the data store in such a way that the data store contains a second Item, and in which said Communication contains said second Item. 11. Компьютерная система, содержащая:
процессор и
память, содержащую:
Предмет;
Элемент;
Множество Связей, содержащих связи Включения и Ссылки, причем связи Включения управляют временем существования Предметов, причем упомянутые связи Включения классифицируют на связи Прикрепления и Внедрения, причем Предмет удаляют, когда удаляют все связи Прикрепления для Предмета;
причем упомянутый Предмет представляет собой единицу данных, хранимую в хранилище данных, и имеет, по меньшей мере, один из типа или подтипа и включает в себя упомянутый Элемент и упомянутое Множество Связей, причем упомянутый Элемент представляет собой экземпляр типа, содержащий одно или несколько полей, и причем упомянутое Множество Связей представляет собой связывание, по меньшей мере, между двумя Предметами;
Базовую Схему, которая устанавливает структуру для создания и организации каждого Предмета и устанавливает основополагающий набор свойств; и
Основную Схему, которая определяет набор основных типов, причем каждый Предмет характеризуется в, по меньшей мере, одном основном типе, основанном на типе Предмета или подтипе Предмета.
11. A computer system containing:
processor and
memory containing:
Thing;
Element;
Many Links containing Inclusion and Referencing links, and Inclusion links control the life of the Items, and the mentioned Inclusion links are classified into Attachment and Deployment links, and the Item is deleted when all Attachment links for the Item are deleted;
moreover, said Item is a data unit stored in a data warehouse and has at least one of a type or subtype and includes said Item and said Set of Links, said Item being an instance of a type containing one or more fields, and wherein said Set of Links is a linking between at least two Items;
A Basic Scheme that establishes a structure for the creation and organization of each Item and establishes a fundamental set of properties; and
A Basic Scheme that defines a set of basic types, each Item being characterized in at least one basic type based on the type of the Item or the subtype of the Item.
12. Компьютерная система по п.11, в которой память содержит множество Предметов, причем упомянутое множество Предметов содержит Папку Предметов и по меньшей мере один другой Предмет, который является членом упомянутой Папки Предметов.12. The computer system of claim 11, wherein the memory comprises a plurality of Items, said plurality of Items comprising an Item Folder and at least one other Item that is a member of said Item Folder. 13. Компьютерная система по п.11, в которой память содержит множество Предметов, причем упомянутое множество Предметов содержит Категорию и, по меньшей мере, один другой Предмет, который является членом упомянутой Категории.13. The computer system of claim 11, wherein the memory contains a plurality of Items, said plurality of Items containing a Category and at least one other Item that is a member of said Category. 14. Компьютерная система по п.11, в которой память содержит второй Элемент и в которой упомянутая Связь содержит упомянутый второй Элемент. 14. The computer system according to claim 11, in which the memory contains the second Element and in which said Communication contains the said second Element.
RU2006105208/09A 2003-08-21 2003-08-21 Systems and methods of data modelling in storage platform based on subjects RU2371757C2 (en)

Priority Applications (1)

Application Number Priority Date Filing Date Title
RU2006105208/09A RU2371757C2 (en) 2003-08-21 2003-08-21 Systems and methods of data modelling in storage platform based on subjects

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
RU2006105208/09A RU2371757C2 (en) 2003-08-21 2003-08-21 Systems and methods of data modelling in storage platform based on subjects

Publications (2)

Publication Number Publication Date
RU2006105208A RU2006105208A (en) 2006-08-10
RU2371757C2 true RU2371757C2 (en) 2009-10-27

Family

ID=37059483

Family Applications (1)

Application Number Title Priority Date Filing Date
RU2006105208/09A RU2371757C2 (en) 2003-08-21 2003-08-21 Systems and methods of data modelling in storage platform based on subjects

Country Status (1)

Country Link
RU (1) RU2371757C2 (en)

Cited By (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
RU2450342C1 (en) * 2011-08-01 2012-05-10 Федеральное государственное бюджетное образовательное учреждение высшего профессионального образования "Южно-Российский государственный университет экономики и сервиса" (ФГБОУ ВПО "ЮРГУЭС") Image reconstruction device
RU2454713C1 (en) * 2011-03-09 2012-06-27 Курское открытое акционерное общество "Прибор" Miniature system for gathering and recording flight information
RU2517428C2 (en) * 2012-06-13 2014-05-27 Федеральное государственное бюджетное образовательное учреждение высшего профессионального образования "Самарский государственный университет путей сообщения" (СамГУПС) Method of generating quasi-structured models of factographic information content of documents
RU2646334C2 (en) * 2013-04-30 2018-03-02 МАЙКРОСОФТ ТЕКНОЛОДЖИ ЛАЙСЕНСИНГ, ЭлЭлСи File management using placeholders
RU2658172C2 (en) * 2014-05-08 2018-06-19 Хуавэй Текнолоджиз Ко., Лтд. Method and device for certificate obtaining
US10264039B2 (en) 2013-05-01 2019-04-16 Microsoft Technology Licensing, Llc Streaming content and placeholders
RU2801374C1 (en) * 2022-04-07 2023-08-08 Евгений Олегович Добрышкин System with role-based access control to the organization of the operational maintenance of buildings and structures

Cited By (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
RU2454713C1 (en) * 2011-03-09 2012-06-27 Курское открытое акционерное общество "Прибор" Miniature system for gathering and recording flight information
RU2450342C1 (en) * 2011-08-01 2012-05-10 Федеральное государственное бюджетное образовательное учреждение высшего профессионального образования "Южно-Российский государственный университет экономики и сервиса" (ФГБОУ ВПО "ЮРГУЭС") Image reconstruction device
RU2517428C2 (en) * 2012-06-13 2014-05-27 Федеральное государственное бюджетное образовательное учреждение высшего профессионального образования "Самарский государственный университет путей сообщения" (СамГУПС) Method of generating quasi-structured models of factographic information content of documents
RU2646334C2 (en) * 2013-04-30 2018-03-02 МАЙКРОСОФТ ТЕКНОЛОДЖИ ЛАЙСЕНСИНГ, ЭлЭлСи File management using placeholders
US10264039B2 (en) 2013-05-01 2019-04-16 Microsoft Technology Licensing, Llc Streaming content and placeholders
RU2658172C2 (en) * 2014-05-08 2018-06-19 Хуавэй Текнолоджиз Ко., Лтд. Method and device for certificate obtaining
US10225246B2 (en) 2014-05-08 2019-03-05 Huawei Technologies Co., Ltd. Certificate acquiring method and device
RU2801374C1 (en) * 2022-04-07 2023-08-08 Евгений Олегович Добрышкин System with role-based access control to the organization of the operational maintenance of buildings and structures

Also Published As

Publication number Publication date
RU2006105208A (en) 2006-08-10

Similar Documents

Publication Publication Date Title
US7555497B2 (en) Systems and methods for separating units of information manageable by a hardware/software interface system from their physical organization
US7428546B2 (en) Systems and methods for data modeling in an item-based storage platform
US8131739B2 (en) Systems and methods for interfacing application programs with an item-based storage platform
US7483915B2 (en) Systems and method for representing relationships between units of information manageable by a hardware/software interface system
US7739316B2 (en) Systems and methods for the implementation of base schema for organizing units of information manageable by a hardware/software interface system
KR101120817B1 (en) Systems and methods for providing relational and hierarchical synchronization services for units of information manageable by hardware/software interface system
US7529811B2 (en) Systems and methods for the implementation of a core schema for providing a top-level structure for organizing units of information manageable by a hardware/software interface system
JP4394643B2 (en) System and method for data modeling in an item-based storage platform
US7349913B2 (en) Storage platform for organizing, searching, and sharing data
AU2003259961B2 (en) Systems and methods for interfacing application programs with an item-based storage platform
JP4583376B2 (en) System and method for realizing a synchronous processing service for a unit of information manageable by a hardware / software interface system
US20050055354A1 (en) Systems and methods for representing units of information manageable by a hardware/software interface system but independent of physical representation
JP2006018821A (en) System and method for providing conflict handling for peer-to-peer synchronization of units of information manageable by hardware/software interface system
JP4583375B2 (en) System for implementation of synchronization schema
JP4580390B2 (en) System and method for extending and inheriting information units manageable by a hardware / software interface system
RU2371757C2 (en) Systems and methods of data modelling in storage platform based on subjects
JP4394644B2 (en) Storage platform for organizing, searching, and sharing data
RU2412461C2 (en) Systems and methods of interfacing application programs with article based storage platform
KR101109390B1 (en) Systems and methods for providing synchronization services for units of information manageable by a hardware/software interface system
ZA200600644B (en) Systems and methods for interfacing application programs with an item-based storage platform

Legal Events

Date Code Title Description
PC41 Official registration of the transfer of exclusive right

Effective date: 20150526

MM4A The patent is invalid due to non-payment of fees

Effective date: 20180822