0

我需要从相应的字符串中获取 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. 如何创建与名称对应的 OWLDatatype xsd:string

4

1 回答 1

1

对于第 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)

另一个是 XSDVocabulary 和 OWLDataFactory:

OWLDatatype string = df.getOWLDatatype(XSDVocabulary.parseShortName("xsd:string"));
于 2013-10-24T18:28:53.583 回答