如何检索 OWL 枚举数据类型表达式的元素?
How to retrieve elements of OWL enumerated datatype expression?
我应该使用什么 SPARQL 查询来显示两种数据类型联合的所有值?另外,我如何计算这个数据类型联合中的值的数量?每个数据类型都用 DataOneOf(...)
公理定义。
编辑:从一开始:我应该使用什么 SPARQL 查询来显示所选数据类型的所有值?
将来,如果您能提供我们可以使用的最少数据,就会容易得多。这也将使问题更清楚一些。据我了解,您已经使用 dataOneOf 构造定义了一些数据类型来枚举多个文字。首先,让我们创建一些示例数据。这是一个具有两个属性的 OWL ontology,每个属性都有一个枚举数据类型表达式作为其范围。其中一个以 {"one", "two"} 为范围,另一个以 {1, 2}:
@prefix : <http://example.org/datatypes#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix owl: <http://www.w3.org/2002/07/owl#> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
:p1 a owl:DatatypeProperty ;
rdfs:range [ a rdfs:Datatype ;
owl:oneOf [ a rdf:List ;
rdf:first 1 ;
rdf:rest [ a rdf:List ;
rdf:first 2 ;
rdf:rest ()
]
]
] .
:p2 a owl:DatatypeProperty ;
rdfs:range [ a rdfs:Datatype ;
owl:oneOf [ a rdf:List ;
rdf:first "one" ;
rdf:rest [ a rdf:List ;
rdf:first "two" ;
rdf:rest ()
]
]
] .
请注意,数据类型表达式中的可能值列表是作为 RDF 列表给出的。使用 属性 路径查询 RDF 列表是最简单的,Stack Overflow 上还有许多其他示例。下面是查询的样子,它将检索数据类型及其每个元素和这些元素的数据类型(以防您也需要)。
prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
prefix owl: <http://www.w3.org/2002/07/owl#>
prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>
select ?dt ?element ?elementType {
?dt a rdfs:Datatype ;
owl:oneOf/rdf:rest*/rdf:first ?element .
bind(datatype(?element) as ?elementType)
}
---------------------------------------------------------------
| dt | element | elementType |
===============================================================
| _:b0 | "one" | <http://www.w3.org/2001/XMLSchema#string> |
| _:b0 | "two" | <http://www.w3.org/2001/XMLSchema#string> |
| _:b1 | 1 | <http://www.w3.org/2001/XMLSchema#integer> |
| _:b1 | 2 | <http://www.w3.org/2001/XMLSchema#integer> |
---------------------------------------------------------------
请注意,此类数据类型通常由空白节点表示,这意味着它们没有 关联的 IRI。例如,在这种情况下,它们显示为 _:b0 和 _:b1。不过,希望您有一些方法来识别您感兴趣的特定数据类型表达式,例如,通过询问某些特定 属性 的范围或类似的东西。
我应该使用什么 SPARQL 查询来显示两种数据类型联合的所有值?另外,我如何计算这个数据类型联合中的值的数量?每个数据类型都用 DataOneOf(...)
公理定义。
编辑:从一开始:我应该使用什么 SPARQL 查询来显示所选数据类型的所有值?
将来,如果您能提供我们可以使用的最少数据,就会容易得多。这也将使问题更清楚一些。据我了解,您已经使用 dataOneOf 构造定义了一些数据类型来枚举多个文字。首先,让我们创建一些示例数据。这是一个具有两个属性的 OWL ontology,每个属性都有一个枚举数据类型表达式作为其范围。其中一个以 {"one", "two"} 为范围,另一个以 {1, 2}:
@prefix : <http://example.org/datatypes#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix owl: <http://www.w3.org/2002/07/owl#> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
:p1 a owl:DatatypeProperty ;
rdfs:range [ a rdfs:Datatype ;
owl:oneOf [ a rdf:List ;
rdf:first 1 ;
rdf:rest [ a rdf:List ;
rdf:first 2 ;
rdf:rest ()
]
]
] .
:p2 a owl:DatatypeProperty ;
rdfs:range [ a rdfs:Datatype ;
owl:oneOf [ a rdf:List ;
rdf:first "one" ;
rdf:rest [ a rdf:List ;
rdf:first "two" ;
rdf:rest ()
]
]
] .
请注意,数据类型表达式中的可能值列表是作为 RDF 列表给出的。使用 属性 路径查询 RDF 列表是最简单的,Stack Overflow 上还有许多其他示例。下面是查询的样子,它将检索数据类型及其每个元素和这些元素的数据类型(以防您也需要)。
prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
prefix owl: <http://www.w3.org/2002/07/owl#>
prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>
select ?dt ?element ?elementType {
?dt a rdfs:Datatype ;
owl:oneOf/rdf:rest*/rdf:first ?element .
bind(datatype(?element) as ?elementType)
}
---------------------------------------------------------------
| dt | element | elementType |
===============================================================
| _:b0 | "one" | <http://www.w3.org/2001/XMLSchema#string> |
| _:b0 | "two" | <http://www.w3.org/2001/XMLSchema#string> |
| _:b1 | 1 | <http://www.w3.org/2001/XMLSchema#integer> |
| _:b1 | 2 | <http://www.w3.org/2001/XMLSchema#integer> |
---------------------------------------------------------------
请注意,此类数据类型通常由空白节点表示,这意味着它们没有 关联的 IRI。例如,在这种情况下,它们显示为 _:b0 和 _:b1。不过,希望您有一些方法来识别您感兴趣的特定数据类型表达式,例如,通过询问某些特定 属性 的范围或类似的东西。