[英]Check if an underlying representation is OWL or RDFS
假設您正在通過SPARQL端點查詢數據源,並且想知道該數據源的基礎表示形式是OWL還是RDF / XML。 無論如何,您可以通過SPARQL查詢來做到這一點嗎? 我個人的想法是編寫一個使用OWL屬性之一的查詢,看看是否返回任何結果,但是使用這種方法的缺點是,如果使用的OWL屬性甚至不在數據源中出現如果基礎表示形式是OWL,則不會得到響應。 這里的假設是您無權訪問該架構。
我認為一種有趣的方法是編寫一個查詢,該查詢獲取涉及您所關注的架構語言的某些保留URI的所有三元組,這有望為您提供架構或本體。 例如,來自OWL規范的第2.4節IRI提供了OWL保留的IRI列表。 這樣的查詢有望為您提供所需的大多數信息:
prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>
prefix xsd: <http://www.w3.org/2001/XMLSchema#>
prefix owl: <http://www.w3.org/2002/07/owl#>
construct { ?s ?p ?o }
where {
values ?res {
owl:backwardCompatibleWith owl:bottomDataProperty owl:bottomObjectProperty owl:deprecated owl:incompatibleWith
owl:Nothing owl:priorVersion owl:rational owl:real owl:versionInfo
owl:Thing owl:topDataProperty owl:topObjectProperty rdf:langRange rdf:PlainLiteral
rdf:XMLLiteral rdfs:comment rdfs:isDefinedBy rdfs:label rdfs:Literal
rdfs:seeAlso xsd:anyURI xsd:base64Binary xsd:boolean xsd:byte
xsd:dateTime xsd:dateTimeStamp xsd:decimal xsd:double xsd:float
xsd:hexBinary xsd:int xsd:integer xsd:language xsd:length
xsd:long xsd:maxExclusive xsd:maxInclusive xsd:maxLength xsd:minExclusive
xsd:minInclusive xsd:minLength xsd:Name xsd:NCName xsd:negativeInteger
xsd:NMTOKEN xsd:nonNegativeInteger xsd:nonPositiveInteger xsd:normalizedString xsd:pattern
xsd:positiveInteger xsd:short xsd:string xsd:token xsd:unsignedByte
xsd:unsignedInt xsd:unsignedLong xsd:unsignedShort
}
{ ?res ?p ?o . bind( ?res as ?s ) } union
{ ?s ?res ?o . bind( ?res as ?p ) } union
{ ?s ?p ?res . bind( ?res as ?o ) }
}
同樣,您可以使用以下類似方法來提取RDFS模式。 此處保留的屬性列表基於§6。 RDFS建議中的RDF架構摘要(參考) 。 我刪除了rdf:type
,因為它總是很多。
prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>
prefix xsd: <http://www.w3.org/2001/XMLSchema#>
prefix owl: <http://www.w3.org/2002/07/owl#>
construct { ?s ?p ?o }
where {
values ?res {
rdfs:Resource rdfs:Literal rdf:XMLLiteral rdfs:Class rdf:Property
rdfs:Datatype rdf:Statement rdf:Bag rdf:Seq rdf:Alt rdfs:Container
rdfs:ContainerMembershipProperty rdf:List rdfs:subClassOf
rdfs:subPropertyOf rdfs:domain rdfs:range rdfs:label rdfs:comment
rdfs:member rdf:first rdf:rest rdfs:seeAlso rdfs:isDefinedBy
rdf:value rdf:subject rdf:predicate rdf:object
}
{ ?res ?p ?o . bind( ?res as ?s ) } union
{ ?s ?res ?o . bind( ?res as ?p ) } union
{ ?s ?p ?res . bind( ?res as ?o ) }
}
如果對數據集運行這兩個查詢,則可能可以對數據的結構做出有根據的猜測。 請注意,OWL還使用了許多RDFS屬性,因此粗略的啟發式方法可能是:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.