OWLAPI数据类型

时间:2013-05-23 08:08:56

标签: owl-api

我需要从相应的字符串中获取OWLDatatype或OWL2Datatype。

例如,给定xsd:string我想得到相应的枚举常量OWL2Datatype.XSD_STRING。

我尝试了以下方式:

 - OWL2Datatype strDT = OWL2Datatype.valueOf("xsd:string")

 - OWL2Datatype strDT = OWL2Datatype.valueOf("string")

 - OWL2Datatype owl2dt = OWL2Datatype.valueOf(OWL2Datatype.XSD_STRING.getIRI().toString());

但他们都没有抛出异常:

java.lang.IllegalArgumentException: No enum const class org.semanticweb.owlapi.vocab.OWL2Datatype.string(这部分根据我通过的内容而变化 - 见上文)。

问题编号1 方法valueOf的签名是:OWLDatatype.valueOf(java.lang.String name),其描述为“返回具有指定名称的此类型的枚举常量”。 如何获取OWL2Datatypes的名称?

问题编号2 我决定切换到类OWLDatatype并使用类OWLDataFactory的方法访问“基本”数据类型。该类提供了创建许多不同类型的方法(例如,getDoubleOWLDatatype),但与xsd:string对应的方法除外。 如何创建与xsd:string名称对应的OWLDatatype?

1 个答案:

答案 0 :(得分:1)

对于问题1,签名具有误导性:虽然看起来valueOf()OWL2Datatype定义,但它实际上是为Enum定义的 - 所有java枚举都得到它,并且适用于其参数的字符串是"XSD_STRING",即枚举中变量的实际名称。

对于问题2,问题是xsd是众所周知的命名空间缩写,但它仍然是任意的 - 为了转换为数据类型的完整IRI,您需要ShortFormProvider来反转映射。 我可以看到这将是一个有用的功能,但我不确定它是否提供此刻。我会为它提出一个issue

这已被添加到OWLAPI中,现在有两种方法可以满足您的需求,如本测试所示:

@Test
public void shouldParseXSDSTRING() {
    // given
    OWLDataFactory df = OWLManager.getOWLDataFactory();
    String s = "xsd:string";
    // when
    XSDVocabulary v = XSDVocabulary.parseShortName(s);
    // then
    assertEquals(XSDVocabulary.STRING, v);
    assertEquals(OWL2Datatype.XSD_STRING.getDatatype(df),
            df.getOWLDatatype(v.getIRI()));
}

所以,一种方法是通过OWL2Datatype和一个OWLDataFactory:

OWLDatatype string = OWL2Datatype.XSD_STRING.getDatatype(df)

另一个是XSDVocabulary和OWLDataFactory:

OWLDatatype string = df.getOWLDatatype(XSDVocabulary.parseShortName("xsd:string"));