SPARQL技术问询:获取类的属性及数据类型属性的具体类型
修改SPARQL查询获取数据类型属性的具体类型
要拿到DatatypeProperty的具体类型,核心是查询该属性的rdfs:range(值域)——数据类型属性的值域通常指向XSD下的具体类型(比如xsd:float、xsd:integer)。可以通过SPARQL的可选匹配(OPTIONAL)区分处理对象属性和数据类型属性,修改后的查询如下:
SELECT ?class ?property ?propertyType ?dataType WHERE { ?resource ?property ?target . ?property rdfs:domain ?class . ?resource a ?class . ?property rdf:type ?propertyType . # 仅针对数据类型属性,获取其具体值域类型 OPTIONAL { ?property rdf:type owl:DatatypeProperty . ?property rdfs:range ?dataType . } }
查询逻辑说明
- 保留原查询的核心逻辑,获取类、属性以及属性的基础类型(ObjectProperty/DatatypeProperty)
- 添加
OPTIONAL块:只有当属性属于owl:DatatypeProperty时,才会抓取它的rdfs:range值,也就是具体的数据类型 - 对于ObjectProperty,
?dataType字段会返回空值,不影响结果展示
预期查询结果
:Store :location http://www.w3.org/2002/07/owl#ObjectProperty (空值) :Product :price http://www.w3.org/2002/07/owl#DatatypeProperty xsd:float
如果想要更简洁的结果展示,把属性类型和具体数据类型合并成一个字段,可以用CASE语句调整查询:
SELECT ?class ?property (CASE WHEN ?propertyType = owl:DatatypeProperty THEN CONCAT(str(?propertyType), " (", str(?dataType), ")") ELSE str(?propertyType) END AS ?propertyDetail) WHERE { ?resource ?property ?target . ?property rdfs:domain ?class . ?resource a ?class . ?property rdf:type ?propertyType . OPTIONAL { ?property rdf:type owl:DatatypeProperty . ?property rdfs:range ?dataType . } }
紧凑格式的预期结果
:Store :location http://www.w3.org/2002/07/owl#ObjectProperty :Product :price http://www.w3.org/2002/07/owl#DatatypeProperty (xsd:float)
内容的提问来源于stack exchange,提问作者George Perid
相关产品推荐
相关产品推荐

