2015-03-09 3 views
0

Я пытаюсь разобрать квадрациклы с помощью следующего фрагмента кода, используя Nxparser в Eclipse.Анализ четности с nxparser

String FileInput="c://ex.nq"; 
    System.out.println("Adding "+FileInput); 
    // use the FileManager to find the input file 
    InputStream in = FileManager.get().open(FileInput); 

    if (in == null) { 
     throw new IllegalArgumentException("File: " + FileInput+ " not found"); 
    } 
    //InputStream inS = RDFDataMgr.read(dsg, in, Lang.NQ); 
    //RDFDataMgr.loadDataset("c://examples.nq", Lang.NQ); 
    RDFXMLParser nxp=new RDFXMLParser(in, log4jConfPath); //"http://myuri" 


     while (nxp.hasNext()) { 
     Node[] ns = nxp.next(); 

     for (Node n: ns) { 
      System.out.print(n.toString()); 
      System.out.print(" "); 
     } 
     System.out.println("."); 

     } 

Как правило, синтаксический анализатор указывает, что он способен анализировать N-квадроциклы. Несмотря на то, что читает троек, когда я ставлю четверной файл (ex.nq) У меня есть следующее сообщение об ошибке:

org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 7; Element or attribute do not match QName production: QName::=(NCName':')?NCName. 
at org.apache.xerces.util.ErrorHandlerWrapper.createSAXParseException(Unknown Source) 
at org.apache.xerces.util.ErrorHandlerWrapper.fatalError(Unknown Source) 
at org.apache.xerces.impl.XMLErrorReporter.reportError(Unknown Source) 
at org.apache.xerces.impl.XMLErrorReporter.reportError(Unknown Source) 
at org.apache.xerces.impl.XMLErrorReporter.reportError(Unknown Source) 
at org.apache.xerces.impl.XMLEntityScanner.scanQName(Unknown Source) 
at org.apache.xerces.impl.XMLNSDocumentScannerImpl.scanStartElement(Unknown Source) 
at org.apache.xerces.impl.XMLNSDocumentScannerImpl$NSContentDispatcher.scanRootElementHook(Unknown Source) 
at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(Unknown Source) 
at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source) 
at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source) 
at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source) 
at org.apache.xerces.parsers.XMLParser.parse(Unknown Source) 
at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source) 
at org.apache.xerces.jaxp.SAXParserImpl$JAXPSAXParser.parse(Unknown Source) 
at org.apache.xerces.jaxp.SAXParserImpl.parse(Unknown Source) 
at javax.xml.parsers.SAXParser.parse(Unknown Source) 
at org.semanticweb.yars2.rdfxml.ParserThread.run(Unknown Source) 

Файл я использую «ex.nq» и внутри меня есть следующие четверной :

<http://richard.cyganiak.de/foaf.rdf#RC> <http://xmlns.com/foaf/0.1/mbox> <mailto:[email protected]> <http://example/2001-10-26_21-32-52> . 

Я не уверен, что у меня проблема с файлом или чем-то еще. Любая помощь будет оценена по достоинству.

+2

Вы используете парсер RDF/XML для разбора n-квадроциклов - это совершенно другой формат. Биты, которые вы закомментировали, находятся на правильных строках. – user205512

+0

Большое спасибо. Я даже не понял, что :) – user730611

+0

Я воспользуюсь тем, что вы уже использовали apache jena - если вы действительно не хотите, чтобы NXParser по какой-то причине? – user205512

ответ

1

Я думаю, вы были близки, основываясь на комментариях.

String fileInput="c://ex.nq"; 

StreamRDF streamHandler = new StreamRDF() { 
     @Override void base(String base) {}; 
     @Override void start() {}; 
     @Override void finish() {}; 
     @Override void prefix(String prefix, String iri) {}; 

     @Override void quad(Quad quad) { 
      // Do something with your quad here 
     } 
     @Override void triple(Triple triple) { 
      // Do something with your triple here 
     } 
}; 

TypedInputStream in = RDFDataMgr.open(fileInput); 

if (in == null) { 
    throw new IllegalArgumentException("File " + fileInput + " not found"); 
} 

RDFDataMgr.parse(streamHandler, in); 

Есть целый ряд predefined stream handlers, которые могут делать то, что вы хотите, но это наиболее общий способ обработки потоков.

+0

NxParser nxp = новый NxParser (in); Также это решение nxparser для тех, кто его ищет. Ваша точка была именно то, что я искал! – user730611