package tbx2rdf.types; import com.hp.hpl.jena.rdf.model.Model; import com.hp.hpl.jena.rdf.model.NodeIterator; import com.hp.hpl.jena.rdf.model.RDFNode; import com.hp.hpl.jena.rdf.model.Resource; import com.hp.hpl.jena.vocabulary.DC_11; import com.hp.hpl.jena.vocabulary.RDF; import java.util.ArrayList; import java.util.List; import org.w3c.dom.Element; import org.w3c.dom.NodeList; import tbx2rdf.types.abs.impID; import tbx2rdf.vocab.TBX; /** * Represents the Martif Header found in TBX files. * ISO 12200:1999, Computer applications in terminology – Machine-readable terminology interchange format (MARTIF) – Negotiated interchange * This header provides the basis for the core structure of TBX and the XML styles of its * elements and attributes. * * The highest-level XML element in a TBX document instance is the <martif> element, which consists of a * <martifHeader> element and a <text> element. These element names are * taken from ISO 12200 and have roots in the Text Encoding Initiative. * The <text> element in Figure 2 consists of terminological entries, which are enclosed within one <body> element, * and complementary information (a metamodel object class). In TBX, complementary information is found in the * <back> element. * The <martifHeader> element corresponds to global information in the TMF metamodel and consists of a description * of the whole terminological data collection (in the <fileDesc> element), information about the applicable XCS n (in * the <encodingDesc> element), and a history of major revisions to the collection (in the <revisionDesc> element). * Character encoding information shall be included in the header only when the encoding attribute of the XML * declaration in the TBX document instance is not a Unicode encoding value. * Example: * <martif type="TBX" xml:lang="en"> * <martifHeader> * <fileDesc> * <sourceDesc> * <p>From an Oracle corporation termbase</p> * </sourceDesc> * </fileDesc> * <encodingDesc> *<p type="XCSURI">http://www.lisa.org/fileadmin/standards/tbx/TBXXCSV02.XCS</p> *</encodingDesc> * </martifHeader> * * The <martifHeader> contains other elements that provide global information about the collection: specifically, a file * description indicating that the example was derived from an entry in a terminological database used at Oracle * corporation and that the TBX XCS (TBXXCSV02.XCS) contains the additional data-category constraints. * * @author Victor */ public class MartifHeader extends impID { public final FileDesc fileDesc; public NodeList encodingDesc; public NodeList revisionDesc; public MartifHeader(FileDesc fileDescrip) { this.fileDesc = fileDescrip; } public MartifHeader() { fileDesc = new FileDesc(); } public static class FileDesc { public TitleStmt titleStmt; public Element publicationStmt; public List<Element> sourceDesc = new ArrayList<Element>(); } public static class TitleStmt { public final String title; public String title_id; public String title_lang; public List<Element> notes = new ArrayList<Element>(); public String id; public String lang; public TitleStmt(String title) { this.title = title; } } /** * Gets the Jena Model of the Martif header * @param model * @param parent * @return Jena Model */ @Override public void toRDF(Model model, Resource parent) { final Resource res = parent; res.addProperty(RDF.type, TBX.MartifHeader); //TITLESTMT if(fileDesc.titleStmt != null) { if(fileDesc.titleStmt.title_lang != null) { res.addProperty(DC_11.title, fileDesc.titleStmt.title, fileDesc.titleStmt.title_lang); } else if(fileDesc.titleStmt.lang != null) { res.addProperty(DC_11.title, fileDesc.titleStmt.title, fileDesc.titleStmt.lang); } else { res.addProperty(DC_11.title, fileDesc.titleStmt.title); } if(!fileDesc.titleStmt.notes.isEmpty()) { final Resource statement = getRes(model); statement.addProperty(RDF.subject, res). addProperty(RDF.predicate, DC_11.title); if(fileDesc.titleStmt.title_lang != null) { statement.addProperty(DC_11.title, fileDesc.titleStmt.title, fileDesc.titleStmt.title_lang); } else if(fileDesc.titleStmt.lang != null) { statement.addProperty(DC_11.title, fileDesc.titleStmt.title, fileDesc.titleStmt.lang); } else { statement.addProperty(DC_11.title, fileDesc.titleStmt.title); } for(Element note : fileDesc.titleStmt.notes) { statement.addProperty(TBX.note, nodeToString(note), XMLLiteral); } } } //PUBLICATIONSTMT if(fileDesc.publicationStmt != null) { res.addProperty(TBX.publicationStmt, nodeToString(fileDesc.publicationStmt), XMLLiteral); } //SOURCEDESC for(Element sourceDesc : fileDesc.sourceDesc) { String test = nodeToString(sourceDesc); res.addProperty(TBX.sourceDesc, nodeToString(sourceDesc), XMLLiteral); res.addProperty(DC_11.source, sourceDesc.getTextContent()); } if(encodingDesc != null) { res.addProperty(TBX.encodingDesc, nodelistToString(encodingDesc), XMLLiteral); } if(revisionDesc != null) { res.addProperty(TBX.revisionDesc, nodelistToString(revisionDesc), XMLLiteral); } } }