In Fortsetzung des Teils 1 will ich hier die wichtigen Objekte MultiLingualObject (MUL) und MonoLingualObject (MOL) und ihre Methoden erläutern.
Im vorherigen Beitrag wurden diese Objekte mit
Vector targetmonos = new Vector();
MultiLingualObject multi = new MultiLingualObject();
MonoLingualObject sourceMono = new MonoLingualObject(); eingeführt. Dies folgt dabei dem in der Architekturdokument beschriebenen Ansatz. Ein MUL verweist auf ein oder mehrere MOLs, die die sprachspezifischen Teile enthalten. Der Kern einer MOL ist dabei die Sprache und das Segment.

Beide befinden sich im Package de.folt.models.datamodel und sind von GeneralLinguisticObject (GOL) abgeleitet. Jedes Objekt besitzt eine eindeutige (Integer), eine eindeutige String ID - stUniqueID sowie linguisticProperties - eine Menge von Attributen.
Ein MUL beinhaltet damit eine Menge von MOLs (als Map
Ein MOL enthält als wichtigste Erweiterung zum GeneralLinguisticObject noch die beiden Attribute: formattedSegment (das Segment mit den xml (tmx, xliff) Format-Elementen), plainTextSegment (das Segment ohne diese Tags), language (die Sprache des Segments) sowie eine Referenz auf das ggf. vorhandene MUL (parentMultiLingualObject).
Ein MOL wird einfach über
new MonoLingualObject() ohne realen Inhalt
MonoLingualObject(formattedSegment, language) mit einem Segment und Sprache
erzeugt. Es gibt noch mehr Methoden zur Erzeugung, aber das sind die wichtigsten.
Ein MUL wird durch
new MultiLingualObject() ohne realen Inhalt erzeugt.
new MultiLingualObject(linguisticProperties, lingType) erzeugt ein MUL mist zusätzlichen Properties - Attributen, wobei lingType aus der Enumeration
public enum LinguisticTypes
{
TERM, TMX, XLIFF
}
stammt. Wie man linguisticProperties erzeugt, wird später dargestellt.
Ein MOL wird mit addMonoLingualObject(MonoLingualObject mono) zum einem MUL hinzugefügt.
addMonoLingualObjectIfNotExist(MonoLingualObject mono) prüft zusätzlich, ob das MOL nicht schon enthalten ist.
Mit den Funktionen
getMonoLingualObjects getMonoLingualObjectsAsVector getMonoLingualObjectsAsVector(String language) (nur die MOLs mit dieser Sprache zurückliefern) getMonoLingualObjectsAsVector(String[] language) (nur die MOLs mit diesen Sprachee zurückliefern)
kann man sich die MOLs einer MUL ermitteln.
removeMonoLingualObject(MonoLingualObject mono) entfernt ein MOL aus der MUL,
removeMonoLingualObjects entfernt alle Obkjkte aus der MUL.
search(MonoLingualObject searchMonoLingualObject, Hashtable
Alle Bestandteile von MUL bzw. MOL können mit entsprechenden getter Methoden gelsen werden. Die wichtigsten bei MOLs sind dabei:
public String getPlainTextSegment()
public String getFormattedSegment()
public String getLanguage()
public MultiLingualObject getParentMultiLingualObject()
Anlalog gibt es dazu entsprechende setter Methoden:
void setFormattedSegment(String formattedSegment)
void setLanguage(String language)
void setParentMultiLingualObject(MultiLingualObject parentMultiLingualObject)
void setPlainTextSegment(String plainTextSegment)
Sowhl MUL als auch MOL unterstützen die getter Methoden:
public Integer getId()
public Long getLastAccessTime()
public LinguisticTypes getLingType()
public LinguisticProperties getLinguisticProperties()
public String getStOwner()
sowie die dazu passenden setter Methoden.
public void setLastAccessTime(long lastAccessTime)
public void setLingType(LinguisticTypes lingType)
public void setLinguisticProperties(LinguisticProperties linguisticProperties)
public void setStOwner(String stOwner)s()
public void setStUniqueID(String stUniqueID)
Nun nach diesem etwas trockenem Stoff hier ein Beipiel:
MultiLingualObject multi = new MultiLingualObject();
MonoLingualObject mono = MonoLingualObject("Mein Haus ist hier", "de");
multi.addMonoLingualObject(mono);
mono = MonoLingualObject("Mein Haus ist dort", "de");
multi.addMonoLingualObject(mono);
mono = MonoLingualObject("Mein Garten ist klein", "de");
multi.addMonoLingualObject(mono);
mono = MonoLingualObject("My house is here", "en");
multi.addMonoLingualObject(mono);
Vector germanMonos = getMonoLingualObjectsAsVector("de");
MonoLingualObject searchmono = MonoLingualObject("Mein Haus ist da", "de");
Hashtable props = new Hashtable();
props.put("similarity", "60");
props.put("fuzzy", "true");
Vector searchresult = multi.search(searchmono, props);
Sowohl MULs als auch MOLs unterstützen mit der Methode format() eine formattierte Ausgabe ihrer Inhalt.
Hier eine Beipieldarstellung einer MUL, das mit der
call sqlexportToMol p500test "c:/Program Files/OpenTMS/database/OpenTMSDataSource.config.xml"
exportiert aus der Dat Source p500test wurde. Die Kommandodatei sqlexportToMolbefindet sich übrigens als Beispiel im bat Verzeichnis der Installation. MUL 1 und die dazu gehörenden MOls stammen aus einer TMX Datei. Die Properties der MUL/MOL sind mit de.folt.models.datamodel.sql.SQLTmxProp ausgegeben.
MUL getId -> 1
getStUniqueID -> dbc0286a-d391-4d0b-83dc-c29f8538e3d2
getLastAccessTime -> 1258367542694
getStOwner -> klemens
de.folt.models.datamodel.sql.SQLTmxProp {id: 2 type: changeid content: 11d63a436a360_klemens / lang: o-encoding: null}
de.folt.models.datamodel.sql.SQLTmxProp {id: 3 type: usagecount content: 0 / lang: o-encoding: null}
de.folt.models.datamodel.sql.SQLTmxProp {id: 4 type: datatype content: 112 / lang: o-encoding: null}
de.folt.models.datamodel.sql.SQLTmxProp {id: 5 type: creationid content: 11d63a436a360_klemens / lang: o-encoding: null}
de.folt.models.datamodel.sql.SQLTmxProp {id: 6 type: entrynumber content: 1 / lang: null o-encoding: null}
MOL getId -> 7
getStUniqueID -> 8c1ff7a8-f80b-4765-acd8-f604a7a3eb64
getLastAccessTime -> 0
getStOwner -> klemens
getLingType -> TMX
FormattedSegment -> Geringe Wartung durch lebensdauergeschmierte Lagerung.
PlainTextSegment -> Geringe Wartung durch lebensdauergeschmierte Lagerung.
Language -> de
de.folt.models.datamodel.sql.SQLTmxProp {id: 8 type: changeid content: 11d63a436a360_klemens / lang: o-encoding: null}
de.folt.models.datamodel.sql.SQLTmxProp {id: 9 type: datatype content: 112 / lang: o-encoding: null}
de.folt.models.datamodel.sql.SQLTmxProp {id: 10 type: creationid content: 11d63a436a360_klemens.de / lang: o-encoding: null}
de.folt.models.datamodel.sql.SQLTmxProp {id: 11 type: usagecount content: 0 / lang: o-encoding: null}
MOL getId -> 12
getStUniqueID -> 43e17d54-97b1-49f1-b54a-9aef07f0f8db
getLastAccessTime -> 0
getStOwner -> klemens
getLingType -> TMX
FormattedSegment -> Minimum maintenance due to bearings lubricated for life.
PlainTextSegment -> Minimum maintenance due to bearings lubricated for life.
Language -> en
de.folt.models.datamodel.sql.SQLTmxProp {id: 13 type: datatype content: 113 / lang: o-encoding: null}
de.folt.models.datamodel.sql.SQLTmxProp {id: 14 type: usagecount content: 0 / lang: o-encoding: null}
de.folt.models.datamodel.sql.SQLTmxProp {id: 15 type: changeid content: 11d63a436a360_klemens / lang: o-encoding: null}
de.folt.models.datamodel.sql.SQLTmxProp {id: 16 type: creationid content: 11d63a436a360_klemens.en / lang: o-encoding: null}
MUL getId -> 1839
getStUniqueID -> 43727d9c-6232-483f-88b7-9356011f9142
getLastAccessTime -> 1258367562990
getStOwner -> klemens
MOL getId -> 1840
getStUniqueID -> c32885aa-6d06-4a41-9b39-b8b38c68b299
getLastAccessTime -> 0
getStOwner -> klemens
getLingType -> TERM
FormattedSegment -> Travel wheel types
PlainTextSegment -> Travel wheel types
Language -> en
MOL getId -> 1841
getStUniqueID -> 1c510704-7434-4c71-974a-ac00bd1dc5b1
getLastAccessTime -> 0
getStOwner -> klemens
getLingType -> TERM
FormattedSegment -> Laufradausführungen
PlainTextSegment -> Laufradausführungen
Language -> de
LinguisticProperties organisieren Attribut-Wertpaare für MULs bzw. MUL. Sie bauen auf LinguisticProperty auf.
Mit mono.addStringLinguisticProperty("OpenTMS", "Folt") oder multi.addStringLinguisticProperty("OpenTMS", "Folt"); wird eine neue LinguisticProperty zu einer MOL bzw. MUL hinzugefügt.
Allgemein kann eine LinguisticProperty mit new LinguisticProperty(key, value) erzeugt werden, wobei sowohl key als auch value von beliebigen Typ sein können. Normalerweise werden es aber String sein. Eine LinguisticPropert enthält vier Werte:
key - der Schlüssel - Name der Property
propStatus - eine Status;eine Wert aus
public enum PropStatus {
OLD, CHANGED, DELETED, NEW
}
value - einen Wert
data - einen weiteren Wert (etwa um ein ganzes Objekt aufzunehmen)
Dazu gibt es entsprechende getter und setter Methoden.
Beispiel:
LinguisticProperty prop = new LinguisticProperty("Sprache", "Deutsch");
LinguisticProperties werden mit new LinguisticProperties() erzeugt. Ein neues LinguisticProperty wird mit add(LinguisticProperty lingProp) hinzugefügt.
Im nächsten Beitrag werde ich zeigen, wie man MULs und MOLs Data Source die Fähigkeit "unscharfe Suche" durchzuführen, implementiert.
Dr. Klemens Waldhör klemens.waldhoer @ opentms.de - Heartsome Europe GmbH www.heartsome.de