InfoQ

新闻

VS2008技术快讯:LINQ to XSD和LINQ to Stored XML

作者 Hartmut Wilms译者 张海龙 发布于 2007年12月9日 下午7时16分

社区
.NET
主题
.NET框架
标签
LINQ,
XML,
XML Schema,
SQL Server 2005

微软可编程数据团队的主发开发领导——Shyam PatherXML 2007大会上进行了一个主题为LINQ to XML:Visual Studio 2008、Silverlight和Beyond的演讲,另外,他还谈到有关LINQ to XML现在和未来和一些技术话题。

演讲的前两个部分讲述了LINQ to XML的基础和当前的高级XML特性:

  • LINQ to XML相关类,如XDocument、XElement、XAttribute、XNamespace、XName
  • VB XML Literals
  • 智能感知支持
  • 有效的运算符重载
    • 通过对XElement和XAttribute进行转型操作,可绕过.Value属性对内容进行操作
    • 可置空类型和空合并运算符
  • 桥接类,可以通过System.Xml API访问LINQ to XML树

演讲的幻灯片可以通过会议的网站下载。

在演讲的第三部分中,Shyam展示了未来LINQ to XML的一些扩展:LINQ to XSD和LINQ to Stored XML。

LINQ to XSD最早是由微软XML团队在2006年11月发布,其中包括一个为2006年5月LINQ的CTP发布的Alpha 0.1预览版:

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树中所有项目的总数以生成购买订单:

(from item in purchaseOrder.Elements("Item")
select (double)item.Element("Price") * (int)item.Element("Quantity")
).Sum();

使用LINQ to XSD,这一查询可以以更加简洁和类型安全的方式来实现:

(from item in purchaseOrder.Item
select item.Price * item.Quantity
).Sum();

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的详细历史,他提及此事并要求微软提供相应的升级。

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消失。

LINQ to Stored XML(数据库中的XML形式)在SQL Server 2005中提供了多种针对XML数据类型列的查询方式,目标是通过提供“从XML schema到类的映射”和“从LINQ表达式到服务器XQuery表达式的查询转换”来实践“提供增强类型化LINQ体验,胜过XML数据类型列中的数据”的理念,下面的查询示例是在一个将‘Resume’作为一个XML数据类型列的AdventureWorks数据库中进行的:

查询:

var q = from o in _data.JobCandidates

           where o.Resume.Skills.Contains("production")

           select o.Resume.Name.Name_Last;

输出: 

SELECT [Extent1].[Resume].query(
           N'declare namespace r="http://.../adventure-works/Resume";
           /*[1]/r:Name/r:Name.Last'

           ).value(N'.', N'nvarchar(max)') AS [C1]

FROM  [HumanResources].[JobCandidate] AS [Extent1]

WHERE cast(1 as bit) = ([Extent1].[Resume].query(
           N'declare namespace r="http://.../adventure-works/Resume";
           contains(/*[1]/r:Skills, "production")'

           ).value(N'.', N'bit'))

这次演讲是第一个证明LINQ to XSD还在继续发展、LINQ to Stored XML也正在进行中的迹像,但可惜不知道发布日期,甚至连何时能提供预览也都没有提及。

查看英文原文Post-VS 2008-Technology: LINQ to XSD and LINQ to Stored XML

相关赞助商

InfoQ中文站.NET社区,关注.NET和微软的其他企业开发解决方案,通过新闻、文章、视频访谈和演讲以及迷你书等为中国.NET社区提供一流资讯。

没有回复

回复

独家内容

运用Ruby纤程进行异步I/O:NeverBlock和Revactor

Ruby 1.9的纤程(Fibers)和非阻塞I/O越来越收到关注了。我们对来自NeverBlock项目的Mohammad A. Ali和来自Revactor项目的Tone Arcieri进行了访谈。

与杨巍一起探讨OpenSocial

InfoQ中文站有幸与Google中国的产品经理杨巍先生在一起探讨了OpenSocial的相关话题,包括OpenSocial的初衷、构成要素、实现方式、以及要实现它的技术储备等等。

书评:敏捷模式──指向成功的路标

Ryan Cooper对Amr Elssamadisy的新书发表了评价,并认为书中提供了一种为实施敏捷量身定做的框架。本书并没有给出一种人人可用的敏捷方法,而是为读者提供一些模式和工具,用以找出哪些敏捷实践可以最有效地达到该组织机构的特定目标。

构建的可伸缩性和达到的性能:一个虚拟座谈会

这个由业界主要专家们参加的座谈会探究了在使应用程序具备尽可能好的伸缩性及性能的过程中所面临的挑战和思考过程。

OpenSocial的分析与实现

本视频主要对OpenSocial进行了分析,并对实现的方式进行了介绍。其中包括:OpenSocial的开发经验、Container Provider的技术准备、平台的构成要素、具体的规范、以及对未来的展望。

缓存系统MemCached的Java客户端优化历程

Memcached在大型网站被应用得越来越广泛,但是Java客户端并不多,本文作者基于现有的开源客户端进行了封装优化,并翔实记录了这一过程。

超越SOA:动态业务应用的新企业应用框架(2)

在他们文章的第二部分,作者探讨了动态业务应用的架构并介绍了资源容器的概念。他们示范了如何在JEE之上构建这个架构,以及它如何影响实现生产力。

使用ClickOnce细分发布版本

ClickOnce让WinForms应用程序的部署轻而易举。David Cooksey演示了如何在ASP.NET中编写一个HttpHandler来实现对ClickOnce部署的版本细分。