【问题标题】:OWL-API : Identify owl format based on its string contentsOWL-API : 根据字符串内容识别 owl 格式
【发布时间】:2016-07-13 10:53:24
【问题描述】:

我有不同格式的 owl 文件(RDF/XML、Turtle、Manchester OWL Syntax)。我想根据其内容识别格式,因为不同的格式有自己的风格。

例如

RDF/XML:

<?xml version="1.0"?>
<!DOCTYPE rdf:RDF [
<!ENTITY owl "http://www.w3.org/2002/07/owl#" >
<!ENTITY xsd "http://www.w3.org/2001/XMLSchema#" >
<!ENTITY rdfs "http://www.w3.org/2000/01/rdf-schema#" >
<!ENTITY rdf "http://www.w3.org/1999/02/22-rdf-syntax-ns#" >]>
<rdf:RDF
xmlns="namespace#"
xml:base="namespace"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:owl="http://www.w3.org/2002/07/owl#"
xmlns:xsd="http://www.w3.org/2001/XMLSchema#"
xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#">
<owl:Ontology rdf:about="namespace"/>
<!-- namespace#my1 -->
<owl:ObjectProperty rdf:about="namespace#my1"/>
<!-- namespace#my2 -->
<owl:ObjectProperty rdf:about="namespace#my2"/>
<!-- namespace#prop1 -->
<owl:DatatypeProperty rdf:about="namespace#prop1"/>
<!-- namespace#prop2 -->
<owl:DatatypeProperty rdf:about="namespace#prop2"/>
<!-- namespace#A -->
<owl:Class rdf:about="namespace#A"/>
<!-- namespace#B -->
<owl:Class rdf:about="namespace#B"/>
<!-- namespace#C -->
<owl:Class rdf:about="namespace#C"/>
<!-- namespace#P -->
<owl:Class rdf:about="namespace#P"/>
</rdf:RDF>

Manchester OWL 语法:

Prefix: : <namespace#>
Prefix: owl: <http://www.w3.org/2002/07/owl#>
Prefix: rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
Prefix: xml: <http://www.w3.org/XML/1998/namespace>
Prefix: xsd: <http://www.w3.org/2001/XMLSchema#>
Prefix: rdfs: <http://www.w3.org/2000/01/rdf-schema#>
Ontology: <namespace>
ObjectProperty: my2
ObjectProperty: my1
DataProperty: prop2
DataProperty: prop1
Class: B
Class: A
Class: P 
Class: C

因此,即使我有两个具有相同名称的文件myOntology.owl,我也可以根据上述内容识别其格式(只需在编辑器中打开)。如何在 JAVA 中使用 OWL-API 做到这一点?还有来自OWLOntologyManager 的加载方法如何区分它们?

【问题讨论】:

  • 我对此不是 100% 确定,但我认为某些工具(例如 Protege)使用的一种方法是尝试将其加载为每种不同的支持格式(RDF/XML , OWL/XML, TTL, Manchester 等),直到其中一个工作或全部失败。如果成功,那么这可能是正确的格式。一个文件在不止一种格式中正确的可能性很小(除了文件为空的一些琐碎情况,只是空格等)。
  • 来自OWLOntologyManagerloadOntologyFromOntologyDocument 方法如何工作呢?因为它接受流权形式的文件。所以我尝试创建StreamDocumentSource 并寻找它的格式。但是isFormatKnown() 方法给出了 FALSE。我怎样才能以不同的格式加载?
  • 我提到的方法是一种可能的方法,当格式不知道时可以使用。如果您确实提前知道格式,那么当然可以提前选择合适的解析器。
  • 有点疑问(我不知道文档的格式),是否可以加载不同格式的本体(我猜加载方法可以处理这一切)。我的意思是有什么方法也接受文档格式,所以我可以尝试试错的方法来加载它。
  • Joshua 是对的,owl api 中的做法是依次尝试解析器。格式是互斥的,除了 OBO,它承认曼彻斯特语法头。

标签: java owl ontology protege owl-api


【解决方案1】:

不幸的是,OWL 序列化没有像其他格式那样明确标记。

OWL API 只会尝试它知道的所有格式,直到通过;这并不总是有效的,但没有其他方法可以做到这一点。

另一方面,绝大多数解析器会在开始的几行内检测到错误。所以失败是相当快的。

要成功加载本体,您可以使用 getFormat() 访问实际格式。

【讨论】:

  • 是否可以在加载之前使用解析器检查文件格式?像有没有任何方法可以接受文件或字符串并返回它的格式?
  • 在计算上,测试文件格式和加载它对于解析器来说是一回事
  • 所以我必须加载本体,在此之前我无法检查它的格式。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-18
相关资源
最近更新 更多