动态元数据 背景技术 [0001] 元数据是关于数据的数据。在业务上下文中,元数据可用于定义关于业务应用的信息。例如,元数据可定义与业务应用交互的业务实体以及业务应用中可用于获得业务数据的方法。元数据与业务应用中所使用的实际数据分开存储。 [0002] 元数据模型描述业务系统所展示的API。运行时引擎使用这些模型将业务系统上的API映射或变换成该运行时引擎所提供的规范业务数据访问API。因此,当由用户提供的应用调用该规范API时,取决于元数据模型,调用业务系统上合适的API。改变元数据模型在无需重新编译或者重写应用的情况下改变该应用的行为。 [0003] 元数据模型通常由设计工具或者文本编辑器以静态格式来提供。当业务数据操作请求元数据时,该元数据通常获取自元数据存储。运行时引擎使用所获取的元数据来执行业务数据操作。例如,业务数据操作可以是给定顾客ID获取关于顾客的信息。此业务数据操作可能需要关于该操作的元数据。当做出对该元数据的请求时,元数据存储返回此方法的名称和参数,连同调用此方法所需要的任何其他信息。该方法是包括顾客信息的业务系统专用的API。 [0004] 元数据存储包括元数据模型中所描述的业务系统的API。某些业务系统具有句法上相似的API。例如,用于给定产品ID获取关于产品的信息的方法可与用于给定顾客ID获取关于顾客的信息的方法在句法上相似。然而,采用静态元数据模型,即使句法相似,每一个API的元数据也通常被单独包括在元数据存储中。这增大了对元数据存储的存储要求。 另外,如果API改变,则需要改变元数据模型以适应修改。 发明内容 [0005] 根据一个方面,包括动态元数据模型的计算设备具有接口模块,该接口模块包括定义使用算法来获取元数据的一个或多个API函数的接口,这些API函数中的至少一个与多个算法一起使用,该多个算法中的每一个与一业务系统相关联;算法模块,该算法模块包括实现接口中所定义的API函数的一个或多个算法,该一个或多个算法在不访问元数据数据库的情况下提供元数据,该一个或多个算法中的每一个与一业务系统相关联,元数据与业务系统的API函数相关联;以及在计算设备上注册该一个或多个算法的注册模块,该一个或多个算法中的每一个与一业务系统相关联。 [0006] 根据另一方面,用于从数据存储中动态地获取元数据的方法包括:在计算设备上存储元数据接口,该元数据接口包括用于获取元数据的一个或多个API函数的定义,这些API函数中的至少一个被结构化以便从多个业务系统中获取元数据;在计算设备上存储一个或多个算法,该一个或多个算法中的每一个实现接口中所定义的一个或多个API函数,至少一个API函数实现包括业务系统专用的一个或多个API函数;在计算设备上注册一个或多个算法,该一个或多个算法中的每一个为一特定业务系统而注册;在数据存储中存储指向该一个或多个算法的指针,为每一个注册的算法存储指针,每个指针表示注册的算法的存储器位置;在计算设备上发起获取元数据的操作;在计算设备上调用使用其中存储有指针之一的数据存储位置的函数;以及执行在与指针相关联的算法中所实现的接口API函数,该一个或多个接口API函数的算法实现使用业务系统专用的一个或多个API函数以从业务系统中获取数据,该数据通过算法变换成元数据。 [0007] 根据又一方面,计算机可读存储介质具有当由计算设备执行时使得计算设备执行以下步骤的计算机可执行指令,所述步骤包括:在计算设备上存储元数据接口,该元数据接口包括用于获取元数据的一个或多个API函数的定义,这些API函数中的至少一个被结构化以便从多个业务系统中获取元数据;在计算设备上存储一个或多个算法,该一个或多个算法中的每一个实现接口中所定义的一个或多个API函数;在计算设备上注册该一个或多个算法,该一个或多个算法中的每一个为一特定业务系统而注册;在计算设备上发起获取元数据的操作;以下述方式中的至少之一执行算法中所实现的一个或多个接口API函数来获取元数据,包括:使用业务系统专用的一个或多个API函数以从业务系统中获取数据,该业务系统数据通过算法变换成元数据;以及基于业务系统专用的至少两个API函数中的模式知识使用逻辑来提供元数据。 [0008] 提供本概述是为了以简化的形式介绍将在以下详细描述中进一步描述的一些概念。本概述并不旨在标识所要求保护的主题的关键特征或必要特征,也决不旨在用于限制所要求保护的主题的范围。 附图说明 [0009] 图1示出使用动态元数据或者静态元数据来调用业务系统API的示例系统。 [0010] 图2示出带有其中可获取动态元数据的系统的操作环境。 [0011] 图3示出包括示例业务数据运行时模块、示例元数据数据库模块以及示例动态元数据模块的示例服务器。 [0012] 图4示出包括接口模块的示例业务数据运行时模块。 [0013] 图5示出包括算法模块和注册模块的示例动态数据库模块。 [0014] 图6示出元数据接口的示例实施例。 [0015] 图7示出用于从元数据数据库中获取元数据的示例方法的流程图。 [0016] 图8示出用于从数据存储中动态地获取元数据的示例方法的流程图。 具体实施方式 [0017] 本申请涉及用于动态地获取业务系统的元数据的系统与方法。 [0018] 在此处所描述的示例实施例中,描述了提供多个业务系统的元数据的动态元数据模型。元数据涉及与业务系统专用的API函数相关联的实体、方法、参数、类型描述符等。实体的一些示例为顾客、产品、员工等。 [0019] 动态元数据模型提供各自都与一特定业务系统相关联的一个或多个算法,该一个或多个算法在无需访问元数据数据库的情况下返回元数据。该算法可利用业务系统的API函数中的常规模式来基于该常规模式的知识推断元数据。该算法也可调用API函数以从业务系统中获取数据,该数据通过算法变换成元数据。 [0020] 图1示出了用于使用动态元数据或者静态元数据来调用业务系统API的示例系统 100。系统100包括客户机101、102,服务器104以及业务系统106。可使用更多或更少的客户机、服务器以及业务系统。 [0021] 在示例实施例中,客户机101、102是诸如台式计算机、膝上型计算机、个人数字助理或蜂窝设备等计算设备。客户机101、102可包括输入/输出设备、中央处理单元(“CPU”)、数据存储设备以及网络设备。 [0022] 服务器104是可以通过网络105访问的业务服务器。服务器104可实现一套业务流程,包括文件共享、内容管理、记录管理和业务智能。服务器104可包括输入/输出设备、中央处理单元(“CPU”)、数据存储设备以及网络设备。 [0023] 在示例实施例中,服务器104可位于组织内部或者可以是基于因特网的共享文档系统的一部分。一示例业务服务器是微软公司提供的Microsoft Office SharePoint Server 2007。可使用其它业务服务器。 [0024] 业务系统106包括提供业务应用的一个或多个业务系统。一示例业务系统是微软公司提供的Microsoft SQL分析服务。另一示例是微软公司提供的Windows SharePoint服务。业务系统106也可以通过服务器104或另一网络来访问。 [0025] 现参考图2,在示例实施例中,图1中所示的服务器104是计算设备。例如,服务器104可以是台式或膝上型计算机。本领域技术人员可以理解,所公开的实施例可以用包括小型计算机、大型计算机等其他计算机系统配置来实现。各实施例也可以在分布式计算环境中实现,其中任务由通过通信网络链接的远程处理设备来执行。在分布式计算环境中,程序模块可以位于本地和远程存储器存储设备中。各实施例可作为计算机过程(方法)、计算系统、或者作为诸如计算机程序产品或计算机可读介质等制品来实现。计算机程序产品可以是计算机系统可读并编码了用于执行计算机过程的指令的计算机程序的计算机可读存储介质。计算机程序产品还可以是计算系统可读并编码了用于执行计算机过程的指令的计算机程序的载体上的传播信号。 [0026] 参考图2,服务器104通常包括至少一个处理单元202和系统存储器204。取决于计算设备的确切配置和类型,系统存储器204可以是易失性的(诸如RAM)、非易失性的(诸如ROM、闪存等)或是两者的某种组合。系统存储器204通常包括适于控制联网的个人计算机操作的操作系统206,诸如华盛顿州雷蒙德市的微软公司的WINDOWSO操作系统,或者是服务器,诸如同样来自华盛顿州雷蒙德市的微软公司的Windows SharePoint Server 2007。系统存储器204还可包括一个或多个软件应用208并可包括程序数据。 [0027] 服务器104可具有附加特征或功能。例如,服务器104还可包括附加数据存储设备(可移动和/或不可移动),诸如例如磁盘、光盘或磁带等。这样的附加存储在图2中由可移动存储210和不可移动存储212示出。计算机可读存储介质可包括以用于存储诸如计算机可读指令、数据结构、程序模块或其它数据等信息的任何方法或技术实现的易失性和非易失性、可移动和不可移动介质。系统存储器204、可移动存储210和不可移动存储212都是计算机可读存储介质的示例。计算机存储介质包括但不限于,RAM、ROM、EEPROM、闪存或其他存储器技术、CD-ROM、数字多功能盘(DVD)或其他光盘存储、盒式磁带、磁带、磁盘存储或其他磁存储设备,或者可用于存储所需信息并可通过服务器104进行访问的任何其他介质。任何这样的计算机存储介质可以是服务器104的一部分。服务器104还可具有输入设备214,诸如键盘、鼠标、笔、语音输入设备、触摸输入设备等。还可包括输出设备216,诸如显示器、扬声器、打印机等。 [0028] 服务器104还可以包含通信连接218,该通信连接允许该设备与其它计算设备 220(例如,客户机101、102)在分布式计算环境中,例如在内联网或因特网中,通过诸如网络105等网络进行通信。通信连接218是通信介质的一个示例。通信介质通常具体化为诸如载波或其他传输机制等已调制数据信号中的计算机可读指令、数据结构、程序模块或其他数据,且包括任何信息传递介质。术语“已调制数据信号”指以对信号中的信息进行编码的方式设置或改变其一个或多个特征的信号。作为示例,通信介质包括有线介质,诸如有线网络或直接线连接,以及无线介质,诸如声学、RF、红外线和其他无线介质。如此处所使用的术语计算机可读介质既包括存储介质又包括通信介质。 [0029] 客户机101、102可按类似于上述服务器104的方式来配置。 [0030] 图3更详细地示出服务器104的示例逻辑部分。服务器104包括示例业务数据运行时模块302、示例元数据数据库模块304以及示例动态元数据模块306。在某些实施例中,元数据数据库模块304与动态元数据模块306可在分开的服务器上。 [0031] 示例业务数据运行时模块302包括在服务器104上运行的软件,该软件从业务系统中获取数据并对该数据进行编目。业务数据运行时模块302使用业务系统专用的API调用从业务系统中获取数据。关于API的信息(例如,方法、参数等)包含于元数据中,该元数据可使用静态模型从示例元数据数据库模块304中访问,或者动态地从示例动态元数据模块306中访问。在某些实施例中,元数据既可从示例元数据数据库模块304又可从示例动态元数据模块306中访问。 [0032] 示例元数据数据库模块304包括与业务系统相关联的元数据对象。元数据对象可包括业务系统中所使用的实体,例如,存储在WSS中的示例列表或者存储在SQL Server分析服务中的多维数据集。其他元数据对象可包括方法,与每个方法相关联的参数和参数描述符,安全授权信息,过滤信息等。元数据对象通常以图计算机结构来相互链接,该图计算机结构包括多个节点和定义各节点之间的关系的边。示例元数据数据库模块304还包括业务数据类型以及该业务数据类型所在的业务系统的清单。业务数据类型的一些示例为顾客、订单、产品和雇员。 [0033] 示例动态元数据模块306包括与特定业务系统相关联的一个或多个算法。这些算法通过业务数据运行时模块302所包括的接口来展示。该接口定义了用于使用一个或多个算法来动态地获取元数据的元数据API函数。这些算法包括实现接口中所定义的元数据API函数的代码。 [0034] 图4示出业务数据运行时模块302的附加细节。业务数据运行时模块302包括接口模块402。示例接口模块402提供可通用地应用于多个业务系统的元数据接口。该接口定义了可与该多个业务系统中的每一个一起使用来返回关于业务系统专用的API函数的元数据的元数据API函数调用。 [0035] 图5示出动态元数据模块306的附加细节。动态元数据模块306包括算法模块 502,以及注册模块504。 [0036] 例如,可存在对业务系统的GetEntities(取实体)函数调用,该函数调用返回对该业务系统所存储的全部实体。例如,如果业务系统是WindowsSharePoint服务(WSS),则WSS可以是该GetEntities函数中的参数。在此示例中,GetEntites函数返回关于为WSS的实例所存储的列表的信息。在另一示例中,可以存在GetMethods(取方法)函数,该函数把诸如WSS列表等实体作为参数。该GetMethods函数返回与该实体相关联的全部方法。 [0037] 示例算法模块502提供算法,该算法面向特定业务系统,并包括接口模块402中所定义的元数据API函数的业务系统特定实现。该业务系统通常是具有明确定义的API的那些系统。例如,WSS是具有用于确定所安装的全部列表及每个列表中列的数量的API的业务系统。类似地,SQL Server分析服务是具有用于确定所存储的多维数据集的名称以及那些多维数据集的维数的API的业务系统。 [0038] 每个算法包括用于实现接口模块402中所定义的元数据API函数的代码,该代码实现有时包括从业务系统中获取数据的附加API函数。例如,对于WSS,用于WSS的算法中的GetEntities元数据函数实现可使用获取WSS中所存储的全部列表以及关于每个列表中有多少列的信息的API。对于SQL Server分析服务,用于SQL Server分析服务的算法中的GetEntities元数据函数实现可使用获取所使用的多维数据集以及那些多维数据集的维数的API。WSS的GetEntities实现可使用每个列表中的列数结合WSS算法中的逻辑以及其他API函数调用来确定用于WSS的实体。类似地,SQL Server分析服务的GetEntities算法实现可使用多维数据集的维数结合SQL Server分析服务算法中的逻辑以及其他API函数调用来确定用于SQL Server分析服务的实体。尽管列表中的列数以及多维数据集的维数是数据,但所返回的实体信息却是元数据。每个算法使用将数据变换成元数据的逻辑。以此方式,接口中所定义的一个元数据API函数调用可从多个业务系统中获取元数据。 [0039] 对于某些业务系统,尤其是那些可能不具有跨行业和应用的公共API的系统,例如SAP,算法模块502中与业务系统相关联的算法可以从该业务系统的API中的常规模式中逻辑地推断元数据。例如,可以观察到,对于特定业务系统,存在基于ID返回实体的Find(查找)函数。某些示例是给定ID查找顾客、给定ID查找雇员、以及给定ID查找产品。如果使用动态元数据模型,则用于业务系统的算法推断,对于其中实体为顾客的对此业务系统的GetMethods调用,应当返回的方法是FindCustomer(ID)(查找顾客(ID))。类似地,对于其中实体为产品的GetMethods调用,应当返回的方法是FindProduct(ID)(查找产品(ID))。基于所观察到的常规模式,此推断独立于对元数据数据库模块304的调用而完成。结果,元数据数据库模块304不需要为每个这样的实体存储单独的方法条目。此外,如果在稍后的日期添加新的实体,例如Foo,则该算法在不需要任何代码更新的情况下提供方法信息。示例算法模块502只不过是返回FindFoo(ID)(查找Foo(ID))。 [0040] 每个算法被设计成获得关于特定实体的元数据,使得元数据仅在其被需要时才被生成。例如,如果实体为顾客,则该算法仅使用针对顾客实体的接口函数。这可包括与顾客相关的方法、参数以及参数描述。 [0041] 每个算法还向通常为类构造函数的初始化程序API提供与该算法相关联的业务系统专用的连接信息。例如,SQL Server分析服务器的DynamicMetadataProvider(动态元数据提供者)具有构造函数,该构造函数包括到SQL分析服务器的连接串以及该SQL分析服务器内的特定多维数据集的名称。此外,每个算法提供用于获得元数据模型中的任何元数据对象的API来作为起始点。此起始点API是无参数的,并且不取任何其他元数据对象引用来作为输入。例如,SQL Server分析服务器的DynamicMetadataProvider具有返回实体集合的方法,该实体集合表示用于初始化SQL Server分析服务器的DynamicMetadataProvider的多维数据集中的全部可能的维度。 [0042] 示例注册模块504注册与业务系统相关联的算法。通常,对于一特定业务系统存在一个注册的算法。注册模块将算法映射到业务系统,使得当作出动态元数据调用时,执行正确的算法。 [0043] 示例注册模块504准许业务数据运行时模块302混合静态和动态元数据模型。使用静态元数据模型,元数据全部都被包含在元数据数据库中。例如,与每个实体相关联的方法、参数、类型等都存储在元数据数据库内。然而,在元数据数据库位置中替换指向算法的指针是可能的。以此方式,当访问元数据数据库位置时(例如,通过元数据运行时调用),执行该算法并经由该算法而非从元数据数据库中返回元数据。 [0044] 例如,当对静态模型向GetEntities作出调用时,向元数据数据库作出调用,并对业务系统应用的特定实例返回该元数据数据库中所存储的实体。对于动态模型,当向GetEntities作出调用时,元数据数据库返回指向针对该业务系统所注册的算法的指针。该算法通过推断元数据或者通过使用如上所述的业务系统专用的API调用来返回对应于业务系统应用的实例的实体。采用静态模型,对业务系统的每个实体,例如每个WSS列表,需要存储静态元数据。然而,对于动态模型,相同的算法可用于每个实体,例如用于每个WSS列表。对于动态模型,GetEntities调用对每个列表使用相同的算法指针。这导致系统资源的高效使用并降低对业务系统的存储器要求。 [0045] 在一个实施例中,静态与动态元数据模块可被组合。在此实施例中,实现静态模型的元数据数据库位置具有元数据数据库中所存储的实际元数据。实现动态模型的元数据数据库位置具有指向算法的指针,该指针独立于元数据数据库提供元数据。在另一实施例中,动态元数据可用于整个模型。在此实施例中,元数据数据库可能不是必须的,并且算法可以只是被存储在文件中。 [0046] 从动态模型中创建静态模型也是有可能的。任何从动态元数据API函数调用所获取的元数据对象表示在特定时间点所获取的元数据。此信息可被串行化以形成表示该动态模型在一时间点的快照的静态模型。 [0047] 示例业务数据运行时模块302还确定元数据用户的访问许可。该访问许可既可静态地又可动态地确定。静态访问许可确定的示例每个元数据函数的访问控制列表。该访问控制列表用于静态地确定哪个用户具有使用元数据函数的授权。通过包括动态地确定访问许可的函数,示例算法模块502还可提供动态访问控制方法。算法模块502可在允许对元数据函数的访问之前,通过评估多个因素来实现该动态访问方法。例如,这些因素可包括一天中的时间、一周中的天、服务器有多忙碌等。这些因素可以作为诸如用户的名称是否在访问控制列表上等标准访问控制因素的补充来使用。 [0048] 图6示出元数据接口600的示例实施例。所包括的是通常在为特定业务系统而注册的算法中实现的示例元数据函数定义。示例接口600提供了元数据对象是如何相互链接的说明。例如,示例GetEntities函数602将业务线系统(lobSystem)作为参数,并提供对应于该业务线系统的所有实体。与之相反,示例GetLobSystem(取业务线系统)函数604将实体(entity)作为参数,并提供与该实体相关联的全部业务线系统。示例GetMethods函数606将实体(entity)作为参数,并提供与该实体相关联的全部方法。与之相反,示例GetEntities函数608将方法(method)作为参数,并提供与该方法相关联的全部实体。因此,可以看到,实体与业务线系统相互链接,并且实体也与方法相互链接。 [0049] 以类似的方式,示例GetParameter(取参数)函数610将方法(method)作为参数,并提供与该方法相关联的全部参数。示例GetAccessControlList(取访问控制列表)函数 612将元数据对象(accessControlledMetadataObject)作为参数,并提供用于该元数据对象的访问控制列表。该示例元数据对象例如可表示特定用户。 [0050] 还示出了接口600的其他示例函数616。可以理解,这些仅是元数据函数的示例。 其他元数据函数是可能的。 [0051] 图7示出使用静态元数据模型从元数据数据库中获取元数据的方法700的示例流程图。 [0052] 在操作702处,在服务器上发起业务数据操作。例如,业务数据操作可以是给定雇员ID获取雇员信息。在操作704处,该服务器向元数据数据库发起请求以返回涉及该业务数据操作的元数据。例如,该请求可以是获取用于获取雇员信息的方法。在操作706处,从元数据数据库获取元数据。在操作708处,使用该元数据来执行该业务数据信息。例如,使用从元数据数据库返回的方法(业务系统API)从业务系统中获取雇员信息。 [0053] 图8示出用于动态地从数据存储中获取元数据的方法800的示例流程图。 [0054] 在操作802处,将元数据接口存储在服务器上。如上所述,该元数据接口包括用于获取元数据的一个或多个API函数的定义。这些API函数中的至少一个被结构化以便从多个业务系统中获取元数据。因为该接口通常不改变,所以每个服务器通常只执行一次操作 802。 [0055] 在操作804处,将一个或多个算法存储在服务器上。该一个或多个算法中的每一个包括接口中所定义的一个或多个API函数的实现。该API函数实现可包括业务系统专用的一个或多个API函数。在操作806处,在服务器上的注册模块中注册一个或多个算法。该一个或多个算法中的每一个为一特定业务系统而注册。在操作808处,将指向所注册的算法的指针存储在数据存储中。为每个注册的算法存储一指针,每个指针表示所注册的算法的服务器存储器位置。每个要动态地获取其元数据的业务系统通常执行一次操作804-806。 [0056] 在操作810处,由业务数据运行时模块302在服务器上发起业务数据操作。例如,业务数据操作可给定顾客ID获取顾客信息。在操作811处,该业务数据操作做出对元数据的请求。在操作812处,业务数据运行时模块302调用接口API函数,该接口API函数访问包含指针之一的数据存储位置。在操作814处,执行与该指针相关联的算法中所实现的一个或多个接口API函数。在操作816处,从该算法中所实现的元数据API函数获取元数据。 该元数据可通过从业务系统的常规行为中推断元数据来获得,或者该元数据可通过使用业务系统专用的API调用以获得随后通过算法变换成元数据的数据来获得。在操作818处,使用该元数据执行业务数据操作,例如使用顾客ID获取顾客信息。对于每一要动态地获取元数据的业务数据操作重复操作810-818。 [0057] 尽管用结构特征和/或方法动作专用的语言描述了本主题,但可以理解,所附权利要求书中定义的主题不必限于上述具体特征或动作。相反,上述具体特征和动作是作为实现权利要求的示例形式公开的。