我的目标是通过从文档中搜索与本体类同名的节点来比较本体和提供的XML文档。为此,我使用以下代码:
public void freqConcept(String xmldoc,OWLClass node){
try {
String filepath = xmldoc;
DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder = docFactory.newDocumentBuilder();
Document doc = docBuilder.parse(filepath);
doc.getDocumentElement().normalize();
list = doc.getElementsByTagName(node.getIRI().getFragment());
} catch (ParserConfigurationException pce) {
pce.printStackTrace();
} catch (IOException ioe) {
ioe.printStackTrace();
} catch (SAXException sae) {
sae.printStackTrace();
}
catch (Exception e) {
e.printStackTrace();
}
}
如您所见,我给函数提供了OWLClass作为参数,然后我尝试使用以下行从具有相同名称的XML文档中返回节点:list = doc.getElementsByTagName(node.getIRI().getFragment());
它适用于People Ontology,因为上一行将类的名称返回为String。但是我注意到,当我尝试返回此node.getIRI().getFragment()
时,来自DBPedia的类将得到 null ,而不是具有类名,仅针对某些类而不是全部。结果,只有具有正确名称的类才被计数并存储在列表中,其他类构成例外...
下面的图片显示了结果。.仅正确地返回了一个类 SpatialThing ,其他类为null,无法理解为什么...
我想知道是否有一种方法可以将OWLClass视为节点,或者是否可以将OWLClass与xml文档节点进行比较?
谢谢
答案 0 :(得分:1)
某些IRI没有片段。这是设计使然,并在javadoc中进行了描述。
您将不得不找出一些无法解决的情况,然后找到您想要匹配的XML的示例。然后,您也许可以找到解决方案。