在SWI Prolog中从RDF“类型限定文字”转换为Prolog原子

问题描述 投票:0回答:1

“ SWI-Prolog语义Web库3.0”使您可以轻松地声明和查询RDF三元组,如下所示:

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

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

如何将X从“类型限定文字”格式(描述为here)转换为标准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中是否有意义,并允许采用更优雅的方式进行操作?

prolog rdf swi-prolog
1个回答
0
投票

您可以使用统一,分解所获得的复合词或访问其参数:

?- 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.
© www.soinside.com 2019 - 2024. All rights reserved.