在这种关系中,几个源实例可以拥有同一个目的实例,只要还有源实例存在,关系就存在。其还具有以下几个特点:
(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的定义为
<Type Name="Person" MajorVersion="1" MinorVersion="0" ExtendsType="Core.Contact" ExtendsVersion="1"> <Field Name="BirthDate" Type="WinFSTypes.datetime" Nullable="true" TypeMajorVersion="1"></Field> <Field Name="PersonalNames" Type="Contact.FullName" Nullable="true" MultiValued="true" TypeMajorVersion="1"></Field> <Field Name="PersonalAddresses" Type="Core.Address" Nullable="true" MultiValued="true" TypeMajorVersion="1"></Field> <Field Name="PersonalPicture" Type="Base.Link" Nullable="true" TypeMajorVersion="1"></Field> ... </Type> |
标签: