日本免费全黄少妇一区二区三区-高清无码一区二区三区四区-欧美中文字幕日韩在线观看-国产福利诱惑在线网站-国产中文字幕一区在线-亚洲欧美精品日韩一区-久久国产精品国产精品国产-国产精久久久久久一区二区三区-欧美亚洲国产精品久久久久

二 搶先體驗微軟最新文件系統(tǒng)WINFS


四.Relationships
在WinFS中 , TYPE之間可以有關(guān)聯(lián)(Relationship) , Relationship創(chuàng)建在源類型的實例及目的類型的實例之間(源實例與目的實例可否是同一類型?) 。源類型的實例是不可缺少的 , 一旦發(fā)現(xiàn)源類型的實例不存在 , Relationship會立即被刪除 。但是目的類型的實例卻可以缺少 , 這種缺少目的類型的實例的Relationship被稱為“Dangling Relationship“ 。
對于一個Relationship來說 , 它也可以與Type那樣擁有自己的Properties/Fields 。舉個例子 , 比如一個Contact與一個Message之間存在一個Participant的關(guān)系 , 而這個關(guān)系可以有一個nickname的屬性 。
在WinFS中 , 有兩種Relationship , 一種叫Holding Relationship , 一種叫Reference Relationship 。
1.Holding Relationship
在這種關(guān)系中 , 幾個源實例可以擁有同一個目的實例 , 只要還有源實例存在 , 關(guān)系就存在 。其還具有以下幾個特點:
(1)每一個實例都必須要有一個以上的Holding Relationship指向它;
(2)具有Holding Relationship的實例間必須是處于同一個store中 。(對于一個WinFS的Item來說 , 它完整的UNC名空間的形式是"machinestoresharefolder1folder2...folderNitem");
(3)源實例和目的實例必須同時存在 , 不能允許Dangling Relationship的存在 。
(4)實例間的關(guān)系不能形成回路 , 構(gòu)成一個有向非循環(huán)圖(Directed acyclic graph , DAG) 。
(5)Holding Relationship采用層次式的命名空間(如上所示) , 每一個這樣的Relationship都會指明目標(biāo)實例的名稱 , 而每一個擁有這種Relationship的源實例的名字則必須唯一 。
2.Reference Relationship
在這種關(guān)系中 , 可以允許存在Dangling Relationship , 可以允許實例分布在同一個store或者不同的store中 , 實例間的關(guān)系可以形成回路 。比如一個Document類型的實例用一個author的關(guān)系指向一個contact類型的實例 , 而這個contact類型的實例也可以用一個reviewer的關(guān)系指向Document類型的實例 。
以上說的都是一些很理論性的東西 , 這時會想 , 以上說的內(nèi)容是通過怎樣的形式表現(xiàn)出來呢?在操作上 , 在編程上 。
在defaultstore目錄下有一個Schemas的目錄 , 發(fā)現(xiàn)里面是一些Item , 比如Audio、Contact、Mail等等 , 與上面所說的Type的名稱相對應(yīng) 。再翻閱資料 , 發(fā)現(xiàn)WinFS有專門的基于XML語法的Schemas Definition Language 。比如Contact類型有Contact.xml作為其類型定義 。而Person的定義為
ExtendsType="Core.Contact" ExtendsVersion="1">
Nullable="true" TypeMajorVersion="1">
Nullable="true" MultiValued="true"
TypeMajorVersion="1">

Nullable="true" MultiValued="true"
TypeMajorVersion="1">

TypeMajorVersion="1">
...

編程的時候 , 只要將System.Storage加載進(jìn)來 , 便可進(jìn)行對WinFS的編程 。比如Contact.ListContacts()方法是將storage中所有的Contact都列出來 , 創(chuàng)建一個contact的代碼如下:
//This actually create the person object.
Person person = Person.CreatePersonalContact(context);
person.DisplayName = name;
//This populates the person object with some valuable data
//such as an e-mail address and a phone number
SmtpEmailAddress email = new SmtpEmailAddress("shanede@microsoft.com");
CategoryRef primaryEmailCategory = new CategoryRef(GeneralCategories.Primary);
email.Categories.Add(primaryEmailCategory);
person.PersonalEmailAddresses.Add(email);

推薦閱讀