首页 > 解决方案 > 在 SWI Prolog 中从 RDF“类型限定文字”转换为 Prolog 原子

问题描述

“SWI-Prolog Semantic Web Library 3.0”允许您轻松地断言和查询 RDF 三元组,如下所示:

- rdf_assert(number, is, 1).
true.

?- rdf(number, is, X).
X = 1^^'http://www.w3.org/2001/XMLSchema#integer'.

如何将 X 从“类型限定文字”格式(在此处描述)转换为标准 Prolog 原子:X = 1?

我找到了 xsdp_convert/3但它需要类型 ( 'http://www.w3.org/2001/XMLSchema#integer') 和值 ( 1) 作为单独的参数传入。我如何分解“类型限定文字”(1^^'http://www.w3.org/2001/XMLSchema#integer')来做到这一点?

或者更好的是:这种value^^type格式在 Prolog 中是否真的意味着什么,并允许一种更优雅的方式来做到这一点?

标签: prologrdfswi-prolog

解决方案


你可以使用统一,分解你得到的复合词,或者访问它的参数:

?- use_module(library(semweb/rdf11)).
true.

?- rdf_assert(number, is, 1).
true.

?- rdf(number, is, N^^URI).
N = 1,
URI = 'http://www.w3.org/2001/XMLSchema#integer'.

?- rdf(number, is, X), X =.. List.
X = 1^^'http://www.w3.org/2001/XMLSchema#integer',
List = [^^, 1, 'http://www.w3.org/2001/XMLSchema#integer'].

?- rdf(number, is, X), arg(1, X, N).
X = 1^^'http://www.w3.org/2001/XMLSchema#integer',
N = 1.

推荐阅读