当前位置: 首页 > 知识库问答 >
问题:

OWLAPI数据类型

孙辰阳
2023-03-14

例如,给定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());

但它们都失败了,抛出了一个异常:

共有1个答案

宋飞文
2023-03-14

对于第1个问题,签名具有误导性:虽然看起来valueof()是由owl2datatype定义的,但实际上它是为enum定义的-所有java枚举都得到它,对其参数起作用的字符串是“xsd_string”,即枚举中变量的实际名称。

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

这已经添加到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)

另一个是使用XSDV词汇表和OWLDataFactory:

OWLDatatype string = df.getOWLDatatype(XSDVocabulary.parseShortName("xsd:string"));
 类似资料: