2016-07-07 64 views
0

我正在使用Krextor將XML轉換爲RDF。它從命令行運行良好。 我嘗試使用此代碼從Java(Eclipse)運行它。由於撒克遜運行XSLT到RDF框架失敗

private static void XMLToRDF() throws KrextorException, ValidityException, ParsingException, IOException, XSLException{ 

     Element root = new Element("person"); 
     Attribute friend = new Attribute("friends", "http://van-houten.name/milhouse"); 
     root.addAttribute(friend); 
     Element name = new Element("name"); 
     name.appendChild("Bart Simpson"); 
     root.appendChild(name); 
     nu.xom.Document inputDocument = new nu.xom.Document(root); 
     System.out.println(inputDocument.toXML()); 
     Element root1 = inputDocument.getRootElement(); 
     System.out.println(root1); 
     Krextor k = new Krextor(); 
     nu.xom.Document outputDocument = k.extract("socialnetwork","turtle",inputDocument); 
     System.out.println(outputDocument.toString()); 
    } 

我有以下問題的問題

Exception in thread "main" java.lang.NoClassDefFoundError: net/sf/saxon/CollectionURIResolver 
Caused by: java.lang.ClassNotFoundException: net.sf.saxon.CollectionURIResolver 

我在classpath中包括Saxon9he,我也手動添加作爲項目庫,但錯誤是一樣的。

+0

我的猜測是Krextor對Saxon的特定版本有依賴性。但我無法在他們的文檔中輕鬆找到這些信息。類CollectionURIResolver在Saxon 9.1的包net.sf.saxon中,但是通過9.3它已經轉移到了net.sf.saxon.lib。 –

+0

我按照你的建議,我手動包括Saxon9.jar,現在我得到這個錯誤:異常在線程「主」javax.xml.transform.TransformerFactoryConfigurationError:提供者net.sf.saxon.TransformerFactoryImpl無法實例化:java.lang .SecurityException:類「net.sf.saxon.TransformerFactoryImpl」的簽名者信息與相同包中的其他類的簽名者信息不匹配 – Caleb

+1

我想你應該向Krextor的開發人員詢問這一點。也許他們已經包含了一個Saxon版本,在這種情況下,將另一個版本的Saxon放在類路徑中很可能會導致問題。 –

回答

0

我是Krextor的主要開發人員。而且,@邁克爾凱,其實是格蘭傑的同事,所以我會在當地解決他的具體問題。因此,我確實進行了嚴格測試的最後一個撒克遜版本是9.1;之後,我還沒有將Krextor集成到Java中,但主要是從命令行使用Krextor。

@Grangel,你可以請Krextor提出問題,然後我們可以一起修復它。

事實上,@Michael Kay,一段時間以來,我一直在使用Krextor包含更新的Saxon版本,並更新了命令行包裝器以使用它們(比如將不同的JAR添加到類路徑中),但我沒有更新Java包裝代碼。