Sparql 如何检索OWL枚举数据类型表达式的元素?

Sparql 如何检索OWL枚举数据类型表达式的元素?,sparql,rdf,owl,Sparql,Rdf,Owl,我应该使用什么SPARQL查询来显示两种数据类型的并集的所有值?此外,如何计算此数据类型联合中的值数?每个数据类型都是用(…)的DataOneOf定义的 编辑:从以下内容开始:我应该使用什么SPARQL查询来显示所选数据类型的所有值?将来,如果您能够提供我们可以使用的最小数据,这将更加容易。这也会让问题更清楚一些。据我所知,您已经使用dataOneOf构造定义了一些数据类型来枚举几个文本。首先,让我们创建一些示例数据。下面是一个OWL本体,它有两个属性,每个属性都有一个嵌入的数据类型表达式作为其

我应该使用什么SPARQL查询来显示两种数据类型的并集的所有值?此外,如何计算此数据类型联合中的值数?每个数据类型都是用(…)的DataOneOf定义的


编辑:从以下内容开始:我应该使用什么SPARQL查询来显示所选数据类型的所有值?

将来,如果您能够提供我们可以使用的最小数据,这将更加容易。这也会让问题更清楚一些。据我所知,您已经使用dataOneOf构造定义了一些数据类型来枚举几个文本。首先,让我们创建一些示例数据。下面是一个OWL本体,它有两个属性,每个属性都有一个嵌入的数据类型表达式作为其范围。其中一个有{1,2}作为范围,另一个有{1,2}:

@前缀:。
@前缀rdf:。
@前缀owl:。
@前缀xsd:。
@前缀rdfs:。
:p1 a owl:DatatypeProperty;
rdfs:range[a rdfs:Datatype;
owl:rdf:List中的一个;
rdf:前1位;
rdf:rest[a rdf:List;
rdf:前2位;
rdf:rest()
]
]
] .
:p2 a owl:DatatypeProperty;
rdfs:range[a rdfs:Datatype;
owl:rdf:List中的一个;
rdf:第一个“一”;
rdf:rest[a rdf:List;
rdf:第一个“两个”;
rdf:rest()
]
]
] .
请注意,数据类型表达式中的可能值列表作为RDF列表给出。使用属性路径查询RDF列表是最容易的,在堆栈溢出上还有很多其他的例子。下面是查询的样子,它将检索数据类型及其每个元素以及这些元素的数据类型(如果您也需要的话)

前缀rdf:
前缀owl:
前缀rdfs:
选择?dt?元素?元素类型{
?dt a rdfs:数据类型;
owl:oneOf/rdf:rest*/rdf:first?元素。
绑定(数据类型(?元素)为?元素类型)
}
---------------------------------------------------------------
|dt |元素|元素类型|
===============================================================
|_0;:b0 |“一”||
|_0;:b0 |“两个”||
||:b1 | 1 ||
||:b1 | 2 ||
---------------------------------------------------------------

请注意,这些数据类型通常由空白节点表示,这意味着它们没有关联的IRI。例如,在本例中,它们显示为0:b0和1:b1。不过,希望您能找到一些方法来识别您感兴趣的特定数据类型表达式,例如,通过询问某些特定属性的范围,或类似的内容。

我有一个小的子问题来回答您的精彩答案?dta-rdfs:数据类型;选择本体中的所有枚举。我如何修改它,以便只绑定示例中p1和p2的元素(而不是其他元素)?@Annabelle它们不是“p1和p2的元素”,而是p1和p2范围的值。在这种情况下,您可以将
值?p{:p1:p2}?p rdfs:range?dt.
添加到查询中。也就是说,您只需要指定属性p的rdfs:range的?dt值,哪些值设置为:p1或:p2。我确实混淆了这个问题,但这是不正确的:DatatypeDefinition(:A DataOneOf(“a1”“a2”))DatatypeDefinition(:B DataOneOf(“b1”“b2”))DatatypeDefinition(:C DataOneOf(“c1”“c2”))选择?dt?element?elementType{dt a rdfs:Datatype;owl:oneOf/rdf:rest*/rdf:first?element.bind(Datatype(?element)作为?elementType)。value?p{my:a my:C}?p rdfs:range?dt}@Annabelle我是基于我提供的本体论的检索方法。如果数据类型由IRIs识别,那么当然还有其他方法来选择它们。在你的例子中,如果你只想把dt变成A或B,那么它看起来应该是
values?dt{:A:B}
。@annaBelle如果你展示你所拥有的本体,我们实际上可以解决这个问题,但是如果没有一些真实的数据,这不是一个真正可以检查的问题