专利名称:根据模式的命令行外壳命令生成的制作方法
技术领域:
本发明涉及代码生成工具,尤其涉及根据模式的命令行外壳命令生成。
背景技术:
命令外壳是支持操作系统内的一些基本命令的常规命令行解释器。在一些情况下,可提供单独的控制台应用程序,以被从这些外壳中调用。它们也可包括脚本语言(批处理文件),其可用来自动执行各种任务。然而,它们不是旨在自动化操作系统的图像用户界面(⑶I)功能的所有方面,这部分是由于通过该图像界面展示的操作的命令行等效物是有限的,而且脚本语言通常是初级的并且不允许创建复杂脚本。结构化文档,例如可扩展标记语言(XML)文档在计算中普遍使用。XML模式文档或 XSD是以XML模式语言编写的文档。XSD可用来表达这样一组规则,XML文档必须遵守以便依照这一模式被视为有效。但是,不像其他模式语言,依照XSD确定文件的有效性会产生依附于特定数据类型的信息集。命令外壳命令(也被称为”cmdlet”)可能不足以修改由XSD 模式定义的数据,尤其是当模式数量众多时。
发明内容
提供本发明内容是为了以简化的形式介绍将在以下具体实施方式
中进一步描述的一些概念。本发明内容并非旨在标识所要求保护的主题的关键特征或必要特征,也不旨在用于帮助确定所要求保护的主题的范围。各实施例涉及一种代码生成工具,其能够在编译时从诸如XSD模式的一模式中创建命令外壳命令或“cmdlet”。也可在运行时生成cmdlet。代码生成器可生成类,以表示由模式定义的数据,且命令外壳生成代码可使用类的知识来生成合适的命令外壳类以操作数据。根据其他实施例,在优化由代码生成工具生成的类模型之后,可插入插件。插件可修改模型,插入它们自己的代码,或者禁止代码生成并从模型中生成它们自己的代码。通过阅读下面的具体实施方式
并参考相关联的图形,这些及其他特点和优点将变得显而易见。可以理解,前述一般描述和以下具体实施方式
均仅是说明性的,且不限制所要求保护的各方面。
图1是示出在根据各实施例的系统中如何由管理者通过应用程序编程接口(API) 来操作依照一模式的数据的概念图。图2是示出根据各实施例的系统中的主要组件和交互的另一概念图。图3是示出根据各实施例的系统中的步骤流程的方框图。图4是其中可实现根据各实施例的系统的联网环境。图5是其中可实现各实施例的示例计算操作环境的框图;以及图6示出根据各实施例的从XSD模式自动生成命令外壳命令的过程的逻辑流程图。
具体实施例方式如上概述,可从诸如XSD的模式中自动生成命令外壳命令(cmdlet)以允许用户操作根据该模式结构化了的数据。代码生成器可生成类,以表示由该模式定义的数据,且命令外壳生成代码可使用类的知识来生成合适的命令外壳类,以操作数据。可使用引用普通模型的插件来生成任何类型的代码,而不需要解析这些模式。在以下详细描述中,参考了构成了详细描述的一部分的附图,其中以图解的方式示出了具体实施方式
或示例。可组合些方面,可利用其他方面,并且可以做出结构上的改变而不背离本发明的精神或范围。因此,以下具体实施方式
并不旨在限制,并且本发明的范围由所附权利要求及其等效方案来限定。虽然在结合在个人计算机上的操作系统上运行的应用程序执行的程序模块的一般上下文中描述了各实施方式,但是本领域技术人员会认识到各方面也可以结合其他程序模块实现。一般而言,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、组件、数据结构和其他类型的结构。此外,如本领域技术人员理解的,各实施例可以用其他计算机系统配置来实施,包括手持式设备、多处理器系统、基于微处理器或可编程消费者电子产品、小型计算机、大型计算机以及类似计算设备。各实施方式还能在任务由通过通信网络链接的远程处理设备来执行的分布式计算环境中实现。在分布式计算环境中,程序模块可以位于本地和远程存储器存储设备中。各实施例可被实现为计算机实现的过程(方法)、计算系统、或者如计算机程序产品或计算机可读介质等制品。计算机程序产品可以是计算机系统可读并且编码包括用于使得计算机或计算系统执行示例过程的指令的计算机程序的计算机存储介质。例如,计算机可读存储介质可经由易失性计算机存储器、非易失性存储器、硬盘驱动器、闪存驱动器、软盘或紧致盘和类似介质中的一个或多个来实现。贯穿本说明书,术语“平台”可以是用于管理计算系统的软件和硬件组件的组合。 平台的示例包括但不限于,在多个服务器上执行的托管服务、在单个服务器上执行的应用程序以及类似系统。术语服务器一般指通常在联网环境中执行一个或多个软件程序的计算设备。然而,服务器还可被实现为视作网络上的服务器的、在一个或多个计算设备上执行的虚拟服务器(软件程序)。关于这些技术和示例操作的更多细节在以下提供。图1包括示出在根据各实施例的系统中如何由管理者通过应用程序编程接口 (API)来操作依照一模式的数据的概念图100。模式(或模式文档)是元数据的抽象集,包括一组模式组件,例如元素和属性声明,以及复杂和简单类型定义。可通过处理模式文档集来创建各组件,模式文档集可包含这些组件的源语言定义。可由名称空间来组织模式文档。所有命名的模式组件属于一个目标名称空间,且该目标名称空间是模式文档作为整体的属性。模式文档可包含相同名称空间的其他模式文档,也可导入不同名称空间的模式文档。当对照一模式验证文档的实例时,可把要用来验证的模式作为参数提供给验证引擎,或者使用特别属性从文档实例中直接引用它。可将该模式用来生成人类可读文献和/或代码。该代码允许XML文档内容在编程环境内被当作对象处理。
如图示100所示,数据存储102可依照诸如XSD的特定模式将数据储存在文档中。 XSD可用来表达这样一组规则,XML文档必须遵守以便依照该模式被视为“有效”。根据一些实施例,通过API 106访问XML文档104的管理者110可使用命令外壳命令或cmdlet来操作XML文档104。可提供命令外壳来作为管理者计算设备108的操作系统的部分。cmdlet 是被设计来通过命令外壳展示功能的专用类。如果命令是可执行文件,命令外壳可在单独进程中启动它。另一方面,cmdlet在命令外壳进程中执行。命令外壳也可提供交互命令行接口,其中可输入命令并显示它们的输出 。命令外壳还允许创建cmdlet的别名,别名可由命令外壳文字上地翻译成原始命令的调用。命令外壳也可支持命令的已命名参数和位置参数两者。在执行cmdlet中,可由命令外壳自身执行将自变量值绑定到参数的工作。如前所述,cmdlet是命令外壳环境中实现特定功能的专用命令。这些是命令外壳堆栈中的本机命令。cmdlet可跟随一 <verb>-<n0un> 动词 >-< 名词 >)命名格式,使它们成为自描述的。Cmdlet可输出它们的结果作为对象,或者包含数组的对象集,且可选择性接收那个形式的输入。但是,cmdlet始终个别地处理对象。对于对象集,命令外壳可在集合中的每一对象上按顺序调用cmdlet。cmdlet类的实现可指向任何API 106。命令外壳可确保特定API是可用的,例如 WriteObjectO,其用于访问命令外壳特定功能,诸如将结果对象写入到流水线。可使用驱动器号来展示诸如数据存储102的数据存储,且它们的内部层级可通过目录来寻址。图2包括示出根据各实施例的系统中的主要组件和交互的概念图200。在面向对象的编程中,类是一种构造,其用作模板以创建那个类的对象。模板描述了该类的对象共享的状态和行为。给定类的对象被称为该类的实例。包含实例的类可被视为那个对象的类型。 类是计算机程序内的概念模型,且封装了其代表的概念的状态和行为。类通过被称为属性的数据占位符来封装状态,且通过被称为方法的代码的可重用块来封装行为。类也可被视为包含特定种类元数据的聚合包。类具有接口和结构两者。接口描述了如何与类及其具有方法的实例进行交互,而结构描述了数据如何在实例中分割成属性。 类也可具有运行时的表示(元对象),其为操作对象相关元数据提供运行时的支持。根据各实施例的系统,可按照XSD模式222来结构化数据。代码生成工具224可读取该模式并创建类230的模型228,其将由代码生成工具224创建。模型228可包含诸如类名称、属性、数据类型等信息。它也可包含关于选项和枚举的信息,选项通过实现一接口来处理。可从类230中生成cmdlet 232。类230可允许使用XML元素(Xelement)进行序列化/去序列化,并验证模式中包含的条件。唯一,密钥和keyref条件可以是验证的例外。 无论何时在已生成的类中更新属性,即可自动更新Xelement。因此,可同步维护属性值和 Xelement0在优化模型之后,代码生成工具224也可能够插入插件226。插件可修改模型,插入它们自己的代码,或者禁止代码生成并从模型中生成它们自己的代码。对于代表数据存储中的数据的类,插件可修改模型228并向这些类中插入代码。当生成命令外壳cmdlet 234时,插件可禁止默认代码生成并使用模型228来生成cmdlet 234。命令外壳cmdlet可内部地调用数据存储类。图3包括示出根据各实施例的系统中的处理流程的方框图300。根据各实施例的代码生成工具也可具有在修改模型、插入它们自身代码、或禁止代码生成并从模型344生成它们自身代码342的第二阶段之后,插入插件348的能力。插件348可采用类生成器展示的对象模型来提供关于已生成的类和接口的信息。因此,类生成器自身可以是独立于产品的,而命令外壳插件是依赖于产品的。以此方式,几乎任何类型的代码可从对象模型生成, 允许自动生成命令外壳cmdlet而不必解析模式。以上以诸如类、模型、插件等特定组件描述了图1至图3的各示例系统。各实施例并非限制于根据这些示例配置的命令外壳的自动代码生成。另外,描述了用于从XSD模式生成命令外壳cmdlet的特定顺序的操作。各实施例也不限于上述的示例操作顺序。图4是可以实现各实施例的示例联网环境。可通过在一个或多个诸如如托管服务的服务器418上运行的软件来实现代码生成工具,该代码生成工具能够以使用引用了普通模型的插件来生成代码而不必解析模式的能力,自动地从预定义模式中生成命令外壳命令。该系统可以便利诸如智能电话413、膝上型计算机412、以及台式计算机411( ‘客户端设备’)等各个计算设备上的客户端应用程序之间通过网络410的通信。如前所述,能够在编译时或运行时从诸如XSD模式的一模式中创建命令外壳 cmdlet的代码生成工具,可以生成类以表示由模式定义的数据,且命令外壳生成代码可使用类的知识生成用于操作数据的合适命令外壳类。在优化由代码生成工具生成的类模型之后,可插入插件。插件可修改模型,插入它们自己的代码,或者禁止代码生成并从模型中生成它们自己的代码。客户端设备411-413可以是由托管服务管理的瘦客户端。一个或多个服务器418 可提供操作系统功能的一部分,包括代码生成工具。数据,例如模式、模型和类可储存在一个或多个数据存储(例如数据存储416)中,其可由任一服务器418或者数据库服务器414管理。网络410可包括服务器、客户端、因特网服务供应商、以及通信介质的任何拓扑结构。根据各实施例的系统可具有静态或动态拓扑结构。网络410可以包括诸如企业网络等安全网络、诸如无线开放网络等非安全网络、或因特网。网络410还可通过诸如PSTN或蜂窝网络等其他网络来协调通信。网络410提供此处描述的节点之间的通信。作为示例而非限制,网络410可包括诸如声学、RF、红外线和其他无线介质等无线介质。可以采用计算设备、应用程序、数据源和数据分发系统的许多其它配置来实现基于模式的自动命令外壳命令生成。此外,图4中所讨论的联网环境仅用于说明目的。各实施方式不限于示例应用程序、模块、或过程。图5及相关联的讨论旨在提供对其中可实现各实施方式的合适计算环境的简要概括描述。参考图5,示出了根据各实施例的、诸如计算设备500等用于应用程序的示例计算操作环境的框图。在一基本配置中,计算设备500可以是台式计算机,并包括至少一个处理单元502和系统存储器504。计算设备500还可包括协作执行程序的多个处理单元。取决于计算设备的确切配置和类型,系统存储器504可以是易失性的(诸如RAM)、非易失性的 (诸如ROM、闪存等)或是两者的某种组合。系统存储器504通常包括适于控制平台操作的操作系统505,诸如来自华盛顿州雷德蒙市的微软公司的WINDOWS 操作系统。系统存储器504还可以包括一个或多个软件应用程序,诸如程序模块506和代码生成工具522。计算设备500可在其操作系统内提供命令外壳,用于支持基本命令。为了向用户提供通过命令外壳来操作遵循如XSD的模式的数据的能力,代码生成工具522可通过根据此模式中的类定义来创建各类而自动生成cmdlet。可优化为类生成的模式,且为生成代码使用插件而不需要解析模式。该基本配置在图5中由虚线508内的那些组件示出。计算设备500可具有附加特征或功能。例如,计算设备500还可包括附加数据存储设备(可移动和/或不可移动),诸如例如磁盘、光盘或磁带。在图5中通过可移动存储 509和不可移动存储510示出了这样的附加存储。计算机可读介质可包括以用于存储诸如计算机可读指令、数据结构、程序模块或其它数据等信息的任何方法或技术实现的易失性和非易失性、可移动和不可移动介质。系统存储器504、可移动存储509和不可移动存储510 都是计算机可读介质的示例。因此,计算机可读存储介质包括但不限于RAM、ROM、EEPROM、 闪存或其它存储器技术、CD-ROM、数字多功能盘(DVD)或其它光学存储、磁带、磁盘存储或其它磁性存储设备、或可用于储存所需信息并可由计算设备500访问的任何其它介质。任何这种计算机存储介质都可以是计算设备500的一部分。计算设备500也可具有输入设备 512,诸如键盘、鼠标、笔、语音输入设备、触摸输入设备和类似输入设备。还可包括输出设备 514,诸如显示器、扬声器、打印机和其他类型的输出设备。这些设备在本领域中公知并且无需在此处详细讨论。计算设备500还可包含通信连接516,该通信连接允许该设备诸如通过分布式计算环境中的有线或无线网络、卫星链接、蜂窝链接、短程网络和类似机制来与其他设备518 进行通信。其他设备518可包括服务器、台式计算机、手持计算机以及类似设备。通信连接 516是通信介质的一个示例。通信介质可在其中包括计算机可读指令、数据结构、程序模块或其它数据。作为示例而非限制,通信设备介质包括有线介质,如有线网络或直接线连接, 以及诸如声学、射频(RF)、红外线及其他无线介质之类的无线介质。各示例实施例还包括各种方法。这些方法可以用任何数量的方式,包括本文中所描述的结构来实现。一种此类方式是通过本文中描述的类型的设备的机器操作。另一可任选方式是结合一个或多个人类操作者执行该方法的各个操作中的某一些来执行该方法的一个或多个操作。这些人类操作者无需彼此同在一处,而是其每一个可以仅与执行程序的一部分的机器同在一处。图6示出根据各实施例的从XSD模式自动生成命令外壳命令的过程600的逻辑流程图。过程600可被实现为操作系统中命令外壳的一部分。过程600开始于操作610,在此从数据存储检索XSD模式。尽管为解释目的,描述各示例实施例使用了 XSD,但是各实施例并不限于XSD,而是可使用任何定义结构化数据的模式来自动生成用来操作数据的命令外壳cmdlet。在操作620,解析此模式以生成将由代码生成工具创建的类的模型。可在操作630 生成此模型并可包括与类相关联的信息。在操作640,在模式不直接转换到一个API的情况中,可优化此模型。接下来,可在操作650生成代码。所生成的类可允许序列化或去序列化并验证模式的条件。包括在过程600内的各操作仅出于说明目的。根据各实施例的基于模式的自动命令外壳命令生成可通过具有更少或更多步骤的相似过程、以及不同的操作次序来实现。以上说明书、示例和数据提供了对各实施方式组成的制造和使用的全面描述。尽管用结构特征和/或方法动作专用的语言描述了本主题,但可以理解,所附权利要求书中定义的主题不必限于上述具体特征或动作。相反,上述具体特征和动作是作为实现权利要求和各实施方式的示例形式而公开的。
权利要求
1.一种至少部分在计算设备中执行的,用于根据一模式的自动命令外壳命令代码生成的方法,所述方法包括接收所述模式(610);生成与所述模式相关联的类的模型(630);优化所述模型以允许直接将所述模式转换成应用程序编程接口 API (640);以及生成命令代码以允许根据由已优化的模型定义的类来操作按照所述模式结构化了的数据(650)。
2.如权利要求1所述的方法,还包括 解析所接收到的模式(620)。
3.如权利要求2所述的方法,其特征在于,所述模型(344)包括以下一组中的至少一个类名称、属性,以及与所述类(230)相关联的数据类型。
4.如权利要求3所述的方法,其特征在于,所述模型(344)还包括与以下至少之一相关联的信息选项和枚举。
5.如权利要求1所述的方法,还包括在所述模型的优化(346)之后,插入插件(348),其中所述插件执行以下一组中的至少一个修改所述模型、插入插件代码、禁用代码生成,以及生成所述插件代码(352)。
6.如权利要求5所述的方法,其特征在于,所述插件修改所述模型,并将插件生成的代码插入到表示所述数据的模型的类中。
7.如权利要求5所述的方法,其特征在于,所述插件(348)利用由类生成器展示的对象模型来提供关于已生成的类和接口的信息。
8.如权利要求7所述的方法,其特征在于,所述类生成器是独立于产品的,而所述插件 (348)是依赖于产品的。
9.一种用于提供根据一模式的自动命令外壳命令代码生成的计算设备,所述计算设备包括存储器(504);处理器(502),耦合到所述存储器,其中所述处理器执行一代码生成工具(522),所述代码生成工具被配置为 接收所述模式(610); 生成与所述模式相关联的类的模型(630);优化所述模型以允许直接将所述模式转换成应用程序编程接口 API (640); 如果提供了插件(348),则插入所述插件,其中所述插件被配置为 修改所述模型, 禁用代码生成, 生成插件代码,以及插入所述插件代码,以及生成命令代码以允许根据由已优化的模型定义的类来操作按照所述模式结构化了的数据(650)。
10.如权利要求9所述的计算设备,其特征在于,所述模式(342)是XSD模式。
11.如权利要求9所述的计算设备,其特征在于,所述代码生成工具522还被配置为根据所生成的模型2 来生成各类,且所述各类允许如下之一利用XML元素来序列化和去序列化。
12.如权利要求11所述的计算设备,其特征在于,所述各类还允许验证所述模式222中包含的条件。
13.一种计算机可读存储介质,其上储存有用于根据一模式的自动命令外壳cmdlet代码生成的指令,所述指令包括接收定义要操作的数据的结构的所述模式(610); 生成与所述模式相关联的类的模型(630);优化所述模型以允许直接将所述模式转换成应用程序编程接口 API (640); 如果提供了插件,则插入所述插件,其中所述插件执行来自以下一组中的至少一个修改所述模型、禁用代码生成、生成cmdlet的插件代码,及插入所述插件代码;以及生成所述cmdlet的命令代码以允许根据由已优化的模型定义的类来操作按照所述模式结构化了的数据(650)。
14.如权利要求13所述的计算机可读介质,其特征在于,所述指令还包括 通过所述API (106)来允许所述数据的操作。
15.如权利要求13所述的计算机可读介质,其特征在于,所述指令还包括以下之一 利用Xelement进行序列化和去序列化,所述XML元素响应于对应类Q30)中的至少一个属性的更新而自动更新。
全文摘要
本发明涉及根据模式的命令行外壳命令生成,提供一种代码生成工具,能够在编译时或运行时从诸如XSD模式的一模式创建命令外壳命令。代码生成器生成各个类以表示由模式定义的数据,且命令外壳生成代码可使用这些类的知识来生成合适的命令外壳类以操作数据。在由代码生成工具生成的类模型的优化之后,可插入插件。插件能够修改模型,插入它们自己的代码,或者禁止代码生成并从模型中生成它们自己的代码。
文档编号G06F9/44GK102289367SQ20111015068
公开日2011年12月21日 申请日期2011年5月26日 优先权日2010年5月27日
发明者E·杨, J·卡列夫, N·A·卡梅达 申请人:微软公司