[go: up one dir, main page]

CN1871598A - System and method for extension and inheritance of information units manageable by a hardware/software interface system - Google Patents

System and method for extension and inheritance of information units manageable by a hardware/software interface system Download PDF

Info

Publication number
CN1871598A
CN1871598A CNA2004800018334A CN200480001833A CN1871598A CN 1871598 A CN1871598 A CN 1871598A CN A2004800018334 A CNA2004800018334 A CN A2004800018334A CN 200480001833 A CN200480001833 A CN 200480001833A CN 1871598 A CN1871598 A CN 1871598A
Authority
CN
China
Prior art keywords
project
item
type
hardware
expansion
Prior art date
Legal status (The legal status 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 status listed.)
Granted
Application number
CNA2004800018334A
Other languages
Chinese (zh)
Other versions
CN1871598B (en
Inventor
B·德米洛斯基
R·T·维特尼
P·J·汤普森
A·K·诺日
S·阿加瓦尔
P·塞里斯
D·G·坎普贝尔
F·S·特瑞克
K·卡梅龙
W·R·史密斯
D·A·沙基比
N·H·巴卢
S·P·阿查里雅
B·S·拉曼
P·M·施皮罗
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Microsoft Technology Licensing LLC
Original Assignee
Microsoft Corp
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
Priority claimed from US10/646,580 external-priority patent/US7428546B2/en
Priority claimed from PCT/US2003/026144 external-priority patent/WO2005029313A1/en
Priority claimed from US10/693,574 external-priority patent/US7590643B2/en
Application filed by Microsoft Corp filed Critical Microsoft Corp
Publication of CN1871598A publication Critical patent/CN1871598A/en
Application granted granted Critical
Publication of CN1871598B publication Critical patent/CN1871598B/en
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/448Execution paradigms, e.g. implementations of programming paradigms
    • G06F9/4488Object-oriented
    • G06F9/4492Inheritance
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/10File systems; File servers
    • G06F16/17Details of further file system functions
    • G06F16/178Techniques for file synchronisation in file systems
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/28Databases characterised by their database models, e.g. relational or object models
    • G06F16/284Relational databases
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Databases & Information Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Data Mining & Analysis (AREA)
  • Mathematical Physics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Stored Programmes (AREA)
  • Document Processing Apparatus (AREA)

Abstract

By modeling real-world application objects with complex structures, behaviors, and operations described by the schema implemented by the hardware/software interface system, various embodiments of the present invention provide rich subtyping functionality by extending items (and item types) using "extensions" that provide additional data structures (properties, relationships, etc.) to already existing item type structures. Extensions are strongly typed instances that cannot exist independently of and must be attached to an item or nested element. Extensions also address the "multi-typing" problem by allowing overlapping of type instances (e.g., a document may be a "legal document," or may be a "secure document").

Description

用于可由硬件/软件接口系统管理的信息单元的扩展和继承的系统和方法System and method for extension and inheritance of information units manageable by a hardware/software interface system

相关申请的交叉引用Cross References to Related Applications

本发明要求下列专利申请的优先权:2003年10月24日提交的美国专利申请号10/693,574(代理案卷号MSFT-2847),标题为“SYSTEMS AND METHODS FOREXTENSIONS AND INHEITANCE FOR UNITS OF INFORMATIONMANAGEABLE BY A HARDWARE/SOFTWARE INTERFACE SYSTEM(用于可由硬件/软件接口系统管理的信息单元的扩展和继承的系统和方法)”;2003年8月21日提交的美国专利申请号10/646,580(代理案卷号MSFT-2735),标题为“SYSTEMSAND METHODS FOR DATA MODELING IN AN ITEM-BASED STORAGEPLATFORM(在基于项目的存储平台中用于数据建模的系统和方法)”;以及2003年8月21日提交的国际申请号PCT/US 03/26144(代理案卷号MSFT-2779),标题为“SYSTEM AND METHODS FOR DATA MODELING IN AN ITEM-BASEDSTORAGE PLATFORM(在基于项目的存储平台中用于数据建模的系统和方法)”;通过引用将它们的内容包括在此。This application claims priority to the following patent application: U.S. Patent Application Serial No. 10/693,574 (Attorney Docket MSFT-2847), filed October 24, 2003, and entitled "SYSTEMS AND METHODS FOREXTENSIONS AND INHEITANCE FOR UNITS OF INFORMATION MANAGEABLE BY A HARDWARE /SOFTWARE INTERFACE SYSTEM (System and Method for Extension and Inheritance of Information Units Manageable by a Hardware/Software Interface System)"; U.S. Patent Application No. 10/646,580, filed August 21, 2003 (Attorney Docket No. MSFT-2735 ), entitled "SYSTEMSAND METHODS FOR DATA MODELING IN AN ITEM-BASED STORAGEPLATFORM"; and International Application No. PCT/ US 03/26144 (Attorney Docket No. MSFT-2779), entitled "SYSTEM AND METHODS FOR DATA MODELING IN AN ITEM-BASEDSTORAGE PLATFORM"; by reference Include their content here.

本申请在主题上与在下面一般指定的申请中所揭示的发明相关,通过引用将它们的内容整体包括在本发明中(并且为了方便部分地概述于此):2003年8月21日提交的美国专利申请号10/647,058(代理案卷号MSFT-1748),标题为“SYSTEMSAND METHODS FOR REPRESENTING UNITS OF INFORMATIONMANAGEABLE BY A HARDWARE/SOFTWARE INTERFACE SYSTEM BUTINDEPENDENT OF PHYSICAL REPRESENTATION(用于表示可由硬件/软件接口系统管理的信息单元但独立于物理表示的系统和方法)”;2003年8月21日提交的美国专利申请号10/646,941(代理案卷号MSFT-1749),标题为“SYSTEMS ANDMETHODS FOR SEPARATING UNITS OF INFORMATION MANAGEABLE BY AHARDWARE/SOFTWARE INTERFACE SYSTEM FROM THEIR PHYSICALORGANIZATION(用于按照它们的物理组织分离可由硬件/软件接口系统管理的信息单元的系统和方法)”;2003年8月21日提交的美国专利申请号10/646,940(代理案卷号MSFT-1750),标题为“SYSTEMS AND METHODS FOR THEIMPLEMENTATION OF A BASE SCHEMA FOR ORGANIZING FOR UNITS OFINFORMATION MANAGEABLE BY A HARDWARE/SOFTWARE INTERFACESYSTEM(用于实现组织可由硬件/软件接口系统管理的信息单元的基模式的系统和方法)”;2003年8月21日提交的美国专利申请号10/646,632(代理案卷号MSFT-1751),标题为“SYSTEMS AND METHODS FOR THE IMPLEMATION OF ACORE SCHEMA FOR PROVIDING A TOP-LEVEL STRUCTURE FORORGANIZING UNITS OF INFORMATION MANAGEABLE BY AHARDWARE/SOFTWARE INTERFACE SYSTEM(用于实现为组织可由硬件/软件接口系统管理的信息单元提供顶层结构的核心模式的系统和方法)”;2003年8月21日提交的美国专利申请号10/646,645(代理案卷号MSFT-1752),标题为“SYSTEMSAND METHODS FOR REPRESENTING RELATIONSHIPS BETWEEN UNITS OFINFORMATION MANAGEABLE BY A HARDWARE/SOFTWARE INTERFACESYSTEM(用于表示可由硬件/软件接口系统管理的信息单元之间关系的系统和方法)”;2003年8月21日提交的美国专利申请号10/646,575(代理案卷号MSFT-2733),标题为“SYSTEMS AND METHODS FOR INTERFACING APPLICATIONPROGRAMS WITH AN ITEM-BASED STORAGE PLATFORM(用于使应用程序接口基于项目的存储平台的系统和方法)”;2003年8月21日提交的美国专利申请号10/646,646(代理案卷号MSFT-2734),标题为“STORAGE PLATFORM FORORGANIZING,SEARCHING,AND SHARING DATA(用于组织、搜索和共享数据的存储平台)”;2003年8月21日提交的美国专利申请号10/692,779(代理案卷号MSFT-2829),标题为“SYSTEMS AND METHODS FOR THE IMPLEMENTATIONOF A DIGITAL IMAGES SCHEMA FOR ORGANIZING UNITS OFINFORMATION MANAGEABLE BY A HARDWARE/SOFTWARE INTERFACESYSTEM(用于实现组织可由硬件/软件接口系统管理的信息单元的数字图像模式的系统和方法)”;2003年8月21日提交的美国专利申请号10/692,515(代理案卷号MSFT-2844),标题为“SYSTEMS AND METHODS FOR PROVIDINGSYNCHRONIZATION SERVICES FOR UNITS OF INFORMATIONMANAGEABLE BY A HARDWARE/SOFTWARE INTERFACE SYSTEM(用于为可由硬件/软件接口系统管理的信息单元提供同步服务的系统和方法)”;与本申请同一天提交的美国专利申请号10/692,508(代理案卷号MSFT-2845),标题为“SYSTEMS AND METHODS FOR PROVIDING RELATIONAL ANDHIERARCHICAL SYNCHRONIZATION SERVICES FOR UNITS OFINFORMATION MANAGEABLE BY A HARDWARE/SOFTWARE INTERFACESYSTEM(用于为可由硬件/软件接口系统管理的信息单元提供有关系的和分层的同步服务的系统和方法)”;以及2003年10月24日提交的美国专利申请号10/693,362(代理案卷号MSFT-2846),标题为“SYSTEMS AND METHODS FOR THEIMPLEMENTATION OF A SYNCHRONIZATION SCHEMAS FOR UNITS OFINFORMATION MANAGEABLE BY A HARDWARE/SOFTWARE INTERFACESYSTEM(用于实现可由硬件/软件接口系统管理的信息单元的同步模式的系统和方法)”。This application is related in subject matter to the invention disclosed in the following generally designated application, the contents of which are hereby incorporated by reference in their entirety (and partially summarized here for convenience): Filed August 21, 2003 U.S. Patent Application No. 10/647,058 (Attorney Docket No. MSFT-1748), entitled "SYSTEMSAND METHODS FOR REPRESENTING UNITS OF INFORMATION MANAGEABLE BY A HARDWARE/SOFTWARE INTERFACE SYSTEM BUTINDEPENDENT OF PHYSICAL REPRESENTATION" UNITS OF INFORMATION MANAGEABLE BY AHARDWARE, U.S. Patent Application No. 10/646,941, filed Aug. 21, 2003 (Attorney Docket MSFT-1749), entitled "SYSTEMS ANDMETHODS FOR SEPARATING UNITS OF INFORMATION MANAGEABLE BY AHARDWARE /SOFTWARE INTERFACE SYSTEM FROM THEIR PHYSICALORGANIZATION (System and Method for Separating Information Units Manageable by a Hardware/Software Interface System by Their Physical Organization)"; U.S. Patent Application No. 10/646,940, filed August 21, 2003 (Attorney General Docket No. MSFT-1750), entitled "SYSTEMS AND METHODS FOR THEIMPLEMENTATION OF A BASE SCHEMA FOR ORGANIZING FOR UNITS OFINFORMATION MANAGEABLE BY A HARDWARE/SOFTWARE INTERFACE SYSTEM Systems and Methods)"; U.S. Patent Application No. 10/646,632, filed August 21, 2003 (Attorney Docket MSFT-1751), entitled "SYSTEMS AND METHODS FOR THE IMPLEMATION OF ACORE SCHEMA FOR PROVIDING A TOP-LEVEL STRUCTURE FORORGANIZING UNITS OF INFORMATION MANAGEABLE BY AHARDWARE/SOFTWARE INTERFACE SYSTEM (system and method for implementing a core schema that provides a top-level structure for organizing information units that can be managed by a hardware/software interface system)"; U.S. Patent Application filed August 21, 2003 No. 10/646,645 (Attorney Docket No. MSFT-1752), entitled "SYSTEMSAND METHODS FOR REPRESENTING RELATIONSHIPS BETWEEN UNITS OFINFORMATION MANAGEABLE BY A HARDWARE/SOFTWARE INTERFACE SYSTEM and methods)"; U.S. Patent Application No. 10/646,575 (Attorney Docket MSFT-2733), filed August 21, 2003, and entitled "SYSTEMS AND METHODS FOR INTERFACING APPLICATION PROGRAMS WITH AN ITEM-BASED STORAGE PLATFORM (for making application System and Method for Programmatically Interfacing Item-Based Storage Platforms)"; U.S. Patent Application Serial No. 10/646,646 (Attorney Docket MSFT-2734), filed August 21, 2003, and entitled "STORAGE PLATFORM FORORGANIZING, SEARCHING, AND SHARING DATA (Storage Platform for Organizing, Searching, and Sharing Data)"; U.S. Patent Application Serial No. 10/692,779, filed August 21, 2003 (Attorney Docket MSFT-2829), entitled "SYSTEMS AND METHODS FOR THE IMPLEMENTATION OF A DIGITAL IMAGES SCHEMA FOR ORGANIZING UNITS OFINFORMATION MANAGEABLE BY A HARDWARE/SOFTWARE INTERFACE SYSTEM (System and Method for Implementing a Digital Image Schema for Organizing Information Units Manageable by a Hardware/Software Interface System)"; U.S. Patent Application filed August 21, 2003 No. 10/692,515 (Attorney Docket No. MSFT-2844), entitled "SYSTEMS AND METHODS FOR PROVIDING SYNCHRONIZATION SERVICES FOR UNITS OF INFORMATION MANAGEABLE BY A HARDWARE/SOFTWARE INTERFACE SYSTEM SYSTEM AND METHOD FOR PROVIDING RELATIONAL ANDHIERARCHICAL SYNCHRONIZATION SERVICES FOR UNITS OFINFORMATION MANAGEABLE BY A HARDWARE/ SOFTWARE INTERFACE SYSTEM (System and Method for Providing Relational and Hierarchical Synchronization Services for Information Units Manageable by a Hardware/Software Interface System)"; and U.S. Patent Application No. 10/693,362, filed October 24, 2003 ( Attorney Docket No. MSFT-2846), entitled "SYSTEMS AND METHODS FOR THEIMPLEMENTATION OF A SYNCHRONIZATION SCHEMAS FOR UNITS OFINFORMATION MANAGEABLE BY A HARDWARE/SOFTWARE INTERFACE SYSTEM method)".

技术领域technical field

本发明主要涉及信息存储和检索的领域,并且更具体地说,涉及在计算机化的系统中组织、搜索和共享不同类型数据的活动的存储平台。本发明的各种实施例针对使用由硬件/软件接口系统用于管理数据的扩展和继承方法。The present invention relates generally to the field of information storage and retrieval, and more particularly to a storage platform for organizing, searching and sharing activities of different types of data in a computerized system. Various embodiments of the invention are directed to using the extension and inheritance methods used by the hardware/software interface system to manage data.

背景background

在最近十年中,单个盘的容量每年增长约百分之70(70%)。摩尔(Moore)法则精确地预测了在过去数年中中央处理单元(CPU)能力的惊人的增长。有线和无线技术已经提供了数量上巨大的连接和带宽。假设当前趋势持续,在数年内一般的膝上计算机将具有约万亿字节(TB)的存储并包含数百万个文件,而5千亿字节(500GB)的驱动器成为常见的。During the last ten years, the capacity of a single disk has increased by approximately seventy percent (70%) per year. Moore's Law has accurately predicted the incredible growth in central processing unit (CPU) power over the past few years. Wired and wireless technologies have provided massive amounts of connectivity and bandwidth. Assuming current trends continue, within a few years the typical laptop computer will have about a terabyte (TB) of storage and contain millions of files, with 500 gigabyte (500GB) drives becoming common.

消费者使用他们的计算机主要用于通信和组织个人信息,不论它们是传统的个人信息管理器(PIM)风格的数据或如数字音乐或照片那样的媒体。数字内容的量和存储原始字节的能力已经大量地增长;然而消费者可用于组织和统一此数据的方法却跟不上步伐。知识工人花费大量时间来管理和共享信息,某些研究估计,知识工人花费15-25%的时间在与无效信息有关的活动上。另外研究估计,典型的知识工人每天约花费2.5小时搜索信息。Consumers use their computers primarily to communicate and organize personal information, whether they be traditional Personal Information Manager (PIM) style data or media such as digital music or photos. The volume of digital content and the ability to store raw bytes has grown enormously; however, the methods available to consumers to organize and unify this data have not kept pace. Knowledge workers spend a significant amount of time managing and sharing information, with some studies estimating that knowledge workers spend 15-25% of their time on activities related to invalid information. Another study estimates that the typical knowledge worker spends approximately 2.5 hours per day searching for information.

开发者与信息技术(IT)部门投资大量的时间与金钱来构建他们自己的用于公用存储抽象的数据存储,以呈现如人、地方、时间和事件等事项目。这不仅导致重复的工作,还形成公用数据的孤岛,没有共同搜索或共享那些数据的机制。仅考虑当今在运行Microsoft Windows操作系统的计算机上有多少地址簿。如电子邮件客户端和个人财务程序那样的许多应用程序保留各自的地址簿,且在每个那样的程序分别维护的地址簿应用程序之间只有很少共享。因而,财务程序(如MicrosoftMoney)不与维护在电子邮件联系人文件夹(如Microsoft Outlook中的联系人文件夹)中的地址共享支付人的地址。确实,许多用户具有多个设备,在这些设备之间和包括到如MSN和AOL等商业服务的手机电话号码的各种附加来源之间应该在逻辑上同步它们的个人数据;然而共享文档的协作大部分是通过将文档附到电子邮件消息来达到的—这是手动的且低效的。Developers and information technology (IT) departments invest significant time and money building their own data stores for utility storage abstractions to represent things like people, places, times, and events. Not only does this result in duplication of effort, but it also creates silos of common data, with no mechanism for collectively searching or sharing that data. Just consider how many address books there are on computers running the Microsoft Windows operating system today. Many applications, such as email clients and personal finance programs, maintain their own address books, and there is little sharing between the address book applications that each such program maintains separately. Thus, financial programs such as Microsoft Money do not share payer addresses with addresses maintained in email contact folders such as those in Microsoft Outlook. Indeed, many users have multiple devices between which their personal data should be logically synchronized and between various additional sources including mobile phone numbers to commercial services such as MSN and AOL; however collaboration on shared documents Most do so by attaching documents to email messages—which is manual and inefficient.

缺乏协作的一个原因是组织计算机系统中的信息的传统方法集中在使用基于文件—文件夹—目录的系统(“文件系统”),来基于用于存储文件的存储介质的物理组织的抽象将多个文件组织到文件夹的目录分层结构中。在1960年代开发的Multics操作系统被认为是在操作系统级上使用文件、文件夹和目录来管理可存储数据单元的先驱。具体说来,Multics在文件的分层结构中使用符号地址(从而引入文件路径的概念),其中文件的物理地址对用户(应用程序和最终用户)是不透明的。此文件系统完全不考虑任何单个文件的文件格式,且在文件中及文件之间的关系在操作系统级上被认为是无关的(即,与分层结构中文件的位置不同)。由于Multics的出现,在操作系统级上可存储的数据被组织成文件、文件夹和目录。这些文件一般包括放在由文件系统维护的一特定文件中的文件分层结构本身(“目录”)。此目录进而维护对应于该目录中所有其它文件和那些文件在分层结构(这里指文件夹)中的节点位置的项目的列表。这是本领域中近40年的状态。One reason for the lack of collaboration is that traditional approaches to organizing information in computer systems have focused on using a file-folder-directory-based system ("file system") to divide more files organized into a directory hierarchy of folders. The Multics operating system, developed in the 1960s, is considered a pioneer in the use of files, folders, and directories to manage storable data units at the operating system level. Specifically, Multics uses symbolic addresses in the hierarchical structure of files (thus introducing the concept of file paths), where the physical address of a file is opaque to users (applications and end users). This file system takes no account of the file format of any individual file at all, and the relationships within and between files are considered independent at the operating system level (ie, distinct from the location of the files in the hierarchy). Thanks to Multics, storable data at the operating system level is organized into files, folders, and directories. These files typically include the file hierarchy itself ("directory") placed within a specific file maintained by the file system. This directory in turn maintains a list of items corresponding to all other files in the directory and the node positions of those files in the hierarchy (here referred to as folders). This has been the state of the art for nearly 40 years.

然而,虽然提供了驻留在计算机的物理存储系统中的信息的合理表示,但是文件系统是物理存储系统的抽象,因而文件的利用需要在用户处理什么(具有上下文、特征以及与其它单元的关系的单元)和操作系统提供什么(文件、文件夹和目录)之间的间接(解释)层。结果,用户(应用程序和/或最终用户)只好强制把信息单元放入文件系统结构,即使这样做是低效的、不一致的、或不希望的。此外,现有的文件系统关于在各个文件中存储的数据的结构知之甚少,因此,大多数信息在文件中保持封闭,只能被写那些数据的应用程序访问(和可理解)。因此,缺乏信息的模式描述和管理信息的机制,导致形成数据的竖井(silo),只有很少数据能在各竖井之间共享。例如,许多个人计算机(PC)用户具有5个以上各异的存储,它们包含有关他们在某一层上交互的人的信息—如Outlook联系人、在线账户地址、Windows地址簿、Quicken受款人和即时消息(IM)伙伴列表—因为组织文件向这些PC用户提出重要的挑战。由于大多数现有的文件系统利用嵌套的文件夹隐喻来组织文件和文件夹,因此当文件数量增加时,为维持灵活且有效的组织模式所必需的努力变得十分惊人。在这些情况下,具有单个文件的多重分类是非常有用的;然而使用现有文件系统中的硬和软链接是麻烦且难以维护的。However, while providing a reasonable representation of information residing in a computer's physical storage system, the file system is an abstraction of the physical storage system, and thus utilization of a file requires the user to process what (with context, characteristics, and relationships to other units) A layer of indirection (interpretation) between what the operating system provides (files, folders, and directories). As a result, users (applications and/or end users) have to force information units into file system structures, even if doing so is inefficient, inconsistent, or undesirable. Furthermore, existing file systems know very little about the structure of the data stored in individual files, and thus, most information remains closed within the files, only accessible (and understandable) by the applications that wrote those data. Consequently, the lack of a schema description of information and a mechanism to manage it leads to the formation of data silos, with little data shared across silos. For example, many personal computer (PC) users have more than five disparate stores that contain information about the people they interact with at some level—such as Outlook contacts, online account addresses, Windows address book, Quicken payees and Instant Messaging (IM) buddy lists—because organizing files presents important challenges to these PC users. Since most existing file systems utilize a nested folder metaphor to organize files and folders, the effort necessary to maintain a flexible and efficient organizational model becomes overwhelming as the number of files increases. In these cases, having multiple catalogs for a single file is very useful; however using hard and soft links in existing file systems is cumbersome and difficult to maintain.

过去已作了若干不成功的尝试来克服文件系统的缺点。这些以前尝试中的某一些已经涉及使用内容可定址的存储器来提供可以通过内容而不是通过物理地址来访问数据的机制。然而,这些努力被证明是不成功的,因而虽然内容可定址的存储器对由如高速缓存和存储器管理单元等设备的小规模使用被证明是有用的,但对如物理存储介质等设备的大规模使用由于各种原因尚不可能,因此那样的解决方案简直不存在。已作出使用面向对象的数据库(OODB)系统的其它尝试,但是这些尝试虽然带有强烈的数据库的特征,且良好的非文件表示,但在处理文件表示方面并不有效,并不能重现在硬件/软件接口系统级上基于分层结构的文件及文件夹的速度、效率和简单性。诸如试图使用SmallTalk(和其它派生方法)的其它尝试在处理文件和非文件表示方面被证明相当有效,但缺乏有效地组织和利用在各种数据文件之间存在的关系所必需的数据库特征,因此那种系统的整体有效性是不可接受的。使用BeOS(和其它那样操作系统研究)的又一种尝试尽管能够胜任适当地表示文件的同时又提供某些必要的数据库特征,在处理非文件的表示上被证明是不够的,这是传统文件系统同样的核心缺点。Several unsuccessful attempts have been made in the past to overcome the shortcomings of file systems. Some of these previous attempts have involved the use of content-addressable memory to provide mechanisms by which data can be accessed by content rather than by physical address. However, these efforts proved unsuccessful, and while content-addressable memory proved useful for small-scale use by devices such as cache memory and memory management units, it was not effective for large-scale Using is not yet possible for various reasons, so a solution like that simply doesn't exist. Other attempts have been made using object-oriented database (OODB) systems, but these attempts, while strongly database-like, and good non-file representations, are not efficient at handling file representations and cannot be reproduced on hardware/ Speed, efficiency, and simplicity of software interfaces to hierarchically structured files and folders at the system level. Other attempts, such as the attempt to use SmallTalk (and other derivatives), proved to be quite effective in dealing with file and non-file representations, but lacked the database features necessary to effectively organize and exploit the relationships that existed between the various data files, so The overall effectiveness of that system is unacceptable. Yet another attempt to use BeOS (and others such as Operating System Research), while capable of adequately representing files while providing some of the necessary database features, proved inadequate in dealing with non-file representations, which are traditional file The same core shortcomings of the system.

数据库技术是存在类似挑战的另一专业领域。例如,虽然关系型数据库模型已取得很大的商业上的成功,实际上独立软件分销商(ISV)一般运用了关系型数据库软件产品(如Microsoft SQL Server)中可得到的功能一小部分。相反,应用程序与那样产品的大多数交互是以简单的“gets”和“puts”的形式。对此虽然有若干容易明白的原因(如作为平台或数据库的不可知),一个常被忽略的关键的原因是数据库没有必要提供主要商业应用程序分销商确实需要的精确抽象。例如,虽然真是世界具有如“客户”或“订单”等“项目”的概念(以及订单的嵌入的“行式项目”作为其中的项目和项目本身),而关系型数据库只在表和行的方面来谈论。结果,虽然应用程序可能希望具有在项目级上的一致性、锁定、安全和/或触发器的方面(只列出一些),通常数据库只在表/行级上提供这些特征。尽管若每个项目映射到数据库某个表的单个行也能工作得很好,但在带多个行式项目的订单的情况下,存在一个项目实际上要映射到多个表的原因,且在此情况下,单个关系型数据库系统不能确切地提供正确的抽象。因此,应用程序必须在数据库的顶层构建逻辑以提供这些基本抽象。换言之,基本关系模型不提供在其上容易开发高级应用程序的存储数据的足够平台,因为基本关系模型需要在应用程序和存储系统之间的间接层,其中只在某些情况的应用程序中可以看到数据的语义结构。尽管某些数据库分销商正将高级功能构建到他们的产品中(如提供对象关系能力,新的组织模型等),至今尚没有哪个提供需要的全面解决方案,其中真正的全面解决方案是为有用的域抽象(如“个人”、“位置”、“事件”等)提供有用的数据模型抽象(如“项目”、“扩展”、“关系”等)的解决方案。Database technology is another area of expertise that presents similar challenges. For example, although the relational database model has achieved great commercial success, in practice Independent Software Vendors (ISVs) typically utilize a small fraction of the functionality available in relational database software products such as Microsoft SQL Server. Instead, most of an application's interaction with such a product is in the form of simple "gets" and "puts". While there are several obvious reasons for this (such as being platform or database agnostic), a key reason that is often overlooked is that databases do not necessarily provide the precise abstraction that major business application distributors really need. For example, while the real world has concepts of "items" like "customers" or "orders" (and orders' embedded "row items" as items within them and the items themselves), relational databases only aspect to discuss. As a result, while applications may wish to have aspects of consistency, locking, security, and/or triggers at the item level (to name a few), typically databases only provide these features at the table/row level. While it would work fine if each item mapped to a single row of a table in the database, in the case of orders with multiple row items, there is a reason for an item to actually map to multiple tables, and In this case, a single relational database system cannot exactly provide the correct abstraction. Therefore, applications 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 advanced applications are easily developed, because the basic relational model requires a layer of indirection between the application and the storage system, which is only possible in certain cases of the application See the semantic structure of the data. Although some database vendors are building advanced functionality into their products (such as providing object-relational capabilities, new organizational models, etc.), none have yet provided the comprehensive solution needed, and where a truly comprehensive solution is useful for The domain abstractions (such as "person", "location", "event", etc.) provide solutions for useful data model abstractions (such as "item", "extension", "relationship", etc.).

考虑到现有数据存储和数据库技术中的上述缺点,需要一种新的存储平台,它提供了一种改进的能力以便组织、搜索和共享计算机系统中的所有类型的数据—一种存储平台,它在现有的文件系统和数据库系统之外扩展和扩大了数据平台,并且被设计为存储所有类型的数据。本发明以及早先通过引用结合于此的相关发明满足了这一需求。特别地,本发明提供由硬件/软件接口系统处理的对象的扩展和继承的方法。In view of the aforementioned shortcomings in existing data storage and database technologies, there is a need for a new storage platform that provides an improved ability to organize, search, and share all types of data in computer systems—a storage platform that It extends and augments the data platform beyond existing file systems and database systems, and is designed to store all types of data. The present invention, and related inventions previously incorporated herein by reference, fulfill this need. In particular, the present invention provides methods for extension and inheritance of objects handled by the hardware/software interface system.

概述overview

下面的概述提供了以前面通过参考所结合的相关发明(“相关发明”)为背景说明的本发明的各个方面的总结。这个概述不旨在提供本发明的所有重要方面的无遗漏的说明,也不是对本发明的范围的限定。而是,这个概述旨在作为下面的详细说明和附图的介绍。The following summary provides a summary of various aspects of the invention described in the context of a related invention previously incorporated by reference ("the related invention"). This summary is not intended to provide an exhaustive description of all important aspects of the invention, nor to delineate the scope of the invention. Rather, this summary is intended as an introduction to the detailed description and drawings that follow.

相关发明共同地涉及用于组织、搜索和共享数据的存储平台,所述存储平台在现有文件系统和数据库系统之外扩展和扩大了数据存储的概念。这个存储平台被设计为存储所有类型的数据,包括结构化的、非结构化的、或半结构化的数据。Related inventions collectively relate to storage platforms for organizing, searching, and sharing data that expand and expand the concept of data storage beyond existing file systems and database systems. This storage platform is designed to store all types of data, including structured, unstructured, or semi-structured data.

该存储平台包括在数据库引擎上实现的数据存储。所述数据库引擎包括具有对象相关扩展的关系型数据库引擎。所述的数据存储实现了一种数据模型,它支持数据的组织、搜索、共享、同步和安全。以多种模式(schema)声明了数据的具体类型,并且该平台提供了一种机制,它扩展模式的设置以便定义新的数据类型(主要是,由所述模式提供的基本类型的子类型)。一种同步功能有助于在用户或系统间共享数据。提供了文件系统类的功能,它允许所述数据存储与现有的文件系统的互操作性,而不存在这种传统文件系统的限制。一种改变跟踪机制提供了跟踪数据存储的改变的能力。该存储平台还包括一组应用程序接口,它们使得应用程序能够访问所述存储平台上述的所有功能,并且能够访问以模式声明的数据。The storage platform includes data storage implemented on a database engine. The database engine includes a relational database engine with object-related extensions. The data store implements a data model that supports organization, search, sharing, synchronization and security of data. Concrete types of data are declared in various schemas, and the platform provides a mechanism that extends the schema's settings in order to define new data types (mainly, subtypes of the base types provided by said schema) . A synchronization feature helps to share data between users or systems. Filesystem-like functionality is provided that allows interoperability of the data store with existing filesystems without the limitations of such traditional filesystems. A change tracking mechanism provides the ability to track changes to the data store. The storage platform also includes a set of application program interfaces, which enable applications to access all the above-mentioned functions of the storage platform, and to access data declared in schemas.

由所述数据存储实现的数据模型以项目、元素和关系定义了数据存储的单元。项目是在数据存储中可存储的数据的单元,并且可以包括一个或多个元素和关系。元素是类型的实例,包括一个或多个字段(此处也被称为属性)。关系是两个项目之间的连接。(如此处所使用的,这些以及其它特定的术语可以被大写,以便将它们从附近所使用的其它术语分离,然而,并不是旨在区别对待被大写的术语例如“Item”和不被大写时的同一个术语,例如“item”,并且不应假设或暗示这种区别。)The data model implemented by the data store defines the units of the data store in terms of items, elements and relationships. An item is a unit of data that is storable in a data store and can include one or more elements and relationships. An element is an instance of a type that includes one or more fields (also referred to here as attributes). A relationship is a connection between two items. (As used herein, these and other specific terms may be capitalized to separate them from other terms used nearby, however, no distinction is made between capitalized terms such as "Item" and non-capitalized terms same term, such as "item", and no such distinction should be assumed or implied.)

该计算机系统还包括多个项目,其中每个项目包括一可由硬件/软件接口系统操作的离散的可存储的信息单元;多个项目文件夹,它们构成了所述项目的组织结构;以及用于操作多个项目的硬件/软件接口系统,并且其中每个项目属于至少一个项目文件夹,并且可以属于多于一个的项目文件夹。The computer system also includes a plurality of items, each of which includes a discrete storable unit of information operable by a hardware/software interface system; a plurality of item folders forming an organizational structure for the items; and A hardware/software interface system that operates a plurality of projects, and wherein each project belongs to at least one project folder, and may belong to more than one project folder.

与从持久存储中导出相反,项目或某些项目属性值可以被动态地计算。换言之,所述硬件/软件接口系统不需要项目被存储,并且支持某些操作,诸如枚举项目的当前设置的功能,或是给出项目在存储平台上的标识符(在描述应用编程接口或API的部分中被更完整地说明)而检索项目的能力—例如,项目可以是蜂窝电话的当前位置,或从温度传感器读到的温度。所述硬件/软件接口系统可以处理多个项目,并且还可以包括可由所述硬件/软件接口系统管理的多个关系互连的项目。As opposed to exporting from persistent storage, items or some item property values can be dynamically calculated. In other words, the hardware/software interface system does not require items to be stored, and supports certain operations, such as functions to enumerate the current settings of an item, or to give an identifier for an item on a storage platform (described in the API or API section is described more fully) and the ability to retrieve items—for example, an item could be the current location of a cell phone, or the temperature read from a temperature sensor. The hardware/software interface system can handle multiple items, and can also include multiple relationally interconnected items manageable by the hardware/software interface system.

用于该计算机系统的硬件/软件接口系统还包括核心模式,以便定义所述硬件/软件接口系统所理解,并且可以一种预先确定的和可预知的方式直接进行处理的一组核心项目。为了处理多个项目,所述计算机系统将项目与多个关系互连,并且在硬件/软件接口系统层上管理所述关系。The hardware/software interface system for the computer system also includes a kernel schema to define a set of kernel items that said hardware/software interface system understands and can directly process in a predetermined and predictable manner. In order to handle multiple items, the computer system interconnects items with multiple relationships and manages the relationships at the hardware/software interface system level.

该存储平台的API为在存储平台模式组中定义的每个项目、项目扩展和关系提供了数据类。此外,应用编程接口提供了一组框架类,它们为所述数据类定义了一组公共行为,并且与数据类一起为存储平台API提供了基本的编程模型。所述存储平台API提供了简化的查询模型,它以将应用程序员从底层数据库引擎的查询语言的细节隔离开的方式,使得应用程序员能够形成基于数据存储中的项目的各种属性的查询。存储平台API还收集由应用程序对项目做出的改变,并且然后将它们组织到实现所述数据存储的数据库引擎(或任何种类的存储引擎)所需的正确更新中。这使得应用程序员能够对在记忆中项目进行改变,而将数据存储更新的复杂细节留给API。The storage platform's API provides data classes for each item, item extension, and relationship defined in the storage platform schema group. In addition, the application programming interface provides a set of framework classes that define a set of common behaviors for the data classes and, together with the data classes, provide the basic programming model for the storage platform API. The storage platform API provides a simplified query model that enables application programmers to formulate queries based on various attributes of items in the data store in a manner that isolates the application programmer from the details of the query language of the underlying database engine . The storage platform API also collects changes made to items by applications and then organizes them into the correct updates required by the database engine (or any kind of storage engine) implementing the data store. This enables application programmers to make changes to items in memory, while leaving the complex details of data store updates to the API.

通过它的公共存储基础和被模式化的数据,本发明的存储平台能够为消费者、知识工作者和企业作出更有效的应用程序开发。它提供了丰富的并且可扩展的应用编程接口,该接口不仅使得它的数据模型中所固有的功能可以使用,而且还包含并扩展了现有文件系统和数据库的访问方法。Through its common storage base and schematized data, the storage platform of the present invention enables more efficient application development for consumers, knowledge workers and enterprises. It provides a rich and extensible application programming interface that not only makes available the functionality inherent in its data model, but also includes and extends existing file system and database access methods.

鉴于在相关发明的延及全部的结构(在详细说明的章节II中详细描述),本发明具体地针对扩展的使用以扩展项目和属性类型的功能,以及继承的使用以促进在相关项目之间的有效搜索和组织(在详细说明的章节III中详细描述)。本发明的其它其它特征和优点可通过下面本发明的详细描述和附图而变得显而易见。In view of the overall structure of the related invention (described in detail in Section II of the Detailed Description), the present invention is specifically directed to the use of extensions to extend the functionality of item and attribute types, and the use of inheritance to facilitate communication between related items Efficient search and organization of (detailed in Section III of the detailed description). Other other features and advantages of the present invention will become apparent from the following detailed description of the invention and accompanying drawings.

附图的简要说明Brief description of the drawings

当结合所附的附图进行阅读时,可以更好地理解上面的摘要以及下面对本发明的详细说明。出于说明本发明的目的,在附图中示出了本发明的各个方面的示例性实施例;然而,本发明不限于所公开的具体方法和手段。在附图中:The foregoing Summary, together with the following Detailed Description of the Invention, may be better understood when read in conjunction with the accompanying drawings. For purposes of illustrating the invention, exemplary embodiments of various aspects of the invention are shown in the drawings; however, the invention is not limited to the precise methods and instrumentalities disclosed. In the attached picture:

图1是表示本发明的方面可以被结合在其内的计算机系统的方框图;Figure 1 is a block diagram representing a computer system in which aspects of the present invention may be incorporated;

图2是一个方框图,示出了被分为3个组件组的计算机系统:硬件组件、硬件/软件系统接口组件和应用程序组件;FIG. 2 is a block diagram showing a computer system divided into three component groups: hardware components, hardware/software system interface components, and application components;

图2A示出了用于被分组到基于文件的操作系统中的目录内的文件夹中的文件的传统的基于树的分层结构;Figure 2A shows a conventional tree-based hierarchical structure for files grouped into folders within directories in a file-based operating system;

图3是示出了一个存储平台的方框图;Figure 3 is a block diagram illustrating a storage platform;

图4示出了项目、项目文件夹和种类之间的结构化的关系;Figure 4 shows the structured relationship between projects, project folders and categories;

图5A是示出了项目的结构的方框图;FIG. 5A is a block diagram showing the structure of a project;

图5B是示出了图5A的项目的复杂属性类型的方框图;Figure 5B is a block diagram illustrating complex attribute types for the item of Figure 5A;

图5C是示出了“Location(位置)”项目的方框图,其中“位置”项目的复杂类型被进一步说明(明确地被列出);Fig. 5C is a block diagram showing a "Location (position)" item, wherein the complex type of the "Location" item is further specified (explicitly listed);

图6A示出了一个作为基础模式中的项目的子类型的项目;Figure 6A shows an item that is a subtype of an item in the base schema;

图6B是示出了图6A的子类型项目的方框图,其中明确地列出了它的继承的类型(除了它的直接属性之外);Fig. 6B is a block diagram showing the subtype item of Fig. 6A, which explicitly lists its inherited types (in addition to its immediate attributes);

图7是示出了基本模式的方框图,该基本模式包括它的两个顶层类类型,项目和属性基础,以及从其得出的附加基础模式类型;Figure 7 is a block diagram showing the base schema, including its two top-level class types, the item and attribute bases, and the additional base schema types derived therefrom;

图8A是示出了核心模式中的项目的方框图;FIG. 8A is a block diagram illustrating items in a core schema;

图8B是示出了核心模式中的属性类型的方框图;Figure 8B is a block diagram illustrating attribute types in a core schema;

图9是一个方框图,示出了项目文件夹、它的成员项目以及项目文件夹和它的成员项目之间的互连关系;Fig. 9 is a block diagram showing a project folder, its member projects and the interconnection relationship between the project folder and its member projects;

图10是一个方框图,示出了种类(它本身也是一个项目)、它的成员项目以及种类和它的成员项目之间的互连关系;Fig. 10 is a block diagram showing a category (which itself is also an item), its member items, and the interconnection relationship between the category and its member items;

图11是示出了存储平台的数据模型的引用类型层次的图;Figure 11 is a diagram illustrating a reference type hierarchy of a data model of a storage platform;

图12是示出了关系是如何被分类的图;Figure 12 is a diagram showing how relationships are classified;

图13是示出了通知机制的图;FIG. 13 is a diagram illustrating a notification mechanism;

图14是示出了一个例子的图,其中两个事务都向同一个B树中插入新的记录;Figure 14 is a diagram showing an example, where both transactions insert new records into the same B-tree;

图15示出了数据改变检测处理;Figure 15 shows a data change detection process;

图16示出了示例性的目录树;Figure 16 shows an exemplary directory tree;

图17示出了一个例子,其中现有的基于目录的文件系统的文件夹被移动到所述的存储平台数据存储中;Figure 17 shows an example where folders of an existing directory-based file system are moved into said storage platform data store;

图18示出了容纳文件夹的概念;Figure 18 shows the concept of holding folders;

图19示出了存储平台API的基本体系结构;Figure 19 shows the basic architecture of the storage platform API;

图20示意性地表示了存储平台API栈的各个组件;Figure 20 schematically represents the various components of the storage platform API stack;

图21A是示例的联系人项目模式的图形表示;Figure 21A is a graphical representation of an example contact item schema;

图21B是图21A的示例的联系人项目模式的元件的图形表示;Figure 21B is a graphical representation of elements of the example Contact Items schema of Figure 21A;

图22示出了存储平台API的运行时框架;Figure 22 shows the runtime framework of the storage platform API;

图23示出了“FindAll”操作的执行;Figure 23 shows the execution of the "FindAll" operation;

图24示出了这样的处理,通过该处理从存储平台模式生成存储平台API类;Figure 24 shows the process by which the storage platform API classes are generated from the storage platform schema;

图25示出了这样的模式,文件(File)API基于该模式;Figure 25 shows such a schema, on which the File (File) API is based;

图26是示出了用于数据安全目的的访问掩码格式的示意图;Figure 26 is a schematic diagram showing the format of an access mask for data security purposes;

图27(部分a、b、c)给出了被从现有的安全区域内划分出来的一个新的被相同地保护的安全区域;Figure 27 (parts a, b, c) shows a new identically protected security area divided from the existing security area;

图28是示出了项目搜索视图的概念的示意图;FIG. 28 is a diagram illustrating the concept of an item search view;

图29是示出了示例的项目分层的示意图;FIG. 29 is a schematic diagram illustrating an example project hierarchy;

图30A示出了作为管道的接口“接口1”,第一和第二编码段通过该接口通信;Figure 30A shows the interface "Interface 1" as the conduit through which the first and second encoding segments communicate;

图30B示出了一个接口,该接口包括接口对象I1和I2,它使得系统的第一和第二编码段能够通过介质M通信;Fig. 30B shows an interface, this interface comprises interface object I1 and I2, and it enables the first and second coding segment of the system to communicate through the medium M;

图31A示出了由接口“接口1”提供的功能可以被如何划分,以便将接口的通信转换到多个接口“接口1A”、“接口1B”、“接口1C”;Figure 31A shows how the functionality provided by the interface "Interface 1" can be divided so that the communication of the interface is converted to a plurality of interfaces "Interface 1A", "Interface 1B", "Interface 1C";

图31B示出了由I1提供的功能可以被如何划分到多个接口I1A、I1B、I1C;Figure 31B shows how the functionality provided by I1 can be divided into multiple interfaces I1A, I1B, I1C;

图32A示出了一种情况,其中无意义的参数precision可以被忽略或被以任意的参数替换;Figure 32A shows a situation where the meaningless parameter precision can be ignored or replaced with an arbitrary parameter;

图32B示出了一种情况,其中接口被替代接口所替换,所述替代接口被指定用于忽略或向接口添加参数;Figure 32B shows a situation where an interface is replaced by a substitute interface specified for ignoring or adding parameters to the interface;

图33A示出了一种情况,其中第一和第二编码段被合并到包含它们两者的模块中;Figure 33A shows a situation where the first and second encoded segments are merged into a module containing both of them;

图33B示出了一种情况,其中接口的一部分或全部可以被嵌入地写入另一个接口中,以便形成被合并的接口;Figure 33B illustrates a situation where part or all of an interface can be embedded written into another interface to form a merged interface;

图34A示出了中间设备的一块或多块如何可以转换第一接口上的通信以便使它们符合一个或多个不同的接口;Figure 34A shows how one or more blocks of an intermediary device can transform communications on a first interface so that they conform to one or more different interfaces;

图34B示出了编码段如何能够与接口一起引入以便接收来自一个接口的通信并将所述功能传输给第二和第三接口;Figure 34B shows how coded segments can be introduced with interfaces to receive communications from one interface and transfer said functionality to a second and third interface;

图35A示出了即时编译器(JIT)如何可以将来自一个编码段的通信转换到另一个编码段;Figure 35A shows how a just-in-time compiler (JIT) can convert communications from one code segment to another;

图35B示出了用于动态重写一个或多个接口的JIT方法,它可以被应用于动态因素或否则改变所述接口;Figure 35B shows a JIT method for dynamically rewriting one or more interfaces, which can be applied to dynamically factor or otherwise change the interfaces;

图36示出一系列相关项目及其关系的子集;Figure 36 shows a subset of a series of related items and their relationships;

图37A示出为了应用专用目的的项目的标准子类化的缺点;Figure 37A illustrates the disadvantages of standard subclassing of items for application-specific purposes;

图37B示出标准子类化问题的部分解决方案;以及Figure 37B shows a partial solution to the standard subclassing problem; and

图37C示出本发明的一个实施例,用与联系人本身不同且独立于它的扩展来扩展项目,因而允许多类型功能。Figure 37C shows an embodiment of the invention that extends an item with an extension that is different from and independent of the contact itself, thus allowing multi-type functionality.

详细描述A detailed description

目录Table of contents

I.引言…………………………………………………………………14I. Introduction ................................................................................................... 14

  A.示例性计算环境…………………………………………………14A. Exemplary Computing Environment  ……………………………………… 14

  B.传统的基于文件的存储…………………………………………17B. Traditional File-Based Storage ................................................................... 17

II.用于组织、搜索和共享数据的WINFS存储平台…………………18II. The WINFS Storage Platform for Organizing, Searching, and Sharing Data ... 18

  C.词汇表……………………………………………………………18C. Glossary……………………………………………………… 18

  D.存储平台综述……………………………………………………18D. Overview of Storage Platforms……………………………………… 18

  E.数据模型…………………………………………………………20E. Data model ................................................................................................... 20

    1.项目……………………………………………………………211. Project…………………………………………………………… 21

    2.项目标识………………………………………………………232. Project identification ………………………………………………… 23

    3.项目文件夹和类别……………………………………………243. Project folders and categories  …………………………………… 24

    4.模式……………………………………………………………264. Mode………………………………………………………… 26

      a)基础模式……………………………………………………26a) Basic mode.................................................................................................... 26

      b)核心模式……………………………………………………26b) Kernel mode................................................................................................... 26

    5.关系……………………………………………………………285. Relationships………………………………………………………… 28

      a)关系声明……………………………………………………28a) Statement of relationship ................................................................................................... 28

      b)持有关系……………………………………………………29b) hold a relationship ................................................................................... 29

      c)嵌入关系……………………………………………………30c) Embedded relationship..................................................................................................... 30

      d)引用关系……………………………………………………31d) Citation relationship..................................................................................... 31

      e)规则和约束…………………………………………………32e) Rules and Constraints ................................................................... 32

      f)关系的排序…………………………………………………32f) Sorting of relationships.................................................................................................... 32

    6.可扩展性………………………………………………………366. Scalability………………………………………………36

      a)项目扩展……………………………………………………37a) Project Expansion ................................................................................... 37

      b)扩展NestedElement类型 …………………………………40b) Extended NestedElement type ………………………… 40

  F.数据库引擎………………………………………………………41F. Database Engine………………………………………………41

    1.使用UDT的数据存储实现 ……………………………………421. Implementation of data storage using UDT ……………………………42

    2.项目映射………………………………………………………422. Project Mapping……………………………………………42

    3.扩展映射………………………………………………………433. Extended Mapping………………………………………………43

    4.嵌套元素映射…………………………………………………444. Nested element mapping  ………………………………… 44

    5.对象身份………………………………………………………445. Object identity...................................................................................................44

    6.SQL对象命名 …………………………………………………446. Naming of SQL objects ………………………………………44

    7.列命名…………………………………………………………457. Column Naming ................................................................................... 45

    8.搜索视图………………………………………………………458. Search view...................................................................................................45

      a)项目…………………………………………………………46a) Project………………………………………………46

        (1)主项目搜索视图……………………………………………46(1) Main project search view  …………………………………46

        (2)分类型的项目搜索视图……………………………………46(2) Type-by-type project search view... 46

      b)项目扩展 ………………………………………………………47b) Project expansion ……………………………………………47

        (1)主扩展搜索视图……………………………………………47(1) Main Extended Search View  ………………………………… 47

        (2)分类型的扩展搜索视图……………………………………47(2) Expanded search view by type... 47

      c)嵌套的元素 ……………………………………………………48c) Nested elements …………………………………………48

      d)关系 ……………………………………………………………48d) Relationship ………………………………………………………48

        (1)主关系搜索视图……………………………………………48(1) Main relational search view  ……………………………… 48

        (2)关系实例搜索视图…………………………………………48(2) Relational instance search view... 48

      e) …………………………………………………………………49e) ……………………………………………………………49

    9.更新 ………………………………………………………………499. Update ………………………………………………………… 49

    10.改变跟踪及墓碑…………………………………………………5010. Change Tracking and Tombstones... 50

      a)改变跟踪 ………………………………………………………50a) Change Tracking …………………………………………… 50

        (1)“主”搜索视图中的改变跟踪……………………………50(1) Change Tracking in the “Main” Search View  …………………… 50

        (2)“分类型的”搜索视图中的改变跟踪……………………51(2) Change Tracking in "Categorized" Search Views 51

      b)墓碑 ……………………………………………………………52b) Tombstone ………………………………………………… 52

       (1)项目墓碑 ……………………………………………………52(1) Tombstone of the project ……………………………………………52

       (2)扩展墓碑 ……………………………………………………52(2) Extended Tombstone ………………………………………… 52

       (3)关系墓碑 ……………………………………………………53(3) Tombstone of relationship ………………………………………… 53

       (4)墓碑清除 ……………………………………………………53(4) Tombstone removal ………………………………………… 53

    11.助手API和函 ……………………………………………………5411. Helper API and functions ……………………………………… 54

      a)函数[System.Storage].GetItem ……………………………54a) Function [System.Storage].GetItem ………………………54

      b)函数[System.Storage].GetExtension………………………54b) Function [System.Storage].GetExtension…………………54

      c)函数[System.Storage].GetRelationship …………………54c) Function [System.Storage].GetRelationship ………………54

    12.元数据……………………………………………………………5412. Metadata …………………………………………………… 54

      a)模式元数据 ……………………………………………………54a) Schema Metadata ................................................................................... 54

      b)实例元数据 ……………………………………………………54b) Instance metadata ……………………………………… 54

  G.安全性 ………………………………………………………………54G. Security ………………………………………………… 54

  H.通知和改变跟踪 ……………………………………………………55H. Notifications and Change Tracking  …………………………………… 55

  I.同步 …………………………………………………………………55I. Synchronization …………………………………………………… 55

    1.存储平台到存储平台的同步 ……………………………………561. Synchronization from storage platform to storage platform …………………………56

      a)同步(Sync)控制应用程序 ……………………………………56a) Synchronization (Sync) control application program .................................................................... 56

      b)模式注释 ………………………………………………………57b) Schema Comments  ……………………………………… 57

      c)同步配置 ………………………………………………………58c) Synchronous configuration ................................................................................... 58

        (1)共同体文件夹—映射………………………………………58(1) Community Folder—Mapping………………………………58

        (2)概况…………………………………………………………59(2) Overview…………………………………………………59

        (3)时间表 …………………………………………………60(3) Schedule …………………………………………… 60

      d)冲突处理……………………………………………………60d) Conflict handling ................................................................................................... 60

        (1)冲突检测 ………………………………………………60(1) Conflict detection ………………………………………60

           (a)基于知识的冲突……………………………………60(a) Conflict based on knowledge ................................................................... 60

           (b)基于约束的冲突……………………………………61(b) Constraint-based conflicts...................................................................61

        (2)冲突处理 ………………………………………………61(2) Conflict handling ………………………………………61

           (a)自动冲突分解………………………………………61(a) Automatic conflict resolution  ………………………… 61

           (b)冲突日志记录………………………………………62(b) Conflict Logging  ……………………………… 62

           (c)冲突审查和分解……………………………………62(c) Conflict review and resolution  ……………………… 62

           (d)复制品的会聚性及冲突分解的传播………………62(d) Convergence of Replicas and Propagation of Conflict Resolution... 62

    2.对非存储平台数据存储的同步………………………………632. Synchronization of data storage on non-storage platforms... 63

      a)同步服务……………………………………………………63a) Synchronization service...................................................................................63

        (1)改变枚举 ………………………………………………63(1) Change the enumeration ...................................................................................63

        (2)改变应用 ………………………………………………64(2) Change the application …………………………………………64

        (3)冲突分解 ………………………………………………65(3) Conflict resolution ………………………………………65

      b)适配器实现…………………………………………………65b) Adapter implementation ................................................................................... 65

    3.安全性…………………………………………………………653. Security …………………………………………………… 65

    4.可管理性………………………………………………………664. Manageability…………………………………………… 66

  J.传统文件互操作性………………………………………………66J. Legacy Document Interoperability  ……………………………… 66

  K.存储平台API ……………………………………………………66K. Storage Platform API …………………………………………66

III.扩展和继承………………………………………………………71III. Extension and Inheritance .................................................................................... 71

  A.类型系统…………………………………………………………72A. Type system...................................................................................................72

  B.类型家族…………………………………………………………77B. Type Families ................................................................................... 77

    1.嵌套元素类型…………………………………………………771. Nested element type...................................................................................77

    2.项目类型………………………………………………………772. Project type…………………………………………… 77

    3.关系类型………………………………………………………783. Relationship type...................................................................................78

      a)关系语义……………………………………………………79a) Relational Semantics……………………………………… 79

      b)关系规则和约束……………………………………………80b) Relational Rules and Constraints………………………………… 80

    4.扩展类型………………………………………………………814. Extension type..................................................................................... 81

  C.增强的功能………………………………………………………82C. Enhanced Functions ……………………………………………… 82

    1.继承……………………………………………………………821. Inheritance…………………………………………………… 82

    2.扩展……………………………………………………………832. Expansion …………………………………………………… 83

IV.结论 ………………………………………………………………84IV. Conclusions …………………………………………………… 84

I.引言I. Introduction

本发明的主题用细节来描述,以满足法定的要求。然而,该描述本身不试图限制本专利的范围。相反,本发明者设想,要求保护的主题也能以其它方式实施,以结合其它当前和未来的技术包括类似于本说明描述的不同的步骤或步骤的组合。此外,虽然术语“步骤”在这里可用于意味着所采用的方法的不同元素,然而该术语不能被解释为在这里揭示的各步骤之间隐含特定的次序,除非明确地描述了各个步骤的次序。The subject matter of the invention is described in detail to satisfy statutory requirements. However, the description itself is not intended to limit the scope of this patent. Rather, the inventors contemplate that the claimed subject matter can be implemented in other ways as well, to include different steps or combinations of steps similar to those described in this specification, in conjunction with other present and future technologies. Furthermore, while the term "step" may be used herein to refer to various elements of the method employed, the term should not be construed to imply a particular order between the steps disclosed herein unless an explicit description of the various steps is explicitly described. order.

A.示例性计算环境A. Exemplary Computing Environment

本发明的许多实施例可在计算机上执行。图1和下面讨论旨在提供其中实现本发明的合适计算环境的简要描述。虽然不是必需,本发明的诸方面能以诸如由如客户工作站或服务器的计算机上执行的程序模块的计算机可执行指令的一般上下文中描述。一般而言,程序模块包括例程、程序、对象、组件、数据结构等,它们执行特定任务或实现特定抽象数据类型。此外,本发明可用其它计算机系统配置实现,包括手持设备、多处理器系统、基于微处理器的系统或可编程消费者电子设备、网络PC、小型机、大型机等。本发明还能在分布式计算环境中实现,其中任务由通过通信网络链接的远程处理设备完成。在分布式计算环境中,程序模块能位于本地或远程存储器存储设备中。Many embodiments of the invention can be implemented on computers. Figure 1 and the following discussion are intended to provide a brief description of a suitable computing environment in which the invention may be implemented. Although not required, aspects of the invention can be described in the general context of computer-executable instructions, such as program modules, being executed on a computer, such as a client workstation or server. Generally, program modules include routines, programs, objects, components, data structures, etc. that perform particular tasks or implement particular abstract data types. In addition, the invention may be practiced with other computer system configurations, including handheld devices, multiprocessor systems, microprocessor-based or programmable consumer electronics, network PCs, minicomputers, mainframes, and the like. The invention can also be practiced in distributed computing environments where tasks are performed by remote processing devices that are linked through a communications network. In a distributed computing environment, program modules can be located in local or remote memory storage devices.

如图1所示,示例性通用计算系统包括传统的个人计算机20等,它包括处理单元21、系统存储器22和将包括系统存储器的各种系统组件耦合到处理单元21的系统总线23。系统总线23可以是若干种总线结构的任一种,包括存储总线或存储控制器、外围总线、以及使用各种总线体系结构的任一种的局部总线。系统存储器包括只读存储器(ROM)24和随机访问存储器(RAM)25。基本输入/输出系统26(BIOS)包含如在启动时帮助在个人计算机20的诸元件之间传输信息的基本例程,存储在ROM 24中。个人计算机20还可包括读写硬盘(未示出)的硬盘驱动器27、读写可移动磁盘29的磁盘驱动器28、读写如CDROM或其它光介质的可移动光盘29的光盘驱动器30。硬盘驱动器27、磁盘驱动器28和光盘驱动器30分别通过硬盘驱动器接口32、磁盘驱动器接口33和光盘驱动器接口34连接系统总线23。驱动器及其相关的计算机可读介质为个人计算机20提供计算机可读指令、数据结构、程序模块和其它数据的非易失存储。虽然这里描述的示例性环境采用硬盘、可移动磁盘29和可移动光盘31,本领域技术人员理解,在示例性操作环境中也能使用可存储能由计算机访问的数据的其它类型计算机可读介质,如盒式磁带、闪存卡、数字视频盘、Bernoulli盒式磁带、随机存取存储器(RAM)、只读存储器(ROM)等。类似地,示例环境还可包括许多类型的监视设备,如热敏和安全或火警系统,及其它信息来源。As shown in FIG. 1 , an exemplary general purpose computing system includes a conventional personal computer 20 or the like including a processing unit 21 , a system memory 22 and a system bus 23 coupling various system components including the system memory to the processing unit 21 . System bus 23 may be any of several 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 . A basic input/output system 26 (BIOS), containing the basic routines that help transfer information between elements of the personal computer 20, such as at start-up, is stored in ROM 24. The personal computer 20 may also include a hard disk drive 27 for reading and writing a hard disk (not shown), a magnetic disk drive 28 for reading and writing a removable magnetic disk 29, and an optical disk drive 30 for reading and writing a removable optical disk 29 such as a CDROM or other optical media. The hard disk drive 27 , the magnetic disk drive 28 and the optical disk drive 30 are connected to the system bus 23 through the hard disk drive interface 32 , the magnetic disk drive interface 33 and the optical drive interface 34 respectively. The drives and their associated computer-readable media provide nonvolatile storage of computer-readable instructions, data structures, program modules and other data for the personal computer 20 . Although the exemplary environment described herein employs hard disks, removable magnetic disks 29, and removable optical disks 31, those skilled in the art understand that other types of computer-readable media that can store data that can be accessed by a computer can also be used in the exemplary operating environment. , such as cassette tapes, flash memory cards, digital video disks, Bernoulli cassettes, random access memory (RAM), read only memory (ROM), etc. Similarly, the example environment may also include many types of monitoring equipment, such as thermal and security or fire alarm systems, and other sources of information.

若干程序模块能存储在硬盘、磁盘29、光盘31、ROM 24或RAM 25中,包括操作系统35、一个或多个应用程序36、其它程序模块37和程序数据38。用户能通过如键盘40和定位设备42等输入设备将命令和信息输入到个人计算机20。其它输入设备(未示出)可包括麦克风、操纵杆、游戏垫、圆盘式卫星天线、扫描仪等。这里和其它输入设备常通过耦合到系统总线的串行接口46连接到处理单元21,但也可通过其它接口连接,如并行口、游戏口或通用串行总线(USB)。监视器47或其它类型的显示设备也通过如视频适配器48的接口连接到系统总线23。除监视器47以外,个人计算机通常包括如话筒和打印机等其它外围输出设备(未示出)。图1的示例系统还包括主适配器55、小型计算机系统接口(SCSI)总线56和连接到SCSI总线的外部存储设备62。Several program modules can be stored on a hard disk, magnetic disk 29, optical disk 31, 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 can enter commands and information into personal computer 20 through input devices such as keyboard 40 and pointing device 42 . Other input devices (not shown) may include a microphone, joystick, game pad, satellite dish, scanner, and the like. Here and other input devices are often connected to the processing unit 21 through a serial interface 46 coupled to the system bus, but may also be connected through other interfaces such as a parallel port, a game port or a universal serial bus (USB). A monitor 47 or other type of display device is also connected to system bus 23 through an interface such as video adapter 48 . In addition to the monitor 47, personal computers typically include other peripheral output devices (not shown), such as microphones and printers. The example system of FIG. 1 also includes a host adapter 55, a small computer system interface (SCSI) bus 56, and an external storage device 62 connected to the SCSI bus.

个人计算机20可使用到如远程计算机49的一个或多个远程计算机的逻辑连接在网络环境中操作。远程计算机49可以是另一台个人计算机、服务器、路由器、网络PC、对等设备或其它公共网络节点,并通常包括以上对个人计算机20描述的许多或所有元件,虽然在图1中只示出存储器存储设备50。图1中画出的逻辑连接包括局域网(LAN)51和广域网(WAN)52。那样的网络环境常见于办公室、企业范围计算机网络、内联网和因特网。Personal computer 20 may operate in a network environment using logical connections to one or more remote computers, such as remote computer 49 . Remote computer 49 may be another personal computer, server, router, network PC, peer-to-peer device, or other public network node, and typically includes many or all of the elements described above for personal computer 20, although only shown in FIG. memory storage device 50 . The logical connections depicted in FIG. 1 include a local area network (LAN) 51 and a wide area network (WAN) 52 . Such networking environments are commonplace in offices, enterprise-wide computer networks, intranets and the Internet.

在LAN网络环境中使用时,个人计算机20通过网络接口或适配器53连接到LAN51。在WAN网络环境中使用时,个人计算机20通常包括调制解调器54或用于通过如因特网等广域网52建立通信的其它装置。内置或外接的调制解调器54通过串行端口接口46连接系统总线23。在网络环境中,相对个人计算机20画出的程序模块或其部分可存储在远程存储器存储设备中。可以理解,示出的网络连接是示例性的,可使用在计算机之间建立通信链路的其它装置。When used in a LAN network environment, the personal computer 20 is connected to the LAN 51 through a network interface or adapter 53 . When used in a WAN networking environment, the personal computer 20 typically includes a modem 54 or other means for establishing communications over a wide area network 52, such as the Internet. A built-in or external modem 54 is connected to the system bus 23 through the serial port interface 46 . In a network environment, program modules depicted relative to the personal computer 20, or portions thereof, may be stored in the remote memory storage device. It will be appreciated that the network connections shown are exemplary and other means of establishing a communications link between the computers may be used.

如图2的框图所示,计算机系统200能被粗略地分成三个组件组:硬件组件202、硬件/软件接口系统组件204、以及应用程序组件206(在这里某些上下文中也称为“用户组件”或“软件组件”)。As shown in the block diagram of FIG. 2 , computer system 200 can be roughly divided into three component groups: hardware components 202, hardware/software interface system components 204, and application program components 206 (also referred to in some contexts herein as "user components"). Component" or "Software Component").

回到图1,在计算机系统的各种实施例中,硬件组件202可包括中央处理单元(CPU)21、存储器(ROM 24和RAM 25)、基本输入/输出系统(BIOS)26、以及各种输入/输出(I/O)设备,如键盘40、鼠标42、监视器47、和/或打印机(未示出)等。硬件组件202包括计算机系统200的基本物理基础结构。1, in various embodiments of a computer system, hardware components 202 may include a central processing unit (CPU) 21, memory (ROM 24 and RAM 25), a basic input/output system (BIOS) 26, and various Input/output (I/O) devices, such as keyboard 40, mouse 42, monitor 47, and/or printer (not shown), etc. Hardware components 202 comprise the basic physical infrastructure of computer system 200 .

应用程序组件206包括各种软件程序,包括但不限于编译器、数据库系统、文件处理程序、商业程序、视频游戏等。应用程序提供计算机资源用于为各种用户(机器、其它计算机系统和/或最终用户)解决问题、提供解决方案和处理数据的手段。Application program components 206 include various software programs including, but not limited to, compilers, database systems, file processing programs, business programs, video games, and the like. Applications provide the means by which computer resources are used to solve problems, provide solutions, and manipulate data for various users (machines, other computer systems, and/or end users).

硬件/软件接口系统组件204包括(在某些实施例中可以仅包括)操作系统,在大多数情况后者本身包括外壳和内核。“操作系统”(OS)是担当在应用程序和计算机硬件之间的中介的特殊程序。硬件/软件接口系统组件204还可包括虚拟机管理器(VMM)、公用语言运行库(CLR)或其功能等效物、Java虚拟机(JVM)或其功能等效物、或在计算机系统中的操作系统处或操作系统外的其它软件组件。硬件/软件接口系统的目的是提供用户能在其中执行应用程序的环境。任何硬件/软件接口系统的目标是使计算机系统便于使用,以及以有效的方式利用计算机硬件。The hardware/software interface system component 204 includes (in some embodiments it may include only) the operating system, which in most cases itself includes a shell and a kernel. An "operating system" (OS) is a special program that acts as an intermediary between application programs and computer hardware. The hardware/software interface system component 204 may also include a virtual machine manager (VMM), a common language runtime (CLR) or its functional equivalent, a Java virtual machine (JVM) or its functional equivalent, or in a computer system other software components on or outside of the operating system. The purpose of a hardware/software interface system is to provide an environment in which a user can execute an application. The goal of any hardware/software interface system is to facilitate the use of a computer system and to utilize computer hardware in an efficient manner.

硬件/软件接口系统一般在启动时被加载到计算机系统,并随后管理在计算机系统中所有应用程序。应用程序通过经由应用程序接口(API)请求服务来与硬件/软件接口系统交互。某些应用程序使最终用户能通过如命令语言或图形用户界面(GUI)与硬件/软件接口系统交互。A hardware/software interface system is typically loaded into a computer system at startup and then manages all application programs in the computer system. Applications interact with the hardware/software interface system by requesting services through an application programming interface (API). Certain applications enable the end user to interact with the hardware/software interface system through, for example, a command language or a graphical user interface (GUI).

硬件/软件接口系统传统上执行应用程序的各种服务。在多个程序同时运行的多任务硬件/软件接口系统中,硬件/软件接口系统确定哪些应用程序以什么次序运行,以及在切换到另一应用程序之前以供轮流对每个应用程允许多少时间。硬件/软件接口系统还管理在多个应用程序之间内部存储器的共享,并处理来往于如硬盘、打印机和拨号端口等附加的硬件设备的输入和输出。硬件/软件接口系统还将有关操作状态和可能发生的任何错误的消息发送到每个应用程序(在某些情况下到最终用户)。硬件/软件接口系统也能下传(offload)批处理作业(如打印)的管理,使得启动的应用程序能摆脱此工作并重新开始其它处理和/或操作。在能提供并行处理的计算机上,硬件/软件接口系统还管理划分程序,使得它同时在多个处理器上运行。Hardware/software interface systems traditionally perform various services for applications. In a multitasking hardware/software interface system where multiple programs run simultaneously, the hardware/software interface system determines which applications run in what order and how much time is allowed for each application in turn before switching to another application . The hardware/software interface system also manages the sharing of internal memory among multiple applications and handles input and output to and from attached hardware devices such as hard disks, printers, and dial-up ports. The hardware/software interface system also sends messages to each application (and in some cases to the end user) about the status of the operation and any errors that may have occurred. The hardware/software interface system can also offload the management of batch jobs (such as printing), so that the launched application can get rid of the job and resume other processing and/or operations. On computers capable of parallel processing, the hardware/software interface system also manages partitioning the program so that it runs on multiple processors simultaneously.

硬件/软件接口系统外壳(这里简称“外壳”)是到硬件/软件接口系统的交互式最终用户界面。(外壳也称为“命令解释器”,或在一个操作系统中称为“操作系统外壳”)。外壳是可直接由应用程序和/或最终用户访问的硬件/软件接口系统的外层。与外壳相反,内核是直接与硬件组件交互的硬件/软件接口系统的最内层。The hardware/software interface system shell (referred to herein as "the shell") is the interactive end-user interface to the hardware/software interface system. (The shell is also known as the "command interpreter" or, within an operating system, the "operating system shell"). A shell is the outer layer of a hardware/software interface system that is directly accessible by applications and/or end users. In contrast to the shell, the kernel is the innermost layer of the hardware/software interface system that directly interacts with hardware components.

虽然可构想本发明的许多实施例尤其适用于计算机化的系统,然而在本说明中不意味着将本发明限于那些实施例。相反,这里使用的术语“计算机系统”旨在包括能存储和处理信息和/或能使用存储的信息控制设备本身的行为或执行的任何和所有设备,而不管那些设备本质上是否为电子的、机械的、逻辑的、或虚拟的。While many embodiments of the invention are envisioned to be particularly applicable to computerized systems, nothing in this description is meant to limit the invention to those embodiments. Rather, the term "computer system" as used herein is intended to include any and all devices capable of storing and processing information and/or using stored information to control the behavior or performance of the device itself, whether or not those devices are electronic in nature, mechanical, logical, or virtual.

B.传统的基于文件的存储B. Traditional file-based storage

在当今大多数计算机系统中,“文件”是可存储信息的单元,它可包括硬件/软件接口系统和应用程序、数据集等。在所有现代硬件/软件接口系统中(Windows,Unix,Linux,MacOS,虚拟机系统等),文件是能由硬件/软件接口系统处理的基本的分立(可存储和可检索)信息单元。文件组通常被组织成“文件夹”。在MicrosoftWindows、Macintosh OS和其它硬件/软件接口系统中,文件夹是能作为单个信息单元被检索、移动和处理的文件的集合。这些文件夹进而被组织成称为“目录”(在后面详细讨论)的基于树形的分层结构排列。在如Dos、z/OS和大多数基于Unix的操作系统的其它硬件/软件接口系统中,术语“目录”和/或“文件夹”是可交替使用的,早期的Apple计算机系统(如Apple IIe)使用术语“类别”来代替目录;然而在这里使用时所有这些术语被看成是同义语并可交替使用,并旨在还包括对分层信息存储结构及其文件夹和文件组件的所有其它等价术语的引用。In most computer systems today, a "file" is a unit of storable information, which may include hardware/software interface systems and applications, data sets, etc. In all modern hardware/software interface systems (Windows, Unix, Linux, MacOS, virtual machine systems, etc.), a file is the fundamental discrete (storable and retrievable) unit of information that can be processed by the hardware/software interface system. Groups of files are usually organized into "folders". In Microsoft Windows, Macintosh OS, and other hardware/software interface systems, a folder is a collection of files that can be retrieved, moved, and manipulated as a single unit of information. These folders are in turn organized into a tree-based hierarchical arrangement called "directories" (discussed in more detail below). In other hardware/software interface systems such as Dos, z/OS, and most Unix-based operating systems, the terms "directory" and/or "folder" are used interchangeably, and early Apple computer systems (such as the Apple IIe ) uses the term "category" in place of a directory; however all these terms are considered synonymous and used interchangeably when used here, and are intended to also include all references to hierarchical information storage structures and their folder and file components References to other equivalent terms.

传统上,目录(又名文件夹的目录)是基于树形的分层结构,其中文件被组合成文件夹,文件夹进而按构成目录树的相对节点位置排列。例如,如图2B所示,基于DOS的文件系统的基本文件夹(或“根目录”)212可包括多个文件夹214,其每一个可以还包括另外的文件夹(如特定文件夹的“子文件夹”)216,而这些的每一个又包括另外的文件夹218,直到无限。这些文件夹的每一个可具有一个或多个文件220,虽然在硬件/软件接口系统级上,文件夹中的各个文件除了它们在树形分层结构中的位置外没有什么共同点。不奇怪,将文件组织到文件分层结构的方法间接地反映了用于存储这些文件的典型存储介质(如硬盘、软盘、CD-ROM等)的物理组织。Traditionally, directories (aka directories of folders) are tree-based hierarchies, where files are grouped into folders, which in turn are arranged in relative node positions that make up the directory tree. For example, as shown in FIG. 2B, a base folder (or "root") 212 of a DOS-based file system may include a plurality of folders 214, each of which may also include additional folders (such as the "root directory" for a particular folder). subfolders") 216, and each of these includes additional folders 218, up to infinity. Each of these folders may have one or more files 220, although at the hardware/software interface system level, the individual files in the folder have little in common other than their location in the tree hierarchy. Not surprisingly, the method of organizing files into a file hierarchy indirectly mirrors the physical organization of typical storage media (eg, hard disks, floppy disks, CD-ROMs, etc.) used to store these files.

除上述以外,每个文件夹是对其子文件夹和其目录的容器—即,每个文件夹拥有其子文件夹和文件。例如,当文件夹被硬件/软件接口系统删除时,该文件夹的子文件夹和文件也被删除(在每个子文件夹的情况下还递归地包括它自己的子文件夹和文件)。同样,每个文件一般只由一个文件夹拥有,并且虽然文件能被拷贝且副本位于不同的文件夹,文件的副本本身是不同且独立单元,它与原始文件无直接连接(如对原始文件的改变在硬件/软件接口系统级上不反映到副本文件)。因此在这方面,文件和文件夹在本质上是“物理的”,因为文件夹类似于物理容器来处理,而文件作为这些容器中不同且独立的物理元素来处理。In addition to the above, each folder is a container for its subfolders and its directories—that is, each folder owns its subfolders and files. For example, when a folder is deleted by the hardware/software interface system, the folder's subfolders and files are also deleted (and in the case of each subfolder recursively including its own subfolders and files). Also, each file is generally owned by only one folder, and while a file can be copied and the copies are located in different folders, the copies of the file are themselves distinct and independent units that have no direct connection to the original file (e.g. Changes at the hardware/software interface system level are not reflected in the copy file). Files and folders are therefore "physical" in nature in this respect, in that folders are treated like physical containers, whereas files are treated as distinct and separate physical elements within those containers.

II.用于组织、搜索和共享数据的WINFS存储平台II. WINFS storage platform for organizing, searching and sharing data

本发明结合通过引用结合于此的发明针对用于组织、搜索和共享数据的存储平台。本发明的存储平台扩展和拓宽了数据平台,超越上文讨论的文件系统及数据库系统,并被设计成存储所有类型的数据,包括称为项目的新格式的数据。The present invention, in conjunction with the invention incorporated herein by reference, is directed to a storage platform for organizing, searching and sharing data. The storage platform of the present invention extends and broadens the data platform beyond the file systems and database systems discussed above, and is designed to store all types of data, including data in a new format called items.

C.词汇表C. Glossary

在这里及在权利要求书中使用的术语有下列意义:The terms used here and in the claims have the following meanings:

·“项目”是能存储硬件/软件接口系统可访问的信息的单元,不象简单文件,它是具有由硬件/软件接口系统外壳展现给最终用户的所有对象共同支持的基本属性集的对象。项目还具对所有项目类型共同支持的属性和关系,包括允许引入新属性和关系的特征(在下面详细讨论)。• An "item" is a unit that can store information accessible to the hardware/software interface system, unlike a simple file, it is an object with a basic set of attributes commonly supported by all objects presented to the end user by the hardware/software interface system shell. Items also have attributes and relationships supported common to all item types, including features that allow the introduction of new attributes and relationships (discussed in detail below).

·“操作系统”(OS)是扮作应用程序和计算机硬件之间的中介的特殊程序。在大多数情况下,操作系统包括外壳和内核。• An "operating system" (OS) is a special program that acts as an intermediary between application programs and computer hardware. In most cases, an operating system consists of a shell and a kernel.

·“硬件/软件接口系统”是软件、或硬件及软件的组合,它起着在计算机系统的底层硬件组件和在计算机系统上执行的应用程序之间的接口的作用。硬件/软件接口系统通常包括(在某些实施例中只包括)操作系统。硬件/软件接口系统还能包括虚拟机管理器(VMM)、公用语言运行库(CLR)或其功能等效物,Java虚拟机(JVM)或其功能等效物、或在计算机系统的操作系统处或除操作系统外的其它软件组件。硬件/软件接口系统的目的是提供用户能执行应用程序的环境。任何硬件/软件接口系统的目标是使计算机系统便于使用,并以有效方式利用计算机硬件。• A "hardware/software interface system" is software, or a combination of hardware and software, that functions as an interface between the underlying hardware components of a computer system and the application programs executing on the computer system. A hardware/software interface system typically includes (and in some embodiments only) an operating system. The hardware/software interface system can also include a virtual machine manager (VMM), a common language runtime (CLR) or its functional equivalent, a Java virtual machine (JVM) or its functional equivalent, or an operating system on a computer system or other software components other than the operating system. The purpose of a hardware/software interface system is to provide an environment in which users can execute applications. The goal of any hardware/software interface system is to make the computer system easy to use and utilize the computer hardware in an efficient manner.

D.存储平台综述D. Storage Platform Overview

参考图3,存储平台300包括在数据库引擎314上实现的数据存储302。在一个实施例中,数据库引擎包括带有对象关系扩展的关系型数据库引擎。在一个实施例中,关系型数据库引擎314包括Microsoft SQL Server关系型数据库引擎。数据存储302实现支持数据的组织、搜索、共享、同步和安全的数据模型304。在如模式340等模式中描述特定的数据类型,并且存储平台300提供用于采用这些模式并用于扩展这些模式的工具346,这在后面详述。Referring to FIG. 3 , storage platform 300 includes data store 302 implemented on database engine 314 . In one embodiment, the database engine includes a relational database engine with object-relational extensions. In one embodiment, relational database engine 314 includes a Microsoft SQL Server relational database engine. Data store 302 implements data model 304 that supports organization, search, sharing, synchronization, and security of data. Certain data types are described in schemas, such as schema 340, and storage platform 300 provides tools 346 for adopting these schemas and for extending these schemas, as detailed below.

在数据存储302中实现的改变跟踪机制306提供跟踪数据存储的改变的能力。数据存储302还提供安全能力308和升级/降级能力310,均在后文详述。数据存储302还提供一组应用程序接口312,以向利用该存储平台的其它存储平台组件和应用程序(如应用程序350a,350b和350c)展现数据存储302的能力。本发明的存储平台还包括应用程序接口(API)322,使如应用程序350a,350b,和350c等应用程序能访问存储平台的所有上述功能并能访问在模式中描述的数据。应用程序能结合如OLE OB API 324和Microsoft Windows Win 32 API 326等其它API来使用存储平台API 322。A change tracking mechanism 306 implemented in the data store 302 provides the ability to track changes to the data store. Data storage 302 also provides security capabilities 308 and upgrade/downgrade capabilities 310, both of which are described in detail later. Data store 302 also provides a set of application program interfaces 312 to expose the capabilities of data store 302 to other storage platform components and applications utilizing the storage platform, such as applications 350a, 350b, and 350c. The storage platform of the present invention also includes an application programming interface (API) 322 that enables applications such as applications 350a, 350b, and 350c to access all of the above-mentioned functions of the storage platform and to access data described in the schema. Applications can use the storage platform API 322 in conjunction with other APIs such as OLE OB API 324 and Microsoft Windows Win 32 API 326.

本发明的存储平台300能向应用程序提供各种服务,包括便于在用户或系统之间共享数据的同步服务330。例如,同步服务330允许与具有与数据存储302相同格式的其它数据存储340的互操作,并访问具有其它格式的数据存储342。存储平台300还提供允许数据存储302与如Windows NTFS文件系统318等现有文件系统的互操作的文件系统能力。在至少某些实施例中,存储平台320还能向应用程序提供另外的能力,以允许对数据起作用并允许与其它系统的交互。这些能力可体现在如Info Agent服务334和通知服务332等附加服务328的形式中,以及体现在其它实用程序336的形式中。The storage platform 300 of the present invention can provide various services to applications, including a synchronization service 330 that facilitates sharing data between users or systems. For example, synchronization service 330 allows interoperability with other data stores 340 having the same format as data store 302 and accesses data stores 342 having other formats. Storage platform 300 also provides file system capabilities that allow data store 302 to interoperate with existing file systems such as Windows NTFS file system 318. In at least some embodiments, storage platform 320 can also provide applications with additional capabilities to allow acting on data and to allow interaction with other systems. These capabilities may be embodied in the form of additional services 328 such as Info Agent service 334 and notification service 332, as well as in the form of other utilities 336.

在至少某些实施例中,存储平台以计算机系统的硬件/软件接口系统来实施,或形成其完整的一部分。例如而非限制,本发明的存储平台能用操作系统、虚拟机管理器(VMM)、公用语言运行库(CLR)或其功能等效物、或Java虚拟机(JVM)或其功能等效物来实施,或形成其完整的一部分。通过其公用的存储基础和模式化的数据,本发明的存储平台使消费者、知识工人和企业能够更有效地进行应用程序的开发。它提供了丰富和可扩展的编程表面区域,不仅可得到内含在其数据模型中的能力,还能包括和扩展现有文件系统和数据库访问方法。In at least some embodiments, the storage platform is implemented in, or forms an integral part of, a hardware/software interface system of a computer system. For example and without limitation, the storage platform of the present invention can use an operating system, a virtual machine manager (VMM), a common language runtime (CLR) or its functional equivalent, or a Java virtual machine (JVM) or its functional equivalent to carry out, or form an integral part of. Through its common storage base and schematized data, the storage platform of the present invention enables more efficient application development for consumers, knowledge workers and enterprises. It provides a rich and extensible programming surface area not only for the capabilities inherent in its data model, but also for including and extending existing file system and database access methods.

在上述描述中及在各种附图中,本发明的存储平台300可称作“WinFs”。然而使用此名字指存储平台仅是为了描述方便,并不试图作出如此限制。In the above description and in various drawings, the storage platform 300 of the present invention may be referred to as "WinFs". However, the use of this name to refer to the storage platform is for descriptive convenience only and is not intended to be so limiting.

E.数据模型E. Data Model

本发明的存储平台300的数据存储302实现一种数据模型,它支持对驻留在数据存储中的数据的组织、搜索、共享、同步和安全。在本发明的数据模型中,“项目”是存储信息的基本单元。该数据模型提供一种机制,用于声明项目和项目的扩展、用于建立在项目之间的关系、以及用于将项目组织到项目文件夹和类别中,下面将更充分描述。The data store 302 of the storage platform 300 of the present invention implements a data model that supports organization, search, sharing, synchronization and security of data residing in the data store. In the data model of the present invention, "item" is the basic unit of storing information. The data model provides a mechanism for declaring projects and extensions of projects, for establishing relationships between projects, and for organizing projects into project folders and categories, as described more fully 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。可使用任何原语类型(带有下面注释的某些限制)或任何构造的类型来定义类型的属性。例如,Location(位置)类型可定义具有属性Coordinate(座标)和Address(地址),其中Address属性是上述类型USPostalAddress。属性也可以是必需的或可任选的。This data model relies on two primitive mechanisms: types and relations. Types are structures that provide a format that governs the form of instances of a type. Formats are expressed as ordered groups of attributes. A property is the name of a value or set of values of a given type. For example, the USPostalAddress (United States postal address) type has attributes Street (street), City (city), Zip (zip code), State (state), where Street, City, and State are of type String, and Zip is of type Int32. Street can be multivalued (ie, a set of values), allowing addresses to have more than one value for the Street property. The system defines certain primitive types that can be used in the construction of other types, including String, Binary, Boolean, Int16, Int32, Int64, Single, Double, Byte, DateTime, Decimal, and GUID. Properties of a type may be defined using any primitive type (with some restrictions noted below) or any constructed type. For example, the Location (location) type can be defined to have attributes Coordinate (coordinates) and Address (address), wherein the Address attribute is the above-mentioned type USPostalAddress. Properties can also be required or optional.

关系可被声明并表示两个类型的实例集之间的映射。例如,可以有在Person(个人)类型和Location类型之间声明的关系,称为LivesAt(生活在),它确定什么人生活在什么位置。关系具有名和两个端点,即源端点和目标端点。关系也可具有属性的有序集。源端点及目标端点均具有名和类型。例如,LivesAt关系具有称为类型Person的Occupant(居民)的源和称为类型Location的Dwelling(住房)的目标,且此外具有属性StartDate(起始日期)和EndDate(终止日期),表示该居民生活在该住房的时间段。注意,随时间推移,个人能生活在多个住房,且住房可有多个居民,所以放置StartDate和EndDate信息的最可能的地方是在关系本身处。A relationship can be declared and represents a mapping between two sets of instances of a type. For example, there could be a relationship declared between a Person type and a Location type, called LivesAt, which determines who lives at what location. A relationship has a name and two endpoints, a source endpoint and a target endpoint. Relationships can also have ordered sets of attributes. Both source and destination endpoints have a name and a type. For example, a LivesAt relationship has a source called Occupant of type Person and a target called Dwelling of type Location, and furthermore has attributes StartDate and EndDate representing the resident's life time period in the housing. Note that individuals can live in multiple homes over time, and that homes can have multiple residents, so the most likely place to put the StartDate and EndDate information is at the relationship itself.

关系定义了在由作为端点类型给出的类型约束的实例之间的映射。例如LivesAt关系不能是其中Automobile(汽车)是Occupant(居民)的关系,因为Automobile不是Person。A relationship defines a mapping between instances constrained by a type given as an endpoint type. For example a LivesAt relationship cannot be one in which Automobile (car) is Occupant (resident) because Automobile is not Person.

数据模型允许定义类型间的子类型—超类型关系。也称为基本类型关系的子类型—超类系型关系以如下方式定义,若类型A是类型B的基本类型,则必须是B的每个实例也是A的实例的情况。另一种表达的方法是符合B的每个实例必须符合A。例如,若A具有String类型的属性Name(名字),而B具有Int16类型的属性Age(年龄),则得出,B的任何实例必须兼有Name和Age。类型的分层结构可被设想成带有在根上的单个超类型的树。根的分枝提供第一级子类型,该级分枝提供第二级子类型,如此等等,直到本身不再具有任何子类型的叶端(leaf-most)子类型。树不限于统一深度,但不能包含任何回路。给定的类型可具有零个或许多子类型和零个或一个超类型。给定实例可最多符合一个类型以及该类型的超类型。换言之,对树中任一级处给定的实例,该实例最多可符合该级上的一个子类型。如果一类型的实例必须也是该类型的子类型的实例,则该类型可说成是抽象。Data models allow the definition of subtype-supertype relationships between types. Also known as a subtype of a base-type relationship—a super-type relationship is defined in such a way that, if a type A is a base type of a type B, it must be the case that every instance of B is also an instance of A. Another way to express it is that every instance that conforms to B must conform to A. For example, if A has an attribute Name (name) of type String, and B has an attribute Age (age) of type Int16, it follows that any instance of B must have both Name and Age. A hierarchy of types can be thought of as a tree with a single supertype at the root. Branches at the root provide first-level subtypes, which provide second-level subtypes, and so on, up to leaf-most subtypes that no longer have any subtypes themselves. Trees are not limited to uniform depth, but cannot contain any cycles. A given type may have zero or many subtypes and zero or one supertype. A given instance may conform to at most one type and that type's supertypes. In other words, for a given instance at any level in the tree, the instance can conform to at most one subtype at that level. A type is said to be abstract if instances of that type must also be instances of subtypes of that type.

1.项目1. Project

项目是可存储的信息的单元,不象简单的文件,它是具有由存储平台向最终用户或应用程序展现的所有对象共同支持的基本属性集的对象。项目也具有所有项目类型共同支持的属性和关系,包括如下所述允许引入新的属性和关系的特征。An item is a storable unit of information, unlike a simple file, it is an object with a basic set of properties common to all objects presented by the storage platform to an end user or application. Items also have attributes and relationships supported common to all item types, including features described below that allow the introduction of new attributes and relationships.

项目是公用操作的对象,如拷贝、删除、移动、打开、打印、备份、恢复、复制等。项目是能被存储和检索的单元,且由存储平台处理的可存储信息的所有形式作为项目、项目的属性、或项目之间的关系存在,其每个在下面更详细讨论。Items are objects for common operations such as copy, delete, move, open, print, backup, restore, duplicate, and so on. Items are units that can be stored and retrieved, and all forms of storable information handled by the storage platform exist as items, attributes of items, or relationships between items, each of which is discussed in more detail below.

项目旨在表示现实的且容易理解的数据单元,如联系人(Contacts)、人(People)、服务(Services)、位置(Locations)、(各种类型的)文档(Documents)等。图5A是示出项目的结构的框图。该项目的不合格的名是“Location”。该项目的合格名是“Core.Location”,它表明,此项目结构被定义成Core(核心)模式中的特定类型的项目(Core模式在下面详细讨论)。Projects are designed to represent realistic and easily understandable data units, such as Contacts, People, Services, Locations, Documents (of various types), etc. FIG. 5A is a block diagram showing the structure of an item. The unqualified name for this item is "Location". The qualified name of the project is "Core.Location", which indicates that the project structure is defined as a specific type of project in the Core schema (the Core schema is discussed in detail below).

Location项目具有多个属性,包括EAddress(电子邮件地址)、MetropolitanRegion(都市地区)、Neighborhood(街坊)、和PostalAddress(邮政地址)。每个项目的特定类型属性紧跟属性名地表示,并用冒号(“:”)与属性名分开。在类型名的右边,对该属性类型允许的值的数量在方括号(“[]”)之间表示,其中冒号(“:”)右边的星号(“*”)表示未规定的和/或无限制的数量(“许多”)。冒号右边的“1”表明最多一个值。冒号左边的零(“0”)表明该属性是可任选的(可以完全没有值)。冒号左边的“1”表明必须至少有一个值(该属性是必须的)。Neighborhood和MetropolitanRegin均是“nvarchar”类型(或等效类型),它是预定义的数据类型或“简单类型”(这里用缺少大写来表示)。然而EAddress和PostalAddress分别是类型EAddress和PostalAddress的已定义类型或“复杂类型”(这里用大写标记)的属性。复杂类型是从一个或多个简单数据类型和/或从其它复杂类型导出的类型。一个项目的属性的复杂类型还构成”嵌套元素“,因为复杂类型的细节嵌套入直接项目中以定义其属性,而属于这些复杂类型的信息用具有这些属性的项目来维持(在该项目的边界内,如后面讨论)。类型的这些概念是众知的,且容易被本专业技术人员理解。The Location item has several attributes, including EAddress (email address), MetropolitanRegion (metropolitan region), Neighborhood (neighborhood), and PostalAddress (postal address). Each item's type-specific properties are denoted immediately following the property name, separated from the property name by a colon (":"). To the right of the type name, the number of values allowed for that attribute type is indicated between square brackets ("[]"), where an asterisk ("*") to the right of a colon (":") indicates unspecified and/ or an unlimited number ("many"). A "1" to the right of the colon indicates at most one value. A zero ("0") to the left of the colon indicates that the attribute is optional (may have no value at all). A "1" to the left of the colon indicates that there must be at least one value (the attribute is required). Both Neighborhood and MetropolitanRegin are of type "nvarchar" (or equivalent), which is a predefined data type or "simple type" (represented here by the lack of capitalization). However EAddress and PostalAddress are properties of defined types or "complex types" (marked here in capitals) of types EAddress and PostalAddress respectively. A complex type is a type that is derived from one or more simple data types and/or from other complex types. Complex types that are properties of an item also constitute "nested elements", because the details of the complex type are nested in the immediate item to define its properties, and the information pertaining to these complex types is maintained with items that have these properties (in the item within the boundaries, as discussed later). These concepts of type are well known and readily understood by those skilled in the art.

图5B是示出复杂属性类型PostalAddress和EAddress的框图。PostalAddress属性类型定义,属性类型PostalAddress的项目可期望有零个或一个City(城市)值、零个或一个Country Code(国家代码)值、零个或一个MailStop(国家代码)值、和任何数量(零到许多)PostalAddress类型等等。以此方式,定义了一项目中的特定属性的数据的形状。EAddress属性类型如所示类似地定义。虽然这里在本申请中可任选地使用,表示在Location项目中复杂类型的另一方法是用其中列出的每个复杂类型的各个属性得出该项目。图5C是示出Location项目的框图,在其中进一步描述其复杂类型。然而应该理解,在此图5C中Location项目的另一种表示恰是对图5A中示出的同一个项目。本发明的存储平台还允许子分类(subtyping),从而一个属性类能是另一个的子类型(其中一个属性类继承另一个父属性类型的属性)。Figure 5B is a block diagram illustrating complex attribute types PostalAddress and EAddress. PostalAddress attribute type definition, an item of attribute type PostalAddress can expect zero or one City (city) value, zero or one Country Code (country code) value, zero or one MailStop (country code) value, and any number ( zero to many) PostalAddress type and so on. In this way, the shape of the data for a particular attribute in an item is defined. The EAddress property type is similarly defined as shown. Although optionally used here in this application, another way to represent complex types in the Location item is to derive the item with the individual properties of each complex type listed therein. Figure 5C is a block diagram showing the Location item, in which its complex type is further described. It should be understood, however, that an alternative representation of the Location item in FIG. 5C is for exactly the same item shown in FIG. 5A. The storage platform of the present invention also allows subtyping so that one property class can be a subtype of another (where one property class inherits properties from another parent property type).

类似于但不同于属性及它们的属性类型,项目继承性地表示其自己的Item(项目)类型,它也是子分类的主题。换言之,本发明的若干实施例中的存储平台允许一个项目是另一个项目的子类型(从而一个项目继承另一个父项目的属性)。此外,对本发明的各种实施例,每个项目是“Item”项目类型的子类型,后者是在基础模式中找到的第一和基本的项目类型(基础模式也在后面详细讨论)。图6A示出一项目(在此实例中为Location项目)为在基础模式中找到的Item项目类型的子类型。在此图中,箭头表示Location项目(如所有其它项目)是Item项目类型的子类型。作为从中导出所有其它项目的基本项目的Item项目类型具有若干如ItemId的重要属性和各种时间标记,从而定义了操作系统中所有项目的标准属性。在本图中,Item项目类型的这些属性被Location所继承,并从而成为Location的属性。Similar to, but distinct from, properties and their property types, Items inherit their own Item type, which is also the subject of subcategories. In other words, the storage platform in several embodiments of the invention allows an item to be a subtype of another item (so that an item inherits the properties of another parent item). Additionally, for various embodiments of the present invention, each item is a subtype of the "Item" item type, which is the first and fundamental item type found in the base schema (the base schema is also discussed in detail below). Figure 6A shows that an item (in this example the Location item) is a subtype of the Item item type found in the base schema. In this figure, the arrows indicate that the Location item (like all other items) is a subtype of the Item item type. The Item item type, which is the base item from which all other items are derived, has several important properties like ItemId and various time stamps, thereby defining standard properties for all items in the operating system. In this figure, these properties of the Item item type are inherited by Location and thus become properties of Location.

表示从Item项目类型继承的Location项目中属性的另一种方法是用来自其中列出的父项目的每个属性类型的各个属性得出Location。图6B是示出Location项目的框图,其中除了其直接属性外描述其继承的类型。应注意和理解,此项目是图5A中示出的同一项目,虽然在本图中,Location用所有其属性示出,包括直接属性(在本图及图5A中示出)和继承属性(在本图中示出但未在图5A中示出)(而在图5A中,通过用箭头示出Location项目是Item项目类型的子类型来引用这些属性)。Another way to represent properties in a Location item that inherits from the Item item type is to derive a Location with individual properties from each property type of the parent item listed therein. Fig. 6B is a block diagram showing the Location item, in which its inherited types are described in addition to its immediate attributes. It should be noted and understood that this item is the same item shown in Figure 5A, although in this figure, Location is shown with all its attributes, including direct attributes (shown in this figure and in Figure 5A) and inherited attributes (in Shown in this figure but not in Figure 5A) (whereas in Figure 5A these attributes are referenced by arrows showing that the Location item is a subtype of the Item item type).

项目是独立的对象,因而若删除一项目,也删除项目的所有直接和继承的属性。类似地,当检索一项目时,检索的是该项目及其所有直接和继承的属性(包括属于其复杂属性类型的信息)。本发明的某些实施例可使人们能在检索特定项目时请求属性的子集;然而对许多那样的实施例默认的是在检索时提供具有所有其直接和继承的属性的项目。此外,项目的属性也能通过添加新的属性到该项目的类型的现有属性而加以扩展。这些“扩展”其后是该项目的真实属性,且该项目类型的子类型可自动地包括扩展属性。Items are self-contained objects, so deleting an item also deletes all of the item's direct and inherited properties. Similarly, when retrieving an item, it is the item and all of its direct and inherited attributes (including information pertaining to its complex attribute types) that are retrieved. Certain embodiments of the present invention may enable one to request a subset of attributes when retrieving a particular item; however the default for many such embodiments is to provide an item with all of its direct and inherited attributes when retrieving. In addition, the properties of an item can also be extended by adding new properties to the existing properties of the item's type. These "extensions" are followed by the actual properties of the item, and subtypes of the item type may automatically include extended properties.

项目的“边界”由其属性(包括复杂属性类型、扩展等)来表示。项目的边界也表示在项目上执行的操作的限制,包括拷贝、删除、移动、创建等。例如在本发明的若干实施例中,当拷贝一项目时,在该项目边界之内的所有内容也被拷贝。对每个项目,边界包括下列:The "boundary" of an item is represented by its attributes (including complex attribute types, extensions, etc.). The boundaries of an item also represent the limits of operations performed on the item, including copying, deleting, moving, creating, and so on. For example, in several embodiments of the invention, when an item is copied, all content within the boundaries of the item is also copied. For each project, the boundary includes the following:

·项目的项目类型,且若该项目是另一项目的子类型(如在所有项目从基础模式的单个项目和项目类型导出的本发明的若干实施例的情况下),是任何适用的子类型信息(即属于父项目类型的信息)。若要拷贝的原始项目是另一项目的子类型,该副本也能是该相同项目的子类型。The item type of an item, and if the item is a subtype of another item (as in the case of several embodiments of the invention where all items are derived from a single item and item type of the base schema), any applicable subtype Information (that is, information belonging to the parent item type). The original item being copied is a subtype of another item, and the copy can also be a subtype of that same item.

·项目的复杂类型属性和扩展(如果有的话)。若原始项目具有复杂类型(原来的或扩展的)的属性,副本也能具有相同的复杂类型。· Item's complex type properties and extensions (if any). If the original item has properties of a complex type (original or extended), the copy can also have the same complex type.

·在“所有权关系”上的项目的记录,即,本项目(“拥有项目”)拥有什么其它项目(“目录项目”)的项目拥有列表。这特别关系到下面充分讨论的项目文件夹和下面说到的所有项目必须至少属于一个项目文件夹的规则。此外,关于嵌入项目(下列更充分讨论),一个嵌入项目被认为是其中嵌入如拷贝、删除等操作的项目的一部分。• A record of items on an "ownership relationship", ie, an item-owned list of what other items ("catalogue items") owns what this item ("owning item") owns. This specifically relates to the project folders discussed fully below and the rule that all projects must belong to at least one project folder. Furthermore, with respect to embedded items (discussed more fully below), an embedded item is considered to be the part of the item in which operations such as copy, delete, etc. are embedded.

2.项目标识2. Project identification

在全局项目空间中用ItemID唯一地标识项目。Base.Item类型定义了存储该项目身份的类型GUID的字段ItemID。一项目必须在数据存储中准确只有一个身份。ItemID is used to uniquely identify items in the global item space. The Base.Item type defines a field ItemID of type GUID that stores the identity of the item. An item must have exactly one identity in the data store.

项目引用是包含定位和标识项目的信息的数据结构。在该数据模型中,定义名为ItemReference的抽象类型,从中导出所有项目引用类型。ItemReference(项目引用)类型定义了名为Resolve(解析)的虚拟方法。Resolve方法解析ItemReference并返回一项目。此方法被ItemReference的具体子类型所覆盖,后者实现给定一引用时检索项目的功能。调用Resolve方法作为存储平台API 322的一部分。Item references are data structures that contain information to locate and identify items. In this data model, define an abstract type named ItemReference from which all item reference types are derived. The ItemReference type defines a virtual method named Resolve. The Resolve method resolves the ItemReference and returns an item. This method is overridden by a concrete subtype of ItemReference that implements functionality for retrieving an item given a reference. Call the Resolve method as part of the Storage Platform API 322.

ItemIDReference(项目ID引用)是ItemReference的子类型。它定义了Locator(定位器)和ItemID字段。Locator字段命名(即标识)项目的域。它由能将Locator的值解析到项目域的定位器解析方法来处理。ItemID字段是ItemID类型。ItemIDReference (item ID reference) is a subtype of ItemReference. It defines the Locator (locator) and ItemID fields. The Locator field names (that is, identifies) the domain of the item. It is handled by the locator resolve method that resolves the value of the Locator to the project field. The ItemID field is of type ItemID.

ItemPathReference(项目路径引用)是定义Locator和Path(路径)字段的ItemReference的特殊化。Locator字段标识一项目域。它由能将Locator的值解析到项目域的定位器解析方法来处理。Path字段包含以由Locator提供的项目域为根的存储平台名字空间中的(相对)路径。ItemPathReference (item path reference) is a specialization of ItemReference that defines the Locator and Path fields. The Locator field identifies an item field. It is handled by the locator resolve method that resolves the value of the Locator to the project field. The Path field contains a (relative) path in the storage platform namespace rooted at the project domain provided by the Locator.

不能在集合运算中使用此类引用。引用一般必须通过路径解析过程来解析。存储平台API 322的Resolve方法提供此功能。Such references cannot be used in set operations. References generally must be resolved through the path resolution process. The Resolve method of the Storage Platform API 322 provides this functionality.

上面讨论的引用形式通过图11示出的引用类型分层结构表示。从这些类型继承的另外引用类型能在模式中定义。它们能在关系声明中用作目标字段的类型。The citation forms discussed above are represented by the citation type hierarchy shown in FIG. 11 . Additional reference types that inherit from these types can be defined in the schema. They can be used as the type of the target field in the relation declaration.

3.项目文件夹和类别3. Project folders and categories

如下面将更充分讨论的,项目组能组织成称为项目文件夹(不要与文件的文件夹混淆)的特殊项目。然而不象大多数文件系统,一个项目可属于多个项目文件夹,使得当一个项目在一个项目文件夹中被访问和修订时,此修订的项目随后能直接从另一项目文件夹访问。实质上,虽然对一个项目的访问可从不同的项目文件夹发生,事实上真正访问的是同一个项目。然而,一个项目文件夹不必拥有其所有成员项目,或简单地结合其它文件夹共同拥有项目,使得一个项目文件夹的删除不必要导致项目的删除。然而在本发明的若干实施例中,一个项目必须至少属于一个项目文件夹,使得如果特定项目的唯一文件夹被删除,则对某些实施例,该项目被自动被删除,或在另外实施例中,该项目自动地成为默认项目文件夹的成员(“TrashCan(垃圾箱)”文件夹在概念上类似于在各种基于文件和文件夹的系统中使用的类似名字文件夹。)As will be discussed more fully below, groups of projects can be organized into special projects called project folders (not to be confused with folders of files). Unlike most file systems, however, a project can belong to multiple project folders, so that when a project is accessed and revised in one project folder, the revised project can then be accessed directly from another project folder. Essentially, although access to a project can occur from different project folders, what is actually being accessed is the same project. However, a project folder does not have to own all of its member projects, or simply own projects in conjunction with other folders, so that deletion of a project folder does not necessarily result in the deletion of projects. In several embodiments of the invention, however, a project must belong to at least one project folder, so that if the unique folder for a particular project is deleted, then for some embodiments the project is automatically deleted, or in other embodiments , the project automatically becomes a member of the default project folder (the "TrashCan" folder is conceptually similar to similarly named folders used in various file and folder-based systems.)

如下面更充分讨论的,项目也可属于基于共同描述的特征的类别,特征如:(a)项目类型(或类型),(b)特定的直接或继承的属性(或属性),或(c)对应于项目属性的特定值(或值)。例如,包括个人联系人信息的特定属性的项目可自动属于联系人(Contact)类别,具有联系人信息属性的任何项目同样也自动属于此类别。同样,具有“New York City(纽约市)”值的位置属性的任何项目可自动属于纽约市(NewYorkCity)类别。As discussed more fully below, items may also belong to categories based on commonly described characteristics such as: (a) item type (or types), (b) specific direct or inherited attributes (or attributes), or (c ) corresponds to a specific value (or values) of an item property. For example, items that include a specific attribute of personal contact information may automatically belong to the Contact category, as will any item that has the attribute of contact information. Likewise, any item that has a location attribute with a value of "New York City" can automatically belong to the category NewYorkCity.

类别在概念上不同于项目文件夹之处在于,项目文件夹可包括互相无关的项目(即无共同的描述的特征),而在类别中的每个项目具有对该类别描述的共同类型、属性或值(“共同性”),正是这个共同性形成对它与该类别中其它项目或那些项目之间的关系的基础。此外,虽然在特定文件夹中的项目的成员资格基于该项目的任何特定方面不是强制的,然而对某些实施例,具有在分类上与一类别相关的共同性的所有项目在硬件/软件接口系统级上可自动地成为该类别的成员。概念上,类别也能看作虚拟项目文件夹,其成员资格基于特定查询(如在数据库的上下文中)的结果,而满足此查询的条件(由类别的共同性确定)的项目应构成该类别的成员资格。Categories are conceptually different from project folders in that project folders may contain items that are unrelated to each other (i.e., have no common descriptive characteristics), whereas each item in a category has a common type, attribute, or value ("commonality"), it is this commonality that forms the basis for its relationship to other items or items in the class. Furthermore, while membership of an item in a particular folder is not mandatory based on any particular aspect of the item, for some embodiments, all items having a taxonomically common Membership of this class is automatic at the system level. Conceptually, categories can also be seen as virtual project folders, whose membership is based on the results of a specific query (such as in the context of a database), and projects that satisfy the conditions of this query (determined by the commonality of the category) should form the category membership.

图4示出在项目、项目文件夹和类别之间的结构关系。多个项目402、404、406、408、410、412、414、418和420是各个项目文件夹422、424、426、428和430的成员。某些项目属于一个以上项目文件夹,如项目402属于项目文件夹422和424。某些项目,如项目402、404、406、408、410和412也是一个或多个类别432、434和436的成员,而其它项目,如项目44,416,418和420可以不属于任何类别(虽然这大部分不象在某些实施例中,其中具有任何属性自动暗示类别中的成员资格,因此在那样实施例中为了不是任何类别的成员,项目应完全地无特征)。与文件夹的分层结构相反,类别和项目文件夹均有更像如所示的有向图的结构。在任何情况下,项目、项目文件夹和类别都是项目(尽管是不同的项目类型)。Figure 4 shows the structural relationship between projects, project folders and categories. A plurality of projects 402 , 404 , 406 , 408 , 410 , 412 , 414 , 418 , and 420 are members of respective project folders 422 , 424 , 426 , 428 , and 430 . Certain projects belong to more than one project folder, such as project 402 belonging to project folders 422 and 424 . Certain items, such as items 402, 404, 406, 408, 410, and 412 are also members of one or more categories 432, 434, and 436, while other items, such as items 44, 416, 418, and 420, may not belong to any category ( This is mostly not like in some embodiments though, where having any attribute automatically implies membership in a class, so in that embodiment an item should be completely featureless in order to not be a member of any class). In contrast to the hierarchical structure of folders, both category and project folders have a structure more like a directed graph as shown. In any case, projects, project folders, and categories are projects (albeit different project types).

与文件、文件夹和目录相反,本发明的项目、项目文件夹和类别的特征在本质上不是“物理的”,因为它们不具有物理容器的概念上的等价性,因而项目可存在于一个以上那样的位置。项目存在于一个以上项目文件位置以及被组织成类别的能力提供了在硬件/软件接口级上增强和丰富程度的数据处理及存储结构能力,超越了在本领域中当前可得到的能力。Contrary to files, folders and directories, the project, project folder and category features of the present invention are not "physical" in nature, because they have no conceptual equivalent of physical containers, so projects can exist in a the position above. The ability for projects to exist in more than one project file location and be organized into categories provides an enhanced and rich degree of data processing and storage structure capabilities at the hardware/software interface level beyond what is currently available in the art.

4.模式4. Mode

a)基础模式a) Basic pattern

为了提供创建和使用项目的通用基础,本发明的存储平台的各实施例包括建立用于创建和组织项目及属性的概念性框架的基础(Base)模式。基础模式定义了某些特定类型的项目和属性,以及从中进一步导出子类型的这些特定基本类型的特征。使用此基础模式使程序员能在概念上将项目(及其各自的类型)与属性(及其各自的类型)加以区别。此外,基础模式列出所有项目可拥有的基本属性集,因为所有项目(及其对应的项目类型)是从基础模式的此基本项目(及其对应的项目类型)导出。To provide a common basis for creating and using items, embodiments of the storage platform of the present invention include a Base schema that establishes a conceptual framework for creating and organizing items and properties. The base schema defines the items and properties of some specific types, and the characteristics of these specific base types from which subtypes are further derived. Using this basic pattern enables programmers to conceptually distinguish items (and their respective types) from attributes (and their respective types). Additionally, the base schema lists the base set of properties that all items can have, since all items (and their corresponding item types) are derived from this base item (and their corresponding item types) of the base schema.

如图7所示,对于本发明的若干实施例,基础模式定义三个顶层类型:Item(项目)、Extension(扩展)和PropertyBase(属性基础)。如图所示,通过此基本“Item”项目类型的属性定义了项目类型。相反,顶层属性类型“PropertyBase”没有预定义的属性,仅是一个锚位(anchor),从中导出所有其它属性,并通过它所有导出的属性类型互相联系(共同从单个属性类型导出)。Extension类型属性定义该扩展扩展了哪个项目,并定义将一个扩展与另一个项目相区别的标识,因为一个项目可具有多个扩展。As shown in FIG. 7, for several embodiments of the present invention, the basic schema defines three top-level types: Item (item), Extension (extension) and PropertyBase (property base). As shown, the item type is defined through the properties of this base "Item" item type. In contrast, the top-level property type "PropertyBase" has no predefined properties, but is only an anchor from which all other properties are derived, and through which all derived property types are interconnected (collectively derived from a single property type). The Extension type attribute defines which project the extension extends, and defines the identity that distinguishes one extension from another project, since a project can have multiple extensions.

ItemFolder(项目文件夹)是Item项目类型的子类型,除了从Item继承的属性外,它表征用于建立到其成员(如果有的话)的关系,尽管Identitykey(身份关键字)和Property(属性)均是PropertyBase的子类型。CategoryRef(目录引用)进而是IdentityKey的子类型。ItemFolder (item folder) is a subtype of the Item item type. In addition to the properties inherited from Item, it characterizes the relationship used to establish its members (if any), although Identitykey (identity key) and Property (attribute ) are subtypes of PropertyBase. CategoryRef (category reference) is in turn a subtype of IdentityKey.

b)核心模式b) Kernel mode

本发明的存储平台的各种实施例还包括为顶层项目类型结构提供概念框架的核心(Core)模式。图8A是示出核心模式中的项目的框图,而图8B是示出核心模式中属性类型的框图。在带不同扩展名(*.com、*.exe、*.bat、*.sys等)的文件和在基于文件和文件夹系统中其它准则之间作出的区分是类似于核心模式的功能。在基于项目的硬件/软件接口系统中,核心模式定义了一组核心项目类型,它们直接(按项目类型)或间接地(按项目子类型)将所有项目特征化成基于项目的硬件/软件接口系统理解并能以预定或可预计的方式直接处理的一个或多个核心模式项目类型。预定的项目类型反映了在基于项目的硬件/软件接口系统中最常用的项目,且因此通过理解这些包括核心模式的预定项目类型的基于项目的硬件/软件接口系统获取有效性级别。Various embodiments of the storage platform of the present invention also include a Core schema that provides a conceptual framework for the top-level project type structure. FIG. 8A is a block diagram showing items in the core schema, and FIG. 8B is a block diagram showing attribute types in the core schema. The distinction made between files with different extensions (*.com, *.exe, *.bat, *.sys, etc.) and other criteria in the file- and folder-based system is a kernel-mode-like function. In an item-based hardware/software interface system, the core schema defines a core set of item types that directly (by item type) or indirectly (by item subtype) characterize all items into an item-based hardware/software interface system One or more core schema item types that are understood and can be directly addressed in a predetermined or predictable manner. The predefined item types reflect the items most commonly used in the item-based hardware/software interface system, and thus the level of effectiveness is obtained by understanding these predefined item types including the core schema.

在某些实施例中,核心模式是不可扩展的,即,没有另外的类型可直接从基础模式中的项目类型子分类,除非作为核心模式的一部分的特定的预定导出的项目类型。通过禁止对核心模式的扩展(即,通过禁止向核心模式添加新的项目),存储平台托管核心模式项目类型的使用,因为每个后续的项目类型必须是核心模式项目类型的子类型。此结构允许在保持具有一组预定的核心项目类型的益处的同时在定义另外项目类型时有合理程度的灵活性。In some embodiments, the core schema is not extensible, ie, no additional types can be subclassed directly from item types in the base schema, except for specific predefined derived item types that are part of the core schema. By prohibiting extensions to the core schema (ie, by prohibiting the addition of new items to the core schema), the storage platform hosts the use of the core schema item type, since each subsequent item type must be a subtype of the core schema item type. This structure allows a reasonable degree of flexibility in defining additional item types while maintaining the benefits of having a predetermined set of core item types.

参考图8A,对本发明的各种实施例,由核心模式支持的特定项目类型可包括下列的一个或多个:Referring to FIG. 8A, for various embodiments of the present invention, specific item types supported by the core schema may include one or more of the following:

·Category(类别):此项目类型(及从中导出的子类型)的项目代表在基于项目的硬件/软件接口系统中的有效类别。• Category: Items of this item type (and subtypes derived from it) represent valid categories in an item-based hardware/software interface system.

·Commodity(物品):作为值的可标识事物的项目。• Commodity: An item that is an identifiable thing as a value.

·Device(设备):具有支持信息处理能力的逻辑结构的项目。• Device: An item having a logical structure supporting information processing capabilities.

·Document(文档):具有不能由基于项目的硬件/软件接口系统解释而相反由对应于文档类型的应用程序解释的内容的项目。• Document: An item with content that cannot be interpreted by an item-based hardware/software interface system but instead by an application corresponding to the document type.

·Event(事件):记录环境中某些发生事件的项目。· Event (event): records some events in the environment of the project.

·Location(位置):代表物理位置(如地理位置)的项目。• Location: An item representing a physical location (eg, geographic location).

·Message(消息):在两个或更多主体(下面定义)之间通信的项目。• Message: An item for communication between two or more principals (defined below).

·Principal(主体):具有除ItemId之外的至少一个肯定可验证身份(如,个人、组织、组、家庭、作者、服务等的标识)的项目。• Principal: An Item that has at least one positively verifiable identity (eg, identification of a person, organization, group, family, author, service, etc.) other than the ItemId.

·Statement(语句):具有关于环境的特定信息的项目,包括但不限于:政策、预订、凭证等。• Statement: An item with specific information about an environment, including but not limited to: policies, subscriptions, credentials, etc.

类似地参考图8B,由核心模式支持的特定属性类型可包括下列的一个或多个:Referring similarly to FIG. 8B , specific attribute types supported by the core schema may include one or more of the following:

·Certificate(证书)(从基础模式中的基本PropertyBase类型导出)Certificate (certificate) (derived from the base PropertyBase type in the base schema)

·PrincipalIdentityKey(主体身份关键字)(从基础模式中的IdentityKey类型导出)PrincipalIdentityKey (subject identity key) (derived from the IdentityKey type in the underlying schema)

·PostalAddress(邮政地址)(从基础模式中Property类型导出)· PostalAddress (postal address) (derived from the Property type in the basic mode)

·RichText(多信息文本)(从基础模式中Property类型导出)RichText (rich text) (derived from the Property type in the basic mode)

·EAddress(电子邮件地质)(从基础模式中Property类型导出)EAddress (email geology) (derived from the Property type in the base schema)

·IdentitySecnrityPackage(身份安全包)(从基础模式中Relationship类型导出)· IdentitySecnrityPackage (identity security package) (exported from the Relationship type in the basic model)

·RoleOccupancy(居民角色)(从基础模式中Relationship类型导出)·RoleOccupancy (resident role) (derived from the Relationship type in the basic model)

·BasicPresence(基础存在)(从基础模式中Relationship类型导出)这些项目和属性按在图8A和图8B中列出的各自属性进一步描述。• BasicPresence (derived from the Relationship type in the Basic Schema) These items and attributes are further described by the respective attributes listed in Figures 8A and 8B.

5.关系5. Relationship

关系是二元关系,其中一个项目被指定为源,另一个被指定为目标。源项目和目标项目通过关系相联系。源项目一般控制关系的生命周期。即,当源项目被删除,项目之间的关系也被删除。Relationships are binary, where one item is designated as the source and the other as the target. Source and target items are related by a relationship. The source project generally controls the life cycle of the relationship. That is, when the source item is deleted, the relationship between the items is also deleted.

关系被分类成:包含(Containment)和引用(Reference)关系。包含关系控制目标项目的生命周期,而引用关系不提供任何生命周期管理语义。图12示出关系分类的方式。Relationships are classified into: Containment and Reference relationships. Contains relationships control the lifecycle of the target item, while references relationships do not provide any lifecycle management semantics. Fig. 12 shows how relationships are classified.

包含关系又被分类成持有(Holding)和嵌入(Embedding)关系。当对一个项目的所有持有关系被移除,该项目被删除。持有关系通过引用计数机制控制目标。嵌入关系能够对复合项目建模,并能被看作排他的持有关系。一个项目能是一个或多个持有关系的目标;但一个项目只能是一个嵌入关系的目标。作为嵌入关系的目标的项目不能是任一其它持有或嵌入关系的目标。The containment relationship is further classified into holding (Holding) and embedding (Embedding) relationships. When all holdings to an item are removed, the item is deleted. The holding relationship controls the target through a reference counting mechanism. Embedding relationships can model composite items and can be viewed as exclusive holding relationships. An item can be the target of one or more holding relationships; but an item can only be the target of one embedded relationship. An item that is the target of an embedded relationship cannot be the target of any other holding or embedded relationship.

引用关系不控制目标项目的生命周期。它们可以是摇摆不定的—目标项目可以不存在。引用关系能用于在全局项目名字空间的任何处(即,包括远程数据存储)建模对项目的引用。Reference relationships do not control the lifecycle of the target project. They can be dangling - the target item can be absent. Reference relationships can be used to model references to projects anywhere in the global project namespace (ie, including remote data stores).

获得一项目不自动取得某关系,应用程序必须明确地请求项目的关系。此外,修改关系不修改源或目标项目;类似地,添加关系不影响源/目标项目。Obtaining an item does not automatically acquire a relationship, the application must explicitly request the item's relationship. Also, modifying a relationship does not modify the source or target items; similarly, adding a relationship does not affect the source/target items.

a)关系声明a) Relationship statement

显式的关系类型用下列元素定义;Explicit relation types are defined with the following elements;

·在Name(名字)属性中指定关系名Specify the relationship name in the Name attribute

·下列之一的关系类型:持有、嵌入、引用。这是在Type(类型)属性中指定的。• A relationship type of one of the following: holds, embeds, references. This is specified in the Type attribute.

·源和目标端点。每个端点指定所引用项目的名和类型。• Source and destination endpoints. Each endpoint specifies the name and type of the item being referenced.

·源端点字段一般是ItemID(项目ID)类型(未声明),而必须引用在与关系实例同一数据存储中的项目。• The source endpoint field is typically of type ItemID (not declared), but must refer to an item in the same data store as the relation instance.

·对持有和嵌入关系,目标端点字段必须是ItemIDReference(项目ID引用)类型,且它必须引用在与关系实例相同存储中的项目。对引用关系,目标端点能是任何ItemReference(项目引用)类型,并能引用在其它存储平台数据存储中的项目。• For hold and embed relationships, the target endpoint field must be of type ItemIDReference and it must refer to an item in the same store as the relationship instance. For reference relationships, the target endpoint can be of any ItemReference type and can reference items in other storage platform data stores.

·能可任选地声明标量或PropertyBase(属性基础)类型的一个或多个字段。这些字段能包含与该关系相关联的数据。• One or more fields of scalar or PropertyBase type can optionally be declared. These fields can contain data associated with the relationship.

·关系实例被存储在全局关系表中。• Relationship instances are stored in the global relationship table.

·每个关系实例唯一地由组合(源ItemID、关系ID)标识。对所有源自给定项目的关系,在给定的源ItemID中关系ID是唯一的,而不管它们的类型。• Each relation instance is uniquely identified by the combination (source ItemID, relation ID). Relation IDs are unique within a given source ItemID for all relations originating from a given Item, regardless of their type.

源项目是关系的拥有者。而被指定为拥有者的项目控制关系的生命周期,关系本身和与它们相关的项目分开。存储平台API 322提供用于展现与项目相关联的关系的机制。The source project is the owner of the relationship. While the project designated as the owner controls the lifecycle of the relationship, the relationships themselves are separate from the projects they are related to. The storage platform API 322 provides mechanisms for exposing the relationships associated with items.

这里是一个关系声明的例子。Here is an example of a relationship 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>

这是引用关系的例子。若由源引用所引用的个人项目不存在,则不能创建该关系。而且若该个人项目被删除,在个人和组织之间的关系实例也被删除。然而若组织项目被删除,关系不被删除,而它是摇摆不定的。This is an example of a reference relationship. This relationship cannot be created if the personal item referenced by the source reference does not exist. And if the individual item is deleted, the relationship instance between the individual and the organization is also deleted. However if the organization item is deleted, the relationship is not deleted and it is swinging.

b)持有关系b) holds a relationship

持有关系用于基于目标项目的生命周期管理来对引用计数建模。Holding relationships are used to model reference counting based on the lifecycle management of the target project.

一个项目可以是用于对项目的零个或多个关系的源端点。不是嵌入项目的项目可以是在一个或多个持有关系中的目标项目。An item can be the source endpoint for zero or more relationships to items. Items that are not embedded items may be target items in one or more holding relationships.

目标端点引用类型必须是ItemIDReference,且它必须引用在与关系实例相同的存储中的项目。The target endpoint reference type must be ItemIDReference, and it must refer to an item in the same store as the relation instance.

持有关系实施目标端点的生命周期管理。持有关系实例和作为目标的项目的创建是原子操作。可以创建将同一项目作为目标的另外的持有关系实例。当具有给定项目作为目标端点的最后一个持有关系实例被删除时,该目标项目也被删除。Holding relationships enforces lifecycle management of target endpoints. The creation of the holding relation instance and the item as the target is an atomic operation. Additional holding relationship instances can be created that target the same project. When the last holding relationship instance with the given item as target endpoint is deleted, the target item is also deleted.

在关系声明中指定的端点项目的类型一般在创建该关系的实例时强制。在关系建立之后端点项目的类型不能改变。The type of an endpoint item specified in a relationship declaration is generally enforced when an instance of that relationship is created. The type of an endpoint item cannot be changed after the relationship is established.

持有关系在形成项目的名字空间中起着关键作用。它们包含“Name(名字)”属性,它定义目标项目相对于源项目的名字。对所有源自给定项目的持有关系,相对名字是唯一的。从根项目开始到给定项目的相对名字的有序类表形成该项目的全名。Holding relationships play a key role in forming a project's namespace. They contain a "Name" attribute, which defines the name of the target project relative to the source project. Relative names are unique across all holding relationships originating from a given project. An ordered list of classes starting from the root project to the relative names of a given project forms the full name of that project.

持有关系形成一有向非循环图(DAG)。在创建持有关系时,系统确保不产生回路,从而确保项目的名字空间形成DAG。The holding relationships form a directed acyclic graph (DAG). When creating holding relationships, the system ensures that no loops are created, thereby ensuring that the project's namespace forms a DAG.

虽然持有关系控制目标项目的生命周期,它不控制目标端点项目的操作的一致性。目标项目在操作上独立于通过持有关系拥有它的项目。在作为持有关系的源的项目上的拷贝、移动、备份和其它操作不影响作为同一关系的目标的项目—例如,备份文件夹项目不自动地备份该文件夹中所有项目(FolderMember(文件夹成员)关系中的目标)。Although the hold relationship controls the lifecycle of the target item, it does not control the consistency of operation of the target endpoint item. The target item is operationally independent of the item that owns it through the holding relationship. Copy, move, backup, and other operations on items that are the source of a holding relationship do not affect items that are the target of the same relationship—for example, backing up a folder item does not automatically back up all items in that folder (FolderMember(folder member) target in a relationship).

下面是持有关系的例子:Here is an example of a hold 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>

FolderMember关系使文件夹的概念成为项目的类属集合。The FolderMember relationship makes the concept of a folder a generic collection of items.

c)嵌入关系c) Embedding relationships

嵌入关系将目标项目的生命周期的排外控制的概念模型化。它们允许合成项目的概念。The embedding relationship models the concept of exclusive control of the life cycle of the target item. They allow the notion of compositing items.

嵌入关系实例和作为目标的项目的创建是原子操作。一个项目能是零个或多个嵌入关系的源。然而一个项目能是一个且仅是一个嵌入关系的目标。作为嵌入关系的目标的项目不能是持有关系的目标。The creation of an embedded relation instance and an item as a target is an atomic operation. An item can be the source of zero or more embedded relations. However an item can be the object of one and only one embedded relation. An item that is the target of an embedded relationship cannot be the target of a holding relationship.

目标端点引用类型必须是ItemIDReference,且它必须引用在与关系实例相同数据存储中的项目。The target endpoint reference type must be ItemIDReference, and it must refer to an item in the same data store as the relation instance.

在关系声明中指定的端点项目的类型一般在创建该关系的实例时强制。在关系建立之后端点的类型不能改变。The type of an endpoint item specified in a relationship declaration is generally enforced when an instance of that relationship is created. The type of an endpoint cannot be changed after the relationship is established.

嵌入关系控制该目标端点的操作一致性。例如,串行化项目的操作可包括串行化所有源自该项目及所有其目标的所有嵌入关系;拷贝一项目也拷贝所有它的嵌入项目。The embedding relationship controls the operational consistency of that target endpoint. For example, the operation of serializing an item may include serializing all embedded relationships originating from the item and all of its targets; copying an item also copies all of its embedded items.

下面是示例声明:Here 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) Reference relationship

引用关系不控制它引用的项目的生命周期。尤其是,引用关系不保证目标的存在,也不保证目标的类型如关系声明中指定的那样。这意味着引用关系能是摇摆不定的。而且引用关系能引用在其它数据存储中的项目。引用关系能看作类似于网页上的链接的概念。A reference relationship does not control the lifecycle of the item it references. In particular, a referencing relationship does not guarantee the existence of the target, nor does it guarantee that the target is of the type as specified in the relationship declaration. This means that citation relationships can be volatile. And reference relationships can reference items in other data stores. A citation relationship can be viewed as a concept similar to a link on a web page.

下面是引用关系说明的例子:The following is an example of a reference relationship specification:

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

             <Sourc ItemType=″Document″<Sourc ItemType="Document"

             ItemType=″Base.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>

在目标的端点允许任何引用类型。参与引用关系的项目可以是任何项目类型。Any reference type is allowed on the target's endpoint. Items participating in a reference relationship can be of any item type.

引用关系用于对项目之间的大多数非生命周期管理关系建模。因为不强制目标的存在,引用关系便于对松散耦合的关系建模。引用关系能用于在其它存储,包括在其它计算机上的存储中的目标项目。Reference relationships are used to model most non-lifecycle management relationships between items. Reference relationships are convenient for modeling loosely coupled relationships because the existence of the target is not enforced. Reference relationships can be used for target items in other stores, including stores on other computers.

e)规则和约束e) Rules and constraints

下列附加规则和约束应用于关系:The following additional rules and constraints apply to relationships:

·一个项目必须是(仅一个嵌入关系)或(一个或多个持有关系)的目标。一个例外是根项目。一个项目能是零个或多个引用关系的目标。• An item must be the target of (only one embedding relationship) or (one or more holding relationships). One exception is the root project. An item can be the target of zero or more reference relationships.

·作为嵌入关系目标的项目不能是持有关系的源。它能是引用关系的源。• An item that is the target of an embedded relationship cannot be the source of the holding relationship. It can be the source of a reference relationship.

·一个项目若是从文件升级,则不能是持有关系的源。它能是嵌入关系和引用关系的源。· An item cannot be the source of a hold relationship if it is promoted from a file. It can be the source of embedding and referencing relationships.

·一个从文件升级的项目不能是嵌入关系的目标。• An item upgraded from a file cannot be the target of an embedded relationship.

f)关系的排序f) Ordering of relations

在至少一个实施例中,本发明的存储平台支持关系的排序。通过在基本关系定义中名为“Order(排序)”的属性完成排序。在Order字段中无唯一性约束。不保证带有同一“Order”属性值的关系的次序,然而保证,它们能排序在带较低“Order”值的关系之后并在带较高“Order”字段值的关系之前。In at least one embodiment, the storage platform of the present invention supports ordering of relationships. Sorting is done through an attribute called "Order" in the base relation definition. There is no uniqueness constraint in the Order field. The order of relations with the same "Order" property value is not guaranteed, however, they are sorted after relations with lower "Order" values and before relations with higher "Order" field values.

应用程序通过在在组合(SourceItem ID,RelationshipID,Order)上排序得到默认次序的关系。源自给定项目的所有关系实例被排序成单个集合,而不管在集合中关系的类型。然而这保证,给定类型(如,FolderMembers(文件夹成员))的所有关系是给定项目的关系集合的已排序子集。The application gets the default order of relationships by sorting on the combination (SourceItem ID, RelationshipID, Order). All relationship instances originating from a given item are sorted into a single collection, regardless of the type of relationship in the collection. This guarantees, however, that all relationships of a given type (eg, FolderMembers) are an ordered subset of a given item's relationship collection.

用于处理关系的数据存储API 312实现一组支持关系的排序的操作。引入下列术语帮助解释那些操作:The data store API 312 for working with relations implements a set of operations that support ordering of relations. The following terms are introduced to help explain those operations:

·RelFirst是有序集合中带次序值OrdFirst的第一个关系;RelFirst is the first relation in the ordered set with the order value OrdFirst;

·RelLast是有序集合带次序值OrdLast的最后一个关系;RelLast is the last relation of the ordered set with the order value OrdLast;

·RelX是集合中带次序值OrdX的给定关系;RelX is a given relation in a set with an order value OrdX;

·RelPrev是集合中最接近于RelX的带小于OrdX的次序值OrdPrev的关系;以及RelPrev is the closest relation in the set to RelX with an order value OrdPrev less than OrdX; and

·RelNext是集合中最接近于RelX的带大于OrdX的次序值OrdNext的关系。• RelNext is the closest relation in the set to RelX with an order value OrdNext greater than OrdX.

操作包括但不限于:Actions include but are not limited to:

·InsertBeforeFirst(SourceItemID,Relationship)插入关系作为集合中的第一个关系。新关系的“Order”属性的值可小于OrdFirst。• InsertBeforeFirst(SourceItemID, Relationship) inserts a relationship as the first relationship in the collection. The value of the "Order" attribute of the new relationship can be less than OrdFirst.

·InsertAfterLast(SourceItemID,Relationship)插入关系作为集合中的最后一个关系。新关系的“Order”属性的值可大于OrdLast。• InsertAfterLast(SourceItemID, Relationship) inserts a relationship as the last relationship in the collection. The "Order" property of the new relationship can have a value greater than OrdLast.

·InsertAt(SourceItemID,ord,Relationship)插入带有对“Order”属性指定的值的关系。• InsertAt(SourceItemID, ord, Relationship) inserts a relationship with the value specified for the "Order" attribute.

·InsertBefore(SourceItemID,ord,Relationship)在带有给定次序值的关系之前插入该关系。新的关系可被分配“Order”值,它在OrdPrev和ord之间,但不包括这两个值。- InsertBefore(SourceItemID, ord, Relationship) inserts the relationship before the relationship with the given order value. New relations may be assigned the "Order" value, which is between, but not including, OrdPrev and ord.

·InsertAfter(SourceItemID,ord,Relationship)在带有给定次序值的关系之后插入该关系。新的关系可被分配“Order”值,它在ord和OrdNext之间,但不包括这两个值。• InsertAfter(SourceItemID, ord, Relationship) inserts the relationship after the relationship with the given order value. New relations may be assigned the "Order" value, which is between but not including ord and OrdNext.

·MoveBefore(SourceItemID,ord,Relationship)将带给定关系ID的关系移动到带指定“Order”值的关系之前。关系可被分配新的“Order”值,它在OrdPrev和ord之间,但不包括这两个值。• MoveBefore(SourceItemID, ord, Relationship) moves the relationship with the given relationship ID before the relationship with the specified "Order" value. Relationships can be assigned a new "Order" value, which is between, but not including, OrdPrev and ord.

·MoveAfter(SourceItemID,ord,Relationship)将带给定关系ID的关系移动到带指定“Order”值的关系之后。该关系可被分配新的次序值,它在ord和OrdNext之间,但不包括这两个值。• MoveAfter(SourceItemID, ord, Relationship) moves the relationship with the given relationship ID after the relationship with the specified "Order" value. The relationship can be assigned a new order value, which is between but not including ord and OrdNext.

如前提到,每个项目必须是项目文件夹的成员。按照关系,每个项目必须与一项目文件夹有一关系。在本发明的若干实施例中,某些关系由在诸项目之间存在的关系表示。As mentioned earlier, each project must be a member of the project folder. In terms of relationships, each project must have a relationship with a project folder. In several embodiments of the invention, certain relationships are represented by relationships that exist between items.

如对本发明的各实施例的实现,关系提供一有向的二元关系,它由一个项目(源)延伸到另一项目(目标)。关系由源项目(延伸它的项目)拥有,因此若源被移除则关系被移除(如在源项目被删除时关系被删除)。此外在某些情况下,关系可共享(共同拥有的)目标项目的拥有权,且那样的拥有权仅可反映在关系的IsOwned(被拥有)属性(或其等效属性)中(如图7对关系属性类型所示)。在这些实施例中,创建一新的IsOwned关系自动递增该目标上的引用计数,而删除那样的关系可递减该目标项目上的引用计数。对这些特定实施例,若项目具有大于0的引用计数,则继续存在,若项目计数达到0则自动删除。再一次,项目文件夹是具有(或能具有)与其它项目的一组关系的项目,这些其它项目包括项目文件夹的成员资格。关系的其它实际实现是可能的,并由本发明构想来实现这里描述的功能。As implemented for various embodiments of the present invention, a relationship provides a directed binary relationship extending from one item (source) to another item (target). A relationship is owned by the source item (the item that extends it), so the relationship is removed if the source is removed (eg, the relationship is deleted when the source item is deleted). Also in some cases, relationships can share (co-owned) ownership of the target item, and that ownership can only be reflected in the relationship's IsOwned property (or its equivalent) (see Figure 7 shown for relational attribute types). In these embodiments, creating a new IsOwned relationship automatically increments the reference count on the target, while deleting such a relationship decrements the reference count on the target item. For these particular embodiments, an item persists if it has a reference count greater than zero, and is automatically deleted if the item count reaches zero. Again, a project folder is a project that has (or can have) a set of relationships with other projects, including membership of the project folder. Other practical implementations of relationships are possible and contemplated by the present invention to achieve the functionality described herein.

不管实际的实现如何,关系是从一个对象到另一对象的可选择的连接。一个项目属于一个以上项目文件夹以及一个或多个类别,而不论这些项目、文件夹和类别是公有的或私有的能力是由给予基于项目的结构中的存在(或缺乏)的意义所确定的。这些逻辑关系是分配给一组关系的意义,而不论其专门用来实现这里所述功能的物理实现如何。逻辑关系是在项目及其文件夹或类别之间建立的(或相反),因为本质上项目文件夹和类别的每一个都是特定类型的项目。因此,能象其它项目一样地对项目文件夹和类别起作用(拷贝、添加到电子邮件消息中、嵌入文档等等,而无限制),而项目文件夹和类别能象其它项目一样使用相同的机制串行化和解串行化(导入和导出)。(例如在XML中,所有项目可具有串行化的格式,且此格同等地应用于项目文件夹、类别和项目)。Regardless of the actual implementation, a relationship is an optional connection from one object to another. The ability for a project to belong to more than one project folder and one or more categories, whether those projects, folders and categories are public or private, is determined by the meaning given to the presence (or lack thereof) in project-based structures . These logical relationships are the meanings assigned to a set of relationships, regardless of its physical implementation designed to perform the functions described herein. Logical relationships are established between projects and their folders or categories (or vice versa), because essentially project folders and categories are each a specific type of project. Thus, project folders and categories can be acted on like other projects (copied, added to email messages, embedded in documents, etc., without limitation), and project folders and categories can be used like other projects using the same Mechanisms for serialization and deserialization (import and export). (eg in XML all items can have a serialized format and this grid applies equally to item folders, categories and items).

代表项目及其项目文件夹之间的关系的上述关系在逻辑上能从项目延伸到项目文件夹、从项目文件夹延伸到项目、或两者。逻辑上从一项目延伸到项目文件夹的关系表明该项目文件夹对于该项目是公有的,并与该项目共享其成员资格信息;相反,缺乏从项目到项目文件夹的逻辑关系表明该项目文件夹对该项目是私有的,且不与该项目共享其成员资格信息。类似地,逻辑上从项目文件夹延伸到项目的关系表明该项目是公有的,并可与该项目文件夹共享,而缺乏从项目文件夹延伸到项目的逻辑关系表明该项目是私有的且不能共享。因此,当向其它系统导出项目文件夹时,它是“公有”的项目,它在新的环境中共享,且当项目搜索其项目文件夹寻找其它可共享的项目时,它是“公有”的项目文件夹,它向该项目提供关于属于它的可共享项目的信息。The above-described relationships representing relationships between projects and their project folders can logically extend from projects to project folders, from project folders to projects, or both. A relationship that logically extends from a project to a project folder indicates that the project folder is public to the project and shares its membership information with the project; conversely, the lack of a logical relationship from a project to a project folder indicates that the project file Folders are private to the project and do not share their membership information with the project. Similarly, a relationship that logically extends from a project folder to a project indicates that the project is public and can be shared with the project folder, whereas the lack of a relationship that extends logically from the project folder to the project indicates that the project is private and cannot shared. Therefore, when exporting a project folder to another system, it is "public" to the project, it is shared in the new environment, and it is "public" when the project searches its project folder for other shareable projects A project folder that provides the project with information about shareable projects that belong to it.

图9是示出项目文件夹(它本身也是项目)、其成员项目、和项目文件夹及其成员项目之间互联关系的框图。项目文件夹900具有多个项目902、904和906作为其成员。项目文件夹900具有从它本身到项目902的关系912,它表明项目902是公有的,且能与项目文件夹900、其成员904和906、和任何可访问项目文件夹900的任何其它项目文件夹、类别、或项目(未示出)共享。然而从项目902到项目文件夹项目900没有关系,这表明项目文件夹900对项目902是私有的,且不与项目902共享其成员资格信息。另一方面,项目904确实具有从它本身到项目文件夹900的关系924,这表明项目文件夹900是公有的,且与项目904共享其成员资格信息。然而没有从项目文件夹900到项目904的关系,这表明项目904是私有的,且不与项目文件夹900、其另外的成员902、906、及可访问项目文件夹900的任何其它项目文件夹、类别、或项目(未示出)共享。与其到项目902和904的关系(或没有这些关系)相反,项目文件夹900具有从其本身到项目906的关系916,且项目906具有回到项目文件夹900的关系926,一起表明项目906是公有的,且能对文件夹900、其成员902和904、和可访问项目文件夹900的任何其它项目文件夹、类别、或项目(未示出)共享,且项目文件夹900是公有的,并与项目906共享其成员资格信息。FIG. 9 is a block diagram showing a project folder (which is itself a project), its member projects, and the interconnection relationship between the project folder and its member projects. Project folder 900 has a number of projects 902, 904, and 906 as its members. Project folder 900 has a relationship 912 from itself to project 902, which indicates that project 902 is public and can be shared with project folder 900, its members 904 and 906, and any other project files that can access project folder 900 Folders, categories, or items (not shown) are shared. However, there is no relationship from project 902 to project folder project 900 , indicating that project folder 900 is private to project 902 and does not share its membership information with project 902 . On the other hand, project 904 does have a relationship 924 from itself to project folder 900 , which indicates that project folder 900 is public and shares its membership information with project 904 . However there is no relationship from project folder 900 to project 904, which indicates that project 904 is private and not related to project folder 900, its other members 902, 906, and any other project folder that can access project folder 900 , category, or project (not shown) sharing. In contrast to its relationships (or lack thereof) to projects 902 and 904, project folder 900 has a relationship 916 from itself to project 906, and project 906 has a relationship 926 back to project folder 900, together indicating that project 906 is public, and can be shared with folder 900, its members 902 and 904, and any other project folder, category, or project (not shown) that can access project folder 900, and project folder 900 is public, And share its membership information with Project 906.

如前讨论,在项目文件夹中的项目不需要共享共同性,因为项目文件夹未被“描述”。另一方面,类别由对所有其成员项目共同的共同性描述。因此,类别的成员资格固有地限于具有所描述的共同性的项目,且在某些实施例中,满足类别的描述的所有项目自动地成为该类别的成员。因此,尽管项目文件夹允许由其成员资格来表示不重要的类型结构,类别基于定义的共同性来允许成员资格。As discussed previously, projects within project folders need not share commonality because project folders are not "described". A category, on the other hand, is described by a commonality common to all its member projects. Thus, membership of a class is inherently limited to items that have a described commonality, and in some embodiments, all items that satisfy a class's description automatically become members of that class. Thus, while project folders allow unimportant type structures to be represented by their membership, categories allow membership based on defined commonality.

当然,类别描述本质上是逻辑的,因而类别可通过类型、属性和/或值的任何逻辑表示来描述。例如,对一类别的逻辑表示可以是其成员资格,以包括具有两个属性之一或两者的项目。若这些对类别描述的属性是“A”和“B”,则该类别的成员资格可包括具有属性A而没有B的项目、具有属性B而没有A的项目、及兼有属性A和B的项目。通过逻辑运算符“OR(或)”来描述属性的逻辑表示,其中由类别描述成员组是具有属性A OR B的项目。如本领域的技术人员所理解的,也能使用类似的逻辑运算符(包括但不限于单独的“AND(和)”“XOR(异或)”和“NOT(非)”或其组合)来描述类别。Of course, class descriptions are logical in nature, so classes can be described by any logical representation of types, attributes and/or values. For example, a logical representation of a category may be its membership to include items with one or both of two attributes. If the attributes described for a class are "A" and "B," membership in that class can include items with attribute A but not B, items with attribute B but not A, and items with both attributes A and B project. The logical representation of the attribute is described by the logical operator "OR", where the member group described by the category is an item with attribute A OR B. As will be appreciated by those skilled in the art, similar logical operators (including but not limited to "AND (and)", "XOR (exclusive or)" and "NOT (not)" alone or in combination thereof can also be used to Describe the category.

尽管在项目文件夹(未描述)和类别(已描述)之间有区别,但在本发明的许多实施例中,原则上到项目的类别关系及到类别的项目关系以上面对项目文件夹和项目的同样方法揭示。Although there is a distinction between project folders (not described) and categories (described), in many embodiments of the invention, in principle, category relationships to projects and project relationships to categories above face project folders and Items are revealed in the same way.

图10是示出一类别(其本身也是项目)、其成员项目、类别及其成员项目之间的互联关系的框图。类别1000具有多个项目1002、1004和1006作为成员,所有这些都共享由类别1000描述的共同的属性、值和类型1008(共同性描述1008’)的某个组合。类别1000具有从其本身到项目1002的关系,它表明项目1002是公有的,且能与类别1000、其成员1004和1006、以及可访问类别1000的任何其它类别、项目文件夹、或项目(未示出)共享。然而,没有从项目1002到类别1000的关系,这表明类别1000对项目1002是私有的,且不与项目1002共享成员资格信息。另一方面,项目1004的确具有从其本身到类别1000的关系1024,这表明类别1000是公有的,且与项目1004共享其成员资格信息。然而,不存在从类别1000延伸到项目1004的关系,这表明项目1004是私有的,且不能与类别1000、它的其它成员1002和1006、以及可访问类别1000的任何其它类别、项目文件夹、或项目(未示出)共享。与它与项目1002和1004的关系(或没有此关系)相反,类别1000具有从其本身到项目1006的关系1016,且项目1006具有回到类别1000的关系1026,这一起表明项目1006是公有的,且能与类别1000、其项目成员1002和1004、以及可访问类别1000的任何其它类别、项目文件夹、或项目(未示出)共享,且类别1000是公有的,且与项目1006共享其成员资格信息。Fig. 10 is a block diagram showing a category (which is itself an item), its member items, and the interconnection between the category and its member items. Class 1000 has a number of items 1002, 1004, and 1006 as members, all of which share some combination of common attributes, values, and types 1008 (commonality description 1008') described by class 1000. Class 1000 has a relationship from itself to project 1002, which indicates that project 1002 is public and can be shared with class 1000, its members 1004 and 1006, and any other class, project folder, or project that has access to class 1000 (not shown) shared. However, there is no relationship from project 1002 to category 1000 , indicating that category 1000 is private to project 1002 and does not share membership information with project 1002 . On the other hand, item 1004 does have a relationship 1024 from itself to category 1000 , which indicates that category 1000 is public and shares its membership information with item 1004 . However, there is no relationship extending from class 1000 to item 1004, indicating that item 1004 is private and cannot be shared with class 1000, its other members 1002 and 1006, and any other class, item folder, Or project (not shown) sharing. In contrast to its relationship (or lack thereof) to items 1002 and 1004, class 1000 has a relationship 1016 from itself to item 1006, and item 1006 has a relationship 1026 back to class 1000, which together indicate that item 1006 is public , and can be shared with class 1000, its project members 1002 and 1004, and any other class, project folder, or project (not shown) that can access class 1000, and class 1000 is public and shares its Membership information.

最后,由于类别和项目文件夹本身是项目,且项目可以互相关系,类别可关系到项目文件夹,反之亦然,且在某些另外实施例中,类别、项目文件夹和项目可分别关系到其它类别、项目文件夹和项目。然而在各种实施例中,项目文件夹结构和/或类别结构在硬件/软件接口系统级上禁止包含回路。当项目文件夹和类别结构类似于有向图时,禁止回路的实施例类似于有向非循环图(DAG),根据图论领域的数学定义,DAG是其中没有路径在同一顶点开始与终止的有向图。Finally, since categories and project folders are themselves projects, and projects can relate to each other, categories can relate to project folders and vice versa, and in some further embodiments, categories, project folders and projects can each relate to Other categories, project folders and projects. In various embodiments, however, the project folder structure and/or class structure prohibits containment loops at the hardware/software interface system level. While the project folder and category structure resembles a directed graph, an embodiment that prohibits loops resembles a directed acyclic graph (DAG), which, according to the mathematical definition in the field of graph theory, is one in which no path begins and ends at the same vertex directed graph.

6.可扩展性6. Scalability

如上所述,本存储平台旨在提供初始模式组340。然而,至少在某些实施例中,该存储平台还允许包括独立软件分销商(ISV)等顾客创建新的模式344(即新的项目和嵌套的元素类型)。本节讨论通过扩展在初始模式组340中定义的项目类型和嵌套的元素类型(或简称“元素”类型)着眼于创建该模式的机制。As noted above, the present storage platform is intended to provide an initial set of schemas 340 . However, at least in some embodiments, the storage platform also allows customers, including independent software vendors (ISVs), to create new schemas 344 (ie, new items and nested element types). This section discusses the mechanism for creating this schema by extending the item types and nested element types (or simply "element" types) defined in the initial schema group 340 .

较佳地,项目和嵌套元素类型的初始组的扩展如下约束:Preferably, the expansion of the initial set of item and nested element types is constrained as follows:

·允许ISV引入新的项目类型,即子类型Base.Item;Allow ISVs to introduce a new item type, the subtype Base.Item;

·允许ISV引入新的嵌套元素类型,即子类型Base.NestedElement;Allows ISVs to introduce a new nested element type, the subtype Base.NestedElement;

·允许ISV引入新的扩展,即子类型Base.NestedElement;但Allows ISVs to introduce new extensions, namely the subtype Base.NestedElement; but

·ISV不能子分类由存储平台的初始模式组340定义的任何类型(项目、嵌入元素、或扩展类型)。• An ISV cannot subclass any type (item, embedded element, or extension type) defined by the storage platform's initial set of schemas 340 .

由于由存储平台的初始模式组定义的项目类型或嵌入元素类型可能不精确地匹配ISV应用程序的需要,必须允许ISV定制该类型。这就考虑了扩展的概念。扩展是强类型的实例,但是(a)它们不能独立存在,以及(b)它们必须附属于项目或嵌套元素。Since the item type or embedded element type defined by the storage platform's initial schema set may not exactly match the needs of the ISV application, the ISV must be allowed to customize the type. This takes into account the concept of extension. Extensions are strongly typed instances, but (a) they cannot stand alone, and (b) they must be attached to an item or nested element.

除了解决对模式可扩展性的需要之外,扩展还旨在解决“多分类”问题。在某些实施例中,因为存储平台可能不支持多继承性或重叠子类型,应用程序可以使用扩展作为模型化重叠类型实例(如文档既是合法文档又是安全文档)的方法。In addition to addressing the need for schema extensibility, the extension also aims to address the "multi-classification" problem. In some embodiments, because storage platforms may not support multiple inheritance or overlapping subtypes, applications may use extensions as a way to model instances of overlapping types (eg, a document that is both a legal document and a secure document).

a)项目扩展a) Project extension

为提供项目的可扩展性,数据模型还定义名为Base.Extension的抽象类型。这是扩展类型的分层结构的根类型。应用程序可以子分类Base.Extension,以创建特定的扩展类型。To provide extensibility of the project, the data model also defines an abstract type called Base.Extension. This is the root type of the hierarchy of extension types. Applications can subclass Base.Extension to create specific extension types.

在基础模式中如下定义Base.Extension类型:Define the Base.Extension type in the base schema as follows:

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

       <Propety Name=″ItemID″<Propety Name="ItemID"

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

               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 associated with this extension. An item with this ItemID must exist. If an item with the given ItemID does not exist, the extension cannot be created. When an item is deleted, all extensions with the same ItemID are deleted. The 2-tuple (ItemID, ExtensionID) uniquely identifies the extension instance.

扩展类型的结构类似于项目类型的结构:The structure of an extension type is similar to that of an item type:

·扩展类型具有字段;The extension type has fields;

·字段可以是原语或嵌套元素类型;以及Fields can be primitive or nested element types; and

·扩展类型可被子分类。• Extension types can be subcategorized.

下列限制应用于扩展类型The following restrictions apply to extension types

·扩展不能是关系的源和目标;An extension cannot be the source and target of a relationship;

·扩展类型实例不能独立于项目存在;以及An instance of an extension type cannot exist independently of the item; and

·扩展类型不能用作在存储平台类型定义中的字段类型Extended types cannot be used as field types in storage platform type definitions

对能与给定的项目类型关联的扩展的类型没有约束。任何扩展类型允许扩展任何项目类型。当多个扩展实例被附加到一个项目,它们在结构和行为上彼此独立。There are no constraints on the types of extensions that can be associated with a given item type. Any extension type allows extension of any item type. When multiple extension instances are attached to a project, they are independent of each other in structure and behavior.

扩展实例被分别存储并从项目访问。所有扩展类型实例可从全局扩展视图访问。能组成一有效的查询,它将返回给定类型的扩展的所有实例,而不管它们关联什么类型的项目。存储平台API提供可存储、检索和修改项目扩展的编程模型。Extension instances are stored separately and accessed from projects. All extension type instances are accessible from the global extension view. An efficient query can be composed that returns all instances of extensions of a given type, regardless of what type of item they are associated with. The Storage Platform API provides a programming model for storing, retrieving and modifying project extensions.

扩展类型可是使用存储平台的单个继承模型来子分类的类型。从一个扩展类型导出创建新的扩展类型。一个扩展的结构或行为不能覆盖或替代项目类型分层结构的结构或行为。类似于项目类型,扩展类型实例能通过与该扩展类型关联的视图直接访问。扩展的ItemID表明,它们属于哪个项目,并能用于从全局项目视图检索对应的项目对象。为操作一致性的目的,扩展被考虑成项目的一部分。拷贝/移动、备份/恢复和存储平台定义的其它常用操作可以在作为项目的一部分的扩展上操作。An extended type may be a type that is subclassed using the storage platform's single inheritance model. Creates a new extension type derived from an extension type. An extended structure or behavior cannot override or replace the structure or behavior of the item type hierarchy. Similar to item types, extension type instances can be accessed directly through the views associated with that extension type. Extended ItemIDs indicate which item they belong to and can be used to retrieve the corresponding item object from the global item view. For operational consistency purposes, extensions are considered part of the project. Copy/move, backup/restore, and other common operations defined by the storage platform can operate on extensions that are part of the project.

考虑下述例子。在Windows类型组中定义Contact(联系人)类型。Consider the following example. Define the Contact type in the Windows type group.

    <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/扩展。CRM (Customer Relationship Management) application developers like to attach CRM application extensions to contacts stored in storage platforms. Application developers define CRM/extensions that contain additional data structures that the application can handle.

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

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

                   Type=″String″Type = "String"

                Nullable=″false″                                       

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

    …...

  </Type></Type>

HR应用程序开发者希望也将附加数据附加到联系人。此数据独立于CRM应用程序数据。应用程序开发者还可创建—扩展HR application developers wish to attach additional data to contacts as well. This data is separate from CRM application data. Application developers can also create—extended

    <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是能附加到联系人项目的两个独立扩展。它们能彼此独立地创建和访问。CRMExtension and HRExtension are two separate extensions that can be attached to contact items. They can be created and accessed independently of each other.

在上述例子中,CRMExtension类型的字段和方法不能覆盖联系人分层结构的字段和方法。应注意,CRMExtension类型的实例能被附加到不同于联系人的项目类型。In the above example, the fields and methods of the CRMExtension type cannot override the fields and methods of the contact hierarchy. It should be noted that instances of the CRMExtension type can be attached to item types other than Contacts.

在检索联系人项目时,不自动地检索它的项目扩展。给定联系人项目,可通过查询全局扩展视图以寻找带同一ItemID的扩展来访问其有关的项目扩展。When retrieving a contact item, its item extension is not automatically retrieved. Given a contact item, its related item extensions can be accessed by querying the global extensions view for extensions with the same ItemID.

可通过CRMExtension类型视图来访问系统中所有的CRMExtension扩展,而不论它们属于什么项目。一个项目的所有项目扩展共享同一项目id。在上述例子中,联系人项目实例和附加的CRMExtension和HRExtension实例共享同一ItemID。All CRMExtension extensions in the system, regardless of the project they belong to, can be accessed through the CRMExtension type view. All project extensions of a project share the same project id. In the above example, the Contact Item instance and the attached CRMExtension and HRExtension instances share the same ItemID.

下面的表总结了在Item(项目)、Extension(扩展)和NestedElement(嵌套元素)类型之间的相似性和差别:The following table summarizes the similarities and differences between the Item (item), Extension (extension) and NestedElement (nested element) types:

Item、ItemExtension与NestedElement   Item   ItemExtension   NestedElement   项目ID存储查询/搜索查询/搜索范围关系语义与项目的关联   具有自己的项目id项目的分层结构存储在其自己表中能查询项目表能搜索一个项目类型的所有实例能具有与项目的关系能通过持有嵌入和软关系与其它项目相关   共享项目的项目id项目扩展分层结构存储在其自己表中能查询项目扩展表能搜索一个项目扩展类型的所有实例与项目扩展无关系通常只能通过扩展来相关。扩展语义类似于嵌入项目语义   不具有其自己的项目id。嵌套元素是项目的一部分存储在项目中通常只能在包含项目的上下文中查询通常只能在单个(包含的)项目的嵌套元素类型实例中搜索与嵌套元素无关系通过字段来与项目相关。嵌套元素是项目的一部分 Item, ItemExtension and NestedElement Item ItemExtension NestedElement Item ID store query/search query/search scope relational semantics and association of items Has its own item id The item's hierarchy is stored in its own table Can query the items table Can search for all instances of an item type Can have relationships to items Can be related to other items by holding embedded and soft relationships The project id of a shared project The project extension hierarchy is stored in its own table The project extensions table can be queried All instances of a project extension type can be searched Not related to project extensions Usually only related by extensions. Extended semantics are similar to embedded item semantics Does not have its own project id. A nested element is a part of an item Stored within an item Usually only queried within the context of the containing item Usually only searchable within nested element type instances of a single (containing) item No relationship to nested elements Related to items by fields relevant. Nested elements are part of an item

b)扩展NestedElement类型b) Extend the NestedElement type

嵌套元素类型不用与项目类型相同的机制扩展。嵌套元素的扩展用与嵌套元素类型字段相同的机制存储和访问。Nested element types are not extended by the same mechanism as item types. Extensions of nested elements are stored and accessed using the same mechanisms as fields of nested element types.

数据模型定义了名为Element(元素)的嵌套元素类型的根。The data model defines the root of a nested element type 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 NestedElement type inherits from this type. The NestedElement element type additionally defines—fields, which are groups 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类型为根的扩展类型分层结构。· Nested element extension is not an extension type. They do not belong to the extension type hierarchy rooted at the Base.Extension type.

·嵌套元素扩展与该项目的其它字段一起存储,且不是全局可访问的—不能组成检索给定扩展类型的所有实例的查询。• Nested element extensions are stored with the item's other fields and are not globally accessible—queries that retrieve all instances of a given extension type cannot be composed.

·象存储其它嵌套元素(或项目)一样地存储这些扩展。象其它的嵌套组,NestedElement扩展被存在UDT中。它们可通过嵌套元素类型的Extension(扩展)字段来访问。• Store these extensions like other nested elements (or items). Like other nested groups, NestedElement extensions are stored in UDTs. They are accessible through the Extension field of the nested element type.

·用于访问多值属性的集合接口也用于在类型扩展组上的访问和迭代。• The collection interface used to access multivalued properties is also used for access and iteration over groups of type extensions.

下面的表总结和比较Item扩展和NestedElement扩展。The following table summarizes and compares Item extensions and NestedElement extensions.

Item扩展与NestedElement扩展   项目扩展   NestedElement扩展   存储   项目扩展分层结构存入它自己的表   象嵌套元素那样存储   查询/搜索查询/搜索范围可编程性行为关系语义项目ID   能查询项目扩展表能查询一个项目扩展类型的所有实例需要特殊的扩展API和扩展表上的特殊查询能关联行为与项目扩展无关系共享项目的项目id   通常只能在包含项目的上下文中查询通常只能在单个(包含)项目的嵌套元素类型实例中搜索NestedElement扩展类似嵌套元素的任何其它多值字段;使用正常的嵌套元素类型API不允许行为(?)与NestedElement扩展无关系不具有它自己的项目id。NestedElement扩展是项目的一部分 Item extension and NestedElement extension project extension NestedElement extension storage The project extension hierarchy is stored in its own table store like nested elements Query/Search Query/Search Scope Programmability Behavior Relational Semantics Item ID Can query project extension tables Can query all instances of a project extension type Requires special extension API and special queries on extension tables Can associate behaviors that have nothing to do with project extensions Shared project project ids NestedElement can generally only be queried within the context of the containing item. NestedElement can generally only be searched within a single (containing) item's nested element type instance Any other multivalued field that extends like a nested element; not allowed using the normal nested element type API The behavior(?) has nothing to do with the NestedElement extension not having it's own item id. The NestedElement extension is part of the project

F.数据库引擎F. Database engine

如上提到,数据存储在数据库引擎上实现。在本实施例中,数据库引擎包括诸如Microsoft SQL Server引擎等实现SQL查询语言、带有对象关系扩展的关系数据库引擎。本节按照本实施例,描述数据存储实现的数据模型到关系存储的映射,在逻辑API上提供由存储平台的客户机使用的信息。然而可以理解,当采用不同的数据库引擎时可采用不同的映射。确实,除了在关系型数据库引擎上实现存储平台概念数据模型之外,也可在其它类型数据库上实现,如面向对象和XML数据库。As mentioned above, data storage is implemented on the database engine. In this embodiment, the database engine includes a relational database engine such as a Microsoft SQL Server engine that implements SQL query language and has object-relational extensions. According to this embodiment, this section describes the mapping from the data model implemented by the data storage to the relational storage, and provides the information used by the client of the storage platform on the logic API. It will be appreciated, however, that different mappings may be used when different database engines are used. Indeed, in addition to implementing the storage platform conceptual data model on the relational database engine, it can also be implemented on other types of databases, such as object-oriented and XML databases.

面向对象(OO)数据库系统为编程语言对象(如C++、Java)提供持续性和事务。“项目”的存储平台概念可很好地映射到面向对象系统中的对象,虽然嵌入的集合必须添加给对象。类似继承性和嵌套元素类型等其它存储平台类型概念也映射到面向对象类型的系统。面向对象系统通常已经支持对象身份;因此,项目身份可被映射到对象身份。项目的行为(操作)很好地映射到对象方法。然而,面向对象的系统通常缺乏组织能力并在搜索方面很差。而且,面向对象的系统不提供对非结构化和半结构化数据的支持。为支持这里描述的完全存储平台数据模型,象关系、文件夹和扩展等概念需要添加到对象数据模型。此外,需要实现如升级、同步、通知和安全性等机制。Object-oriented (OO) database systems provide persistence and transactions for programming language objects (eg, C++, Java). The storage platform concept of "items" maps well to objects in object-oriented systems, although embedded collections must be added to objects. Other storage platform type concepts like inheritance and nested element types also map to the object-oriented type system. Object-oriented systems typically already support object identities; thus, item identities can be mapped to object identities. The behavior (operations) of items map nicely to object methods. However, object-oriented systems often lack organizational capabilities and are poor at searching. Also, object-oriented systems do not provide support for unstructured and semi-structured data. To support the full storage platform data model described here, concepts like relationships, folders, and extensions need to be added to the object data model. Additionally, mechanisms such as upgrades, synchronization, notifications, and security need to be implemented.

类似于面向对象的系统,基于XSD(XML模式定义)的XML数据库支持基于单继承类型的系统。本发明的项目类型系统可映射到XSD类型模型。XSD也不提供对行为的支持。项目的XSD必须增添项目的行为。XML数据库处理单个XSD文档并缺乏组织和拓宽搜索能力。如面向对象数据库那样,为支持这里描述的数据模型,如关系和文件夹等其它概念需要被结合到该XML数据库;而且需要实现如同步、通知和安全性等机制。Similar to object-oriented systems, XML databases based on XSD (XML Schema Definition) support systems based on single-inheritance types. The item type system of the present invention is mappable to an XSD type model. XSD does not provide support for behaviors either. The project's XSD must add the project's behavior. XML databases deal with a single XSD document and lack organization and broad search capabilities. As with object-oriented databases, to support the data model described here, other concepts such as relationships and folders need to be incorporated into the XML database; and mechanisms such as synchronization, notification and security need to be implemented.

关于下面小节,提供少量图示以便于一般的信息揭示:图13是示出通知机制的图示。图14是示出两个事务均将新记录插入同一B树的例子的图示。图15示出数据改变检测过程。图16示出示例性目录树。图17示出其中基于目录的文件系统的现有文件夹被移动到存储平台数据存储中。Regarding the following subsections, a few diagrams are provided to facilitate general information disclosure: Figure 13 is a diagram showing the notification mechanism. Figure 14 is a diagram showing an example where two transactions both insert new records into the same B-tree. Figure 15 shows the data change detection process. Figure 16 shows an exemplary directory tree. Figure 17 shows where an existing folder of a directory based file system is moved into a storage platform data store.

1.使用UDT的数据存储实现1. Data storage implementation using UDT

在本实施例中,在一个实施例中包括Microsoft SQL Server引擎的关系型数据库引擎314支持内建的标量类型。内建的标量类型是“原生(native)”且“简单”的。它们是原生的意义是,用户不能定义他们自己的类型;它们是简单的意义是,用户不能封装复杂的结构。用户定义的类型(下文称为UDT)通过使用户能通过定义复杂的结构化类型来扩展类型系统,提供了一种用于超过或超越原生的标量类型系统的类型可扩展性的机制。一旦由用户定义,UDT能用于可以使用内建标量类型的类型系统中的任何地方。In this embodiment, the relational database engine 314, which in one embodiment includes the Microsoft SQL Server engine, supports built-in scalar types. Built-in scalar types are "native" and "simple". They are primitive in the sense that users cannot define their own types; they are simple in the sense that users cannot encapsulate complex structures. User-defined types (hereinafter referred to as UDTs) provide a mechanism for type extensibility beyond or beyond the native scalar type system by enabling users to extend the type system by defining complex structured types. Once defined by the user, UDTs can be used anywhere in the type system where built-in scalar types can be used.

按本发明的一个方面,存储平台模式被映射到数据库引擎存储中的UDT类。数据存储项目被映射到从Base.Item类型导出的UDT类。类似于项目,扩展也能映射到UDT类并使用继承。根扩展类型是Base.Extension,从它导出所有扩展类型。According to one aspect of the invention, storage platform schemas are mapped to UDT classes in database engine storage. Data store items are mapped to UDT classes derived from the Base.Item type. Similar to projects, extensions can also be mapped to UDT classes and use inheritance. The root extension type is Base.Extension, from which all extension types are derived.

UDT是CLR类,它具有状态(即数据字段)和行为(即例程)。使用任何受管语言(c#、VB.NET等)定义UDT。UDT方法和操作符能在T-SQL中针对该类型的实例调用。UDT能是:行中列的类型、T-SQL中例程的参数的类型、或在T-SQL中变量的类型。A UDT is a CLR class that has state (ie data fields) and behavior (ie routines). Define UDTs using any managed language (c#, VB.NET, etc.). UDT methods and operators can be invoked on instances of this type in Transact-SQL. A UDT can be: the type of a column in a row, the type of a parameter of a routine in T-SQL, or the type of a variable in T-SQL.

存储平台模式到UDT类的映射在高级别上完全是直接的。一般而言,存储平台模式被映射到CLR名字空间。存储平台类型被映射到CLR类。CLR类的继承镜象了存储平台类型的继承,且存储平台属性被映射到CLR类属性。The mapping of storage platform schemas to UDT classes is completely straightforward at a high level. In general, storage platform schemas are mapped to CLR namespaces. Storage platform types are mapped to CLR classes. CLR class inheritance mirrors storage platform type inheritance, and storage platform attributes are mapped to CLR class attributes.

2.项目映射2. Project Mapping

为了希望项目能够被全局地搜索,并在本实施例的关系型数据中支持继承以及类型可替代性,对在数据库存储中的项目存储的一种可能的实现是在带有类型Base.Item的列的单个表中存储所有项目。使用类型可替代性,能存储所有类型的项目,且可按使用Yukon的“is of(类型)”的操作符的项目类型的子类型来过滤搜索。In order to hope that items can be searched globally, and support inheritance and type substitutability in the relational data of this embodiment, a possible implementation of item storage in database storage is in a class with type Base.Item Store all items in a single table of columns. Using type substitutability, items of all types can be stored, and searches can be filtered by subtypes of item types using Yukon's "is of(type)" operator.

然而,由于在本实施例中牵涉到与这一方法相关联的额外开销,由顶级类型将各项目划分,使得每个类型“家族”的项目存储到单独的表中。在此划分模式中,对每个直接从Base.Item继承的项目类型创建一个表。如上所述,继承下面这些的类型使用类型的可替代性存储在合适的类型家族表中。只有从Base.Item的第一级继承被专门地处理。However, due to the overhead involved in this embodiment associated with this approach, the items are divided by the top-level type, so that items for each "family" of types are stored into separate tables. In this partitioning schema, a table is created for each item type that directly inherits from Base.Item. As noted above, types inheriting from the following use type substitutability stored in the appropriate type family table. Only first-level inheritance from Base.Item is handled exclusively.

使用一“阴影”表存储所有项目的全局可搜索属性的副本。此表可由存储平台API的Update()方法维护,通过此方法作出所有数据的改变。不象类型家族表,此全局项目表只包含该项目的顶级标量属性,而不是全UDT项目对象。全局项目表允许通过展现ItemID和TypeID(类型ID)导航到存储在类型家族表中的项目对象。ItemID通常唯一地标识数据存储中的项目。可使用这里未予描述的元数据将TypeID映射到类型名和包含该项目的视图。由于通过其ItemID寻找项目在全局项目表的上下文及其它情况下都是常用操作,因此给定了项目的ItemId,提供GetItem()函数来检索项目对象。A "shadow" table is used to store a copy of all items' globally searchable attributes. This table can be maintained by the Update() method of the storage platform API, through which all data changes are made. Unlike the type family table, the global item table only contains the item's top-level scalar attributes, rather than the full UDT item object. The Global Items table allows navigation to Item objects stored in the Type Family table by exposing ItemID and TypeID. ItemID typically uniquely identifies an item in the data store. Metadata not described here can be used to map a TypeID to a type name and a view containing the item. Since finding an item by its ItemID is a common operation in the context of the global item table as well as in other cases, a GetItem() function is provided to retrieve an item object given an item's ItemId.

为便于访问和尽可能地隐藏实现的细节,项目的所有查询可以对照在上述项目的表上构建的视图进行。具体说来,对每个项目类型针对合适类型的家族表创建视图。这些类型视图可选择相关联的类型,包括子类型的所有项目。为方便起见,除了UDT对象,视图能对包括继承字段的该类型的所有顶级域展现列。For ease of access and to hide implementation details as much as possible, all queries of a project can be made against views built on the tables of said project. Specifically, for each item type, create a view on the family table of the appropriate type. These type views select the associated type, including all items of subtypes. For convenience, in addition to UDT objects, views can display columns for all top-level fields of that type including inherited fields.

3.扩展映射3. Extended mapping

扩展非常类似于项目,且具有某些相同要求。如支持继承性的另一根类型,扩展受到存储中许多同样的考虑和折衷比较。为此,对扩展应用类似的类型家族映射,而不是单个表方法。当然,在其它实施例中,可使用单个表方法。在本实施例中,扩展通过ItemID仅与一个项目关联,并包含在项目的上下文中唯一的ExtensionID。如同项目一样,给定包括ItemID和ExtensionID对的身份,可提供一函数用于检索扩展。类似于项目类型视图,对每个扩展类型可创建视图。Extensions are very similar to projects 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 compared to storage. For 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 could be used. In this embodiment, an extension is associated with only one item through an ItemID, and contains an ExtensionID that is unique within the context of the item. As with Items, given an Identity comprising ItemID and ExtensionID pairs, a function may be provided for retrieving Extensions. Similar to item type views, views can be created for each extension type.

4.嵌套元素映射4. Nested element mapping

嵌套元素是可嵌入到项目、扩展、关系、或其它嵌套元素以形成深嵌套结构的类型。类似于项目和扩展,嵌套元素作为UDT实现,但它们存储在项目和扩展中。因此,嵌套元素没有超越它们的项目和扩展容器的映射的存储映射。换言之,在系统中没有直接存储NestedElement类型的实例的表,且没有专门用于嵌套元素的视图。Nested elements are types that can be embedded into items, extensions, relationships, or other nested elements to form deeply nested structures. Similar to items and extensions, nested elements are implemented as UDTs, but they are stored in items and extensions. Thus, nested elements do not have a storage map beyond the map of their items and extending containers. In other words, there are no tables in the system that directly store instances of the NestedElement type, and no views dedicated to nested elements.

5.对象身份5. Object Identity

在数据模型中的每一实体,即每个项目、扩展和关系具有唯一的关键字值。一个项目由其ItemId唯一地标识。扩展由合成关键字(ItemId,ExtensionId)唯一地标识。关系由合成关键字(ItemId,RelationId)标识。ItemId,ExtensionId和RelationshipId均是GUID值。Every entity in the data model, ie every item, extension and relationship has a unique key value. An item is uniquely identified by its ItemId. Extensions are uniquely identified by composite keys (ItemId, ExtensionId). Relations are identified by composite keys (ItemId, RelationId). ItemId, ExtensionId and RelationshipId are all GUID values.

6.SQL对象命名6.SQL object naming

在数据存储中创建的所有对象可存储在从存储平台模式名字导出的SQL模式名字中。例如,存储平台基础模式(常称“基础”)可产生在“[System.Storage]”SQL模式中的类型,如“[System.Storage].Item”。产生的名字可用限定词加前缀以消除命名的冲突。在合适处可使用惊叹号(!)作为名字的每个逻辑部分的分割符。下面表概括了在数据存储用于对象的命名习惯。与用于访问数据存储中的实例的修饰的命名习惯一起列出每个模式元素(项目、扩展、关系和视图)。   对象  名字修饰   描述   例子   主项目搜索视图  Master!Item   在当前项目域中提供项目的综述   [System.Storage].[Master!Item]   分类型的项目搜索视图  ItemType   提供来自项目和任何父类型的所有属性数据   [AcmeCorp.Doc].[OfficeDoc]   主扩展搜索视图  Master!Extension   提供在当前项目域中所有扩展的综述   [System.Storage].[Master!Extension]   分类型的扩展搜索视图 Extension!extensionType   对扩展提供所有属性数据  [AcmeCorp.Doc].[Extension!SlickyNote]   主关系视图 Master!Relationship   提供在当前项目域中所有关系的综述  [System.Storage].[Master!Relationship]   关系视图 Relationship!relationshipName   提供所有与给定的关系相关联的数据  [AcmeCorp.Doc].[Relationship!AuthorsFromDocument]   视图 View!viewName   基于模式视图定义提供列/类型  [AcmeCorp.Doc].[View!DocumentTitles] All objects created in the data store can be stored in a SQL schema name derived from the storage platform schema name. For example, the storage platform base schema (often referred to as "basic") can generate types in the "[System.Storage]" SQL schema, such as "[System.Storage].Item". The generated names can be prefixed with a qualifier to eliminate naming conflicts. Where appropriate, use exclamation points (!) as delimiters for each logical part of the name. The table below summarizes the naming conventions used for objects in the data store. Each schema element (items, extensions, relationships, and views) is listed along with the decorated naming conventions used to access instances in the data store. object name modification describe example Main Project Search View Master! Item Provides an overview of projects in the current project domain [System. Storage]. [Master! Item] Typed item search view ItemType Provides all property data from the item and any parent types [AcmeCorp.Doc].[OfficeDoc] Main Extended Search View Master! Extension Provides an overview of all extensions in the current project domain [System. Storage]. [Master! Extension] Expanded search view by category Extension! extensionType Provides all property data to the extension [AcmeCorp.Doc].[Extension! SlickyNote] master relationship view Master! Relationship Provides an overview of all relationships in the current project domain [System. Storage]. [Master! Relationship] relationship view Relationship! relationshipName Provides all data associated with the given relation [AcmeCorp.Doc].[Relationship! AuthorsFromDocument] view View! viewName Provide columns/types based on schema view definition [AcmeCorp.Doc].[View! DocumentTitles]

7.列命名7. Column naming

当映射任一对象模型到存储时,由于与应用程序对象一起存储的附加信息,有可能发生命名冲突。为避免命名冲突,所有非类型的特定列(不直接映射到类型声明中的命名的属性的列)用下划线字符(_)加前缀。在本实施例中,下划线字符(_)不允许作为任何标识符属性的开始字符。此外,为统一在CLR和数据存储之间的命名,存储平台类型或模式元素的所有属性(关系等)应具有大写的第一字符。When mapping either object model to storage, naming conflicts may occur due to the additional information stored with application objects. To avoid naming conflicts, all non-type-specific columns (columns that do not map directly to named properties in the type declaration) are prefixed with an underscore character (_). In this embodiment, the underscore character (_) is not allowed as the beginning character of any identifier attribute. Furthermore, to unify naming between the CLR and the datastore, all attributes (relations, etc.) of a storage platform type or schema element shall have an uppercase first character.

8.搜索视图8. Search View

由存储平台提供视图,用于搜索存储的内容。对每个项目和扩展类型提供SQL视图。此外,提供视图以支持关系和视图(由数据模型定义)。所有SQL视图和在存储平台中的底层表是只读的。下面将更充分描述,使用存储平台API的Update()方法可存储或改变数据。Views are provided by the storage platform for searching stored content. SQL views are provided for each project and extension type. Additionally, views are provided to support relationships and views (defined by the data model). All SQL views and underlying tables in the storage platform are read-only. As described more fully below, data may be stored or changed using the Update( ) method of the storage platform API.

在存储平台模式中直接定义的每个视图(由模式设计者定义,而非由存储平台自动地生成)可由命名的SQL视图[<schema-name>].[View!<view-name>]访问。例如,在模式“AcmePublisher.Books”中名为“BookSales”的视图可使用名字“[AcmePublisher.Books].[View!BookSales]来访问。因为视图的输出格式在每一视图的基础上是自定义的(由定义视图的那一方提供的任意查询确定的),列基于模式视图定义被直接映射。Every view defined directly in the storage platform schema (defined by the schema designer, not automatically generated by the storage platform) can be named by the SQL view [<schema-name>].[View! <view-name>] access. For example, a view named "BookSales" in the schema "AcmePublisher.Books" can be accessed using the name "[AcmePublisher.Books].[View!BookSales]. Because the view's output format is customized on a per-view basis (determined by any query provided by the party defining the view), columns are mapped directly based on the schema view definition.

存储平台数据存储中的所有SQL搜索视图使用列的下述排序习惯:All SQL search views in the storage platform data store use the following sorting conventions for columns:

·如ItemId、ElementId、RelationshipId等的视图结果的逻辑“关键字”列Logical "keyword" columns for view results such as ItemId, ElementId, RelationshipId, etc.

·如TypeId等关于结果类型的元数据信息。• Metadata information about the result type such as TypeId.

·改变如CreateVersion(创建版本)、UpdateVersion(更新版本)等跟踪列Change tracking columns such as CreateVersion (create version), UpdateVersion (update version) etc.

·类型专用的列(声明的类型的属性)Type-specific columns (properties of the declared type)

·类型专用的视图(家族视图)也包含返回对象的对象列· Type-specific views (family views) also contain object columns for returned objects

每个类型家族的成员可使用一系列项目视图来搜索,在数据存储中每个项目类型有一个视图。图28是示出项目搜索视图的概念的图示。Members of each type family are searchable using a series of item views, one view for each item type in the data store. FIG. 28 is a diagram showing the concept of an item search view.

a)项目a) project

每个项目搜索视图对特定类型或其子类型的项目的每个实例包含一行。例如,文档的视图能返回Document(文档)、LegalDocument(合法文档)和ReviewDocument(审阅文档)的实例。给定此例,能如图29那样概念化项目视图。A per-item search view contains one row for each instance of an item of a particular type or a subtype thereof. For example, a document view can return Document (document), LegalDocument (legal document), and ReviewDocument (review document) instances. Given this example, the project view can be conceptualized as in FIG. 29 .

(1)主项目搜索视图(1) Main Item Search View

存储平台数据存储的每个实例定义称为主项目视图(Master Item View)的特殊项目视图。此视图提供关于数据存储中每个项目的综述信息。视图对每个项目类型属性提供一列,其中一列描述项目的类型,若干列用于提供改变跟踪和同步信息。在数据存储中使用名字“[System.Storage].[Master!Item]”来标识主项目视图。   列   类型   描述   ItemId   ItemId   该项目的存储平台身份   _TypeId   TypeId   该项目的TypeId-标识该项目的确切类型并能用于使用元数据类别来检索关于类型的信息   _RootItemId   ItemId   控制此项目的生命周期的第一个非嵌入先辈的ItemId   <全局改变跟踪>   …   全局改变跟踪信息   <项目属性>   n/a   对每个项目类型属性有一列 Each instance of a storage platform data store defines a special item view called the Master Item View. This view provides overview information about each item in the data store. The view provides one column for each item type attribute, one describing the type of item, and several columns providing change tracking and synchronization information. Use the name "[System.Storage].[Master!Item]" in the data store to identify the master item view. List type describe ItemId ItemId The project's storage platform identity _TypeId TypeId TypeId of the item - identifies the exact type of the item and can be used to retrieve information about the type using the metadata category _RootItemId ItemId the ItemId of the first non-embedded ancestor that controls the lifetime of this item <global change tracking> global change tracking information <project properties> n/a There is a column for each item type attribute

(2)分类型的项目搜索视图(2) Item search view by type

每个项目类型也具有搜索视图。类似于根项目视图,此视图还提供通过“_Item”列对项目对象的访问。在数据存储中使用名字[schemaName].[itemTypeName]标识每个分类型的项目搜索视图。例如[AcmeCorp.Dod].[OfficeDoc]。   列  类型   描述   ItemId  ItemId   该项目的存储平台身份   <类型改变跟踪>  …   类型改变跟踪信息   <父属性>  <属性专用>   对每个父属性有一列   <项目属性>  <属性专用>   对此类型的每个排他属性有一列   _Item  项目的CLR类型   CLR对象一声明的项目的类型 Each item type also has a search view. Similar to the root item view, this view also provides access to item objects through the "_Item" column. Use the name [schemaName].[itemTypeName] in the data store to identify each type of item search view. For example [AcmeCorp. Dod]. [OfficeDoc]. List type describe ItemId ItemId The project's storage platform identity <type change tracking> type change tracking information <parent attribute> <property only> one column for each parent attribute <project properties> <property only> One column for each exclusive attribute of this type _Item The CLR type of the project The type of item declared by the CLR object

b)项目扩展b) Project extension

WinFs存储中的所有项目扩展也可使用搜索视图来访问。All project extensions in WinFs storage can also be accessed using the search view.

(1)主扩展搜索视图(1) Main Extended Search View

数据存储的每个实例定义一称为主扩展视图(Master Extension View)的特殊扩展视图。此视图提供关于数据存储中每个扩展的综述信息。该视图对每个扩展属性有一列,其中一列描述扩展的类型,而若干列用于提供改变跟踪和同步信息。使用名字“[System.Storage].[Master!Extension]”在数据存储中标识主扩展视图。   列   类型   描述   ItemId   ItemId   与此扩展关联的项目的存储平台身份   ExtensionId   ExtensionId(GUID)   此扩展实例的id   _TypeId   TypeId   该扩展的TypeId-标识该扩展的确切类型,并能用于使用元数据类别来检索关于该扩展的信息   <全局改变跟踪>   …   全局改变跟踪信息   <扩展属性>   <属性专用>   对每个扩展类型属性有一列 Each instance of the data store defines a special extension view called the master extension view (Master Extension View). This view provides overview information about each extent in the datastore. The view has one column for each extension attribute, one describing the type of extension, and several columns providing change tracking and synchronization information. Use the name "[System.Storage].[Master!Extension]" to identify the master extension view in the data store. List type describe ItemId ItemId The storage platform identity of the project associated with this extension ExtensionId ExtensionId (GUID) the id of this extension instance _TypeId TypeId TypeId of the extension - identifies the exact type of the extension and can be used to retrieve information about the extension using the metadata category <global change tracking> global change tracking information <extended attribute> <property only> One column for each extension type attribute

(2)分类型的扩展搜索视图(2) Expanded search view by type

每个扩展类型还具有搜索视图。类似于主扩展视图,此视图还提供通过_Extension列对项目对象的访问。在数据存储中使用名字[SchemaName].[Extension!extensionTypeName]标识每个分类型的扩展搜索视图。例如[AcmeCorp.Doc].[Extension!OfficeDocExt]。   列   类型   描述   ItemId   ItemId   与此扩展关联的项目的存储平台身份   ExtensionId   ExtensionId(GUID)   此扩展实例的Id   <类型改变跟踪>   …   类型改变跟踪信息   <父属性>   <属性专用>   对每个父属性有一列   <扩展属性>   <属性专用>   对每个此类型的排他属性有一列   _Extension   扩展实例的CLR类型   CLR对象—声明的扩展的类型 Each extension type also has a search view. Similar to the main extension view, this view also provides access to project objects through the _Extension column. Use the name [SchemaName].[Extension! extensionTypeName] identifies the extension search view for each subtype. For example [AcmeCorp.Doc].[Extension! OfficeDocExt]. List type describe ItemId ItemId The storage platform identity of the project associated with this extension ExtensionId ExtensionId (GUID) The Id of this extension instance <type change tracking> type change tracking information <parent attribute> <property only> one column for each parent attribute <extended attribute> <property only> One column for each exclusive attribute of this type _Extension The CLR type of the extension instance CLR object—the type of the declared extension

c)嵌套的元素c) nested elements

所有嵌套的元素存储在项目、扩展或关系实例之中。因此,它们能通过查询合适的项目、扩展或关系搜索视图来访问。All nested elements are stored in Item, Extension or Relationship instances. Therefore, they can be accessed by querying the appropriate project, extension or relational search view.

d)关系d) relationship

如上讨论,关系形成在存储平台数据存储中各项目之间链接的基本单元。As discussed above, relationships form the basic unit of linking between items in a storage platform data store.

(1)主关系搜索视图(1) Main relation search view

每个数据存储提供—主关系视图。此视图提供关于数据存储中所有关系实例的信息。在数据存储中使用名字“[System.Storage].[Master!Relationship]”来标识主关系视图。  列   类型   描述  ItemId   ItemId   源端点的身份(ItemId)  RelationshipId   RelationshipId(GUID)   该关系实例的id  _RelTypeId   RelationshiPTypeId   该关系的RelTypeId-使用元数据类别来标识该关系实例的类型  <全局改变跟踪>   …   全局改变跟踪信息  TargetItemReference   ItemReference   目标端点的身份  _Relationship   Relationship   对此实例的Relationship对象的实例 Each datastore provides a master-relational view. This view provides information about all relational instances in the datastore. Use the name "[System.Storage].[Master!Relationship]" in the data store to identify the master relational view. List type describe ItemId ItemId The identity of the source endpoint (ItemId) RelationshipId RelationshipId (GUID) the id of the relation instance _RelTypeId RelationshipsPTypeId RelTypeId for this relation - uses metadata category to identify the type of this relation instance <global change tracking> global change tracking information TargetItemReference ItemReference The identity of the target endpoint _Relationship Relationship an instance of the Relationship object for this instance

(2)关系实例搜索视图(2) Relation instance search view

每个声明的关系也有返回该特定关系的所有实例的搜索视图。类似于主关系视图,此视图对该关系数据的每个属性提供命名的列。在数据存储中使用名字[schemaName].[Relationship!relationshipName]来标识每个关系实例搜索视图。例如[AcmeCorp.Doc].[Relationship!DocumentAuthor]。  列  类型   描述  ItemId  ItemId   源端点的身份(ItemId)  RelationshipId  RelationshipId(GUID)   该关系实例的id  <类型改变跟踪>  …   类型改变跟踪信息  TargetItemReference  ItemReference   目标端点的身份  <源名>  ItemId   源端点身份的命名属性(ItemId的别名)  <目标名>  ItemReference或导出的类   目标端点身份的命名属性(TargetItemReference的别名和模型(cast))  <关系属性>  <属性专用>   对每个关系定义的属性有一列 _Relationship  关系实例的CLR类型   CLR对象—声明关系的类型 Each declared relationship also has a search view that returns all instances of that particular relationship. Similar to the main relational view, this view provides named columns for each attribute of the relational data. Use the name [schemaName].[Relationship! relationshipName] to identify each relationship instance search view. For example [AcmeCorp.Doc].[Relationship! DocumentAuthor]. List type describe ItemId ItemId The identity of the source endpoint (ItemId) RelationshipId RelationshipId (GUID) the id of the relation instance <type change tracking> type change tracking information TargetItemReference ItemReference The identity of the target endpoint <source name> ItemId Named property of source endpoint identity (alias for ItemId) <target name> ItemReference or exported class Named property of target endpoint identity (alias and model(cast) of TargetItemReference) <relationship attribute> <property only> There is a column for each attribute defined by the relationship _Relationship The CLR type of the relation instance CLR object—declares the type of relationship

e)e)

9.更新9. Update

存储平台数据存储中所有视图是只读的。为创建数据模型元素(项目、扩展或关系)的新实例,或更新现有的实例,必须使用存储平台API的ProcessOperation或ProcessUpdategram方法。ProcessOperation方法是单个存储的过程,它是由消费细化拟执行的动作的“操作”的数据存储定义的。ProcessUpdategram方法是存储的过程,它采取称为“更新元素(updategram)”的一组有序的操作,它们共同细化拟执行的一组动作。All views in the storage platform data store are read-only. To create new instances of data model elements (items, extensions, or relationships), or to update existing instances, the ProcessOperation or ProcessUpdategram methods of the storage platform API must be used. A ProcessOperation method is a single stored procedure defined by a data store that consumes an "operation" that refines the action to be performed. The ProcessUpdategram method is a stored procedure that takes an ordered set of operations called "updategrams" that together refine the set of actions to be performed.

操作格式是可扩展的,并提供在模式元素上的各种操作。某些公用操作包括:The operation format is extensible and provides various operations on schema elements. Some common operations include:

1.项目操作:1. Project operation:

a.CreateItem(在嵌入或持有关系的上下文中创建一新的项目)a.CreateItem (create a new item in the context of embedding or holding a relationship)

b.UpdateItem(更新一现有的项目)b.UpdateItem (update an existing item)

2.关系操作:2. Relational operations:

a.CreateRelationship(创建引用或持有关系的实例)a.CreateRelationship (create a reference or hold an instance of the relationship)

b.UpdateRelationship(更新一关系实例)b.UpdateRelationship (update a relationship instance)

c.DeleteRelationship(移除一关系实例)c.DeleteRelationship (remove a relationship instance)

3.扩展操作3. Extended operation

a.CreateExtension(添加一扩展到现有的项目)a.CreateExtension (add an extension to an existing project)

b.UpdateExtension(更新一现有的扩展)b.UpdateExtension (update an existing extension)

c.DeleteExtension(删除一扩展)c.DeleteExtension (delete an extension)

10.改变跟踪及墓碑10. Change tracking and tombstones

如下面更充分讨论,由数据存储提供改变跟踪和墓碑服务。本节提供在数据存储中展现的改变跟踪信息的概述As discussed more fully below, change tracking and tombstone services are provided by the data store. This section provides an overview of the change tracking information presented in the data store

a)改变跟踪a) change tracking

由数据存储提供的每个搜索视图包含用于提供改变跟踪信息的列;那些列对所有项目、扩展和关系视图是公用的。由模式设计者明确地定义的存储平台模式视图不自动地提供改变跟踪信息—该信息是通过在其上构建视图本身的搜索视图来间接提供的。Each search view provided by the data store contains columns for providing change tracking information; those columns are common to all project, extension and relational views. A storage platform schema view explicitly defined by the schema designer does not automatically provide change tracking information - this information is provided indirectly through the search view upon which the view itself is built.

对数据存储中的每个元素,可从两个地方得到改变跟踪信息:“主”元素视图和“分类型的”元素视图。例如,可从主项目视图“[System.Storage].[Master!Item]”和分类型的项目视图[AcmeCorp.Document].[Document]中得到关于AcmeCorp.Document.Document项目类型的改变跟踪信息。For each element in the data store, change tracking information is available from two places: the "main" element view and the "typed" element view. For example, change tracking information on the AcmeCorp.Document.Document item type is available from the master item view "[System.Storage].[Master!Item]" and the typed item view [AcmeCorp.Document].[Document].

(1)“主”搜索视图中的改变跟踪(1) Change tracking in the "main" search view

主搜索视图中的改变跟踪信息提供关于元素的创建和更新版本的信息、关于哪个同步伙伴创建该元素的信息、关于哪个同步伙伴最后一次更新该元素的信息、以及来自每个伙伴的用于创建和更新的版本号。用伙伴关键字来标识同步关系中的伙伴(下面描述)。类型[System.Storge.Store].ChangeTrackingInfo的名为_ChangeTrackingInfo的单个UDT对象包含所有这些信息。在System.Storage模式中定义类型。在项目、扩展和关系的所有全局搜索视图中可得到_ChangeTrackingInfo。_ChangeTrackingInfo的类型定义是:<Type Name=″ChangeTrackingInfo″BaseType=″Base.NestedElement″>   <FieldProperty Name=″CreationLocalTS″    Type=″SqlTypes.SqlInt64″Nullable=″False″/><FieldProperty Name=″CreatingPartnerKey″    Type=″SqlTypes.SqlInt32″The change tracking information in the main search view provides information about the created and updated versions of an element, information about which sync partner created the element, information about which sync partner last updated the element, and information from each partner for creating and the updated version number. A partner in a synchronization relationship is identified with the partner keyword (described below). A single UDT object named _ChangeTrackingInfo of type [System.Storge.Store].ChangeTrackingInfo contains all this information. Define types in the System.Storage schema. _ChangeTrackingInfo is available in all global search views for projects, extensions, and relationships. The type definition of _ChangeTrackingInfo is: <Type Name="ChangeTrackingInfo"BaseType="Base.NestedElement"> <FieldProperty Name="CreationLocalTS" Type="SqlTypes.SqlInt64"Nullable="False"/><FieldProperty Name="CreatingPartnerKey" Type ="SqlTypes.SqlInt32"

 Nullable=″False″/><FieldProperty Name=″CreatingPartnerTS″     Type=″SqlTypes.SqlInt64″Nullable="False"/><FieldProperty Name="CreatingPartnerTS" Type="SqlTypes.SqlInt64"

 Nullable=″False″/><FieldProperty Name=″LastUpdateLocalTS″     Type=″SqlTypes.SqlInt64″Nullable="False"/><FieldProperty Name="LastUpdateLocalTS" Type="SqlTypes.SqlInt64"

 Nullable=″False″/><FieldProperty Name=″LastUpdatingPartnerKey″Type=″SqlTypes.SqlInt32″Nullable="False"/><FieldProperty Name="LastUpdatingPartnerKey"Type="SqlTypes.SqlInt32"

 Nullable=″False″/><FieldProperty Name=″LastUpdatingPartnerTS″ Type=″SqlTypes.SqlInt64″Nullable="False"/><FieldProperty Name="LastUpdatingPartnerTS" Type="SqlTypes.SqlInt64"

 Nullable=″False″/></Type>Nullable="False"/></Type>

这些属性包含下述信息:   列   描述   _CreationLocalTS   本地机器的创建时间标记   _CreatingPartnerKey   创建此实体的伙伴的PartnerKey。若实体是本地创建的,这是本地机器的PartnerKey   _CreatingPartnerTS   在对应于_CreatingPartnerKey的伙伴处创建此实体的时间的时间标记   _LastUpdateLocalTS   对应于本地机器的更新时间的本地时间标记   _LastUpdatePartnerKey   最后一次更新此实体的伙伴的PartnerKey。若对该实体的最后一次更新在本地完成,则这是本地机器的PartnerKey。   _LastUpdatePartnerTS   在对应于_LastUpdatingPartnerKey的伙伴处更新此实体的时间的时间标记。 These properties contain the following information: List describe _CreationLocalTS The local machine's creation time stamp _CreatingPartnerKey PartnerKey of the partner who created this entity. If the entity was created locally, this is the PartnerKey of the local machine _CreatingPartnerTS A timestamp of when this entity was created at the partner corresponding to _CreatingPartnerKey _LastUpdateLocalTS A local timestamp corresponding to the update time of the local machine _LastUpdatePartnerKey The PartnerKey of the partner who last updated this entity. This is the PartnerKey of the local machine if the last update to this entity was done locally. _LastUpdatePartnerTS A timestamp of when this entity was updated at the partner corresponding to _LastUpdatingPartnerKey.

(2)“分类型的”搜索视图中的改变跟踪(2) Change Tracking in "Categorized" Search Views

除了提供与全局搜索视图相同信息外,每个分类型的搜索视图提供记录在同步拓扑中每个元素的同步状态的附加信息。   列   类型   描述   <全局改变跟踪>   …   来自全局改变跟踪的信息   _ChangeUnitVersions   MultiSet<改变单元版本>   特定元素中的改变单元的版本号的描述   _ElementSyncMetadata   ElementSyncMetadata   关于只对同步运行库感兴趣的项目的附加版本无关元数据 _VersionSyncMetadata   VersionSyncMetadata   关于只对同步运行库感兴趣的版本的附加版本专用元数据 In addition to providing the same information as the global search view, each subtype of search view provides additional information about the synchronization status of each element recorded in the synchronization topology. List type describe <global change tracking> Information from global change tracking _ChangeUnitVersions MultiSet<change unit version> A description of the version number of the unit of change in a particular element _ElementSyncMetadata ElementSyncMetadata Additional version-independent metadata about items that are only interested in synchronizing the runtime _VersionSyncMetadata VersionSyncMetadata Additional version-specific metadata about versions that are only interested in synchronizing the runtime

b)墓碑b) tombstone

数据存储为项目、扩展和关系提供墓碑信息。墓碑视图提供一个地方中有关活动和墓碑实体两者(项目、扩展和关系)的信息。项目和扩展墓碑视图不提对对应对象的访问,而关系墓碑视图提供对关系对象的访问(在墓碑关系的情况下关系对象为空)。Datastores provide tombstone information for projects, extensions, and relationships. The tombstone view provides information about both activities and tombstone entities (items, extensions and relationships) in one place. Project and extended tombstone views do not mention access to corresponding objects, while relational tombstone views provide access to relational objects (relational objects are null in case of tombstoned relations).

(1)项目墓碑(1) Project Tombstone

通过视图[System.Storage].[Tombstone!item]从系统检索项目墓碑。   列   类型   描述   ItemId   ItemId   项目的身份   _TypeID   TypeId   项目的类型   <项目属性>   …   对所有项目定义的属性   _RootItemId   ItemId   包含此项目的第一个非嵌入项目的ItemId   _ChangeTrackingInfo   ChangeTrackingInfo类型的CLR实例   此项目的改变跟踪信息   _IsDeleted   BIT   这是标志,0是活动项目,1是墓碑项目   _DeletionWallclock   UTCDATETIME   按删除项目的伙伴的UTC墙钟日期时间,若该项目是活动的,它为空 Via view[System.Storage].[Tombstone! item] Retrieves the item tombstone from the system. List type describe ItemId ItemId project identity _TypeID TypeId type of item <project properties> Properties defined for all items _RootItemId ItemId ItemId of the first non-embedded item containing this item _ChangeTrackingInfo A CLR instance of type ChangeTrackingInfo Change tracking information for this item _IsDeleted BIT This is the flag, 0 is the active item, 1 is the tombstone item _DeletionWallclock UTCDATETIME The UTC wall clock datetime of the partner of the deleted item, or empty if the item is active

(2)扩展墓碑(2) Extended Tombstone

使用视图[System.Storage].[Tombstone!Extension]从系统检索扩展墓碑。扩展改变跟踪信息类似于为项目提供的添加了ExtensionId属性的信息。  列   类型   描述  ItemId   ItemId   拥有该扩展的项目的身份  ExtensionId   ExtensionId   该扩展的ExtensionId  _TypeID   TypeId   该扩展的类型  _ChangeTrackingInfo   ChangeTrackingInfo类型的CLR实例   此扩展的改变跟踪信息  _IsDeleted   BIT   这是标志,0是活动项目,而1是墓碑扩展  _DeletionWallclock   UTCDATETIME   按删除该扩展的伙伴的UTC墙钟日期间。若该扩展是活动的,它为空 Use the view [System.Storage].[Tombstone! Extension] Retrieves the extension tombstone from the system. Extension change tracking information is similar to that provided for projects with the addition of the ExtensionId property. List type describe ItemId ItemId The identity of the project that owns the extension ExtensionId ExtensionId ExtensionId of the extension _TypeID TypeId the type of extension _ChangeTrackingInfo A CLR instance of type ChangeTrackingInfo Change tracking information for this extension _IsDeleted BIT This is the flag, 0 is the active item and 1 is the tombstone extension _DeletionWallclock UTCDATETIME Press to remove the extension's partner's UTC wall clock day period. It is empty if the extension is active

(3)关系墓碑(3) Relationship Tombstone

通过视图[System.Storage].[Tombstone!Relationship]从系统检索关系墓碑。关系墓碑信息类似于对扩展提供的信息。然而,在关系实例的目标ItemRef上提供附加信息。此外,还选择关系对象。   列   类型   描述   ItemId   ItemId   拥有该关系的项目的身份(关系的源端点的身份)   RelationshipId   RelationshipId   该关系的RelationshipId   _TypeID   TypeId   关系的类型   _ChangeTrackingInfo   ChangeTrackingInfo类型的CLR实例   此关系的改变跟踪信息   _IsDeleted   BIT   这是标志,0是活动项目,而1是墓碑扩展   _DeletionWallclock   UTCDATETIME   按删除该关系的伙伴的UTC墙钟日期时间。若该关系是活动的,它为空   _Relationship   关系的CLR实例   这是活动关系的关系对象,对墓碑的关系它为空   TargetItemReference   ItemReference   目标端点的身份 Via view[System.Storage].[Tombstone! Relationship] Retrieves relationship tombstones from the system. Relationship tombstone information is similar to the information provided for extensions. However, additional information is provided on the target ItemRef of the relation instance. Also, select the relationship object. List type describe ItemId ItemId The identity of the project that owns the relationship (the identity of the source endpoint of the relationship) RelationshipId RelationshipId the RelationshipId of the relationship _TypeID TypeId type of relationship _ChangeTrackingInfo A CLR instance of type ChangeTrackingInfo Change tracking information for this relationship _IsDeleted BIT This is the flag, 0 is the active item and 1 is the tombstone extension _DeletionWallclock UTCDATETIME By the UTC wall clock datetime of the partner who deleted the relationship. It is null if the relationship is active _Relationship CLR instance of relation This is the relationship object for active relationships, it is null for tombstone relationships TargetItemReference ItemReference The identity of the target endpoint

(4)墓碑清除(4) Tombstone removal

为防止墓碑信息无限制地增长,数据存储提供墓碑清除任务。此任务确定什么时候可以舍弃墓碑信息。该任务计算本地创建/更新版本的界限,并随后通过舍弃所有更早的墓碑版而截断墓碑信息。To prevent unlimited growth of tombstone information, the data store provides a tombstone removal task. This task determines when tombstone information can be discarded. This task computes the bounds of locally created/updated versions and then truncates the tombstone information by discarding all earlier tombstone versions.

11.助手API和函数11. Helper API and functions

基础映射还提供若干助手函数。提供这些函数以帮助在该数据模型上的公用操作。The base map also provides several helper functions. These functions are provided to facilitate common operations on this data model.

a)函数[System.Storage].GetItema) Function [System.Storage].GetItem

//给定ItemId返回一项目对象//Given ItemId returns an item object

Item Getltem(Itemld Itemld)Item Getltem(Itemld Itemld)

b)函数[System.Storage].GetExtensionb) Function [System.Storage].GetExtension

//给定ItemId和ExtensionId返回一扩展对象//Given ItemId and ExtensionId return an extension object

Extension GetExtension(Itemld Itemld,Extensionld Extensionld)Extension GetExtension(Itemld Itemld, Extensionld Extensionld)

c)函数[System.Storage].GetRelationshipc) Function [System.Storage].GetRelationship

//给定ItemId和RelationshipId返回—关系对象//Given ItemId and RelationshipId return - relationship object

Relationship GetRelationship(Itemld Itemld,Relationshipld Relationshipld)Relationship GetRelationship(Itemld Itemld, Relationshipld Relationshipld)

12.元数据12. Metadata

有两类在存储中表示的元数据:实例元数据(项目的类型等),和类型元数据。There are two types of metadata represented in the store: instance metadata (type of item, etc.), and type metadata.

a)模式元数据a) schema metadata

模式元数据作为来自元模式的项目类型的实例存储在数据存储中。Schema metadata is stored in the data store as instances of item types from the meta-schema.

b)实例元数据b) instance metadata

应用程序使用实例元数据来查询项目的类型,并寻找与项目相关联的扩展。给定项目的ItemId,应用程序可查询全局项目视图,以返回该项目的类型,并使用此值来查询Meta.Type视图以返回关于该项目的声明的类型的信息。例如,Applications use instance metadata to query an item's type and to find extensions associated with the item. Given an item's ItemId, an application can query the global item view to return the item's type, and use this value to query the Meta.Type view to return information about the item's declared type. For example,

//对给定的项目实例返回元数据项目对象// Returns the metadata item object for the given item instance

SELECT m._Item AS metadataInfoObjSELECT m._Item AS metadataInfoObj

FROM[System.Storage].[Item]i INNER JOIN[Meta].[Type]m ON i._Typeld=m.ItemldFROM[System.Storage].[Item]i INNER JOIN[Meta].[Type]m ON i._Typeld=m.Itemld

WHERE i.Itemld=@ItemldWHERE i.Itemld = @Itemld

G.安全性G. Security

一般而言,所有可保护的对象使用图26中所示的访问掩码格式来安排访问权限。在此格式中,低16位用于对象专用的的访问权限,接着7位用于应用于大多数对象类型的标准访问权限,高4位用于指定类属访问权限,每个对象类型将其映射到一组标准且对象专用的权限。ACCESS_SYSTEM_SECURITY位对应于访问对象的SACL的权限。In general, all protectable objects use the access mask format shown in Figure 26 to arrange access rights. In this format, the lower 16 bits are used for object-specific access rights, the next 7 bits are used for standard access rights that apply to most object types, and the upper 4 bits are used to specify generic access rights, which are assigned to each object type. Maps to a standard set of object-specific permissions. The ACCESS_SYSTEM_SECURITY bit corresponds to the permission to access the object's SACL.

在图26的访问掩码结构中,项目专用的权限被放置在对象专用权限段(低16位)。由于在本实施例中,存储平台向管理员安全性展现两组API:Win32和存储平台API,为促进存储平台对象专用权限的设计,必须考虑文件系统对象专用的权限。In the access mask structure of FIG. 26, item-specific permissions are placed in the object-specific permissions field (lower 16 bits). Since in this embodiment, the storage platform presents two sets of APIs to administrator security: Win32 and storage platform API, to facilitate the design of storage platform object-specific permissions, file system object-specific permissions must be considered.

在通过引用结合于此的有关专利中充分描述了用于本发明的存储平台的安全模型。在这点上,图27(部分a、b和c)画出按安全模型的一实施例,作为从现有安全区域开拓出的新的等同地保护的安全区域。The security model for the storage platform of the present invention is fully described in the related patents incorporated herein by reference. In this regard, Figure 27 (parts a, b, and c) depicts an embodiment in terms of a security model as new equally protected security areas carved out of existing security areas.

H.通知和改变跟踪H. Notifications and Change Tracking

按本发明的另一方面,存储平台提供允许应用程序跟踪数据改变的通知能力。此特征主要供保持易失状态或执行数据改变事件上的业务逻辑的应用程序使用。应用程序注册在项目、项目扩展及项目关系上的通知。在提交了数据改变通知被异步地传送。应用程序可按项目、扩展和关系类型以及操作类型来过滤通知。According to another aspect of the invention, the storage platform provides notification capabilities that allow applications to track data changes. This trait is primarily intended for use by applications that maintain volatile state or perform business logic on data change events. Applications register for notifications on items, item extensions, and item relationships. Data change notifications are delivered asynchronously upon commit. Applications can filter notifications by project, extension and relationship type, and action type.

按一个实施例,存储平台API 322为通知提供两类接口。第一,应用程序注册由对项目、项目扩展和项目关系的改变触发的简单数据改变事件。第二,应用程序创建“监视程序”对象来监视项目、项目扩展和项目之间关系的组。在系统失败或系统离线超过预定时间之后,可保存和重新创建监视程序对象的状态。单个通知可反映多个更新。According to one embodiment, the storage platform API 322 provides two types of interfaces for notifications. First, the application registers for simple data change events triggered by changes to items, item extensions, and item relationships. Second, the application creates a "watcher" object to monitor groups of items, item extensions, and relationships between items. The state of the watchdog object can be saved and recreated after a system failure or after the system has been offline for a predetermined amount of time. A single notification can reflect multiple updates.

关于此功能的附加细节能在先前通过引用结合于此的有关专利中找到。Additional details regarding this functionality can be found in the related patents previously incorporated herein by reference.

I.同步I. Synchronization

按照本发明的另一个方面,存储平台提供同步服务330,它(i)允许存储平台的多个实例(每个具有它自己的数据存储器302)按照一组灵活的规则同步它们的部分内容,以及(ii)为第三方提供一个基础结构,以用实现专有协议的其它数据源来同步本发明的存储平台的数据存储。According to another aspect of the invention, the storage platform provides a synchronization service 330 which (i) allows multiple instances of the storage platform (each with its own data store 302) to synchronize parts of their contents according to a flexible set of rules, and (ii) Provide an infrastructure for third parties to synchronize data storage of the storage platform of the present invention with other data sources implementing proprietary protocols.

存储平台对存储平台同步在一组参与的复制品之间发生。例如,参考图3,可能想要在存储平台300的数据存储器302与在存储平台的另一个实例控制下的另一个远程数据存储338(可能运行在一个不同的计算机系统上)之间提供同步。这个组的全部成员资格对于任何给定的复制品在任何给定时间不必是已知的。Storage platform-to-storage platform synchronization occurs between a set of participating replicas. For example, referring to FIG. 3, it may be desirable to provide synchronization between data store 302 of storage platform 300 and another remote data store 338 (perhaps running on a different computer system) under the control of another instance of the storage platform. The full membership of this group need not be known for any given replica at any given time.

不同的复制品可以独立地作出改变(即,同时地)。同步的过程定义使每个复制品知道其它复制品作出的改变。这个同步能力固有地是多主的(multi-master)。Different replicas can make changes independently (ie, simultaneously). The process of synchronization is defined so that each replica is aware of changes made by other replicas. This synchronization capability is inherently multi-master.

本发明的同步能力允许复制品:The synchronization capabilities of the present invention allow replicas to:

·确定另一个复制品知道哪些改变;Determine which changes the other replica knows about;

·请求关于这个复制品不知道的改变的信息;Request information about changes that the replica is not aware of;

·传送关于另一个复制品不知道的改变的信息;· transmit information about changes that the other replica is not aware of;

·确定何时两个改变彼此冲突;Determine when two changes conflict with each other;

·在本地应用改变;Apply changes locally;

·传送冲突分解方案到其它复制品以保证会聚;以及· Send conflict resolution solutions to other replicas to ensure convergence; and

·基于冲突分解方案的指定政策分解冲突。• Decomposes conflicts based on specified policies of the conflict resolution scheme.

1.存储平台到存储平台的同步1. Synchronization from storage platform to storage platform

本发明的存储平台的同步服务300的基本应用是同步存储平台(每个带有它自己的数据存储)的多个实例。同步服务在存储平台模式级上操作(而不是在数据库引擎314的底层表中)。因此,例如“范围(Scope)”用于定义下面讨论的同步组。The basic application of the synchronization service 300 of the storage platform of the present invention is to synchronize multiple instances of a storage platform (each with its own data store). The synchronization service operates at the storage platform schema level (rather than in the underlying tables of the database engine 314). Thus, for example "Scope" is used to define the synchronization groups discussed below.

同步服务按“纯改变(net change)”的原则操作。不是记录和发送各个操作(如事务复制),同步服务而是发送这些操作的最终结果,因此常将多个操作的结果合并成单个最终结果。Synchronization services operate on the principle of "net change". Instead of recording and sending individual operations (such as transactional replication), a synchronization service sends the final results of those operations, thus often combining the results of multiple operations into a single final result.

同步服务通常不考虑事务边界。换言之,若在单个事务中对存储平台数据存储作出两个改变,不保证这些改变原子地应用到所有其它复制品上—可以示出一个改变而不示出其它改变。此原则的例外是,若在同一事务中对同一项目作出两个改变,则这些改变保证被原子地发送和应用到其它复制。因此,项目是同步服务的一致性单元。Synchronization services generally do not respect transaction boundaries. In other words, if two changes are made to a storage platform data store in a single transaction, there is no guarantee that these changes are applied atomically to all other replicas—one change can be shown without the other. The exception to this principle is that if two changes are made to the same item in the same transaction, those changes are guaranteed to be sent and applied to the other replicas atomically. Thus, a project is a unit of consistency for the synchronization service.

a)同步(Sync)控制应用程序a) Sync control application

任一应用程序可连接到同步服务并启动sync(同步)操作。那样的应用程序提供执行同步(见下面同步概况)所需的所有参数。那样的应用程序在这里被称为同步控制应用程序(SCA)。Any application can connect to the synchronization service and initiate a sync operation. That application provides all the parameters needed to perform a synchronization (see Synchronization Overview below). Such applications are referred to herein as Synchronous Control Applications (SCA).

在同步两个存储平台实例时,在一侧由SCA启动同步。该SCA通知本地同步服务与远程伙伴同步。在另一侧,同步服务通过由来自发起机器的同步服务发出的消息唤醒。它基于在目标机器上存在的持久配置信息(见下文的映射)作出响应。同步服务能按时间表或响应于事件运行。在这些情况下,实现时间表的同步服务成为SCA。When synchronizing two storage platform instances, the synchronization is initiated by SCA on one side. The SCA notifies the local synchronization service to synchronize with the remote partner. On the other side, the sync service is woken up by a message sent by the sync service from the originating machine. It responds based on persistent configuration information (see mapping below) that exists on the target machine. Synchronization services can run on a schedule or in response to events. In these cases, the synchronization service that implements the schedule becomes the SCA.

为启用同步,需要采取两个步骤。首先,模式设计者必须用合适的同步语义注释存储平台模式(如下文所述的指定改变单元)。其次,同步必须在具有参与同步的存储平台的实例的所有机器上正确地配置(如下所述)。To enable synchronization, two steps need to be taken. First, schema designers must annotate storage platform schemas with appropriate synchronization semantics (specifying change units as described below). Second, synchronization must be properly configured on all machines with instances of the storage platform participating in the synchronization (described below).

b)模式注释b) schema annotation

同步服务的基本概念是改变单元(Change Unit)的概念。改变单元是由存储平台个别地跟踪的最小的模式片段。对每个改变单元,同步服务能确定自从最后一次同步以来它是被改变还是未被改变。The basic concept of synchronization service is the concept of change unit (Change Unit). A unit of change is the smallest schema fragment tracked individually by the storage platform. For each unit of change, the synchronization service can determine whether it has changed or remained unchanged since the last synchronization.

指定模式中的改变单元达到若干目的。首先,它确定了在线的同步服务如何罗嗦。当在改变单元内作出改变时,整个改变单元被发送到其它复制品,因为同步服务不知道改变单元的哪部分被改变。其次,它确定了冲突检测的粒度。当对同一改变单元作出两个并发的改变(这些术语在后继章节中详细定义),同步服务引起冲突;另一方面,若对不同改变单元作出并发改变,则无冲突发生,且改变被自动地合并。第三,它严重地影响了由系统保持的元数据的量。对每个改变单元保持许多同步服务元数据;因此,使改变单元更小会增加同步的额外开销。Changing elements in the specified schema serves several purposes. First, it establishes how wordy the online sync service is. When a change is made within a change unit, the entire change unit is sent to the other replicas because the synchronization service does not know which part of the change unit was changed. Second, it determines the granularity of collision detection. When two concurrent changes are made to the same change unit (these terms are defined in detail in subsequent chapters), the synchronization service causes a conflict; on the other hand, if concurrent changes are made to different change units, no conflict occurs and the changes are automatically merge. Third, it severely affects the amount of metadata maintained by the system. A lot of sync service metadata is maintained for each unit of change; therefore, making the unit of change smaller increases the overhead of synchronization.

定义改变单元需要找出正确的折衷。为此,同步服务允许模式设计者参与此过程。Defining the changing unit requires finding the right tradeoff. To this end, Synchronization Services allows schema designers to participate in the process.

在一个实施例中,同步服务不支持大于一个元素的改变单元。然而,它支持让模式设计者指定比一个元素更小的改变单元的能力—即将一个元素的多个属性组合到单独的改变单元中。在该实施例中,这是使用下述句法实现的:<Type Name=″Appointment″MajorVersion=″1″MinorVersion=″0″ExtendsType=″Base.Item″In one embodiment, the synchronization service does not support change units larger than one element. However, it supports the ability for schema designers to specify units of change smaller than an element—that is, to combine multiple attributes of an element into a single unit of change. In this embodiment, this is accomplished using the following syntax: <Type Name="Appointment" MajorVersion="1" MinorVersion="0"ExtendsType="Base.Item"

  ExtendsVersion=″1″>ExtendsVersion="1">

<Field Name=″MeetingStatus″Type=″the storage platformTypes.uniqueidentifierNullable=″False″/><Field Name="MeetingStatus"Type="the storage platformTypes.uniqueidentifierNullable="False"/>

<Fileld Name=″OrganizerName″Type=″the storage platformTypes.nvarchar(512)″Nullable=″False″/><Fileld Name="OrganizerName"Type="the storage platformTypes.nvarchar(512)"Nullable="False"/>

<Filed Name=″OrganizerEmail″Type=″the storage plattorm Types.nvarchar(512)″TypeMajorVersion=″1″                  MultiValued=″True″/><Filed Name="OrganizerEmail"Type="the storage platform Types.nvarchar(512)"TypeMajorVersion="1" MultiValued="True"/>

<ChangeUnit Name=″CU_Status″><Field Name=″MeetingStatus″/><ChangeUnit Name="CU_Status"><Field Name="MeetingStatus"/>

</ChangeUnit></ChangeUnit>

<ChangeUnit Name=″CU_Organizer″/><Field Name=″OrganizerName″/><Field Name=″OrganizerEmail″/><ChangeUnit Name="CU_Organizer"/><Field Name="OrganizerName"/><Field Name="OrganizerEmail"/>

</ChangeUnit></ChangeUnit>

…</Type>...</Type>

c)同步配置c) Synchronization configuration

希望保持它们数据的某些部分同步的一组存储平台伙伴被称为同步共同体。虽然共同体的成员希望保持同步,它们不需要以完全相同的方式表示数据;换言之,同步伙伴可转换他们正在同步的数据。A group of storage platform partners who wish to keep some parts of their data in sync is called a sync community. Although members of the community wish to remain in sync, they do not need to represent the data in exactly the same way; in other words, sync partners can transform the data they are synchronizing.

在对等情况下,让对等方对所有它们的伙伴维持转换映射是不现实的。取代地,同步服务采取定义“共同体文件夹”的方法。共同体文件夹是代表所有共同体成员正在与之同步的假设的“共享文件夹”的抽象。In a peer-to-peer situation, it is impractical for peers to maintain translation maps 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" that all community members are syncing with.

此概念最好用一例子说明。若Joe希望保持他的若干计算机的My Documents(我的文档)文件夹同步,Joe定义一共同体文件夹,如称为JoeDocuments。随后在每台计算机上,Joe在假设的JoeDocuments文件夹和本地My Documents文件夹之间配置一映射。从这点出发,当Joe的计算机彼此同步时,它们借助JoeDocuments中的文档而不是它们的本地项目来交谈。以此方法,所有Joe的计算机互相理解,而不必知道其它人是谁—共同体文件夹成为同步共同体的通用语。This concept is best illustrated with an example. If Joe wants to keep the My Documents (My Documents) folders of several of his computers synchronized, Joe defines a community folder, such as called JoeDocuments. Then on each computer, Joe configures a mapping between the hypothetical JoeDocuments folder and the local My Documents folder. From this point on, when Joe's computers synchronize with each other, they talk by means of documents in JoeDocuments rather than their local projects. In this way, all Joe's computers understand each other without having to know who the others are - the community folder becomes the lingua franca of the sync community.

配置同步服务包括三个步骤:(1)定义在本地文件夹和共同体文件夹之间的映射;(2)定义确定哪个得到同步的同步概况(如与谁同步,以及哪个子集应当被发送、哪个被接收);以及(3)定义不同的同步概况应当运行的时间表,或手动运行它们。Configuring the synchronization service consists of three steps: (1) defining the mapping between local folders and community folders; (2) defining the synchronization profiles that determine which gets synchronized (such as who to synchronize with, and which subset should be sent, which is received); and (3) define a schedule on which the different synchronization profiles should run, or run them manually.

(1)共同体文件夹—映射(1) Community Folder - Mapping

共同体文件夹映射作为XML配置文件被存储在个别机器上。每个映射具有以下模式:/mappings/communityFolderCommunity folder maps are stored on individual machines as XML configuration files. Each mapping has the following schema: /mappings/communityFolder

此元素命名映射的共同体文件夹。名字遵循文件夹的句法规则。/mappings/localFolderThis element names the mapped community folder. The names follow the syntax of folders. /mappings/localFolder

此元素命名映射所转换到的本地文件夹。此名字遵循文件夹的句法规则。为了映射有效,文件夹必须已存在。此文件夹中的项目被看作对每一此映射的同步。/mappings/transformationsThis element names the local folder to which the mapping is translated. This name follows the syntax rules for folders. For the mapping to work, the folder must already exist. Items in this folder are considered for each synchronization of this mapping. /mappings/transformations

此元素定义如何将项目从共同体文件夹转换到本地文件夹以及如何反向转换。若缺少或为空,不执行转换。具体说来,这意味着无ID被映射。此配置主要用于创建文件夹的高速缓存。/mappings/transformations/mapIDsThis element defines how to convert projects from community folders to local folders and vice versa. If missing or empty, no conversion is performed. Specifically, this means that no IDs are mapped. This configuration is mainly used to create a cache of folders. /mappings/transformations/mapIDs

此元素请求新生成的本地ID被赋予所有从共同体文件夹映射的项目,而不是重新使用共同体ID。同步运行库维护ID映射,以来回转换项目。/mappings/transformations/localRootThis element requests that a newly generated local ID be given to all projects mapped from the community folder, rather than reusing the community ID. The sync runtime maintains ID mappings to convert items back and forth. /mappings/transformations/localRoot

此元素请求共同体文件夹中的所有根项目作为指定根的子项目。/mappings/runAsThis element requests all root items in the community folder to be children of the specified root. /mappings/runAs

此元素控制,在谁的授权下处理针对此映射的请求。若不存在,则假设发送者。/mappings/runAs/senderThis element controls, under whose authority, requests for this mapping are processed. If not present, the sender is assumed. /mappings/runAs/sender

存在此元素表明,对此映射的消息发送者必须是人格化的,且在他的凭证下处理请求。The presence of this element indicates that the sender of messages to this mapping must be impersonal and process requests under his credentials.

(2)概况(2) Overview

同步概况是分离同步所需的总的参数组。由SCA将其提供给同步运行库以启动同步。存储平台到存储平台的同步的同步概况包含以下信息:A synchronization profile is the overall set of parameters required for a separate synchronization. It is provided by SCA to the sync runtime to start the sync. The synchronization profile for storage platform-to-storage platform synchronization contains the following information:

·本地文件夹,用作改变的源和目标;· Local folders, used as source and target for changes;

·与之同步的远程文件夹名—此文件夹必须通过如上定义的映射从远程伙伴发布;Name of remote folder to synchronize with - this folder must be published from the remote partner via the mapping defined above;

·方向—同步服务支持只发送、只接收以及发送—接收同步;·Direction-synchronization service supports sending only, receiving only and sending-receiving synchronization;

·本地过滤器—选择发送什么本地信息到远程伙伴。表示成本地文件夹上的存储平台查询;• Local Filters - select what local information is sent to the remote partner. Expressed as a storage platform query on a local folder;

·远程过滤器—选择从远程伙伴接收什么远程信息—表示成共同体文件夹上的存储平台查询;Remote Filters - select what remote information to receive from remote partners - expressed as storage platform queries on community folders;

·转换—定义如何在项目和本地格式间转换;Conversion - define how to convert between the project and the native format;

·本地安全性—指定是在远程端点(人格化)的许可下应用从远程端点检索的改变,还是用户在本地启动同步;以及· Local Security—specifies whether changes retrieved from the remote endpoint are applied with the permission of the remote endpoint (personalization), or whether the user initiates the synchronization locally; and

·冲突分解政策—指定冲突是否应被拒绝、记入日志或自动分解—在后一种情况下,指定使用哪个冲突分解器以及它的配置参数。• Conflict resolution policy—specifies whether conflicts should be rejected, logged, or resolved automatically—in the latter case, which conflict resolver to use and its configuration parameters.

同步服务提供允许简单构建同步概况的运行时CLR类。概况可被串行化成XML文件或从XML文件串行化,以便容易存储(常与时间表一起)。然而,在存储平台中没有存储所有概况的标准地方;欢迎SCA在不必永久保持的点上构建概况。注意,不需要具有本地映射来启动同步。能在概况中指定所有同步信息。然而为响应于由远程方启动的同步请求,需要映射。The synchronization service provides runtime CLR classes that allow easy construction of synchronization profiles. Profiles can be serialized to and from XML files for easy storage (often along with timetables). However, there is no standard place to store all profiles in a storage platform; SCA is welcome to build profiles at points that do not have to be persistent. Note that it is not necessary to have a local mapping to initiate a sync. All synchronization information can be specified in the profile. However, to respond to a synchronization request initiated by a remote party, a mapping is required.

(3)时间表(3) Schedule

在一个实施例中,同步服务不提供它自己的调度基础结构。相反,它依赖于另一组件来完成此任务—在Microsoft Windows操作系统中可得到的WindowsScheduler。同步服务包括命令行实用程序,它担当SCA并基于保存在XML文件中的同步概况触发同步。该实用程序使得按时间表或者响应于如用户登录或登出等事件来配置Windows Scheduler变得非常容易。In one embodiment, the synchronization service does not provide its own scheduling infrastructure. Instead, it relies on another component to accomplish this task—WindowsScheduler, available in the Microsoft Windows operating system. The sync service includes a command line utility that acts as an SCA and triggers syncs based on sync profiles saved in XML files. This utility makes it easy to configure Windows Scheduler on a schedule or in response to events such as user logon or logout.

d)冲突处理d) Conflict handling

同步服务中的冲突处理被划分成三个阶段:(1)发生在改变应用时的冲突检测—此步骤判断是否可安全地应用改变;(2)自动冲突分解并记入日志—在此步骤(发生在紧接着冲突检测之后)资讯自动冲突分解器,以查看冲突是否能被分解—若不能,可任选地将冲突记入日志;以及(3)冲突检查与分解—若某些冲突已被记入日志,且发生在同步会话之外,则采取此步骤—此时,被记入日志的冲突能被分解并从日志中移除。Conflict handling in the synchronization service is divided into three phases: (1) Conflict detection occurs when changes are applied—this step determines whether the changes can be safely applied; (2) Automatic conflict resolution and logging—In this step ( Occurs immediately after conflict detection) informational automatic conflict resolver to see if conflicts can be resolved - if not, conflicts can optionally be logged; and (3) conflict checking and resolution - if some conflicts have been resolved This step is taken if a conflict is logged and occurred outside of a sync session - at this point, the logged conflict can be resolved and removed from the log.

(1)冲突检测(1) Conflict detection

在本实施例中,同步服务检测两类冲突:基于知识和基于约束的。In this embodiment, the synchronization service detects two types of conflicts: knowledge-based and constraint-based.

(a)基于知识的冲突(a) Knowledge-Based Conflict

当两个复制品对同一改变单元作出独立的改变时,发生基于知识的冲突。两个改变若是它们在互相不知道的情况作出的,则称为独立的—换言之,第一个的版本不被第二个的知识所覆盖,反之亦然。同步服务基于上述复制品的知识自动检测所有那些冲突。Knowledge-based conflicts occur when two replicas make independent changes to the same unit of change. Two changes are said to be independent if they were made without mutual knowledge—in other words, the version of the first is not overwritten by knowledge of the second, and vice versa. The synchronization service automatically detects all those conflicts based on the knowledge of the above replicas.

将冲突想成在改变单元的版本历史中的分叉有时是有益的。若在改变单元的生命中不发生冲突,其版本历史是简单的链—每个发生在前一个之后。在基于知识的冲突的情况下,两个改变并行发生,导致链分裂,成为版本树。It is sometimes helpful to think of conflicts as forks in the version history of changing units. Provided no conflicts occur during the life of a change unit, its version history is a simple chain—each occurrence after the previous one. In the case of a knowledge-based conflict, two changes happen in parallel, causing the chain to split into a version tree.

(b)基于约束的冲突(b) Constraint-based conflicts

存在独立的改变在一起应用时破坏完整性约束的情况。例如,在同一目录中用同样的名字创建一个文件的两个复制品能导致发生那样的冲突。There are cases where independent changes, when applied together, violate integrity constraints. For example, creating two copies of a file with the same name in the same directory can cause that conflict to occur.

基于约束的冲突牵涉到两个独立的改变(就象基于知识的冲突),但它们不影响同一改变单元。相反,它们影响不同的改变单元,但在它们之间存在约束。Constraint-based conflicts involve two independent changes (like knowledge-based conflicts), but they do not affect the same unit of change. Instead, they affect different change units, but there are constraints between them.

同步服务检测在改变应用时的约束破坏,并自动引起基于约束的冲突。分解基于约束的冲突通常需要自定义代码,它以不破坏约束的方式修改那些改变;同步服务不提供这样做的通用机制。The synchronization service detects constraint violations when changing applications and automatically causes constraint-based conflicts. Resolving constraint-based conflicts usually requires custom code that modifies those changes in a way that does not break the constraints; the synchronization service does not provide a general mechanism for doing so.

(2)冲突处理(2) Conflict handling

在检测到冲突时,同步服务可采取三个动作之一(由同步概况中的同步启动者选择):(1)拒绝该改变,将其返回到发送者;(2)将冲突记入到冲突日志;或(3)自动分解冲突。Upon detecting a conflict, the sync service can take one of three actions (chosen by the sync initiator in the sync profile): (1) reject the change, returning it to the sender; (2) log the conflict in the conflicts log; or (3) automatically resolve conflicts.

若改变被拒绝,同步服务如同该改变没有到达该复制品那样地运作。否定确认被发回到发起者。此分解政策主要在无领导的复制品(如文件服务器)上有用,在那里将冲突记入日志是不可行的。相反,那些复制品通过拒绝它们来强迫其它复制品处理那些冲突。If the change is rejected, the synchronization service acts as if the change did not reach the replica. A negative acknowledgment is sent back to the initiator. This split policy is primarily useful on leaderless replicas, such as file servers, where logging conflicts is not feasible. Instead, those replicas force other replicas to deal with those conflicts by rejecting them.

同步启动者在它们的同步概况中配置冲突分解。同步服务支持在单个概况中以下列方式组合多个冲突分解器—首先通过指定冲突分解器的列表,一个接着一个地尝试分解,直到其中一个成功;第二,通过将冲突分解器与冲突类型相关联,如引导更新—更新基于知识的冲突到一个分解器,但所有其它冲突记入日志。Synchronization initiators configure conflict resolution in their synchronization profiles. The synchronization service supports combining multiple conflict resolvers in a single profile in the following manner—first, by specifying a list of conflict resolvers, trying to resolve one after the other until one succeeds; second, by associating a conflict resolver with a conflict type Links, such as Guided Update—update knowledge-based conflicts to a resolver, but log all other conflicts.

(a)自动冲突分解(a) Automatic Conflict Resolution

同步服务提供若干默认的冲突分解器。其列表包括:The synchronization service provides several default conflict resolvers. Its list includes:

·本地赢:若与本地存储的数据冲突,则不予处理进入的改变;·Local win: If it conflicts with locally stored data, the incoming change will not be processed;

·远程赢:若与进入的改变冲突,则不予处理本地数据;·Remote win: local data will not be processed if it conflicts with incoming changes;

·最后写赢:基于改变的时间标记挑选每个改变单元的本地赢或远程赢(注意,同步服务一般不依赖于时钟值;此冲突分解器是该规则的唯一例外);Last write wins: picks local wins or remote wins for each unit of change based on the timestamp of the change (note that sync services generally do not depend on clock values; this conflict resolver is the only exception to this rule);

·确定的:以保证在所有复制品上相同,但在其它情况下无意义的方式挑选赢者—同步服务的一个实施例使用伙伴ID的字典式比较来实现此特征。• Deterministic: Pick a winner in a way that is guaranteed to be identical across all replicas, but otherwise meaningless—one embodiment of the synchronization service implements this feature using a dictionary-like comparison of partner IDs.

此外,ISV能实现并安装它们自己的冲突分解器。自定义冲突分解器可接受配置参数;那些参数必须由SCA在同步概况中的冲突分解段中指定Furthermore, ISVs can implement and install their own conflict resolvers. Custom conflict resolvers can accept configuration parameters; those parameters must be specified by SCA in the conflict resolution section of the synchronization profile

在冲突分解器处理冲突时,它向运行库返回需要执行的操作(替代冲突改变)的列表。然后同步服务应用这些操作,其具有正确地调整的远程指示,以包括冲突处理器所考虑的所有内容。When the conflict resolver resolves a conflict, it returns to the runtime a list of operations (replacing conflicting changes) that need to be performed. The sync service then applies these operations with properly adjusted remote indications to include everything considered by the conflict handler.

在应用分解的同时可能检测到另外冲突。在那样情况下,新的冲突必须在原先处理重新开始之前被分解。Additional conflicts may be detected while the decomposition is being applied. In that case, the new conflict must be resolved before the original process can be restarted.

将冲突考虑成项目的版本历史中的分枝时,冲突分解可看成合并—组合两个分枝以形成单个点。因此,冲突分解将版本历史转到DAG。When considering conflicts as branches in a project's version history, conflict resolution can be thought of as a merge—combining two branches to form a single point. Therefore, conflict resolution transfers the version history to the DAG.

(b)冲突日志记录(b) Conflict logging

一种非常特定类型的冲突分解器是冲突日志记录器。同步服务将冲突记入日志作为ConflictRecord(冲突记录)的项目。这些记录反过来与冲突中的项目有关(除非项目本身已被删除)。每个冲突记录包括:导致冲突的进入的改变;冲突的类型;更新—更新、更新—删除、删除—更新、插入—插入或约束;以及进入的改变的版本和发送它的复制品的知识。记入日志的冲突可用于下面所述的检查和分解。A very specific type of conflict resolver is a conflict logger. The synchronization service logs conflicts as ConflictRecord items. These records are in turn related to the project in conflict (unless the project itself has been deleted). Each conflict record includes: the incoming change that caused the conflict; the type of conflict; update-update, update-delete, delete-update, insert-insert, or constraint; and knowledge of the version of the incoming change and the replica that sent it. Logged conflicts are available for inspection and resolution as described below.

(c)冲突审查和分解(c) Conflict review and resolution

同步服务对应用程序提供API,以检查冲突日志并建议其中的冲突分解。该API允许应用程序枚举所有冲突,或与给定项目有关的冲突。还允许那些应用程序以下列三种方法之一分解记入日志的冲突:(1)远程赢—接受记入日志的改变并覆写冲突的本地改变;(2)本地赢—忽略记入日志的改变的冲突部分;以及(3)建议新的改变—其中,应用程序提议一合并,以它的观点,该合并分解冲突。一旦由应用程序分解了冲突,同步服务将它们从日志中移除。The sync service provides an API to applications to examine the conflict log and suggest conflict resolutions therein. This API allows an application to enumerate all conflicts, or those related to a given item. Those applications are also allowed to resolve logged conflicts in one of three ways: (1) remote win - accept logged changes and overwrite conflicting local changes; (2) local win - ignore logged The conflicting part of the change; and (3) Propose a new change - where the application proposes a merge that, in its view, resolves the conflict. Once the conflicts are resolved by the application, the synchronization service removes them from the log.

(d)复制品的会聚性及冲突分解的传播(d) Convergence of replicas and propagation of conflict resolution

在复杂同步的情况下,在多个复制品中能检测到同一冲突。若发生此情况,发生若干事情:(1)在一个复制品上能分解冲突,并将分解送到其它复制品;(2)冲突在两个复制品上被自动分解;以及(3)在两个复制品上手动分解冲突(通过分解检查API)。In the case of complex synchronization, the same conflict can be detected in multiple replicas. When this happens, several things happen: (1) the conflict can be resolved on one replica and the resolution sent to the other; (2) the conflict is automatically resolved on both replicas; and (3) Manually resolve conflicts on each replica (via the resolve check API).

为保证会聚性,同步服务将冲突分解转发到其它复制品。当分解冲突的改变到达复制品时,同步服务自动地在日志中寻找由此更新分解的任何冲突,并消除它们。在此情况下,一个复制品上的冲突分解被绑定到所有其它复制品。To guarantee convergence, the synchronization service forwards conflict resolution to other replicas. When changes resolving conflicts arrive at replicas, the sync service automatically looks in the log for any conflicts resolved by this update, and resolves them. In this case, conflict resolution on one replica is bound to all other replicas.

若不同的复制品对同一冲突选择了不同的赢者,则同步服务应用绑定冲突分解的原则,并自动地挑选两个分解中一个胜过另一个。以确定性的方式挑选赢者以保证在所有时刻都产生同样的结果(一个实施例使用复制品ID字典式比较)。If different replicas choose different winners for the same conflict, the synchronization service applies the principles of bound conflict resolution and automatically picks one of the two resolutions over the other. The winner is picked in a deterministic manner to ensure the same result at all times (one embodiment uses replica ID dictionary comparison).

若不同复制对同一冲突建议不同的“新改变”,则同步服务将此新冲突处理成特殊冲突,并使用冲突日志记录器来防止它传播到其它复制品。那样情况常在手动冲突分解时发生。If different replicas suggest different "new changes" for the same conflict, the sync service treats this new conflict as a special conflict and uses the conflict logger to prevent it from propagating to other replicas. That often happens during manual conflict resolution.

2.对非存储平台数据存储的同步2. Synchronization of non-storage platform data storage

按本发明的存储平台的另一方面,存储平台提供ISV用于实现同步适配器的体系结构,同步适配器使存储平台能与如Microsoft Exchange、AD、Hotmail等传统系统同步。同步适配器得益于由下述同步服务提供的许多同步服务。According to another aspect of the storage platform of the present invention, the storage platform provides an architecture for the ISV to implement a sync adapter that enables the storage platform to synchronize with legacy systems such as Microsoft Exchange, AD, Hotmail, etc. A sync adapter benefits from a number of synchronization services provided by the synchronization services described below.

不管其名称如何,同步适配器不需要作为某个存储平台体系结构的插件来实现。在需要时,“同步适配器”能简单地是利用同步服务运行库接口来获得如改变枚举和应用等服务的任何应用程序。Despite its name, a sync adapter does not need to be implemented as a plug-in to a storage platform architecture. A "sync adapter" can simply be any application that utilizes the sync service runtime interface to obtain services such as change enumeration and application when needed.

为了使其他人能更容易地配置和运行到给定背端(backend)的同步,鼓励同步适配器的编写者展现标准同步适配器接口,它在给定上述的同步概况时运行同步。概况提供配置信息给适配器,某些适配器传送到同步运行库以控制运行库服务(如,要同步的文件夹)。To make it easier for others to configure and run synchronization to a given backend, writers of sync adapters are encouraged to expose a standard sync adapter interface that runs synchronization given the synchronization profile described above. Profiles provide configuration information to adapters that some adapters pass to the sync runtime to control runtime services (eg, folders to sync).

a)同步服务a) Synchronization service

同步服务向适配器编写者提供若干同步服务。在本节余下部分,方便地将存储平台在其上做同步的机器称为“客户机”,而适配器正与其对话的非存储平台背端称为“服务器”。Synchronization Services Provides several synchronization services to adapter writers. In the remainder of this section, it is convenient to refer to the machine on which the storage platform is doing the synchronization as the "client", and the non-storage platform backend that the adapter is talking to as the "server".

(1)改变枚举(1) Change the enumeration

基于由同步服务维持的改变跟踪数据,改变枚举允许同步适配器容易地枚举自从最后一次与该伙伴试图作出同步以来对数据存储文件夹发生的改变。Based on the change tracking data maintained by the sync service, change enumeration allows the sync adapter to easily enumerate the changes that have occurred to the data store folder since the last sync attempt with the partner was made.

基于“锚位(anchor)”的概念来枚举改变—这是表示有关最后一次同步的信息的不透明的结构。如以前章节所述,锚位采取存储平台知识的形式。利用改变枚举服务的同步适配器落入两大类别:使用“存储的锚位”的适配器和使用“提供的锚位”的适配器。Changes are enumerated based on the concept of an "anchor"—an opaque structure that represents information about the last synchronization. As mentioned in previous chapters, anchors take the form of stored platform knowledge. Synchronization adapters that utilize changing enumeration services fall into two broad categories: adapters that use "stored anchors" and adapters that use "provided anchors".

区别基于关于最后一次同步的信息存储在哪里—在客户机上或在服务器上。适配器常常容易地存储此信息在客户机上—背端往往不能容易地存储此信息。另一方面,若多个客户机与同一背端同步,则将此信息存储在客户机上是低效且在某些情况下是不正确的—这使一个客户机不知道其它客户机已推到服务器的改变。若适配器希望使用服务器存储的锚位,则适配器需要在改变枚举时将其送回到存储平台。The distinction is based on where the information about the last sync is stored—on the client or on the server. Adapters often store this information easily on the client - the backend often cannot. On the other hand, if multiple clients are synchronizing with the same backend, it is inefficient and in some cases incorrect to store this information on the client—this leaves one client unaware that other clients have pushed to Server changes. If the adapter wants to use the anchor stored by the server, the adapter needs to send it back to the storage platform when changing the enumeration.

为了让存储平台维护锚位(用于本地或远程存储),存储平台需要知道成功地应用在服务器上的改变。这些且只有这些改变能包括在锚位中。在改变枚举期间,同步适配器使用确认(Acknowledgement)接口,以报告哪个改变已被成功地应用。在同步结束时,使用提供的锚位的适配器必须读出新锚位(它集合所有成功应用的改变)并将其发送到它们的背端。In order for the storage platform to maintain the anchor (for local or remote storage), the storage platform needs to know about the changes successfully applied on the server. These and only these changes can be included in the anchor. During change enumeration, the sync adapter uses the Acknowledgment interface to report which changes have been successfully applied. At the end of the sync, adapters using the provided anchor must read the new anchor (which aggregates all successfully applied changes) and send it to their backends.

各适配器常常需要存储适配器专用数据以及插入到存储平台数据存储中的各项目。该数据存储的常见例子是远程ID和远程版本(时间标记)。同步服务提供用于存储此数据的机制,而改变枚举提供接收此额外数据以及要返回的改变的机制。在大多数情况下,这消除了适配器重新查询数据库的需求。Each adapter often needs to store adapter specific data as well as items that are inserted into the storage platform data store. Common examples of this data store are remote IDs and remote versions (time stamps). The sync service provides the mechanism for storing this data, while the change enumeration provides the mechanism for receiving this additional data and the changes to return. In most cases, this eliminates the need for the adapter to re-query the database.

(2)改变应用(2) Change application

改变应用允许同步适配器将从它们的背端接收的改变应用到本地存储平台。期望适配器将改变转换到存储平台模式。图24示出从存储平台模式生成存储平台API类的过程。Change Apply allows sync adapters to apply changes received from their backend to the local storage platform. The adapter is expected to transition the change to storage platform mode. Figure 24 shows the process of generating storage platform API classes from the storage platform schema.

改变应用的主要功能是自动检测冲突。如在存储平台到存储平台同步的情况下,冲突被定义成在互相不知道时作出的两个重叠的改变。当适配器使用改变应用时,它们必须指定对其执行冲突检测的锚位。若检测到未被适配器的知识覆盖的重叠的本地改变,则改变应用引起冲突。类似于改变枚举,适配器可使用存储的或提供的锚位。改变应用支持适配器专用元数据的有效存储。那样的数据可由适配器将其附加到要应用的改变上,且可被同步服务存储。数据可在下次改变枚举时返回。The main function of the change application is to automatically detect conflicts. As in the case of storage platform-to-storage platform synchronization, a conflict is defined as two overlapping changes made without mutual knowledge. When adapters use changes to apply, they must specify the anchor on which to perform conflict detection. If overlapping local changes not covered by the adapter's knowledge are detected, the change application causes a conflict. Similar to changing enums, adapters can use stored or provided anchors. Changes the effective storage of application-supported adapter-specific metadata. Such data can be appended by the adapter to the changes to be applied, and can be stored by the synchronization service. Data can be returned the next time the enumeration is changed.

(3)冲突分解(3) Conflict resolution

以下在IV中描述的冲突分解机制(包括记入日志和自动分解选项)也对同步适配器可用。在应用改变时,同步适配器能指定用于冲突分解的政策。若指定了,冲突可被传递到指定的冲突处理程序并予以分解(若可能)。冲突也能被记入日志。当试图将本地改变应用到背端时,适配器有可能检测冲突。在那样情况下,适配器仍可以将冲突传递到同步运行库,以按政策分解。此外,同步适配器可请求任何由同步服务检测的冲突发回给它们以便处理。在背端能存储或分解冲突的情况这特别方便。The conflict resolution mechanisms described below in IV (including logging and auto-resolution options) are also available for sync adapters. A sync adapter can specify policies for conflict resolution when an application changes. If specified, conflicts are passed to the specified conflict handler and resolved (if possible). Conflicts can also be logged. It is possible for the adapter to detect conflicts when attempting to apply local changes to the backend. In that case, the adapter can still pass conflicts to the sync runtime for resolution by policy. Additionally, sync adapters can request that any conflicts detected by sync services be sent back to them for processing. This is especially handy in cases where the backend can store or resolve conflicts.

b)适配器实现b) Adapter implementation

虽然某些“适配器”简单地是利用运行库接口的应用程序,然而鼓励适配器实现标准的适配器接口。这些接口允许同步控制应用程序:请求适配器按给定的同步概况执行同步;取消正进行的同步;以及接收关于正进行同步的进展报告(完成百分比)。While some "adapters" are simply applications that utilize the runtime interface, adapters are encouraged to implement the standard adapter interface. These interfaces allow a synchronization control application to: request that the adapter perform a synchronization for a given synchronization profile; cancel an ongoing synchronization; and receive a progress report (percent complete) on the ongoing synchronization.

3.安全性3. Security

同步服务努力将尽可能少的同步引入到由存储平台实现的安全模式。不是去定义对同步新的权限,而是使用现有的权限。具体地,The synchronization service strives to introduce as little synchronization as possible into the security model implemented by the storage platform. Instead of defining new permissions for synchronization, existing permissions are used. specifically,

·能读数据存储项目的任何人可枚举对那个项目的改变;Anyone who can read a data store item can enumerate changes to that item;

·能写到数据存储项目的任何人可应用改变到该项目;以及Anyone who can write to a datastore item can apply changes to that item; and

·能扩展数据存储项目的任何人可将同步元数据与该项目关联。• Anyone who can extend a data storage item can associate synchronization metadata with that item.

同步服务不维护安全授权信息。当在复制品A由用户U作出改变,且将其转发到复制品B时,该改变最初在A处(由U)作出的事实丢失了。若B将此改变转发到复制品C,则这是在B的授权而不是在A的授权下完成的。这就导致下述限制:若不信任一个复制品对一个项目作出它自己的改变,它不能转发由其它复制品作出的改变。The synchronization service does not maintain security authorization information. When a change is made by user U at replica A, and forwarded to replica B, the fact that the change was originally made at A (by U) is lost. If B forwards this change to replica C, this is done under B's authority, not A's. This leads to the restriction that if a replica is not trusted to make its own changes to an item, it cannot forward changes made by other replicas.

在启动同步服务时,由同步控制应用程序完成。同步服务人格化SCA的身份,并在该身份下完成所有操作(本地的和远程的)。作为说明,观察到用户U不能使本地同步服务从远程存储平台检索对用户U不具有读访问的项目的改变。This is done by the sync control application when the sync service is started. The synchronization service personifies the identity of the SCA and completes all operations (local and remote) under that identity. As an illustration, observe that user U cannot cause the local synchronization service to retrieve changes to items for which user U does not have read access from the remote storage platform.

4.可管理性4. Manageability

监视复制品的分布式共同体是复杂的问题。同步服务可使用“扫描(sweep)”算法来收集和分发关于该复制品的状态的信息。扫描算法的属性确保关于所有所配置的复制品的信息最终被收集,且检测到该失败(无响应)的复制品。Monitoring a distributed community of replicas is a complex problem. The synchronization service may use a "sweep" algorithm to collect and distribute information about the state of the replica. The properties of the scanning algorithm ensure that information about all configured replicas is eventually collected and the failed (non-responsive) replica is detected.

在每个复制品上可得到共同体范围的监视信息。可在任意选取的复制品上运行监视工具,以检查此监视信息并作出管理决策。在受影响的复制品上必须直接作出配置改变。Community-wide surveillance information is available on each replica. Monitoring tools can be run on any chosen replica to examine this monitoring information and make management decisions. Configuration changes must be made directly on the affected replica.

J.传统文件互操作性J. Legacy Document Interoperability

如上提到,至少在某些实施例中,本发明的存储平台旨在被实施为计算机系统的硬件/软件接口系统的整体部分。例如,本发明的存储平台可被实施为如Microsoft Windows家族操作系统的整体部分。在这方面,存储平台API成为操作系统API的一部分,应用程序通过它与操作系统交互。因此,存储平台成为装置,应用程序通过它将信息存到操作系统上,且从而基于项目的存储平台的数据模型替代了这一操作系统的传统文件系统。例如,当在Microsoft Windows家族操作系统中实施时,存储平台可替代在该操作系统中实现的NTFS文件系统。当前,应用程序通过由Windows家族操作系统展现的Win32API来访问NTFS文件系统的服务。As mentioned above, at least in some embodiments, the storage platform of the present invention 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 may be implemented as an integral part of, for example, the Microsoft Windows family of operating systems. In this respect, the storage platform API becomes part of the operating system API through which applications interact with the operating system. Thus, the storage platform becomes the device by which applications store information on the operating system, and thus the item-based data model of the storage platform replaces the traditional file system of this operating system. For example, when implemented in the Microsoft Windows family of operating systems, the storage platform can replace the NTFS file system implemented in that operating system. Currently, applications access the services of the NTFS file system through the Win32 API exposed by the Windows family of operating systems.

然而,应认识到,完全用本发明的存储平台替代NTFS文件系统需要重新编码现有的基于Win32的应用程序,且那样的重新编码可能是不合需要的,因此本发明的存储平台提供与如NTFS等现有文件系统的某种互操作性是有益的。从而,在本发明的一个实施例中,存储平台使依赖于Win32编程模型的应用程序能同时访问存储平台的数据存储以及传统的NTFS文件系统的数据存储的内容。为此,存储平台使用作为Win32命名习惯的超集(superset)的命名习惯以便于容易的互操作性。此外,存储平台支持通过Win32 API访问存储在存储平台卷中的文件和目录。However, it should be recognized that completely replacing the NTFS file system with the storage platform of the present invention requires recoding existing Win32-based applications, and that such recoding may be undesirable, so the storage platform of the present invention provides Some kind of interoperability with existing filesystems would be beneficial. Therefore, in one embodiment of the present invention, the storage platform enables applications relying on the Win32 programming model to simultaneously access the contents of the data storage of the storage platform and the data storage of the traditional NTFS file system. To this end, the storage platform uses naming conventions that are a superset of the Win32 naming conventions to facilitate easy interoperability. In addition, Storage Platform supports accessing files and directories stored in Storage Platform volumes through Win32 API.

关于此功能的另外细节能在先前通过引用结合于此的有关专利中找到。Additional details on this functionality can be found in the related patents previously incorporated herein by reference.

K.存储平台APIK. Storage Platform API

存储平台包括API,它使应用程序能访问上面讨论的存储平台的特征和能力,并访问存储在数据存储中的项目。本节描述本发明的存储平台的存储平台API的一个实施例。关于此功能的细节能在通过引用结合于此的有关专利中找到,为方便起见在下面总结此信息的某一些。The storage platform includes APIs that enable applications to access the features and capabilities of the storage platform discussed above, and to access items stored in the data store. This section describes one embodiment of the storage platform API of the storage platform of the present invention. Details regarding this functionality can be found in the related patents incorporated herein by reference, some of this information is summarized below for convenience.

参考图18,包含文件夹是一个项目,它包含与其它项目的持有关系,且与通常概念的文件系统文件夹等价。每个项目“包含”在至少一个包含文件夹中。Referring to FIG. 18, a containing folder is an item that contains a holding relationship with other items, and is equivalent to a file system folder of a general concept. Every project is "contained" in at least one containing folder.

图19示出按本实施例的存储平台API的基本体系结构。存储平台API使用SQL客户机1900与本地数据存储302对话,并还使用SQL客户机1900与远程数存储(如数据存储340)对话。本地存储还可使用DQP(分布式查询处理器)或通过上述的存储平台同步服务(“Sync”)与远程数据存储340对话。存储平台API322还担当数据存储通知的桥接器API,将应用程序的下标传送到通知引擎,并如上所述将通知路由到应用程序(如应用程序350a、350b或350c)。在一个实施例中,存储平台API 322还定义受限制的“提供者”体系结构,使得它能访问MicrosoftExchange和AD中的数据。FIG. 19 shows the basic architecture of the storage platform API according to this embodiment. The storage platform API uses SQL client 1900 to talk to local data store 302 and also uses SQL client 1900 to talk to remote data stores such as data store 340 . Local storage can also talk to remote data storage 340 using DQP (Distributed Query Processor) or through the storage platform synchronization service ("Sync") described above. The storage platform API 322 also acts as a bridge API for data storage notifications, passing the application's subscript to the notification engine and routing the notifications to the application (such as application 350a, 350b, or 350c) as described above. In one embodiment, the storage platform API 322 also defines a restricted "provider" architecture that enables it to access data in Microsoft Exchange and AD.

图20示意性地表示存储平台API的各种组件。存储平台AP包括下列组件:(1)数据类2002,它代表存储平台元素和项目类型;(2)运行库架构2004,它管理对象的持久性并提供支持类2006;以及(3)工具2008,它用于从存储平台模式生成CLR类。Figure 20 schematically represents various components of the storage platform API. The storage platform AP includes the following components: (1) data classes 2002, which represent storage platform elements and item types; (2) runtime framework 2004, which manages object persistence and provides support classes 2006; and (3) tools 2008, It is used to generate CLR classes from stored platform schemas.

从给定模式得出的类的分层结构直接反应了该模式中类型的分层结构。作为例子,考虑在如图21A和图21B中所示的联系人模式中定义的项目类型。The hierarchy of classes derived from a given schema directly reflects the hierarchy of types in that schema. As an example, consider the item types defined in the Contacts schema as shown in Figures 21A and 21B.

图22示出操作中的运行库架构。运行库架构如下操作:Figure 22 shows the runtime architecture in operation. The runtime architecture operates as follows:

1.应用程序350a、350b或350c绑定到存储平台的项目。1. The application 350a, 350b or 350c is bound to an item of the storage platform.

2.架构2004创建对应于绑定项目的ItemContext对象2202,并将其返回给应用程序。2. The framework 2004 creates an ItemContext object 2202 corresponding to the bound item and returns it to the application.

3.应用程序提交在此ItemContext(项目上下文)上的Find(寻找),以得到项目的集合;返回的集合在概念上是对象图2204(由于关系)。3. The application submits a Find on this ItemContext to get a collection of items; the returned collection is conceptually an object graph 2204 (due to relationships).

4.应用程序改变、删除和插入数据。4. The application changes, deletes and inserts data.

5.应用程序通过调用Update()方法保存改变。5. The application saves the changes by calling the Update() method.

图23示出“FindAll(寻找所有)”操作的执行。Figure 23 shows the execution of the "FindAll" operation.

图24示出从存储平台模式生成存储平台API类的过程。Figure 24 shows the process of generating storage platform API classes from the storage platform schema.

图25示出文件API所基于的模式。存储平台API包括处理文件对象的名字空间。该名字空间被称为System.Storage.Files。System.Storage.Files中的类的数据成员直接反映了存储在存储平台存储中的信息;此信息是从文件系统对象的“升级”或使用Win32API本机地创建。System.Storage.Files名字空间具有两个类:FileItem(文件项目)和DirectoryItem(目录项目)。这些类的成员及其方法可通过审阅图25中的模式图来预测。FileItem和DirectoryItem是从存储平台API只读的。为修改它们,必须使用System.IO中的Win32API或类。Figure 25 shows the schema on which the file API is based. The Storage Platform API includes namespaces for working with file objects. The namespace is called System.Storage.Files. The data members of the classes in System.Storage.Files directly reflect the information stored in the storage platform's storage; this information is "upgraded" from the file system object or created natively using the Win32 API. The System.Storage.Files namespace has two classes: FileItem (file item) and DirectoryItem (directory item). Members of these classes and their methods can be predicted by reviewing the schema diagram in Figure 25. FileItem and DirectoryItem are read-only from the storage platform API. To modify them, you must use the Win32 API or classes in System.IO.

对于API,编程接口(或简称之为接口)可以被视为用于令代码的一个或多个片断能与由代码的一个或多个其它片断提供的功能进行通信或对其进行访问的任一机制、过程、协议。或者,编程接口可以被视为能够通信地耦合至其它计算机的一个或多个机制、方法、函数调用、模块等的系统的组件的一个或多个机制、方法、函数调用、模块、对象等。上述语句中的术语“代码片断”意在包括代码的一个或多个指令或代码行,并包括,如,代码模块、对象、子例程、函数等等,无论应用的术语是什么、或代码片断是否被单独编译、或代码片断是否被提供为源码、中间码或对象代码、代码片断是否在运行时系统或进程中使用、或它们是否位于同一或不同机器上或跨多个机器分布、或由代码片断表示的功能是否完全由软件、完全由硬件或硬件和软件的组合来实现。With respect to an API, a programming interface (or simply an interface) can be thought of as any interface used to enable one or more pieces of code to communicate with or access functionality provided by one or more other pieces of code. Mechanisms, processes, protocols. Alternatively, a programming interface may be considered one or more mechanisms, methods, function calls, modules, objects, etc. of a component of a system capable of communicatively coupling to one or more mechanisms, methods, function calls, modules, etc. of other computers. The term "code segment" in the above statement is intended to include one or more instructions or lines of code, and includes, for example, a code module, object, subroutine, function, etc., regardless of the term applied, or code whether the pieces are compiled separately, or whether the code pieces are provided as source code, intermediate code, or object code, whether the code pieces are used in a runtime system or process, or whether they are located on the same or different machines or distributed across multiple machines, or Whether the function represented by the code segment is realized entirely by software, entirely by hardware, or a combination of hardware and software.

概念上,编程接口可以被一般地察看,如图30A或图30B所示的。图30A示出了接口“接口1”为管道,第一和第二代码片断通过该管道进行通信。图30B示出了接口包括接口对象I1和I2(可以是或不是第一和第二代码片断的部分),它们令系统的第一和第二代码片断能通过介质M进行通信。在图30B中,可以认为接口对象I1和I2为同一系统的单独接口,并且也可以认为对象I1和I2加上介质M构成了接口。尽管图30A和30B示出了双向流程以及该流程的每一侧上的接口,某些实现可仅具有一个方向上的信息流(或如下所述没有信息流),或仅具有一侧的接口对象。作为示例而非局限,诸如应用编程或程序接口(API)、入口点、方法、函数、子例程、远程过程调用和组件对象模型(COM)接口等术语包含在编程接口的定义之内。Conceptually, the programming interface can be viewed generically, as shown in Figure 30A or Figure 30B. Figure 30A shows the interface "Interface 1" as a pipe through which the first and second code fragments communicate. FIG. 30B shows that the interface includes interface objects I1 and I2 (which may or may not be part of the first and second code fragments), which enable the first and second code fragments of the system to communicate through the medium M. In FIG. 30B , the interface objects I1 and I2 can be considered as separate interfaces of the same system, and it can also be considered that the objects I1 and I2 plus the medium M constitute an interface. Although Figures 30A and 30B show a bi-directional flow and interfaces on each side of the flow, some implementations may only have information flow in one direction (or no information flow as described below), or have an interface on only one side object. By way of example and not limitation, terms such as application programming or program interface (API), entry point, method, function, subroutine, remote procedure call, and Component Object Model (COM) interface are included within the definition of programming interface.

这类编程接口的方面可包括第一代码片断向第二代码片断发送信息的方法(其中,“信息”以其最广泛的意义使用,并包括数据、命令、请求等等);第二代码片断接收信息的方法;以及该信息的结构、序列、语法、组织、模式、定时和内容。在这一点上,只要信息以接口所定义的方式传输,底层传输介质本身可以对接口的操作不重要,无论该介质是有线还是无线,或两者的组合。在某些情况下,在常规意义上,当一个代码片断仅访问由第二代码片断执行的功能时,信息可不在一个或两个方向上传输,因为信息传输可以是或者通过另一机制(如,信息被放置在与代码片断之间的信息流分离的缓存、文件等中)或者不存在。这些方面的任一个或所有可以在给定的情况下重要,如,取决于代码片断是否是松耦合或紧耦合配置的系统的一部分,并且因此该列表应当被认为是说明性的而非限制。Aspects of such programming interfaces may include methods by which a first code segment sends information to a second code segment (where "information" is used in its broadest sense and includes data, commands, requests, etc.); the second code segment The method of receiving information; and the structure, sequence, syntax, organization, mode, timing and content of that information. In this regard, the underlying transmission medium itself may be immaterial to the operation of the interface, whether that medium is wired or wireless, or a combination of both, as long as the information is transmitted in the manner defined by the interface. In some cases, information may not be transferred in one or both directions, in the conventional sense, when one piece of code only accesses functionality performed by a second piece of code, because the information transfer may be by or through another mechanism such as , the information is placed in a cache, file, etc. that is separate from the flow of information between code snippets) or does not exist. Any or all of these aspects may be important in a given situation, eg, depending on whether the code snippet is part of a loosely or tightly coupled configured system, and thus this list should be considered illustrative rather than limiting.

编程接口的这一概念对本领域的技术人员是已知的,并且可以阅读上述本发明的详细描述而清楚这一概念。然而,有其它方法来实现编程接口,并且除非明显地排除,这些方法也由所附权利要求书包含在内。这些其它方法看似比图30A和30B的视图更精密或复杂,但是它们仍执行类似的功能来完成同一整体结果。现在简要描述编程接口的某些说明性替换实现。This concept of a programming interface is known to those skilled in the art and can be made clear by reading the above detailed description of the present invention. However, there are other ways of implementing the programming interface, and unless expressly excluded, these are also encompassed by the appended claims. These other methods may appear to be more sophisticated or complex than the views of Figures 30A and 30B, but they still perform similar functions to accomplish the same overall result. Some illustrative alternative implementations of the programming interface are now briefly described.

分解:可以通过将通信分裂成多个离散通信来间接地实现从一个代码片断到另一个的通信。这在图31A和31B中示意性地描述。如图所示,可以按照功能的可分组来描述某些接口。由此,可以分解图30A和30B的接口功能来达到相同的结果,如同可以在数学上提供24,或2乘2乘3乘2一样。因此,如图31A所示,可以细分由接口“接口1”提供的功能以将该接口的通信变换成多个接口“接口1A”、“接口1B”、“接口1C”等,而达到相同的结果。如图31B所示,由接口I1提供的函数可以被细分成多个接口I1a、I1b、I1c等,而达到相同的结果。类似地,从第一代码片断接收信息的第二代码片断的接口I2可以被分解成多个接口I2a、I2b、I2c等。当分解时,包括在第一代码片断中的接口的数量不需要匹配包括在第二代码片断中的接口的数量。在图31A或31B的任一情况下,接口“接口1”和I1的功能性精神分别与图30A和30B的保持相同。接口的分解也可遵从联合、通信和其它数学性质,使得分解较难识别。例如,命令操作可以是不重要的,并且因此由接口完成的功能可以在达到该接口之前由另一段代码或接口较好地完成,或者由系统的单独组件执行。此外,编程领域的普通技术人员可以理解有各种方式来作出不同的函数调用而达到相同的结果。Decomposition: Communication from one piece of code to another can be achieved indirectly by splitting the communication into multiple discrete communications. This is schematically depicted in Figures 31A and 31B. As shown, some interfaces may be described in terms of groupability of functions. Thus, the interface functions of FIGS. 30A and 30B can be broken down to achieve the same result, as can mathematically provide 24, or 2 by 2 by 3 by 2. Therefore, as shown in FIG. 31A, the functions provided by the interface "Interface 1" can be subdivided to transform the communication of this interface into a plurality of interfaces "Interface 1A", "Interface 1B", "Interface 1C", etc. to achieve the same the result of. As shown in FIG. 31B, the functions provided by interface I1 can be subdivided into multiple interfaces I1a, I1b, I1c, etc. to achieve the same result. Similarly, the interface I2 of a second code fragment receiving information from a first code fragment may be decomposed into a plurality of interfaces I2a, I2b, I2c, and so on. When decomposed, the number of interfaces included in the first code fragment need not match the number of interfaces included in the second code fragment. In either case of Figures 31A or 31B, the functional spirit of the interfaces "Interface 1" and I1 remains the same as that of Figures 30A and 30B, respectively. The decomposition of an interface may also obey association, communication, and other mathematical properties, making the decomposition more difficult to identify. For example, command operations may be trivial, and thus the functionality performed by an interface may be better performed by another piece of code or interface before reaching that interface, or performed by a separate component of the system. Furthermore, those of ordinary skill in the programming arts will understand that there are various ways to make different function calls to achieve the same result.

重定义:在某些情况下,可能忽略、添加或重定义编程接口的某些方面(如参数),而仍达到预期的结果。这在图32A和32B中示出。例如,假定图30A的接口“接口1”包括函数调用Square(input,precision,output)(平方),它包括三个参数,input(输入)、precision(精度)和output(输出),并且由第一代码片断向第二代码片断发布。如果中间参数precision在给定的情形下无关紧要,如图32A所示,它也可以被忽略或甚至由meaningless(无意义)(在这一情况下)参数来替换。也可以添加无关紧要的additional(另外)参数。在任一情况下,只要在输入由第二代码片断平方之后返回输出,就可以达到square(平方)的功能。Precision也有可能对计算系统的某一下游或其它部分是极有意义的参数;然而,一旦认识到precision对计算平方这一有限目的不是必需的,它可以被替换或忽略。例如,不是传递一个有效的pricision值,而是在不对结果产生不利影响的情况下传递诸如出生日期等无意义的值。类似地,如图32B所示,接口I1由接口I1′替换,它被重新定义来忽略或向接口添加参数。接口I2可类似地被重定义为接口I2′,它被重定义来忽略不必要的参数,或可在别处处理的参数。此处的要点是在某些情况下,编程接口可包括对某一目的而言所不需要的方面,诸如参数,因此可以忽略或重定义它们,或在别处处理它们用于其它目的。Redefinition: In some cases, it is possible to omit, add, or redefine certain aspects of a programming interface (such as parameters) while still achieving the desired result. This is shown in Figures 32A and 32B. For example, assume that the interface "interface 1" of Figure 30A includes a function call Square(input, precision, output) (square), which includes three parameters, input (input), precision (precision) and output (output), and is determined by the A code snippet is distributed to a second code snippet. If the intermediate parameter precision does not matter in a given situation, as shown in Figure 32A, it can also be ignored or even replaced by a meaningless (in this case) parameter. It is also possible to add insignificant additional (additional) parameters. In either case, the function of square is achieved as long as the output is returned after the input has been squared by the second code snippet. It is also possible that precision is a parameter of great interest to some downstream or other part of the computing system; however, once it is recognized that precision is not necessary for the limited purpose of computing squares, it can be replaced or ignored. For example, instead of passing a valid precision value, pass a meaningless value such as date of birth without adversely affecting the result. Similarly, as shown in Figure 32B, interface I1 is replaced by interface I1', which is redefined to omit or add parameters to the interface. Interface I2 can similarly be redefined as interface I2', which is redefined to omit unnecessary parameters, or parameters that can be handled elsewhere. The point here is that in some cases, a programming interface may include aspects, such as parameters, that are not required for a purpose, so they can be ignored or redefined, or handled elsewhere for other purposes.

内嵌代码:合并两个单独的代码模块的一些或全部功能也是可行的,使得它们之间的“接口”改变形式。例如,图30A和30B的功能可以被分别转化到图33A和33B的功能。在图33A中,图30A的先前的第一和第二代码片断被合并成包含两者的模块。在这一情况下,该代码片断仍可以彼此通信,但是该接口可以适用于更适合单个模块的形式。由此,例如,正式的调用(Call)和返回(Return)语句将不再必需,但是依照接口“接口1”的类似的处理或响应仍是有效的。类似地,如图33B所示,图30B的部分(或所有)接口I2可以内嵌地写入接口I1来形成接口I1″。如图所示,接口I2被划分成I2a和I2b,并且接口部分I2a内嵌在接口I1中书写代码来形成接口I1″。对于具体的示例,考虑图30B的接口1执行函数调用square(input,output),它由接口I2接收,在由第二代码片断处理传递到input的值(对其求平方)之后,它被使用output传递回已求平方的结果。在这一情况下,由第二代码片断执行的处理(对input求平方)可以由第一代码片断在不调用该接口的情况下执行。Inline code: It is also possible to merge some or all of the functionality of two separate code modules so that the "interface" between them changes form. For example, the functions of Figures 30A and 30B can be transformed to the functions of Figures 33A and 33B, respectively. In FIG. 33A, the previous first and second code fragments of FIG. 30A are merged into a module containing both. In this case, the code fragments can still communicate with each other, but the interface can be adapted to a form more suitable for a single module. Thus, for example, formal call (Call) and return (Return) statements will no longer be necessary, but similar processing or responses according to the interface "Interface 1" are still valid. Similarly, as shown in FIG. 33B, part (or all) of interface I2 of FIG. 30B can be embedded into interface I1 to form interface I1". As shown in the figure, interface I2 is divided into I2a and I2b, and the interface part I2a is embedded in interface I1 to write code to form interface I1″. For a concrete example, consider that interface 1 of Figure 30B executes a function call square(input, output), which is received by interface I2, which is used after the value passed to input is processed (squared) by the second code fragment output passes back the squared result. In this case, the processing performed by the second code fragment (squaring input) can be performed by the first code fragment without calling this interface.

脱离:可以通过将通信分裂成多个离散的通信来间接地完成从一个代码片断到另一个的通信。这在图34A和34B中示意性地描述。如图34A所示,提供了中间件的一个或多个片断(脱离接口(Divorce Interface),因为它们从原始的接口脱离的功能和/或接口函数),以转化第一接口“接口1”上的通信,使得它们符合不同的接口,在本情况下为“接口2A”、“接口2B”和“接口2C”。这可以在这样一种情况中完成,例如,依照“接口1”协议设计应用的已安装基础与如操作系统进行通信,但是然后改变该操作系统来使用不同的接口,在本情况下为接口“接口2A”、“接口2B”和“接口2C”。要点是改变了由第二代码片断使用的原始接口,使得它不再与第一代码片断所使用的接口兼容,因此使用中介来令旧接口和新接口兼容。类似地,如图34B所示,可以使用脱离接口DI1引入第三代码片断以从接口I1接收信息,并使用脱离接口DI2引入第三代码片断以向例如接口I2a和I2b发送接口功能,重新设计接口I2a和I2b以使用DI2,但是提供相同的功能性结果。类似地,DI1和DI2可共同工作以将图30B的接口I1和I2的功能转换成一新操作系统,而提供相同或类似的功能性结果。Disengagement: Communication from one piece of code to another can be done indirectly by splitting the communication into multiple discrete communications. This is schematically depicted in Figures 34A and 34B. As shown in Figure 34A, one or more fragments of middleware (Divorce Interface (Divorce Interface), because they are separated from the original interface function and/or interface function) are provided to transform the first interface "Interface 1" so that they comply with different interfaces, in this case "Interface 2A", "Interface 2B" and "Interface 2C". This can be done in a case where, for example, the installed base of applications is designed according to the "Interface 1" protocol to communicate with, for example, the operating system, but then the operating system is changed to use a different interface, in this case the interface " Interface 2A", "Interface 2B" and "Interface 2C". The gist is that the original interface used by the second code fragment is changed such that it is no longer compatible with the interface used by the first code fragment, so an intermediary is used to make the old interface compatible with the new interface. Similarly, as shown in Figure 34B, a third code fragment can be introduced using breakaway interface DI1 to receive information from interface I1, and use breakaway interface DI2 to introduce a third code snippet to send interface functions to, for example, interfaces I2a and I2b, redesigning the interface I2a and I2b use DI2, but provide the same functional results. Similarly, DI1 and DI2 may work together to translate the functionality of interfaces I1 and 12 of FIG. 30B into a new operating system, while providing the same or similar functional results.

重写:再一种可能的变化是动态地重写代码,使用别的东西来替换接口的功能,而仍达到相同的总体结果。例如,可以有一种系统,其中,向执行环境(如由.Net框架提供的环境、Java运行时环境或其它类似的运行时刻类型环境)中的及时(Just-in-Time)(JIT)编译器或解释器提供了中间语言(如Microsoft IL、JavaByteCode等)中呈现的代码片断。可以书写JIT编译器以动态地将通信从第一代码片断转化到第二代码片断,即,令它们符合第二代码片断(原始或不同的第二代码片断)所需要的不同接口。这在图35A和35B中有描述。如图35A中所看见的,这一方式类似于上述的脱离情形。它可以在这样一种情况下完成,例如,依照“接口1”协议设计应用的已安装基础操作系统进行通信,然后改变该操作系统以使用不同的接口。JIT编译器可以用于令已安装基础应用的空中通信符合操作系统的新接口。如图35B所描述的,可以应用这一动态重写接口的方法以进行动态分解,或者改变接口。Rewriting: Yet another possible variation is to dynamically rewrite the code, replacing the functionality of the interface with something else, while still achieving the same overall result. For example, there may be a system in which a Just-in-Time (JIT) compiler in an execution environment such as that provided by the .Net framework, the Java runtime environment, or other similar runtime-type environment Or an interpreter provides code snippets rendered in an intermediate language such as Microsoft IL, JavaByteCode, etc. A JIT compiler can be written to dynamically translate communications from a first code fragment to a second code fragment, ie to conform them to different interfaces required by the second code fragment (either the original or a different second code fragment). This is depicted in Figures 35A and 35B. As seen in Figure 35A, this approach is similar to the disengagement situation described above. It can be done, for example, where the installed base operating system of an application is designed to communicate in accordance with the "interface 1" protocol, and then the operating system is changed to use a different interface. A JIT compiler can be used to conform the air communication of the installed base application to the new interface of the operating system. As depicted in FIG. 35B, this method of dynamically rewriting an interface can be applied to dynamically decompose, or change the interface.

应当注意,上述通过替换实施例实现与接口相同或相似的结果的情形也可以以各种方式串行、并行或与其它干预代码组合。由此,上文呈现的替换实施例并非相互穷尽,并且可以被混合、匹配和组合以产生与图30A和30B中所呈现的一般情形相同或等效的情形。也应当注意,如同大多数编程构造,本发明可能未描述达到与接口相同或相似的功能的其它类似的方式,但是它们仍由本发明的精神和范围来表示,即,应当注意,它至少部分地是由作为接口的值的基础的接口表示的功能或由其启用的有利结果。It should be noted that the above-mentioned situation of achieving the same or similar results as the interface through alternative embodiments can also be serialized, paralleled, or combined with other intervening codes in various ways. Thus, the alternative embodiments presented above are not mutually exhaustive and can be mixed, matched and combined to create the same or equivalent situations as the general situation presented in FIGS. 30A and 30B . It should also be noted that, like most programming constructs, this invention may not describe other similar ways of achieving the same or similar functionality as an interface, but they are nonetheless represented by the spirit and scope of this invention, i.e., it should be noted that it is at least partially is a function represented by, or an advantageous consequence enabled by, an interface upon which its value is based.

III.扩展和继承III. Extension and Inheritance

本发明的一个基础概念是利用项目,它在一定程度上用由模式描述的并由硬件/软件接口系统实施的复杂结构、行为和操作来模型化真实世界应用对象。为提供丰富的子类型化功能,并且在本发明的各种实施例中,硬件/软件接口系统(为了方便,在下文中将简称为“WinFS”)可提供一种机制,通过它可以使用“扩展”来扩展项目(和项目类型)。扩展提供附加的数据结构(属性,关系等)到已经存在的项目类型结构。A fundamental concept of the present invention is to utilize projects, which model real-world application objects in part with complex structures, behaviors and operations described by schemas and implemented by hardware/software interface systems. To provide rich subtyping capabilities, and in various embodiments of the present invention, a hardware/software interface system (hereinafter referred to simply as "WinFS" for convenience) may provide a mechanism by which "extended " to extend the project (and project type). Extensions provide additional data structures (attributes, relationships, etc.) to an already existing item type structure.

如前面在本文中讨论的(并且特别是在章节II.E.6.(a)和II.F.3中讨论的),尽管是要为存储平台提供模式的初始集合,但在至少有些实施例中存储平台允许客户包括独立的软件销售商(ISV)创建新的模式(即,新的项目和嵌套元素类型)。由于由存储平台模式的初始集合定义的项目类型或嵌套元素类型不精确地符合ISV应用的需求,因此有必要允许ISV定制类型。这是用扩展的概念来允许的。扩展是强类型化实例但(a)它们不能独立地存在并且(b)它们必须附着于项目或嵌套元素。而且,除了解决模式可扩展性的需求,扩展还要解决“多重类型化”问题。由于在有些实施例中存储平台不支持多重继承或者重叠子类型,因此应用可以使用扩展作为模型化重叠类型实例的方式(例如,一个文档可以是“合法文档”,也可以是“安全文档”)。As discussed earlier in this paper (and in particular in Sections II.E.6.(a) and II.F.3), although it is intended to provide an initial set of schemas for storage platforms, at least some implementations The example storage platform allows customers including independent software vendors (ISVs) to create new schemas (ie, new items and nested element types). Since the item types or nested element types defined by the initial set of storage platform schemas do not exactly meet the needs of ISV applications, it is necessary to allow ISVs to customize the types. This is allowed with the concept of extension. Extensions are strongly typed instances but (a) they cannot exist independently and (b) they must be attached to an item or nested element. Moreover, in addition to addressing the need for schema extensibility, extensions also address the "multiple typing" issue. Since the storage platform does not support multiple inheritance or overlapping subtypes in some embodiments, applications can use extensions as a way of modeling instances of overlapping types (for example, a document can be a "legal document" or a "safe document") .

A.类型系统A) type system

在本发明的各种实施例中,WinFS类型系统提供一种定义数据的结构的机制。类型系统用于表示存储在WinFS中的数据。WinFS类型在WinFS模式中声明。WinFS模式定义一个名字空间,它用作一组类型和其它WinFS模式元素的逻辑分组。WinFS模式可使用WinFS模式定义语言(SDL)(它可能使用XML语言)来声明。下面是一个可能的模式声明的例子:In various embodiments of the invention, the WinFS type system provides a mechanism to define the structure of data. A type system is used to represent data stored in WinFS. WinFS types are declared in WinFS schemas. A WinFS schema defines a namespace that serves as a logical grouping for a set of types and other WinFS schema elements. WinFS schemas can be declared using the WinFS Schema Definition Language (SDL), which may use the XML language. The following is an example of a possible schema declaration:

<Schema Namespace=″System.Storage″><Schema Namespace="System.Storage">

   Type definitionsType definitions

</Schema></Schema>

WinFS模式也用作类型版本化单元。WinFS定义若干引导系统的系统模式。这些是System.Storage模式名字空间,它包含系统中根类型的类型声明,和System.Storage.WinFS模式名字空间,它声明系统中所有基本标量类型。WinFS schemas are also used as type versioning units. WinFS defines several system modes for booting the system. These are the System.Storage schema namespace, which contains type declarations for the root types in the system, and the System.Storage.WinFS schema namespace, which declares all the basic scalar types in the system.

WinFS类型系统声明一组简单的标量类型。这些类型用作WinFS类型系统中所有其它类型的最基本的构件块。这些类型在模式名字空间System.Storage.WinFS中声明。下面的表定义基本类型集合。  WinFS类型  受管SQL类型   CLR类型 描述  String   SqlString   String 可变长度Unicode数据具有最大长度为2^31个字符长度。使用“max”(最大)关键字长度可以从1-4000个字符固定或者不受约束。  Binary   SqlBinary   Byte[] 可变长度的二进制数据具有最大长度为2^32个字节长度。使用“max”(最大)关键字长度可以从1-8000个字节固定或者不受约束。  Boolean   SqlBoolean   Boolean 能够为NULL的布尔值  Byte   SqlByte   Byte 单个无符号字节  Int16   SqlInt16   Int16 从-2^15(-32,768)到2^15-1(32,767)的整数数据  Int32   SqlInt32   Int32 从-2^31(-2,147,483,648)到2^31-1(2,147,483,647)的整数(整数)数据  Int64   SqlInt64   Int64 从-2^63(-9223372036854775808)到2^63-1(9223372036854775807)的整数(整数)数据  Double   SqlDouble   Double 浮点精度数数据从-3.40E+38到3.40E+38  Single   SqlSingle   Single 浮点精度数数据从-1.79E+308到1.79E+308  Decimal   SqlDecimal   Decimal SQLDecimal具有比CLRDecimal类型较大的值范围。在存储器中精度总是28个数   字且比例为0。   DateTime   SqlDateTime   DateTime   日期和时间,从1753年1月1日到9999年12月31日,具有三百分之一秒或3.33秒的精确度   Guid   SqlGuid   Guid   全球唯一标识符(GUID)   Xml   SqlXmlReader   XmlReader   对于里程碑B,WinFS.Xml将被映射到“String”类型。真正的XML数据类型支持预期在里程碑C中。   Stream   TBD   TBD   二进制数据类型,使用支持文件流的存储用于有效访问。这个类型将在里程碑C中支持。 The WinFS type system declares a simple set of scalar types. These types serve as the most basic building blocks for all other types in the WinFS type system. These types are declared in the schema namespace System.Storage.WinFS. The following table defines the collection of primitive types. WinFS type Managed SQL Types CLR type describe String SqlString String Variable-length Unicode data has a maximum length of 2^31 characters in length. Use "max" (maximum) keyword length can be fixed or unlimited from 1-4000 characters. Binary SqlBinary Byte[] Variable-length binary data has a maximum length of 2^32 bytes in length. Using the "max" (maximum) keyword length can be fixed or unlimited from 1-8000 bytes. Boolean SqlBoolean Boolean Boolean value that can be NULL Byte SqlByte Byte single unsigned byte Int16 SqlInt16 Int16 Integer data from -2^15 (-32, 768) to 2^15-1 (32, 767) Int32 SqlInt32 Int32 Integer (integer) data from -2^31 (-2, 147, 483, 648) to 2^31-1 (2, 147, 483, 647) Int64 SqlInt64 Int64 Integer (integer) data from -2^63 (-9223372036854775808) to 2^63-1 (9223372036854775807) Double SqlDouble Double Floating point precision data from -3.40E+38 to 3.40E+38 Single SqlSingle Single Floating point precision data from -1.79E+308 to 1.79E+308 Decimal SqlDecimal Decimal SQLDecimal has a larger range of values than the CLRDecimal type. Precision is always 28 numbers in memory word and the scale is 0. DateTime SqlDateTime DateTime Date and time, from January 1, 1753 to December 31, 9999, with an accuracy of three hundredths of a second or 3.33 seconds Guid SqlGuid Guid Globally Unique Identifier (GUID) Xml SqlXmlReader XmlReader For Milestone B, WinFS.Xml will be mapped to "String" type. True XML datatype support is expected in milestone C. Stream TBD TBD Binary data type, used for efficient access using file stream-enabled storage. This type will be supported in milestone C.

WinFS枚举是一个标量类型,它声明一组命名的常数,称为值列表。枚举类型可以在可以使用标量类型的任何地方使用。这里是枚举声明的例子:A WinFS enumeration is a scalar type that declares a named set of constants, called a list of values. Enumerated types can be used anywhere scalar types can be used. Here is an example of an enum declaration:

<Enumeration Name=″Gender″><Enumeration Name="Gender">

   <Value Name=″Male″/><Value Name="Male"/>

   <Value Name=″Female″/><Value Name="Female"/>

</Enumeration></Enumeration>

枚举值是基于零的。在上面的例子中Gender.Male表示值0而Gender.Female表示值1。Enumeration values are zero-based. In the above example Gender.Male represents a value of 0 and Gender.Female represents a value of 1.

复杂类型是由名字和一组属性定义的。属性是类型的成员字段,并且是由名字和类型定义的。属性的类型可以是标量(包括枚举类型)或者可以是其它复杂类型。可以用作属性的类型的WinFS类型被称为嵌套类型。嵌套类型的实例可以只作为复杂WinFS类型的属性的属性值存在--该实例嵌套在一个复杂类型的实例内。嵌套类型是使用NestedType(嵌套类型)模式元素声明的。这里是有效类型声明的一些例子:Complex types are defined by a name and a set of properties. Properties are member fields of a type and are defined by name and type. The type of an attribute can be scalar (including enumerated types) or can be other complex types. WinFS types that can be used as types for attributes are called nested types. An instance of a nested type can only exist as an attribute value of an attribute of a complex WinFS type -- the instance is nested within an instance of a complex type. Nested types are declared using the NestedType (nested type) schema element. Here are some examples of valid type declarations:

<NestedType Name=″Address″BaseType=″System.Storage.NestedObject″><NestedType Name="Address"BaseType="System.Storage.NestedObject">

  <Property Name=″Street″Type=″WinFS.String″Size=″256″<Property Name="Street"Type="WinFS.String"Size="256"

  Nullable=″false″/>Nullable="false"/>

     <Property Name=″City″Type=″WinFS.String″Size=″256″<Property Name="City"Type="WinFS.String"Size="256"

  Nullable=″false″/>Nullable="false"/>

     <Property Name=″State″Type=″WinFS.String″Size=″256″<Property Name="State"Type="WinFS.String"Size="256"

  Nullable=″false″/>Nullable="false"/>

     <Property Name=″Country″Type=″WinFSString″Size=″256″<Property Name="Country"Type="WinFSString"Size="256"

  Nullable=″false″/>Nullable="false"/>

  </NestedType></NestedType>

  <ItemType Name=″Person″BaseType=″System.Storage.Item″><ItemType Name="Person"BaseType="System.Storage.Item">

     <Property Name=″Name″Type=″WinFS.String″Size=″256″<Property Name="Name"Type="WinFS.String"Size="256"

  Nullable=″false″/>Nullable="false"/>

     <Property Name=″Age″Type=″WinFS.Int32″<Property Name="Age"Type="WinFS.Int32"

  Nullable=″false″Default=″1″/>Nullable="false"Default="1"/>

     <Property Name=″Picture″Type=″WinFS.Binary″Size=″max″/><Property Name="Picture"Type="WinFS.Binary"Size="max"/>

     <Property Name=″Addresses″Type=″MultiSet″MultiSetOfType=″Address″/><Property Name="Addresses"Type="MultiSet"MultiSetOfType="Address"/>

  </ItemType></ItemType>

对于类型String和Binary的属性,必须指定Size(尺寸)属性。这个属性指定包含在Property(属性)中的值的最大尺寸。属性可以使用Nullable属性可选地声明能够为null的约束。这个属性的值为“false(假)”表示应用在创建该类型的实例时必须提供一个值。另一个可选的Property(属性)属性是Default(默认)属性,它指定Property(属性)的默认值。这个值将在实例创建时被赋给Property(属性),如果应用没有提供它的话。For properties of type String and Binary, the Size attribute must be specified. This attribute specifies the maximum size of the value contained in the Property. Properties can optionally declare a nullable constraint using the Nullable attribute. A value of "false" for this attribute indicates that the application must provide a value when creating an instance of this type. Another optional Property attribute is the Default attribute, which specifies the default value for the Property. This value will be assigned to the Property when the instance is created, if the application does not provide it.

在上例中Addresses(地址)属性是MultiSet(多重设置)类型的。MultiSet(多重设置)类型的属性也称为多值属性。在本例中MultiSet(多重设置)包含一组Address(地址)类型的实例。MultiSet(多重设置)与集合相似。它可以包含零或多个复杂类型的实例。在MultiSet(多重设置)中的实例的类型必须是复杂嵌套类型。MultiSet(多重设置)类型不支持WinFS标量类型(包括枚举类型)的实例。MultiSet(多重设置)类型的属性不能是能够为null的并且不能有默认值。In the above example the Addresses property is of type MultiSet. MultiSet (multiple settings) type attributes are also known as multi-valued attributes. In this example the MultiSet contains a set of instances of type Address. A MultiSet is similar to a Set. It can contain zero or more instances of complex types. The type of the instance in the MultiSet must be a complex nested type. The MultiSet type does not support instances of WinFS scalar types (including enumerated types). Properties of type MultiSet cannot be nullable and cannot have a default value.

WinFS支持类型的单一继承。在WinFS中的所有类型必须从一个且只能在一个WinFS类型上继承。继承的类型称为导出类型并且从其导出这个类型的类型称为基类型。在WinFS声明元素中的BaseType(基类型)属性中的基类型。假定类型A从基类型B导出,而B进而从类型C导出。类型C是类型A和类型B的祖先类型。类型A是类型B和C的子孙类型。存储在WinFS中的数据实例始终是单一类型的实例。然而可以将数据实例视为一组包含该类型及其所有祖先类型的类型的实例。对于作为这样一组类型的实例的数据实例,调用不是在最后导出(most-derived)类型的组中的任何其它类型的祖先的类型。单独类型化的数据实例是就是一个最后导出类型的实例。通常,将单独类型化的元素的最后导出类型称为它的类型。导出类型继承在其基类型中声明的所有属性。导出类型可以声明新的属性但不能覆盖在基类型中定义的属性。在导出类型中声明的属性必须不使用与基类型的属性相同的名字。WinFS supports single inheritance of types. All types in WinFS must inherit from one and only one WinFS type. The inherited type is called a derived type and the type from which this type is derived is called a base type. The base type in the BaseType attribute of the WinFS declaration element. Suppose type A derives from base type B, which in turn derives from type C. Type C is the ancestor type of Type A and Type B. Type A is a descendant of types B and C. Data instances stored in WinFS are always instances of a single type. However, a data instance can be thought of as a set of instances of a type that includes that type and all its ancestor types. For a data instance that is an instance of such a set of types, invoke a type that is not an ancestor of any other type in the set of most-derived types. A single typed data instance is an instance of the last derived type. In general, the last derived type of an individually typed element is referred to as its type. A derived type inherits all properties declared in its base type. Derived types can declare new properties but cannot override properties defined in the base type. Properties declared in derived types must not use the same name as properties of the base type.

在数据模型中继承的主要优点来自于继承类型的可代换性。考虑下面的例子:The main advantage of inheritance in the data model comes from the substitutability of inherited types. Consider the following example:

  <NestedType Name=″Name″BaseType=″System.Storage.NestedObject″><NestedType Name="Name"BaseType="System.Storage.NestedObject">

    <Property Name=″FirstName″Type=″WinFS.String″/><Property Name="FirstName"Type="WinFS.String"/>

    <Property Name=″LastName″Type=″WinFS.String″/><Property Name="LastName"Type="WinFS.String"/>

  </Nestedype></Nestedype>

  <NestedType Name=″NameWithMiddleInitial″BaseType=″Name″><NestedType Name="NameWithMiddleInitial"BaseType="Name">

    <Property Name=″MiddleInitial″Type=“WinFS.String″/><Property Name="MiddleInitial"Type="WinFS.String"/>

  </NestedType></NestedType>

  <NestedType Name=″Person″BaseType=″System.Storage.Item″><NestedType Name="Person" BaseType="System.Storage.Item">

    <Property Name=″RealName″Type=″Name″/><Property Name="RealName"Type="Name"/>

    <Property Name=″OtherNames″Type=″MultiSet″MultiSetOfType=″Name″/><Property Name="OtherNames"Type="MultiSet"MultiSetOfType="Name"/>

  </NestedType></NestedType>

在上面的例子中,类型Person(个人)具有类型为Name(名字)的属性RealName(真实名字)和作为一组Name(名字)类型的属性OtherNames(其它名字)。通常要求属性RealName(真实名字)只有其类型为Name(名字)的实例。然而,通过继承,允许单值实例为RealName(真实名字)的值,只要Name(名字)类型是该元素的最后导出类型的祖先之一。因此,NameWithMiddleInitial(具有中间首字母的名字)的实例将允许为属性RealName(真实名字)的值。In the example above, the type Person has an attribute RealName of type Name and an attribute OtherNames of type Name as a set. It is usually required that the attribute RealName (real name) has only instances of its type Name (name). However, through inheritance, single-valued instances are allowed to be the value of RealName as long as the Name type is one of the ancestors of the element's last derived type. Thus, an instance of NameWithMiddleInitial (name with middle initial) will allow to be the value of property RealName (real name).

扩展相同的规则以设置属性。属性OtherNames(其它名字)包含一组元素。对于每个单独类型化实例(它们是该集合的一个成员),该实例的最后导出类型必须具有Name(名字)作为它的祖先之一。因此,在OtherNames(其它名字)集合中的一些实例可以是Name(名字)类型的实例,尽管其它实例可能是NameWithMiddleInitial(具有中间首字母的名字)类型的实例。Extend the same rules to set properties. The attribute OtherNames (other names) contains a set of elements. For each individually typed instance that is a member of the set, that instance's last derived type must have Name as one of its ancestors. Thus, some instances in the set OtherNames may be instances of type Name, while others may be instances of type NameWithMiddleInitial (names with middle initials).

继承也支持方便的查询,因为有可能在WinFS系统中找出某个类型的所有实例。当查找一个类型的所有实例时,查询引擎也将返回所有其最后导出类型是这个类型的子孙的实例。然而,只有项目、扩展和关系类型(不是属性类型)支持这些操作。对于嵌套类型(又叫嵌套元素、属性或复杂属性类型),只有包含在单个多重设置属性内的实例支持该操作。Inheritance also supports convenient queries, since it is possible to find all instances of a certain type in the WinFS system. When looking up all instances of a type, the query engine will also return all instances whose last derived type is a descendant of this type. However, only item, extension, and relationship types (not property types) support these operations. For nested types (aka nested element, attribute, or complex attribute types), only instances contained within a single multiset attribute support this operation.

B.类型家族B. Type Families

总之,WinFS类型系统定义四个不同的类型系列:In summary, the WinFS type system defines four distinct type families:

·嵌套元素类型(又叫嵌套类型或属性类型)Nested element types (also known as nested types or attribute types)

·项目类型·project type

·关系类型·Relationship type

·扩展类型·Extension type

每个类型系列在WinFS类型系统中具有一个不同的属性和用法集合。System.Storage模式名字空间声明四种类型用作每个类型系列的根类型。下面的章节详细地描述这些类型系统。Each type family has a different set of attributes and usages in the WinFS type system. The System.Storage schema namespace declares four types that serve as the root types for each type family. The following sections describe these type systems in detail.

1.嵌套元素类型1. Nested element types

不像其它WinFS类型系列,嵌套类型可以用作复杂WinFS类型的属性的类型。嵌套类型的实例只可以嵌套在另一个复杂类型的实例内。然而,嵌套类型的实例不能被全局查询--即,应用不能编写一个简单的查询来返回在WinFS存储器中一个给定嵌套类型的所有实例。Unlike other families of WinFS types, nested types can be used as types for attributes of complex WinFS types. An instance of a nested type can only be nested inside an instance of another complex type. However, instances of nested types cannot be queried globally—that is, an application cannot write a simple query that returns all instances of a given nested type in WinFS storage.

2.项目类型2. Project type

WinFS项目是其祖先是System.Storage.Item类型的类型的实例。这个类型是作为项目类型系列的根的复杂类型。System.Storage.Item声明了一个名为ItemID(项目ID)类型为Guid的属性。这是项目的一个特殊属性,用作项目的主关键字。保证这个属性的值对于一个给定WinFS存储器中的项目是唯一的。这个属性是不能够为null的,并且必须由应用在创建项目类型的实例时赋值。ItemID(项目ID)属性也是不可变的--它从不改变并且必须不被重复使用。A WinFS item is an instance of a type whose ancestor is of type System.Storage.Item. This type is the complex type that is the root of the project type family. System.Storage.Item declares a property named ItemID (item ID) of type Guid. This is a special property of an item and is used as the item's primary key. The value of this property is guaranteed to be unique for a given item in WinFS storage. This property cannot be null and must be assigned by the application when creating an instance of the item type. The ItemID (item ID) property is also immutable -- it never changes and must not be reused.

查询引擎可以返回WinFS存储器中给定项目类型的实例。这个查询可返回该类型及其所有类型子孙类型的所有实例。本文稍后描述项目在WinFS系统操作语义中具有的中心角色。The query engine can return instances of a given item type in WinFS storage. This query returns all instances of this type and all of its descendant types. The central role that items have in the operational semantics of the WinFS system is described later in this document.

3.关系类型3. Relationship type

关系类型使关系能够存在于项目之间。WinFS关系类型描述二进制关系,其中指定一个项目为源并且指定另一个项目为目标。关系是其祖先是System.Storage.Relationship类型的类型的实例。这个类型是关系类型层次结构的根。System.Storage.Relationship类型声明下列属性:Relationship types enable relationships to exist between items. WinFS relationship types describe binary relationships where one item is designated as the source and another item is designated as the target. A relationship is an instance of a type whose ancestor is of type System.Storage.Relationship. This type is the root of the relationship type hierarchy. The System.Storage.Relationship type declares the following properties:

·SourceItemID(源项目ID)--作为关系实例的源的项目的ItemID(项目ID)· SourceItemID (source item ID) - the ItemID (item ID) of the item that is the source of the relation instance

·RelationshipID(关系ID)--相对于源项目的关系的唯一标识符;(SourceItemID(源项目ID),RelationshipID(关系ID))对形成WinFS中关系的主关键字· RelationshipID (relationship ID) -- relative to the unique identifier of the relationship of the source item; (SourceItemID (source item ID), RelationshipID (relationship ID)) pair forms the primary key of the relationship in WinFS

·TargetItemId(目标项目ID)--关系的目标的ItemID(项目ID)· TargetItemId (target item ID)--ItemID (item ID) of the target of the relationship

·Mode(方式)--3种可能的关系实例方式之一:Holding(持有)、Embedding(嵌入)或Reference(引用)Mode (way) - one of 3 possible relationship instance modes: Holding (holding), Embedding (embedding) or Reference (quoting)

·Name(名字)--包含关系的名字用于持有关系Name (name) - the name of the containing relationship used to hold the relationship

·IsHidden(是否隐藏)--布尔属性,应用可以可选地使用它来过滤不需要被显示的关系· IsHidden (whether hidden) - Boolean attribute, the application can optionally use it to filter relations that do not need to be displayed

SourceItemID(源项目ID)、RelationshipID(关系ID)、TargetItemId(目标项目ID)和Mode(方式)属性值是不可变的。它们在关系实例创建时间被赋值并且不能改变。SourceItemID (source item ID), RelationshipID (relationship ID), TargetItemId (target item ID) and Mode (way) property values are immutable. They are assigned at relation instance creation time and cannot be changed.

关系类型声明为具有下列附加约束的复杂类型:A relational type is declared as a complex type with the following additional constraints:

·源和目标端点规范:每个端点指定名字和被引用项目的类型· Source and target endpoint specification: each endpoint specifies the name and type of the referenced item

·关系类型的实例的所允许方式:关系实例不能具有在关系声明中不允许的Mode(方式)属性的值Allowed modes for instances of relation types: relation instances cannot have values for the Mode attribute that are not allowed in relation declarations

这里是关系声明的例子:Here is an example of a relationship declaration:

      <RelationshipType Name=″DocumentAuthor″<RelationshipType Name="DocumentAuthor"

       BaseType=″System.Storage.Relationship″`` BaseType="System.Storage.Relationship"

       AllowsHolding=″true″AllowsHolding="true"

       AllowsEmbedding=″false″AllowsEmbedding="false"

       AllowsReference=″true″>  AllowsReference="true">

         <Source Name=″Document″Type=″Core.Document″/><Source Name="Document"Type="Core.Document"/>

         <Target Name=″Author″Type=″Core.Contact″/><Target Name="Author"Type="Core.Contact"/>

         <Property Name=″Role″Type=″WinFS.String″/><Property Name="Role"Type="WinFS.String"/>

         <Property Name=″DisplayName″Type=″WinFS.String″/><Property Name="DisplayName"Type="WinFS.String"/>

      </RelationshipType></RelationshipType>

DocumentAuthor(文档作者)关系是用实例对Holding(持有)或Reference(引用)的限制来声明的。这意味着DocumentAuthor(文档作者)关系的实例可以有具有值Mode=″Reference″或Mode=″Holding″的实例。不允许具有值Mode=″Embedding″的实例。The DocumentAuthor (document author) relationship is declared with the restriction of the instance to Holding (holding) or Reference (reference). This means that instances of the DocumentAuthor relationship can have instances with values Mode="Reference" or Mode="Holding". Instances with value Mode="Embedding" are not allowed.

关系声明项目类型“Core.Document”的名为“Document(文档)”的源端点和项目类型“Core.Contact”的目标端点。关系还声明了两个附加属性。关系实例与项目分开地存储和访问。所有关系实例可从全局扩展视图访问。可以编写一个查询来返回给定关系类型的所有实例。A relationship declares a source endpoint named "Document" of item type "Core.Document" and a target endpoint of item type "Core.Contact". The relationship also declares two additional properties. Relationship instances are stored and accessed separately from items. All relationship instances are accessible from the global extension view. A query can be written to return all instances of a given relationship type.

给定一个项目,所有该项目为源的关系可以基于关系的SourceItemID(源项目ID)属性来枚举。同样,对于一个给定的项目,在同一存储器中该项目为目标的所有关系可以使用关系的TargetItemId(目标项目ID)属性来枚举。Given an item, all relationships for which that item is a source can be enumerated based on the relationship's SourceItemID property. Likewise, for a given item, all relationships in the same store that target that item can be enumerated using the relationship's TargetItemId property.

a)关系语义a) Relational Semantics

下面的章节描述不同关系实例方式的语义:The following sections describe the semantics of the different ways of instantiating relationships:

持有关系:持有关系用于模型化目标项目的基于引用计数的寿命管理。一个项目可以是零或多个关系到项目的源端点。不是嵌入的项目的项目可以是一个或多个持有关系的目标。目标项目必须与关系实例在同一存储器中。Holding Relationships: Holding relationships are used to model the reference count-based lifespan management of the target project. A project can have zero or more source endpoints related to the project. An item that is not an embedded item can be the target of one or more holding relationships. The target project must be in the same storage as the relation instance.

持有关系实施目标端点的寿命管理。持有关系实例和作为目标的项目的创建是原子操作。可以创建以同一项目为目标的附加的持有关系。当最后一个具有一个给定项目作为目标端点的持有关系实例被删除时,目标项目也被删除。Holding a relationship enforces lifetime management of the target endpoint. The creation of the holding relation instance and the item as the target is an atomic operation. Additional holding relationships can be created targeting the same project. When the last holding relationship instance with a given item as target endpoint is deleted, the target item is also deleted.

在关系声明中指定的端点项目的类型将在关系的实例创建时被实施。端点项目的类型在建立关系之后不能被改变。The type of endpoint item specified in the relationship declaration will be enforced when the relationship instance is created. The type of an endpoint item cannot be changed after the relationship is established.

持有关系在形成WinFS项目名字空间时扮演一个关键角色。所有持有关系参与名字空间声明。在关系声明中的“Name(名字)”属性相关于源项目声明目标项目的名字。这个相关名字对于所有源自一个给定项目的持有关系是唯一的并且不能是null。这个相关名字的有序列表从根项目开始到一个形成项目的完整名字的给定项目。Holding relationships play a key role in forming the WinFS project namespace. All holding relationships participate in namespace declarations. The "Name" attribute in the relationship declaration declares the name of the target project relative to the source project. This relative name is unique for all holding relationships originating from a given project and cannot be null. This ordered list of relative names starts from the root item to a given item forming the full name of the item.

持有关系形成有向非循环图(DAG)。当持有关系创建时,系统保证不产生循环,因而保证项目名字空间形成DAG。对于WinFS名字空间和项目路径的更多信息,参考“WinFS名字空间”规范。Holding relationships form a directed acyclic graph (DAG). When the holding relationship is created, the system ensures that no loops are generated, thus ensuring that the project namespace forms a DAG. For more information on WinFS namespaces and project paths, refer to the "WinFS Namespaces" specification.

嵌入关系:嵌入关系模型化目标项目的寿命的独占控制的概念。它们支持复合项目的概念。嵌入关系实例和作为目标的项目的创建是原子操作。一个项目可以是零或多个嵌入关系的源。然而,一个项目可以是一个且仅一个嵌入关系的目标。作为嵌入关系的目标的项目不能是持有关系的目标。目标项目必须与关系实例在同一存储器中。Embedded Relationships: Embedded relationships model the notion of exclusive control over the lifetime of a target item. They support the concept of compound items. The creation of an embedded relation instance and an item as a target is an atomic operation. An item can be the source of zero or more embedded relationships. However, an item can be the target of one and only one embedded relation. An item that is the target of an embedded relationship cannot be the target of a holding relationship. The target project must be in the same storage as the relation instance.

在关系声明中指定的端点项目类型将在关系的实例被创建时实施。端点项目的类型不能在建立关系之后改变。嵌入关系不参与WinFS名字空间。嵌入关系的Name(名字)属性值必须是null。The endpoint item type specified in the relationship declaration will be implemented when an instance of the relationship is created. The type of an endpoint item cannot be changed after the relationship is established. Embedding relationships do not participate in WinFS namespaces. The value of the Name property of an embedded relationship must be null.

引用关系:引用关系不控制它引用的项目的寿命。引用关系不保证目标的存在,也不保证如在关系声明中指定的目标类型。这意味着引用关系可以是虚悬的。而且,引用关系可以引用其它WinFS存储器中的项目。Reference relationship: A reference relationship does not control the lifetime of the item it references. A referential relationship does not guarantee the existence of the target, nor the target type as specified in the relationship declaration. This means that reference relationships can be dangling. Also, reference relationships can refer to items in other WinFS storage.

在WinFS中引用关系将用于模型化项目之间大多数非寿命管理的关系。由于不强制目标的存在,因此引用关系便于模型化松耦合的关系。引用关系可以用于在其它WinFS存储器(包括存储在其它机器上)中的目标项目。嵌入关系不参与WinFS名字空间。嵌入关系的Name(名字)属性的值必须是null。Reference relationships in WinFS will be used to model most non-lifetime managed relationships between items. Reference relationships are convenient for modeling loosely coupled relationships since the existence of the target is not enforced. Reference relationships can be used for target items in other WinFS storage (including storage on other machines). Embedding relationships do not participate in WinFS namespaces. The value of the Name attribute of an embedded relationship must be null.

b)关系规则和约束b) Relational Rules and Constraints

下面附加的规则和约束适用于关系:The following additional rules and constraints apply to relationships:

·一个项目必须是(就一个嵌入关系)或者(一或多个持有关系)的目标。一个例外是根项目。一个项目可以是零或多个引用关系的目标。• An item must be the target (with respect to an embedded relationship) or (one or more holding relationships). One exception is the root project. An item can be the target of zero or more reference relationships.

·作为嵌入关系目标的项目不能是持有关系的源。它可以是引用关系的源。• An item that is the target of an embedded relationship cannot be the source of the holding relationship. It can be the source of a reference relationship.

·一个项目不能是持有关系的源,如果它是从文件提升的。它可以是嵌入关系和引用关系的源。· An item cannot be the source of a hold relationship if it is promoted from a file. It can be the source of embedded and referenced relationships.

·一个从文件提升的项目不能是嵌入关系的目标。· An item promoted from a file cannot be the target of an embedded relationship.

当关系类型A是从基关系类型B导出时,下列规则适用:When relation type A is derived from base relation type B, the following rules apply:

·关系类型A可以进一步限制端点类型。端点类型必须是基关系B中的相应端点类型的子类型。如果端点被进一步限制,则必须为该端点声明一个新名字。如果不限制端点,则端点的规范是可选的• Relationship type A can further restrict endpoint types. An endpoint type must be a subtype of the corresponding endpoint type in base relation B. If the endpoint is further restricted, a new name must be declared for the endpoint. The specification of an endpoint is optional if the endpoint is not constrained

·关系类型A可以进一步限制在基关系中声明的所允许的实例方式。受限制的实例方式集合必须是所允许的实例类型的基类型的子集。• A relation type A can further restrict the allowed instance modes declared in the base relation. The restricted set of instance modes must be a subset of the base types of the allowed instance types.

·端点的名字视为属性名字:它们不与属性的名字或者端点的名字或者它的基类型相同。• Endpoint names are treated as attribute names: they are not the same as the attribute name or the endpoint name or its base type.

·源和目标元素是可选的,如果相应的端点类型没有被所导出的关系进一步限制The source and target elements are optional if the corresponding endpoint type is not further constrained by the derived relationship

这里是从在本文上面定义的DocumentAuthor(文档作者)关系导出的关系类型的声明的例子:Here is an example of a declaration of a relation type derived from the DocumentAuthor relation defined above in this article:

       <RelationshipType Name=″LegalDocumentAuthor″<RelationshipType Name="LegalDocumentAuthor"

       BaseType=″Core.DocumentAuthor″`` BaseType="Core.DocumentAuthor"

       AllowsHolding=″false″AllowsHolding="false"

       AllowsEmbedding=″false″AllowsEmbedding="false"

       AllowsReference=″true″>  AllowsReference="true">

         <Source Name=″LegalDocument″Type=″Legal.Document″/><Source Name="LegalDocument"Type="Legal.Document"/>

         <Property Name=″CaseNumber″Type=″WinFS.String″/><Property Name="CaseNumber"Type="WinFS.String"/>

       </RelationshipType></RelationshipType>

LegalDocumentAuthor(合法文档作者)关系还限制源端点但不限制目标端点。源端点类型是Legal.Document,它从Core.Document导出。目标端点在本例中没有被进一步限制,因此省略了目标元素。关系还进一步限制所允许的实例方式。它不允许Holding(持有)方式并且仅保留的允许方式是引用。The LegalDocumentAuthor relationship also restricts the source endpoint but not the target endpoint. The source endpoint type is Legal.Document, which is derived from Core.Document. The target endpoint is not further restricted in this example, so the target element is omitted. Relationships further restrict the allowed instance modes. It does not allow the Holding method and the only allowed method of holding is a reference.

4.扩展类型4. Extension type

WinFS扩展是其祖先是System.Storage.Extension类型的类型的实例。这个类型是为扩展类型系列的根的复杂类型。A WinFS extension is an instance of a type whose ancestor is the System.Storage.Extension type. This type is the complex type that is the root of the extended type family.

·System.Storage.Extension定义两个属性:· System.Storage.Extension defines two properties:

·ItemID(项目ID)-与扩展相关联的项目的ItemID(项目ID)ItemID (item ID) - the ItemID (item ID) of the item associated with the extension

·ExtensionID(扩展ID)--扩展相关于ItemID(项目ID)的唯一标识符。(ItemID(项目ID),ExtensionID(扩展ID))对唯一标识扩展实例。· ExtensionID (extension ID) - the unique identifier of the extension relative to the ItemID (item ID). The (ItemID (item ID), ExtensionID (extension ID)) pair uniquely identifies an extension instance.

下面的限制适用于扩展类型:The following restrictions apply to extension types:

·扩展类型实例不能独立于项目存在。具有同一ItemID(项目ID)作为扩展ItemID(项目ID)的项目类型实例必须在扩展类型实例创建之前存在于存储器中。如果具有给定ItemID(项目ID)的项目不存在,则不能创建扩展。当该项目被删除时,具有同一ItemID(项目ID)的所有扩展被删除。· An instance of an extension type cannot exist independently of an item. An ItemType instance with the same ItemID as the extension ItemID must exist in memory before the extension Type instance is created. If an item with the given ItemID does not exist, the extension cannot be created. When this item is deleted, all extensions with the same ItemID (item ID) are deleted.

·一个给定的最后导出扩展类型的至多一个实例可以与一个单独的项目相关联。• At most one instance of a given last exported extension type may be associated with a single item.

·扩展不能是关系的源和目标。• An extension cannot be the source and target of a relationship.

可以与给定项目类型相关联的扩展的类型上没有约束。允许任何扩展类型来扩展任何项目类型。当不同扩展类型的多个实例附着到一个项目时,它们在结构和行为两方面都彼此无关。扩展实例与项目分开地存储和访问。所有扩展实例可从全局扩展视图访问。可以编写一个查询来返回给定类型的扩展的所有实例,不管它们与什么类型的项目相关联。扩展的ItemID(项目ID)表示它们属于哪一个项目并且可以用于从全局项目视图检索相应的项目对象。而且,给定一个项目,所有与该项目相关联的扩展实例可以使用扩展的ItemID(项目ID)属性来枚举。There are no constraints on the types of extensions that can be associated with a given item type. Any extension type is allowed to extend any item type. When multiple instances of different extension types are attached to a project, they are independent of each other, both structurally and behaviorally. Extension instances are stored and accessed separately from projects. All extension instances are accessible from the global extension view. A query can be written to return all instances of an extension of a given type, no matter what type of item they are associated with. Extended ItemIDs indicate which item they belong to and can be used to retrieve the corresponding item object from the global item view. Also, given an item, all extension instances associated with that item can be enumerated using the extension's ItemID (item ID) property.

C.增强的功能C. Enhanced functionality

在本发明的若干实施例中,硬件/软件接口系统利用扩展和继承以便形式化各种项目之间的关系,从而增强查询多个项目的能力。In several embodiments of the invention, the hardware/software interface system utilizes extension and inheritance to formalize relationships between various items, thereby enhancing the ability to query multiple items.

1.继承1. Inheritance

图36示出一系列相互联系的项目和它们的关系的子集。Document(文档)项目3602和Contact(联系人)项目3604是直接由指定的关系3606相关的,在本例中,关系3606是“作者关系”--即,Contact(联系人)3604是Document(文档)3602的“作者”。在本例中,Picture(照片)项目3622、Music(音乐)项目3624和Special(特殊)项目3626都从Document(文档)项目3604继承,因为每个项目的类型是Document(文档)项目类型的子类型。同样,Person(个人)项目3642和Organization(组织)项目3644从Contact(联系人)项目3604继承。在本发明的若干实施例中,这些继承的项目(Person(个人)3622、Music(音乐)3624、Special(特殊)3626、Person(个人)3642和Organization(组织)3644)不仅继承相应双亲项目(Document(文档)3602和Contact(联系人)3604)的属性,而且它们还继承在这两个双亲项目之间指定的关系。例如,Person(个人)3622继承与Contact(联系人)3664的关系3662,与Person(个人)3642的关系3664和与Organization(组织)3644的关系3666。一个相似的关系集合也由所示的每个其它项目继承。Figure 36 shows a subset of a series of interrelated items and their relationships. Document (document) item 3602 and Contact (contact person) item 3604 are related directly by specified relation 3606, in this example, relation 3606 is " author relation " -- that is, Contact (contact person) 3604 is Document (document). )3602 "Author". In this example, the Picture (photo) item 3622, the Music (music) item 3624, and the Special (special) item 3626 all inherit from the Document (document) item 3604, because the type of each item is a child of the Document (document) item type. type. Likewise, the Person item 3642 and the Organization item 3644 inherit from the Contact item 3604 . In several embodiments of the invention, these inherited items (Person (personal) 3622, Music (music) 3624, Special (special) 3626, Person (personal) 3642 and Organization (organization) 3644) not only inherit the corresponding parent items ( Document (document) 3602 and Contact (contact) 3604), and they also inherit the relationship specified between these two parent items. For example, Person 3622 inherits relationship 3662 to Contact 3664 , relationship 3664 to Person 3642 and relationship 3666 to Organization 3644 . A similar set of relationships is also inherited by every other item shown.

然而,重要的是注意,关系继承性不是自动的并且不在每个上下文中发生。例如,描述何时一个类型可以被继承的属性(即,继承性控制)本身是不可继承的。继承性参数是由硬件/软件接口系统保存和调整的。It is important to note, however, that relational inheritance is not automatic and does not occur in every context. For example, properties that describe when a type can be inherited (ie, inheritance controls) are not themselves inheritable. Inherited parameters are saved and adjusted by the hardware/software interface system.

2.扩展2. Expand

图37A示出用于应用专用目的的项目的标准子类型化的缺点。在本附图中,Contact(联系人)可由四个应用,APP1,APP2,APPX和APPY访问。APP1和APP2访问标准Contact(联系人),但APPX和APPY每一个需要一个扩展的联系人对象(添加附加的字段),因而导出Contact′和Contact″,它们每个从Contact(联系人)继承。然而,问题是现在存在基本Contact(联系人)项目的三个不同的实例--一个在Contact(联系人)中,一个在Contact′中,以及一个在Contact″中。Figure 37A illustrates the disadvantages of standard subtyping of items for application-specific purposes. In this figure, Contact can be accessed by four applications, APP1, APP2, APPX and APPY. APP1 and APP2 access the standard Contact, but APPX and APPY each require an extended Contact object (adding additional fields), thus exporting Contact' and Contact", which each inherit from Contact. However, the problem is that there are now three different instances of the basic Contact item - one in Contact, one in Contact', and one in Contact".

这个问题的部分解决方案,如图37B所示,要扩展Contact(联系人)的属性以包括要求这样的应用所需要的字段。在这种情况下,扩展Contact(联系人)以包括由APPX要求的附加字段。然而,直接扩展一个项目诸如Contact(联系人)的字段只能进行一次,因而APPY不能使用这个方法。A partial solution to this problem, as shown in Figure 37B, is to extend the Contact attribute to include the fields required for such an application. In this case, Extend Contact to include the additional fields required by APPX. However, directly extending an item such as a Contact field can only be done once, so APPY cannot use this method.

在本发明的一个实施例中,更全面的解决方案是用与Contact(联系人)本身不同和单独的扩展来扩展Contact(联系人)。这样,APPX可以扩展Contact(联系人)以包括它的APPX附加字段,同时APPY也可以扩展Contact(联系人)以包括它的APPY附加字段。随后这些扩展是可搜索的和可查询的,并且因而这些扩展支持多重类型化的形式用于硬件/软件接口系统。In one embodiment of the present invention, a more comprehensive solution is to extend Contact with a different and separate extension than Contact itself. In this way, APPX can extend Contact (contact) to include its APPX additional field, and APPY can also extend Contact (contact) to include its APPY additional field. These extensions are then searchable and queryable, and thus these extensions support multi-typed forms for hardware/software interface systems.

IV.结论IV. Conclusion

如之前所示,本发明针对用于组织、搜索以及共享数据的存储平台。本发明的存储平台扩展并且扩大了现有文件系统和数据库系统之外的数据存储的概念,并且被设计为用于所有类型的数据的存储,包括结构化的、非结构化的、或者半结构化的数据例如关系(表列)数据、XML,以及一种被称作项目的新形式的数据。通过其共同存储函数和模式化的数据,本发明的存储平台允许用于客户、知识工作者以及企业的更有效的应用开发。它提供了丰富的并且可扩展的应用编程接口,所述接口不仅可以使用其数据模型中固有的性能,而且包含并扩展了现有文件系统和数据库访问方法。可以理解,在不脱离其宽泛的发明概念的情况下,可以对以上所述的实施例进行的改变。因此,本发明并不限于所公开的特殊实施例,而是旨在由所附权利要求所规定的覆盖本发明的精神和范围内的所有改变。As previously indicated, the present invention is directed to a storage platform for organizing, searching, and sharing data. The storage platform of the present invention extends and expands the concept of data storage beyond existing file systems and database systems, and is designed for storage of all types of data, including structured, unstructured, or semi-structured standardized data such as relational (tabular) data, XML, and a new form of data called items. Through its shared storage of functions and schematized data, the storage platform of the present invention allows for more efficient application development for customers, knowledge workers, and enterprises. It provides a rich and extensible application programming interface that not only makes use of the capabilities inherent in its data model, but also encompasses and extends existing file system and database access methods. It will be appreciated that changes may be made to the above-described embodiments without departing from the broad inventive concepts thereof. It is therefore intended that this invention not be limited to the particular embodiments disclosed, but it is intended by the appended claims to cover modifications which are within the spirit and scope of the invention.

如根据以上所述变得很明显的,本发明的各种系统、方法、以及方面的所有或者一部分可以以程序代码(即,指令)的形式来体现。这种程序代码可以被存储在计算机可读介质上,例如磁的、电的或者光的存储介质,在非限定情况下包括软盘、CD-ROM、CD-RW、DVD-ROM、DVD-RAM、磁带、闪速存储器、硬盘驱动器、或者其它机器可读存储介质,其中当程序代码被载入到机器例如计算机或服务器中并由机器执行时,所述机器就变成用于实施本发明的装置。本发明还可以以在一些传输介质上被传输的程序代码的形式来体现,在传输介质上例如在电线或者电缆上、通过光纤、在网络上,包括因特网或内部网,或者通过任何其它形式的传输,其中,当程序代码被接收并且被载入到机器例如计算机中并且由机器执行时,所述机器就变成用于实施本发明的装置。当在通用处理器上被实现时,所述程序代码与处理器相结合,以便提供类似于特定逻辑电路的操作的唯一装置。As becomes apparent from the above, all or a portion of the various systems, methods, and aspects of the present invention may be embodied in the form of program codes (ie, instructions). Such program code may be stored on a computer readable medium such as a magnetic, electronic or optical storage medium including, without limitation, a floppy disk, CD-ROM, CD-RW, DVD-ROM, DVD-RAM, tape, flash memory, hard drive, or other machine-readable storage medium, wherein when the program code is loaded into a machine such as a computer or server and executed by the machine, the machine becomes a means for implementing the present invention . The present invention can also be embodied in the form of program code transmitted over some transmission medium, such as on a wire or cable, through an optical fiber, on a network, including the Internet or an intranet, or through any other form of Transmission wherein, when the program code is received and loaded into and executed by a machine such as a computer, the machine becomes a means for carrying out the invention. When implemented on a general-purpose processor, the program code combines with the processor to provide a unique means of resembling the operation of specific logic circuits.

Claims (42)

1. extension purpose method, but described project consists of the discrete memory cell of the information that can be processed by hardware/software interface system, described method comprises that the example (" expansion ") that utilizes strong typing expands described project, but described expansion consists of the discrete memory cell of the information that can be processed by described hardware/software interface system.
2. the method for claim 1 is characterized in that, described expansion is additional to described project.
3. the method for claim 1 is characterized in that, described expansion can not be independent of described project and exist, if thereby described project stop to exist, then described expansion also stops to exist.
4. the method for claim 1 is characterized in that, described project is expanded by a plurality of expansions.
5. method as claimed in claim 4 is characterized in that, described a plurality of expansions are used for the overlapping type instance of modelling.
6. method that is used for extended attribute, described attribute consists of can be by the complex properties type of hardware/software interface system processing, described method comprises utilizes strong typing example (" expansion ") to expand described attribute, but described expansion consists of the discrete memory cell of the information that can be processed by described hardware/software interface system, and is associated with described attribute.
7. method as claimed in claim 6 is characterized in that, described expansion is additional to described attribute.
8. method as claimed in claim 6 is characterized in that, described expansion can not be independent of described attribute and exist, if thereby described attribute stop to exist, then described expansion also stops to exist.
9. method as claimed in claim 6 is characterized in that, described attribute is expanded by a plurality of expansions.
10. method as claimed in claim 9 is characterized in that, described a plurality of expansions are used for the overlapping type instance of modelling.
11. method that is used for hardware/software interface system organization and a plurality of projects of effective query, but described project consists of the discrete memory cell of the information that can be processed by hardware/software interface system, described a plurality of project comprises the first relation, it is relevant with the second project with the first project, described method comprises, instantiation for the 3rd project, the subtype example that described the 3rd project is described the first project, described the 3rd project are automatically from the relation of described the first project succession with described the second project.
12. method as claimed in claim 11 is characterized in that, for the instantiation of the 4th project, and the subtype example that described the 4th project is described the second project, described the 4th project is automatically from the relation of described the second project succession with described the first project.
13. method as claimed in claim 12 is characterized in that, described the 4th project is also automatically from the relation of described the second project succession with described the 3rd project.
14. method as claimed in claim 11, it is characterized in that, for each of more than first subtype example of described the first project, each of described more than first subtype example is automatically inherited relation with described the second described project from described the first project.
15. method as claimed in claim 14, it is characterized in that, for each of more than second subtype example of described the second project, each of described more than second subtype example is automatically inherited relation with described the first described project from described the second project.
16. method as claimed in claim 15 is characterized in that, each of described more than first subtype example is automatically inherited each relation with described more than second subtype example from described the first project.
17. method as claimed in claim 16 is characterized in that, each of described more than second subtype example is automatically inherited each relation with described more than first subtype example from described the second project.
18. the hardware for the treatment of a plurality of projects/software interface system, wherein, but project consists of the discrete memory cell of the information that can be processed by described hardware/software interface system, described system comprises that one is used for coming extension purpose subsystem with strong typing example (" expansion "), but consist of can be by the memory cell that disperses of the information of described hardware/software interface system processing in described expansion.
19. system as claimed in claim 18 is characterized in that, described expansion is additional to described project.
20. system as claimed in claim 18 is characterized in that, described expansion can not be independent of described project and exist, if thereby described project stop to exist, then described expansion also stops to exist.
21. system as claimed in claim 18 is characterized in that, described project is expanded by a plurality of expansions.
22. the hardware for the treatment of a plurality of attributes/software interface system, described attribute consists of can be by the complex properties type of hardware/software interface system processing, described system comprises that one is used for coming with strong typing example (" expansion ") subsystem of extended attribute, but consist of can be by the memory cell that disperses of the information of described hardware/software interface system processing in described expansion.
23. the system as claimed in claim 22 is characterized in that, described expansion is additional to described attribute.
24. the system as claimed in claim 22 is characterized in that, described expansion can not be independent of described attribute and exist, if thereby described attribute stop to exist, then described expansion also stops to exist.
25. the system as claimed in claim 22 is characterized in that, described attribute is expanded by a plurality of expansions.
26. the hardware for the treatment of a plurality of projects/software interface system, wherein, but project consists of the discrete memory cell of the information that can be processed by described hardware/software interface system, described system comprises that one is used for the subsystem of tissue and the described a plurality of projects of effective query, described a plurality of project comprises the first relation, it is relevant with the second project with the first project, wherein, and described subsystem:
For the instantiation of the 3rd project, the subtype example that described the 3rd project is described the first project is automatically set up the relation between described the 3rd project and described the second project;
For the instantiation of the 4th project, the subtype example that described the 4th project is described the second project is automatically set up the relation between described the 4th project and described the first project; And
Automatically set up the relation between described the 4th project and described the first project.
27. system as claimed in claim 26, for each of more than first subtype example of described the first project, and for each of more than second subtype example of described the second project, described subsystem:
Automatically set up each of described more than first subtype example and the relation of described the second project;
Automatically set up each of described more than second subtype example and the relation of described the first project; And
Automatically set up each relation of each and described more than second subtype example of described more than first subtype example;
28. the hardware for the treatment of a plurality of projects/software interface system, wherein, but project consists of the discrete memory cell of the information that can be processed by described hardware/software interface system, described system comprises that one is used for coming extension purpose subsystem with strong typing example (" expansion "), but consist of can be by the memory cell that disperses of the information of described hardware/software interface system processing in described expansion.
29. system as claimed in claim 28 is characterized in that, described expansion is additional to described project.
30. system as claimed in claim 28 is characterized in that, described expansion can not be independent of described project and exist, if thereby described project stop to exist, then described expansion also stops to exist.
31. system as claimed in claim 28 is characterized in that, described project is expanded by a plurality of expansions.
32. the hardware for the treatment of a plurality of attributes/software interface system, described attribute consists of can be by the complex properties type of hardware/software interface system processing, described system comprises that one is used for coming with strong typing example (" expansion ") subsystem of extended attribute, but consist of can be by the memory cell that disperses of the information of described hardware/software interface system processing in described expansion.
33. system as claimed in claim 32 is characterized in that, described expansion is additional to described attribute.
34. system as claimed in claim 32 is characterized in that, described expansion can not be independent of described attribute and exist, if thereby described attribute stop to exist, then described expansion also stops to exist.
35. system as claimed in claim 32 is characterized in that, described attribute is expanded by a plurality of expansions.
36. the hardware for the treatment of a plurality of projects/software interface system, wherein, but project consists of the discrete memory cell of the information that can be processed by described hardware/software interface system, described system comprises that one is used for the subsystem of tissue and the described a plurality of projects of effective query, described a plurality of project comprises the first relation, it is relevant with the second project with the first project, wherein, and described subsystem:
For the instantiation of the 3rd project, the subtype example that described the 3rd project is described the first project is automatically set up the relation between described the 3rd project and described the second project;
For the instantiation of the 4th project, the subtype example that described the 4th project is described the second project is automatically set up the relation between described the 4th project and described the first project; And
Automatically set up the relation between described the 4th project and described the first project;
37. system as claimed in claim 36 is characterized in that, for each of more than first subtype example of described the first project, and for each of more than second subtype example of described the second project, described subsystem:
Automatically set up each of described more than first subtype example and the relation of described the second project;
Automatically set up each of described more than second subtype example and the relation of described the first project; And
Automatically set up each relation of each and described more than second subtype example of described more than first subtype example;
38. one kind comprises the computer-readable medium for extension purpose computer-readable instruction, but described project consists of the discrete memory cell of the information that can be processed by hardware/software interface system, described computer-readable instruction comprises be used to utilizing strong typing example (" expansion ") to expand the instruction of described project, but described expansion consists of the discrete memory cell of the information that can be processed by described hardware/software interface system, wherein, described expansion is additional to described project, and wherein, described expansion also stops to exist when described project stops to exist.
39. one kind comprises the computer-readable medium for the computer-readable instruction of extended attribute, described attribute consists of can be by the complex properties type of hardware/software interface system processing, described computer-readable instruction comprises be used to utilizing strong typing example (" expansion ") to expand the instruction of described attribute, but described expansion consists of the discrete memory cell of the information that can be processed by described hardware/software interface system, wherein, described expansion is additional to described attribute, and wherein, described expansion also stops to exist when described attribute stops to exist.
40. one kind comprises the computer-readable medium for the computer-readable instruction of tissue and a plurality of projects of effective query, but described project consists of the discrete memory cell of the information that can be processed by hardware/software interface system, described computer-readable instruction comprises instruction, is used for:
Instantiation the first project, the second project and the first relation that the first project is relevant with the second project;
Instantiation the 3rd project, the subtype example that described the 3rd project is described the first project; And
Automatically set up the relation of the succession between described the 3rd project and described the second project.
41. computer-readable medium as claimed in claim 40 is characterized in that, also comprises being used for instruction:
Instantiation the 4th project, the subtype example that described the 4th project is described the second project; And
Automatically set up the relation of the succession between described the 4th project and described the first project.
42. computer-readable medium as claimed in claim 41 is characterized in that, also comprises instruction, is used for automatically setting up the relation of the succession between described the 3rd project and described the 4th project.
CN200480001833.4A 2003-08-21 2004-07-29 System and method for extension and inheritance of information units manageable by a hardware/software interface system Expired - Fee Related CN1871598B (en)

Applications Claiming Priority (7)

Application Number Priority Date Filing Date Title
USPCT/US03/26144 2003-08-21
US10/646,580 US7428546B2 (en) 2003-08-21 2003-08-21 Systems and methods for data modeling in an item-based storage platform
PCT/US2003/026144 WO2005029313A1 (en) 2003-08-21 2003-08-21 Systems and methods for data modeling in an item-based storage platform
US10/646,580 2003-08-21
US10/693,574 2003-10-24
US10/693,574 US7590643B2 (en) 2003-08-21 2003-10-24 Systems and methods for extensions and inheritance for units of information manageable by a hardware/software interface system
PCT/US2004/024569 WO2005024666A2 (en) 2003-08-21 2004-07-29 Systems and methods for extensions and inheritance for units of information manageable by a hardware/software interface system

Publications (2)

Publication Number Publication Date
CN1871598A true CN1871598A (en) 2006-11-29
CN1871598B CN1871598B (en) 2014-10-15

Family

ID=34279603

Family Applications (1)

Application Number Title Priority Date Filing Date
CN200480001833.4A Expired - Fee Related CN1871598B (en) 2003-08-21 2004-07-29 System and method for extension and inheritance of information units manageable by a hardware/software interface system

Country Status (12)

Country Link
EP (1) EP1604310A4 (en)
JP (1) JP4580390B2 (en)
KR (1) KR101022936B1 (en)
CN (1) CN1871598B (en)
AU (1) AU2004271531B2 (en)
BR (1) BRPI0406512A (en)
CA (3) CA2506337C (en)
IL (1) IL168666A (en)
MX (1) MXPA05006260A (en)
NO (1) NO20052052L (en)
TW (1) TWI337310B (en)
WO (1) WO2005024666A2 (en)

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102460381A (en) * 2009-06-12 2012-05-16 微软公司 Software extension analysis
CN103678687A (en) * 2013-12-26 2014-03-26 北京奇虎科技有限公司 Project establishment method and device based on configuration system
CN112015405A (en) * 2019-05-29 2020-12-01 腾讯数码(天津)有限公司 Interface layout file generation method, interface generation method, device and equipment
WO2022023867A1 (en) * 2020-07-27 2022-02-03 International Business Machines Corporation Direct data loading of middleware-generated records
CN114201504A (en) * 2021-11-15 2022-03-18 北京达佳互联信息技术有限公司 An information acquisition method, device, electronic device and storage medium

Families Citing this family (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7590643B2 (en) 2003-08-21 2009-09-15 Microsoft Corporation Systems and methods for extensions and inheritance for units of information manageable by a hardware/software interface system
US8166101B2 (en) 2003-08-21 2012-04-24 Microsoft Corporation Systems and methods for the implementation of a synchronization schemas for units of information manageable by a hardware/software interface system
US8238696B2 (en) 2003-08-21 2012-08-07 Microsoft Corporation Systems and methods for the implementation of a digital images schema for organizing units of information manageable by a hardware/software interface system
US8131739B2 (en) 2003-08-21 2012-03-06 Microsoft Corporation Systems and methods for interfacing application programs with an item-based storage platform
US7805422B2 (en) 2005-02-28 2010-09-28 Microsoft Corporation Change notification query multiplexing
KR100938830B1 (en) * 2007-12-18 2010-01-26 한국과학기술정보연구원 How to build a knowledge base and its server
CN101650670B (en) 2008-08-14 2013-01-09 鸿富锦精密工业(深圳)有限公司 Electronic system capable of sharing application program configuration parameters and method thereof
TWI720528B (en) * 2019-07-03 2021-03-01 神雲科技股份有限公司 Clustered storage system for expanding expander
WO2022010491A1 (en) * 2020-07-10 2022-01-13 Hewlett-Packard Development Company, L.P. Application version switching

Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6324533B1 (en) * 1998-05-29 2001-11-27 International Business Machines Corporation Integrated database and data-mining system
US6385767B1 (en) * 1999-09-30 2002-05-07 Unisys Corporation Method and system for creating and manipulating extensions to version control systems
US20020198891A1 (en) * 2001-06-14 2002-12-26 International Business Machines Corporation Methods and apparatus for constructing and implementing a universal extension module for processing objects in a database
JP2003059236A (en) * 2001-08-08 2003-02-28 Sony Corp Recording apparatus, recording method, and recording medium
WO2003019363A1 (en) * 2001-08-24 2003-03-06 Brooks Automation, Inc. Application class extensions
JP2003150424A (en) * 2001-11-16 2003-05-23 Fujitsu Ltd File system, control method, and program
US20030110189A1 (en) * 2001-06-01 2003-06-12 International Business Machines Corporation System and method for generating horizontal view for SQL queries to vertical database

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6078925A (en) * 1995-05-01 2000-06-20 International Business Machines Corporation Computer program product for database relational extenders

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6324533B1 (en) * 1998-05-29 2001-11-27 International Business Machines Corporation Integrated database and data-mining system
US6385767B1 (en) * 1999-09-30 2002-05-07 Unisys Corporation Method and system for creating and manipulating extensions to version control systems
US20030110189A1 (en) * 2001-06-01 2003-06-12 International Business Machines Corporation System and method for generating horizontal view for SQL queries to vertical database
US20020198891A1 (en) * 2001-06-14 2002-12-26 International Business Machines Corporation Methods and apparatus for constructing and implementing a universal extension module for processing objects in a database
JP2003059236A (en) * 2001-08-08 2003-02-28 Sony Corp Recording apparatus, recording method, and recording medium
WO2003019363A1 (en) * 2001-08-24 2003-03-06 Brooks Automation, Inc. Application class extensions
JP2003150424A (en) * 2001-11-16 2003-05-23 Fujitsu Ltd File system, control method, and program

Cited By (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102460381A (en) * 2009-06-12 2012-05-16 微软公司 Software extension analysis
CN103678687A (en) * 2013-12-26 2014-03-26 北京奇虎科技有限公司 Project establishment method and device based on configuration system
CN103678687B (en) * 2013-12-26 2017-04-05 北京奇虎科技有限公司 Establishment of item method and device based on configuration system
CN112015405A (en) * 2019-05-29 2020-12-01 腾讯数码(天津)有限公司 Interface layout file generation method, interface generation method, device and equipment
CN112015405B (en) * 2019-05-29 2022-06-21 腾讯数码(天津)有限公司 Interface layout file generation method, interface generation method, device and equipment
WO2022023867A1 (en) * 2020-07-27 2022-02-03 International Business Machines Corporation Direct data loading of middleware-generated records
US11423025B2 (en) 2020-07-27 2022-08-23 International Business Machines Corporation Direct data loading of middleware-generated records
GB2612727A (en) * 2020-07-27 2023-05-10 Ibm Direct data loading of middleware-generated records
GB2612727B (en) * 2020-07-27 2023-08-23 Ibm Direct data loading of middleware-generated records
CN114201504A (en) * 2021-11-15 2022-03-18 北京达佳互联信息技术有限公司 An information acquisition method, device, electronic device and storage medium

Also Published As

Publication number Publication date
CA2815562A1 (en) 2005-03-17
TWI337310B (en) 2011-02-11
JP2007503051A (en) 2007-02-15
IL168666A (en) 2010-11-30
CA2815867C (en) 2015-09-29
CN1871598B (en) 2014-10-15
TW200513874A (en) 2005-04-16
AU2004271531A1 (en) 2005-03-17
JP4580390B2 (en) 2010-11-10
CA2506337C (en) 2015-01-20
CA2506337A1 (en) 2005-03-17
AU2004271531B2 (en) 2009-12-10
WO2005024666A3 (en) 2005-10-20
KR20060057524A (en) 2006-05-26
WO2005024666A2 (en) 2005-03-17
KR101022936B1 (en) 2011-03-16
MXPA05006260A (en) 2005-08-19
EP1604310A2 (en) 2005-12-14
CA2815562C (en) 2015-02-17
WO2005024666A8 (en) 2005-08-18
NO20052052L (en) 2005-07-06
BRPI0406512A (en) 2005-12-06
EP1604310A4 (en) 2009-06-10
NO20052052D0 (en) 2005-04-26
CA2815867A1 (en) 2005-03-17

Similar Documents

Publication Publication Date Title
CN1961294A (en) Systems and methods for providing relational and hierarchical synchronization services for units of information manageable by a hardware/software interface system
CN1820266A (en) System and methods for interfacing application programs with item-based storage platform
CN1820245A (en) System and methods for data modeling in item based storage platform
CN1739107A (en) System and method for providing synchronization services for information units manageable by a hardware/software interface system
CN1869923A (en) System data interfaces, related system architectures
CN100337233C (en) transactional file system
CN1678991A (en) Web services apparatus and methods
CN1871598A (en) System and method for extension and inheritance of information units manageable by a hardware/software interface system
CN1759397A (en) Structured indexes on results of function applications over data
CN1828527A (en) Platform for data services across disparate application frameworks
CN1781096A (en) Systems and methods for synchronizing computer systems through an intermediary file system share or device
CN1846207A (en) type path index
CN1585945A (en) Mechanism for mapping XML schemas to object-relational database systems
CN1739093A (en) Systems for the implementation of a synchronization schemas
CN1604082A (en) Mapping architecture for arbitrary data models
CN1609795A (en) Programming interface for a computer platform
CN1359489A (en) Method and system for an extensible macro language
CN1619490A (en) Integrated design, deployment and management phases of the system
CN1524216A (en) System and method for software component plug-in structure
CN1856783A (en) Data management structures associated with generic data items using references
CN1667575A (en) Integration Architecture for Non-Integrated Tools
JP4901472B2 (en) System and method for implementation of a digital image schema that organizes units of information manageable by a hardware / software interface system
CN1174319C (en) Data structure management device, data structure management system and method
CN101048732A (en) Object oriented architecture for data integration service
CN1203430C (en) Data management system for using multiple data operation modules

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
ASS Succession or assignment of patent right

Owner name: MICROSOFT TECHNOLOGY LICENSING LLC

Free format text: FORMER OWNER: MICROSOFT CORP.

Effective date: 20150515

C41 Transfer of patent application or patent right or utility model
TR01 Transfer of patent right

Effective date of registration: 20150515

Address after: Washington State

Patentee after: Micro soft technique license Co., Ltd

Address before: Washington State

Patentee before: Microsoft Corp.

CF01 Termination of patent right due to non-payment of annual fee
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20141015

Termination date: 20200729