void transform() throws JDOMException, IOException { // EXMARaLDAs "transformer class" - true für 2.0 StylesheetFactory ssf = new StylesheetFactory(true); try { // the first transformation, resulting in a String... String firstCMDI = ssf.applyExternalStylesheetToExternalXMLFile(xsltFile, comaFile); // ...from which we build a Document SAXBuilder builder = new SAXBuilder(); StringReader in = new StringReader(firstCMDI); cmdi = builder.build(in); // set the namespace Namespace ns = Namespace.getNamespace("clarin", "http://www.clarin.eu/cmd/"); // Replace variable CORPUS_NAME // in Header (MdSelfLink, ResourceRef), HZSKCorpusMetadata (Name, ID)) XPath xURLs = XPath.newInstance("//clarin:MdSelfLink | //clarin:ResourceRef"); xURLs.addNamespace(ns); List allURLs = xURLs.selectNodes(cmdi); String[] splitFile = comaFile.split("\\\\"); String comaFileName = splitFile[splitFile.length - 1].replace(".coma", ""); for (Object o : allURLs) { Element url = (Element) o; String selfLink = url.getText(); url.setText(selfLink.replace("CORPUS_NAME", comaFileName)); } // Replace language codes with names // in XPath xLanguageNames = XPath.newInstance(""); xLanguageNames.addNamespace(ns); List allLanguageNames = xLanguageNames.selectNodes(cmdi); for (Object o : allLanguageNames) { Element languageName = (Element) o; languageName.setText(ISOLanguageCodeHelper.getLanguageName(languageName.getText())); } // Replace language names with codes // in DocumentationLanguages XPath xLanguageCodes = XPath.newInstance("//clarin:DocumentationLanguages/descendant::clarin:iso-639-3-code"); xLanguageCodes.addNamespace(ns); List allLanguageCodes = xLanguageCodes.selectNodes(cmdi); for (Object o : allLanguageCodes) { Element languageCode = (Element) o; languageCode.setText(ISOLanguageCodeHelper.getLanguageCode(languageCode.getText())); } // Resources // add value of mimetype attribute to resourceType elements XPath xResourceTypes = XPath.newInstance("//clarin:ResourceType"); xResourceTypes.addNamespace(ns); List allResourceTypes = xResourceTypes.selectNodes(cmdi); for (Object o : allResourceTypes) { Element resourceType = (Element) o; FileNameMap fileNameMap = URLConnection.getFileNameMap(); String filename = resourceType.getAttributeValue("mimetype").toLowerCase(); String mimetype = fileNameMap.getContentTypeFor(filename); if (mimetype != null) { resourceType.setAttribute("mimetype", mimetype); } else if (filename.endsWith("exb") || filename.endsWith("exs")) { resourceType.setAttribute("mimetype", "text/xml"); } else { resourceType.setAttribute("mimetype", "unknown"); } } // Language // hzsk-corpus-materials // file size for the Size-elements XPath xMediaFiles = XPath.newInstance("//clarin:hzsk-corpus-materials/descendant::clarin:MediaFile"); xMediaFiles.addNamespace(ns); List allFiles = xMediaFiles.selectNodes(cmdi); for (Object o : allFiles) { Element mediafile = (Element) o; File asocFile = new File(mediafile.getChild("ResourceLink", ns).getText()); // es wird jetzt nicht sehr genau, aber das taugt... Element size = mediafile.getChild("Size", ns); size.addContent(String.valueOf(asocFile.length())); } // write CMDI-file Writer fileWriter = new FileWriter(cmdiFile); XMLOutputter serializer = new XMLOutputter(); serializer.output(cmdi, fileWriter); } catch (SAXException ex) { Logger.getLogger(Coma2CMDI.class.getName()).log(Level.SEVERE, null, ex); } catch (ParserConfigurationException ex) { Logger.getLogger(Coma2CMDI.class.getName()).log(Level.SEVERE, null, ex); } catch (TransformerConfigurationException ex) { Logger.getLogger(Coma2CMDI.class.getName()).log(Level.SEVERE, null, ex); } catch (TransformerException ex) { Logger.getLogger(Coma2CMDI.class.getName()).log(Level.SEVERE, null, ex); } }