1/1页1 跳转到查看:269
发新话题 回复该主题

LINQ to XSD和LINQ to Stored XML

LINQ to XSD和LINQ to Stored XML

微软可编程数据团队的主发开发领导——Shyam Pather在XML 2007大会上进行了一个主题为LINQ to XML:Visual Studio 2008、Silverlight和Beyond的演讲,另外,他还谈到有关LINQ to XML现在和未来和一些技术话题。¦Í§QՄÿ}áforum.entlib.net.cn'Úªòæn:Þ
¦Í§QՄÿ}áforum.entlib.net.cn'Úªòæn:Þ
演讲的前两个部分讲述了LINQ to XML的基础和当前的高级XML特性:¦Í§QՄÿ}áforum.entlib.net.cn'Úªòæn:Þ
¦Í§QՄÿ}áforum.entlib.net.cn'Úªòæn:Þ
    * LINQ to XML相关类,如XDocument、XElement、XAttribute、XNamespace、XName¦Í§QՄÿ}áforum.entlib.net.cn'Úªòæn:Þ
    * VB XML Literals¦Í§QՄÿ}áforum.entlib.net.cn'Úªòæn:Þ
    * 智能感知支持¦Í§QՄÿ}áforum.entlib.net.cn'Úªòæn:Þ
    * 有效的运算符重载¦Í§QՄÿ}áforum.entlib.net.cn'Úªòæn:Þ
          o 通过对XElement和XAttribute进行转型操作,可绕过.Value属性对内容进行操作¦Í§QՄÿ}áforum.entlib.net.cn'Úªòæn:Þ
          o 可置空类型和空合并运算符¦Í§QՄÿ}áforum.entlib.net.cn'Úªòæn:Þ
    * 桥接类,可以通过System.Xml API访问LINQ to XML树¦Í§QՄÿ}áforum.entlib.net.cn'Úªòæn:Þ
¦Í§QՄÿ}áforum.entlib.net.cn'Úªòæn:Þ
演讲的幻灯片可以通过会议的网站下载。¦Í§QՄÿ}áforum.entlib.net.cn'Úªòæn:Þ
¦Í§QՄÿ}áforum.entlib.net.cn'Úªòæn:Þ
在演讲的第三部分中,Shyam展示了未来LINQ to XML的一些扩展:LINQ to XSD和LINQ to Stored XML。¦Í§QՄÿ}áforum.entlib.net.cn'Úªòæn:Þ
¦Í§QՄÿ}áforum.entlib.net.cn'Úªòæn:Þ
LINQ to XSD最早是由微软XML团队在2006年11月发布,其中包括一个为2006年5月LINQ的CTP发布的Alpha 0.1预览版:¦Í§QՄÿ}áforum.entlib.net.cn'Úªòæn:Þ
¦Í§QՄÿ}áforum.entlib.net.cn'Úªòæn:Þ
    LINQ to XSD为.NET开发者提供了基于LINQ to XML的类型化XML编程的支持。程序员使用LINQ to XML对一般的XML树进行操作,而LINQ to XSD则被用来对类型化XML树进行操作,这些XML树是一些将特定的XML schema(XSD)类型模式化为.NET XML类型后的实例。为了帮助理解,请思考一下下面的C# 3.0程序片段,它用LINQ to XML查询XML树中所有项目的总数以生成购买订单:¦Í§QՄÿ}áforum.entlib.net.cn'Úªòæn:Þ
¦Í§QՄÿ}áforum.entlib.net.cn'Úªòæn:Þ
    (from item in purchaseOrder.Elements("Item")¦Í§QՄÿ}áforum.entlib.net.cn'Úªòæn:Þ
    select (double)item.Element("Price") * (int)item.Element("Quantity")¦Í§QՄÿ}áforum.entlib.net.cn'Úªòæn:Þ
    ).Sum();¦Í§QՄÿ}áforum.entlib.net.cn'Úªòæn:Þ
¦Í§QՄÿ}áforum.entlib.net.cn'Úªòæn:Þ
    使用LINQ to XSD,这一查询可以以更加简洁和类型安全的方式来实现:¦Í§QՄÿ}áforum.entlib.net.cn'Úªòæn:Þ
    (from item in purchaseOrder.Item¦Í§QՄÿ}áforum.entlib.net.cn'Úªòæn:Þ
    select item.Price * item.Quantity¦Í§QՄÿ}áforum.entlib.net.cn'Úªòæn:Þ
    ).Sum();¦Í§QՄÿ}áforum.entlib.net.cn'Úªòæn:Þ
¦Í§QՄÿ}áforum.entlib.net.cn'Úªòæn:Þ
2007年7月,针对Visual Studio 2008 Beta 1的另一个Alpha 0.2预览版发布,但在VS 2008 Beta2中没有出现LINQ to XSD预览版,这可能是因为该技术的带头人Ralf Lämmel博士离开了微软。OakLeaf Systems的首席咨询师Roger Jennings了解LINQ to XSD的详细历史,他提及此事并要求微软提供相应的升级。¦Í§QՄÿ}áforum.entlib.net.cn'Úªòæn:Þ
¦Í§QՄÿ}áforum.entlib.net.cn'Úªòæn:Þ
    Ralf Lämmel更新了他的LINQ to XSD实现,在2006年11月为2006年5月LINQ CTP版提供的Alpah 0.1预览版,和为2007年6月5号的Orcas Beta 1中提供的Alpha 0.2预览版中可以进行增强类型化LINQ to XML查询,之后Lämmel博士就返回了德国,在科布伦次大学(University of Koblenz)的计算机科学系担任全职教授。对于VS 2008最终版中的LINQ to XSD更新,负责LINQ to XML的微软XML团队还没有正式表态,希望最终不会因为人员变化导致这个非常有用的LINQ消失。¦Í§QՄÿ}áforum.entlib.net.cn'Úªòæn:Þ
¦Í§QՄÿ}áforum.entlib.net.cn'Úªòæn:Þ
LINQ to Stored XML(数据库中的XML形式)在SQL Server 2005中提供了多种针对XML数据类型列的查询方式,目标是通过提供“从XML schema到类的映射”和“从LINQ表达式到服务器XQuery表达式的查询转换”来实践“提供增强类型化LINQ体验,胜过XML数据类型列中的数据”的理念,下面的查询示例是在一个将‘Resume’作为一个XML数据类型列的AdventureWorks数据库中进行的:¦Í§QՄÿ}áforum.entlib.net.cn'Úªòæn:Þ
¦Í§QՄÿ}áforum.entlib.net.cn'Úªòæn:Þ
    查询:¦Í§QՄÿ}áforum.entlib.net.cn'Úªòæn:Þ
¦Í§QՄÿ}áforum.entlib.net.cn'Úªòæn:Þ
    var q = from o in _data.JobCandidates¦Í§QՄÿ}áforum.entlib.net.cn'Úªòæn:Þ
¦Í§QՄÿ}áforum.entlib.net.cn'Úªòæn:Þ
              where o.Resume.Skills.Contains("production")¦Í§QՄÿ}áforum.entlib.net.cn'Úªòæn:Þ
¦Í§QՄÿ}áforum.entlib.net.cn'Úªòæn:Þ
              select o.Resume.Name.Name_Last;¦Í§QՄÿ}áforum.entlib.net.cn'Úªòæn:Þ
¦Í§QՄÿ}áforum.entlib.net.cn'Úªòæn:Þ
    输出: ¦Í§QՄÿ}áforum.entlib.net.cn'Úªòæn:Þ
¦Í§QՄÿ}áforum.entlib.net.cn'Úªòæn:Þ
    SELECT [Extent1].[Resume].query(¦Í§QՄÿ}áforum.entlib.net.cn'Úªòæn:Þ
              N'declare namespace r="http://.../adventure-works/Resume";¦Í§QՄÿ}áforum.entlib.net.cn'Úªòæn:Þ
              /*[1]/r:Name/r:Name.Last'¦Í§QՄÿ}áforum.entlib.net.cn'Úªòæn:Þ
              ).value(N'.', N'nvarchar(max)') AS [C1]¦Í§QՄÿ}áforum.entlib.net.cn'Úªòæn:Þ
¦Í§QՄÿ}áforum.entlib.net.cn'Úªòæn:Þ
    FROM  [HumanResources].[JobCandidate] AS [Extent1]¦Í§QՄÿ}áforum.entlib.net.cn'Úªòæn:Þ
¦Í§QՄÿ}áforum.entlib.net.cn'Úªòæn:Þ
    WHERE cast(1 as bit) = ([Extent1].[Resume].query(¦Í§QՄÿ}áforum.entlib.net.cn'Úªòæn:Þ
              N'declare namespace r="http://.../adventure-works/Resume";¦Í§QՄÿ}áforum.entlib.net.cn'Úªòæn:Þ
              contains(/*[1]/r:Skills, "production")'¦Í§QՄÿ}áforum.entlib.net.cn'Úªòæn:Þ
              ).value(N'.', N'bit'))¦Í§QՄÿ}áforum.entlib.net.cn'Úªòæn:Þ
¦Í§QՄÿ}áforum.entlib.net.cn'Úªòæn:Þ
这次演讲是第一个证明LINQ to XSD还在继续发展、LINQ to Stored XML也正在进行中的迹像,但可惜不知道发布日期,甚至连何时能提供预览也都没有提及。¦Í§QՄÿ}áforum.entlib.net.cn'Úªòæn:Þ
追随理想和美人而生活!

TOP

 
1/1页1 跳转到
发表新主题 回复该主题