《compass-reference》翻譯計劃之:第9章. 通用元資料
阿新 • • 發佈:2018-11-12
第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>