久闻WinFS , 好不容易才将内存升级到512M , 在VM中安装了Longhorn后 , 发现WinFS还处于很基本的测试阶段 , 很多功能都有限制 , 只有一个Defaultsore目录提供了支持 , 而且暂时还无法去更改其设置 , 凡是放到里面的文件的特点都会被侦测到并加以归类 。凡是从FAT32或NTFS迁移过去的文件 , 假如有Meta Data , 比如MP3文件的ID3这类信息会被保存下来 , 假如无Meta Data的文件 , 也可以创建属于其的Meta Data 。从我的硬盘上COPY了几个MP3、WMA文件到虚拟机的硬盘上 。
1.打开Computer , 进入Defaultstore 。
2.本想建个Music的目录 , 但是却出现错误 , 后来才发现是因为WinFS正处于测试中 , 无法命名其中的项 。
3.将音乐文件拷到Defaultstore的根目录下 。
4.在Start Menu中打开Music目录 , 点击左侧的Recently Added , 出现刚才我新加进的几个音乐文件 。
5.点击鼠标右键 , 选择VIEw?Detail , 然后点击上方的Genre?Stack by Genre , 发现音乐文件以其音乐的类型(比如Pop)分成几个Item , 点击Item进去 , 可以浏览该类型的文件 。
6.在左侧的Filter by输入框中输入pop(注意 , 非音乐文件文件的名字) , 凡是pop类型的音乐文件都显示出来 , 而非该类型的音乐文件都被隐藏 。
7.将一些图片放入Defaultstore中 , 在Start Menu中打开Photos and Videos目录 , 在Filter by处输入1024*768 , 发现大小是1024*768的图片都被显示出来 。
用到这里 , 感觉WinFS好象没什么 , 只是作为一个文件的Meta Data的搜索器而已 。但估计问题绝对不会象我所想的那么简单 , 所以便继续查找资料 , 追寻下去 , 发现了许多有趣的东西 。WinFS的数据模型:
WinFS是传统的文件系统以及关系数据库的延伸 , 它不仅存储以往的文件类型数据 , 也可以存储非文件类型的数据 , 比如一些个人信息、日程表、邮件等等 。因此 , 在WinFS中存储的单位不应该用文件来描述 , 准确说来应该是Item 。
首先要弄清楚几个概念:Types/Subtypes、PropertIEs/Fields、Constraints、Relationships 。
一.Types/Subtypes
Type和Subtype与面向对象的类及子类的概念相象 , WinFS中存储的数据都是某种TYPE的实例(Instance) , 比如我们可以创建一个TYPE为Person的实例 , 这个实例拥有自己的属性 , 姓、名、年龄、性别等等 。每种TYPE都会有自己的属性 , 即Properties/Fields 。每种TYPE都会有自己的超类型(super type)和子类型(Subtype) , 与JAVA等语言类似 , 一个TYPE只能继承自一个超类型 , 但可以有多个子类型 。比如Contact和Document的超类型都是Item , 而Contact的子类型有Person、Group和Organization等等 , Document的子类型有Image和Media等等 , Image的子类型有Photo等等 。WinFS中预定义了几种“Windows Type“ , 比如Person、Message、Document和Folder等等 。Type可以被扩展 , 即允许用户定义自己的Type , 但是现在在这个版本的WinFS中还不提供这种自定义功能 。
二.Properties/Fields
Properties/Fields与类的属性的概念相似 , 每一个属性可以是一个标量 , 也可以是一个与C/C的structure相似的结构 。对于一个类型来说 , 可以拥有多个相同的属性 , 比如一个Person可以拥有多个Address属性 。
三.Constraints
对于每个Propertie/Field , 都可以有约束(Constraints) , 比如年龄必须是在什么范围内 , 姓名不允许为空等 。但是当前发布的WinFS版本还不提供对约束的支持 。
四.Relationships
在WinFS中 , TYPE之间可以有关联(Relationship) , Relationship创建在源类型的实例及目的类型的实例之间(源实例与目的实例可否是同一类型?) 。源类型的实例是不可缺少的 , 一旦发现源类型的实例不存在 , Relationship会立即被删除 。但是目的类型的实例却可以缺少 , 这种缺少目的类型的实例的Relationship被称为“Dangling Relationship“ 。
对于一个Relationship来说 , 它也可以与Type那样拥有自己的Properties/Fields 。举个例子 , 比如一个Contact与一个Message之间存在一个Participant的关系 , 而这个关系可以有一个nickname的属性 。
在WinFS中 , 有两种Relationship , 一种叫Holding Relationship , 一种叫Reference Relationship 。1.Holding Relationship
在这种关系中 , 几个源实例可以拥有同一个目的实例 , 只要还有源实例存在 , 关系就存在 。其还具有以下几个特点:
(1)每一个实例都必须要有一个以上的Holding Relationship指向它;
(2)具有Holding Relationship的实例间必须是处于同一个store中 。(对于一个WinFS的Item来说 , 它完整的UNC名空间的形式是"Machinestoresharefolder1folder2...folderNitem");
(3)源实例和目的实例必须同时存在 , 不能允许Dangling Relationship的存在 。
(4)实例间的关系不能形成回路 , 构成一个有向非循环图(Directed acyclic graph , DAG) 。
(5)Holding Relationship采用层次式的命名空间(如上所示) , 每一个这样的Relationship都会指明目标实例的名称 , 而每一个拥有这种Relationship的源实例的名字则必须唯一 。
2.Reference Relationship
在这种关系中 , 可以允许存在Dangling Relationship , 可以允许实例分布在同一个store或者不同的store中 , 实例间的关系可以形成回路 。比如一个Document类型的实例用一个author的关系指向一个contact类型的实例 , 而这个contact类型的实例也可以用一个revIEwer的关系指向Document类型的实例 。
以上说的都是一些很理论性的东西 , 这时会想 , 以上说的内容是通过怎样的形式表现出来呢?在操作上 , 在编程上 。
在defaultstore目录下有一个Schemas的目录 , 发现里面是一些Item , 比如Audio、Contact、Mail等等 , 与上面所说的Type的名称相对应 。再翻阅资料 , 发现WinFS有专门的基于XML语法的Schemas Definition Language 。比如Contact类型有Contact.xml作为其类型定义 。而Person的定义为
ExtendsType="Core.Contact" ExtendsVersion="1">
TypeMajorVersion="1">
TypeMajorVersion="1">
...
编程的时候 , 只要将System.Storage加载进来 , 便可进行对WinFS的编程 。比如Contact.ListContacts()方法是将storage中所有的Contact都列出来 , 创建一个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);
TelephoneNumber phone = new TelephoneNumber();
phone.AreaCode="425";
phone.Number="555-1234";
person.PersonalTelephoneNumbers.Add(phone);
//This actually updates "WinFS" with the new data.
context.Update();
可惜 , 在这个目录下的Item都是0字节的无扩展名的 , 不知道到底是什么的东西 , 不象Schema文件 。用搜索查找contact.xml文件也查找不到 。找了一些与WinFS相关的程序 , 有纯C#的 , 也有使用了Avalon的 , 然后用MSBuilding编译 。程序编译成功 , 但是运行出错 。即使是创建新Item、更改Item属性这类简单的程序也不能运行成功 。看来这个版本的Longhorn中的WinFS还有许多的限制 。
【抢先体验微软最新文件系统WINFS】玩了两天的WinFS , 本来是计划再琢磨多一些关于Longhorg的东西 , 比如Indigo , Avalon编程和语音识别等等 。即使是WinFS , 也有一大堆的内容可以深究 , 比如它的Storage Engine、Security、Synchronization等等 。但是发现现在发布的这个版本的Longhorn实在太多限制 , 所发布的资料中的许多特点尚不支持 , 而且未来肯定会有很多的变数 , 便决定暂且把这新奇的玩意放到一边 , 静观其变 。其实 , Longhorn离我们还挺遥远 , 现在的硬件水平暂时也很难满足其需求 。所以 , 对于我们这些普通人来说 , 了解其概貌及发展趋势便可 , 深究实是大可不必 。
- 体验Windows Vista系统的程序兼容模式
- 微软: Vista中UAC值得所有操作系统效仿
- 微软称2008年Vista 份额达85% 分析师质疑
- 微软百万美元建Vista社区
- 微软皇牌系统Vista 不会成为WinME第二
- windows不升级会怎样 不升级怎么体验Windows
- 1000M新机初体验
- 微软中国5月启动Vista正版宣传 主攻OEM
- 微软Windows Vista操作系统实用小技巧
- 微软surface duo价格约9700元起 搭载两块5.6英寸屏幕+手写笔
