`

《compass-reference》翻译计划之:第9章. 通用元数据

阅读更多

第9. 通用元数据

9.1    介绍

Compass Core中的通用元数据,提供了OSEM文件中使用的元数据名和别名的定义——特别是你的应用中通过多个OSEM文件定了一个非常大的领域模型时,它显得非常有用。这个机制的另一个优势是,它可以增加额外的元数据信息(如一个长描述),而且也能指定元数据定义的格式(如:"yyyy/MM/dd"),在OSEM文件中,你仅需引用它,而不需要再明确地定义它的格式。

 

通过集中你的元数据,其他工具可以利用这方面的信息和扩大这方面的知识(即加入语义到数据中)。Compass Core提供了一个通用元数据的Ant任务,该任务将生成一个Java类,在类中包含了通用元数据文件中定义的常量,并允许以编程方式从应用程序中访问它们

(见Compass自带的Library例子)。

 

注:在Compass的应用中,通用元数据支持是可选的。

 

9.2    通用元数据定义

通用元数据定义在一个XML文档中。例子如下:

 

 

<?xml version="1.0"?>
<!DOCTYPE compass-core-meta-data PUBLIC
"-//Compass/Compass Core Meta Data DTD 2.0//EN"
"http://www.compass-project.org/dtd/compass-core-meta-data-2.0.dtd">
<compass-core-meta-data>
	<meta-data-group id="library" displayName="Library Meta Data">
		<description>Library Meta Data</description>
		<uri>http://compass/sample/library</uri>
		<alias id="author" displayName="Author">
			<description>Author alias</description>
			<uri>http://compass/sample/library/alias/author</uri>
			<name>author</name>
		</alias>
		<alias id="name" displayName="Name">
			<description>Name alias</description>
			<uri>http://compass/sample/library/alias/name</uri>
			<name>name</name>
		</alias>
		<alias id="article" displayName="Article">
			<description>Article alias</description>
			<uri>http://compass/sample/library/alias/article</uri>
			<name>article</name>
		</alias>
		<alias id="book" displayName="Book">
			<description>Book alias</description>
			<uri>http://compass/sample/library/alias/book</uri>
			<name>book</name>
		</alias>
		<meta-data id="type" displayName="Type">
			<description>Type of an entity in the system</description>
			<uri>http://compass/sample/library/type</uri>
			<name>type</name>
			<value id="mdPerson">person</value>
			<value id="mdAuthor">author</value>
		</meta-data>
		<meta-data id="keyword" displayName="Keyword">
			<description>Keyword associated with an entity</description>
			<uri>http://compass/sample/library/keyword</uri>
			<name>keyword</name>
		</meta-data>
		<meta-data id="name" displayName="Name">
			<description>The name of a person</description>
			<uri>http://compass/sample/library/name</uri>
			<name>name</name>
		</meta-data>
		<meta-data id="birthdate" displayName="Birthdate">
			<description>The birthdate of a person</description>
			<uri>http://compass/sample/library/birthdate</uri>
			<name format="yyyy/MM/dd">birthdate</name>
		</meta-data>
		<meta-data id="isbn" displayName="ISBN">
			<description>ISBN of the book</description>
			<uri>http://compass/sample/library/isbn</uri>
			<name>isbn</name>
		</meta-data>
		<meta-data id="title" displayName="Title">
			<description>The title of a book or an article</description>
			<uri>http://compass/sample/library/title</uri>
			<name>title</name>
		</meta-data>
		...
	</meta-data-group>
</compass-core-meta-data>

 

 

 

9.3    使用通用元数据定义

为了使用通用元数据定义,你必须指定文件的位置,或者把它们注册到Compass配置文件中(compass.cfg.xml)。Compass将自动把通用元数据文件的值替换到OSEM文件中。

 

<meta-data resource=
"org/compass/sample/library/library.cmd.xml" />

 

 

 

注:通用元数据必须在映射文件使用它们之前定义好。

 

OSEM文件中,你可以使用类似于${…}的标记调用这些通用元数据(类似Ant)。

用例如下

 

 

<?xml version="1.0"?>
<!DOCTYPE compass-core-mapping PUBLIC
"-//Compass/Compass Core Mapping DTD 2.0//EN"
"http://www.compass-project.org/dtd/compass-core-mapping-2.0.dtd">
<compass-core-mapping package="org.compass.sample.library">
	<class name="Author" alias="${library.author}">
		<id name="id" />
		<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>
		<property name="keywords">
			<meta-data boost="2">${library.keyword}</meta-data>
		</property>
		<component name="name" ref-alias="${library.name}" />
		<property name="birthdate">
			<meta-data>${library.birthdate}</meta-data>
		</property>
		<component name="articles" ref-alias="${library.article}" />
		<reference name="books" ref-alias="${library.book}" />
	</class>
	<class name="Name" alias="${library.name}" root="false">
		<property name="title">
			<meta-data>${library.titleName}</meta-data>
		</property>
		<property name="firstName">
			<meta-data>${library.firstName}</meta-data>
			<meta-data>${library.name}</meta-data>
		</property>
		<property name="lastName">
			<meta-data>${library.lastName}</meta-data>
			<meta-data>${library.name}</meta-data>
		</property>
	</class>
</compass-core-mapping>

 

 

9.4    通用元数据Ant任务

使用通用元数据定义的一个好处是这个元数据的Ant任务,它能用已定义好的常量生成Java类。通用元数据类允许你在代码中使用这个定义。

 

下面是使用通用元数据的ant任务片断:

 

<taskdef name="mdtask"
	classname="org.compass.core.metadata.ant.MetaDataTask"
	classpathref="classpathhref" />
<mdtask destdir="${java.src.dir}">
	<fileset dir="${java.src.dir}">
		<include name="**/*" />
	</fileset>
</mdtask>

 

 

 

 

 

3
1
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics