精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2008-06-19
2.2.1.2.3.1 Book.cpm.xml映射文件中元素分析:
1、 类别名 l 每个检索类在通用元数据定义文件中都应该有对应描述。 <class name="Book" alias="${library.book}"> alias属性所对应的值起到了一个映射作用。它将一个实体与这个实体的元数据定义连接起来。该元数据定义在.cmd.xml文件中。 在library.cmd.xml文件中对应的: <alias id="book" displayName="Book"> <description>Book alias</description> <uri>http://compass/sample/library/alias/book</uri> <name>book</name> </alias> 很显然,其中使用了3个元数据来定义这个检索类。它们分别是<description>、<uri>和<name>。
2、<id name="id" />。 每一个root级的检索类至少有一个索引id。可以用annotation和xml配置的方式注册该索引id。如果没有注册,compass会默认给一个内部id。
3、property <property name="keywords"> <meta-data boost="2">${library.keyword}</meta-data> </property> l Property对应检索类中的域。 l 每个索引域在通用元数据定义文件中都应该有对应的别名。 其中meta-data中的boost=2是指多重引导关系(= bootstrap)。 2.2.1.2.3.2 Author.cpm.xml1、<constant> 用<constant>可以构建索引常量。可以在类中用annotation的方式注入,也可以在xml文件中定义。 索引常量的xml定义方式:在一个索引实体的映射文件中通过<constant>定义一个常量名,并用一列值与之对应。 <constant> <meta-data>${library.type}</meta-data> <meta-data-value>${library.type.mdPerson}</meta-data-value> <meta-data-value>${library.type.mdAuthor}</meta-data-value> </constant> 结合通用元数据定义文件,我们可以翻译一下,结果如下: <constant> <meta-data>type</meta-data> <meta-data-value>person</meta-data-value> <meta-data-value>author</meta-data-value> </constant> 由此可以得到一个索引常量元数据:type,它有2个对应的值:person和author。
2、<component>和<reference> <component name="name" ref-alias="${library.article}" /> 该类中定义了三个与Author关联的类或者由类组成List。 private Name name; private List articles = new ArrayList(); private List books = new ArrayList(); 其中Article属于非root型的检索类,而Name是属于辅助类,所以它们跟Author之间的关系都是:component。而Book是root型的检索类,它跟Author之间的关系只能是:reference。 不能单独搜索Article和Name,必须通过Author来调用它们。
注:很明显该映射文件的以下部分设置有误: <component name="name" ref-alias="${library.name.md}" /> 应该改成:<component name="name" ref-alias="${library.name}" /> 至于为什么配置错了还不影响结果,没有仔细看其源代码,所以不得知。有人明白其中道理的,不妨一说,愿洗耳恭听:)
2.2.1.2.3.3 Article.cpm.xml1、<class> <class name="Article" alias="${library.article}" root="false"> 其中root="false"的含义:
root属性是用于标识该实体是否为一个可以被独立查找的检索实体。当该属性的值为true时,用户可以直接通过关键字的查找来得到这样的实体信息;若该属性的值为false,用户使用相同的关键字进行搜索,只能得到该实体所依附的真正实体的实体。这时,需要再通过该真正实体的实例,进一步获取所需要的实体。
本例来看,用户可以通过输入关键字在Compass进行查找,最终找到Author和Book这样的实体对象,却不可以直接得到Article这个对象。因为Article的root属性为false。如果需要取得Article的实例,则只能先取得Author的实例,进而通过Author中的articleList,来获取Article的对象。 <class>的root属性默认为true。 2.2.1.2.4 通用元数据定义文件1、概述 Library.cmd.xml文件中的cmd是Common Metadata Definition的缩写。其中,元数据是用于描述数据的数据。在该文件中,存储了一些与实体相关的元数据信息。同时,在*.cpm.xml文件中,所有被使用到的变量都在这里有明确的定义。即那些通过${library.*}调用的。
2、uri 在该定义文件中<meta-data>的uri是可以重复的,例如以下2个定的uri是相同的: <alias id="name" displayName="Name"> <description>Name alias</description> <uri>http://compass/sample/library/alias/name</uri> <name>name</name> </alias> --------------------------------------------------- <meta-data id="isbn" displayName="ISBN"> <description>ISBN of the book</description> <uri>http://compass/sample/library/name</uri> <name>name</name> </meta-data>
2.2.1.2.5 测试类通过测试类,我们可以了解Compass索引建立和检索的全过程。
对于test*()方法我们就不作主要关注,那些都是单元测试的方法。不过,这也算是提供了写compass应用时的单元测试范例。 我们从main方法进入,看看compass运行的过程:
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
浏览 2185 次