2009-10-15 8 views
1

Есть ли способ получить базовое пространство имен из онтологического файла OWL без использования DOM или аналогичного, но только с использованием API Jena? Например, из файла OWL:получить базовое пространство имен из онтологии OWL

<rdf:RDF 
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" 
    xmlns:protege="http://protege.stanford.edu/plugins/owl/protege#" 
    xmlns="http://www.owl-ontologies.com/Ontology1254827934.owl#" 
    xmlns:xsp="http://www.owl-ontologies.com/2005/08/07/xsp.owl#" 
    xmlns:owl="http://www.w3.org/2002/07/owl#" 
    xmlns:xsd="http://www.w3.org/2001/XMLSchema#" 
    xmlns:swrl="http://www.w3.org/2003/11/swrl#" 
    xmlns:swrlb="http://www.w3.org/2003/11/swrlb#" 
    xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" 
    xml:base="http://www.owl-ontologies.com/Ontology1254827934.owl"> 

, как я мог бы получить http://www.owl-ontologies.com/Ontology1254827934.owl во время выполнения?

+0

Там нет такого понятия, как базового пространства имен в качестве OWL онтологии. Онтология может быть сериализована в RDF/XML, а сериализация XML может иметь «xml: base» или пустой префикс 'xmlns =" ​​... "'. Онтология также может быть идентифицирована ИРИ. –

ответ

2

Один из способов:

//Create the Ontology Model 
OntModel model = ModelFactory.createOntologyModel(); 

//Read the ontology file 
model.begin(); 
InputStream in = FileManager.get().open(FILENAME_HERE); 
if (in == null) { 
    throw new IllegalArgumentException("File: " + filename + " not found"); 
}   
model.read(in,""); 
model.commit(); 

//Get the base namespace 
model.getNsPrefixURI(""); 
3

Или, если вы действительно хотите XML: базу, а не пустые Xmlns:

final ArrayList<String> baseUriDropHere = new ArrayList<>(); 

DefaultHandler handler = new DefaultHandler() { 

    @Override 
    public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { 

    if("rdf:RDF".equals(qName)) { 
     for (int i=0; i<attributes.getLength(); i++) { 
     if("xml:base".equals(attributes.getQName(i))) { 
      baseUriDropHere.add(attributes.getValue(i)); 
      return; 
     } 
     } 
    } 
    } 
}; 


try { 

    SAXParserFactory factory = SAXParserFactory.newInstance(); 
    factory.setValidating(false); 
    SAXParser parser = factory.newSAXParser(); 
    parser.parse(FILENAME_HERE, handler); 

} catch (ParserConfigurationException e) { 
} catch (SAXException e) { 
} catch (IOException e) { 
} 

if(baseUriDropHere.isEmpty()) { 
    System.out.println("no base uri set"); 
} else { 
    System.out.println(baseUriDropHere.get(0)); 
}