编辑“︁
WinFS
”︁(章节)
跳转到导航
跳转到搜索
Template:Editnotice load/content
警告:
您没有登录。如果您进行任何编辑,您的IP地址会公开展示。如果您
登录
或
创建账号
,您的编辑会以您的用户名署名,此外还有其他益处。
反垃圾检查。
不要
加入这个!
=== 資料模型 === WinFS模型資料會使用資料項目、其[[RDBMS|關聯]]、延伸(extension)與規則來規範其使用方式<ref name="WinFSFiles"/>。WinFS必須知道資料項目的類型與結構,才能將資料項目中儲存的資訊提供給要求該資訊的應用程式。這是透過使用結構描述來完成。對於即將儲存在WinFS中的每種資料項目類型,您必須提供對應的結構描述,以定義資料的類型、結構與關聯。這些結構描述是使用[[XML]]來定義<ref name="Dev1"/>。 預先定義的WinFS結構描述不僅包含文件、電子郵件、約會、工作、媒體、音訊、視訊等的結構描述;也包含系統結構描述,其中包括組態、程式與其他系統相關資料<ref name="WinFSFiles"/>。如果要讓應用程式在WinFS中儲存資料,但不想與其他應用程式共用該資料的結構,或這些資料可跨系統提供,則可以針對個別應用程式定義自訂結構描述<ref name="WinFSFiles"/>。 ==== 型別系統 ==== [[File:WinFS1.svg|225px|thumb|WinFS Type Hierarchy]] 檔案系統與WinFS之間最大的差異在於WinFS知道其所儲存之每個資料項目的型別。型別會指定資料項目的屬性(property)。WinFS型別系統與.NET Framework的[[面向对象程序设计|類別與繼承]]概念緊密關聯。透過[[面向对象程序设计|延伸]]與巢狀化任何預先定義的型別,即可建立新型別<ref name="Dev1"/>。 WinFS提供四種預先定義的基礎型別– ''Items''、''Relationships''、''ScalarTypes''與''NestedTypes''<ref name="Dev1"/>。Item是可儲存的基礎資料物件,而Relationship則是兩個資料項目之間的關係或連結。因為所有WinFS項目都必須具有型別,儲存之項目的型別會定義其屬性(property)。Item的屬性可以是ScalarType(定義屬性可包含之資訊的最小單位)或NestedType(多個ScalarTypes和/或NestedTypes的集合)。所有WinFS型別都以.NET CLR [[类_(计算机科学)|類別]]的方式提供<ref name="MSDNMag"/>。 任何以資料單位(例如:連絡人、影像、視訊或文件等)所代表的物件都可以儲存在WinFS存放區中做為Item型別的特殊項<ref name="MSDNMag"/>。根據預設,WinFS為檔案、連絡人、文件、圖片、音訊、視訊、連絡人與郵件提供Item型別。檔案Item可以儲存任何一般資料,這在檔案系統中是儲存為檔案。但除非為檔案提供進階結構描述(透過將它定義為特殊化的Item),WinFS將無法存取其資料。此類檔案Item僅能支援與其他Item相關聯<ref name="Dev1"/>。 [[File:WinFS2.svg|225px|thumb|Defining a new Type]] 開發人員可以擴充這些型別或基礎型別Item,以為其自訂資料提供型別。Item中包含的資料是以屬性或實際儲存資料的欄位來定義。例如,''連絡人''Item可能包含型別為ScalarType的''Name''欄位,以及型別為NestedType(進一步由兩個ScalarType組成)的''Address''欄位。為定義此型別,會擴充基礎類別Item,而且會新增必要欄位至該類別<ref name="Dev1"/>。NestedType欄位可定義為包含兩個ScalarType欄位的另一個類別。一旦定義型別,就必須定義結構描述以表示每個欄位的原始型別,例如Name欄位的型別是String、Address欄位是自訂的Address類別,每個欄位的型別都是String。WinFS支援的其他原始型別包括[[整数 (计算机科学)|Integer]]、[[字节|Byte]]、[[十进制#Decimal fractions|Decimal]]、[[IEEE 754|Float]]、[[双精度浮点数|Double]]、[[真值|Boolean]]與DateTime等<ref name="Dev1"/>。結構描述也會定義哪些欄位為必要欄位,哪些欄位為選用欄位<ref name="Dev2">{{cite web | url = http://msdn2.microsoft.com/en-us/library/ms996631.aspx | title = A Developer's Perspective on WinFS: Part 2 | date = July 2004 | accessdate = 2007-06-30 | author = Shawn Wildermuth | work = MSDN | publisher = Microsoft | archive-date = 2008-04-04 | archive-url = https://web.archive.org/web/20080404203455/http://msdn2.microsoft.com/en-us/library/ms996631.aspx }}</ref>。系統會使用以此方式定義的連絡人Item來儲存有關連絡人的資訊,方式是填入屬性欄位並予以儲存。首次儲存時只需要填入標示為必要的欄位。<ref name="MSDNMag"/>其他欄位可在稍後由使用者填入,或完全不填入。若需要新增多個欄位(例如:“上次交談日期”),只要視需要簡單地擴充此型別即可。您可以使用相同的方式定義其他資料的Item型別。 [[File:WinFS3.svg|225px|thumb|Relationships]] WinFS會為所有已定義的Item建立[[RDBMS|資料表]]<ref name="Dev2"/>。為Item定義的所有欄位會構成資料表的資料欄,而每個對應Item的Item實體則會儲存為資料表的資料列。當資料表中的某些欄位參照某些其他資料表中的資料時,即表示這些資料表之間有特定的關係存在。關係的結構描述會指定相關的資料表有哪些,以及關係的種類與名稱。WinFS執行階段負責管理關係結構描述<ref name="MSDNMag"/>。所有Item都會公開為.NET CLR [[面向对象程序设计|物件]],此物件具有統一的介面,可讓應用程式輕鬆存取欄位中儲存的資料。因此,任何應用程式都可以擷取具有任何Item型別的物件,而且可以使用該物件中的資料,而不需要瞭解欄位中儲存之資料的實際結構<ref name="Dev1"/>。 WinFS型別是公開為.NET類別,它可以具現化為.NET物件。透過設定屬性即可在這些型別中儲存資料。完成之後,它們變會永久儲存至WinFS存放區。使用''ItemContext''類別即可存取WinFS存放區。ItemContext允許以交易式方式存取WinFS存放區,例如,從將ItemContext物件繫結到存放區到因為全部成功而關閉或所有變更都已復原。當資料發生變更時,它們不會寫入到磁碟;而是會寫入到記憶體內的記錄。只有當連線關閉時,變更才會以批次方式寫入磁碟。這樣可協助最佳化磁碟I/O<ref name="DotNetShow"/>。下列程式碼片段會建立連絡人並儲存在WinFS存放區中。 <syntaxhighlight lang="csharp"> //Connect to the default WinFS store using(ItemContext ic = ItemContext.Open()) { //Create the contact and set the data in appropriate properties ContactEAddress contact = new ContactEAddress(); //Name is a ComplexType contact.Name = new PersonName(); contact.Name.Displayname = "Doe, John"; contact.Name.FirstName = "John"; contact.Name.LastName = "Doe"; //Telephone number is a ComplexType contact.TelephoneNumber = new TelephoneNumber(); //ComplexType contact.TelephoneNumber.Country = CountryCode.Antarctica; contact.TelephoneNumber.Areacode = 4567; contact.TelephoneNumber.Number = 9876543210; //Age is a SimpleType contact.Age = 111; //Add the object to the user's personal folder. //This relates the item with the Folder pseudo-type, for backward //compatibility, as this lets the item to be accessed in a folder //hierarchy for apps which are not WinFS native. Folder containingFolder = UserDataFolder.FindMyPersonalFolder(); containingFolder.OutFolderMemberRelationship.AddItem(ic, contact); //Find a document and relate with the document. Searching begins by creating an //ItemSearcher object. Each WinFS type object contains a GetSearcher() method //that generates an ItemSearcher object which searches documents of that type. using(ItemSearcher searcher = Document.GetSearcher(ic)) { Document d = searcher.Find(@"Title = 'Some Particular Document'"); d.OutAuthoringRelationship.AddItem(ic, contact); } //Since only one document is to be found, the ItemContext.FindOne() method //could be used as well. //Find a picture and relate with it using(ItemSearcher searcher = Picture.GetSearcher(ic)) { Picture p = searcher.Find(@"Occasion = 'Graduation' and Sequence = '3'"); p.OutSubjectRelationship.AddItem(ic, contact); } //Persist to the store and close the reference to the store ic.Update(); ic.Close(); } </syntaxhighlight>
摘要:
请注意,所有对Local Chinese Wikipedia的贡献均可能会被其他贡献者编辑、修改或删除。如果您不希望您的文字作品被随意编辑,请不要在此提交。
您同时也向我们承诺,您提交的内容为您自己所创作,或是复制自公共领域或类似自由来源(详情请见
Project:著作权
)。
未经许可,请勿提交受著作权保护的作品!
取消
编辑帮助
(在新窗口中打开)
导航菜单
个人工具
未登录
讨论
贡献
创建账号
登录
命名空间
页面
讨论
大陆简体
不转换
简体
繁體
大陆简体
香港繁體
澳門繁體
大马简体
新加坡简体
臺灣正體
查看
阅读
编辑
查看历史
更多
搜索
导航
首页
最近更改
随机页面
MediaWiki帮助
工具
链入页面
相关更改
特殊页面
页面信息