Представьте, что вы запрашиваете источник данных через конечную точку SPARQL, и вы хотите знать, является ли базовое представление этого источника данных OWL или RDF/XML. Есть ли в любом случае, что вы могли бы сделать это с помощью запроса SPARQL? Моя личная мысль заключалась в том, чтобы написать запрос, который использует одно из свойств OWL, и посмотреть, возвращает ли он какой-либо результат, однако недостатком использования такого подхода является то, что если вы используете свойство OWL, которое не появляется в источнике данных даже если базовое представление - OWL, вы не получите ответ. Предполагается, что у вас нет доступа к схеме.Проверьте, является ли базовое представление OWL или RDFS
ответ
Я думаю, что интересным подходом к этому было бы написать запрос, который получает все троек, которые включают некоторые зарезервированные URI для языков схемы, которые вы заинтересованы, что, надеюсь, даст вам схему или онтологию. Например, §2.4 IRIs из спецификации OWL дает список зарезервированных IRI для OWL. Запрос, как это, мы надеемся, даст вам большинство информации, что вам нужно:
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. RDF Schema summary (Informative) из рекомендации RDFS. Однако я удалил 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, поэтому грубая эвристика может быть:
- Если запрос возвращает OWL значительно больше информации, чем запрос ИСС, то данные, вероятно, использует OWL онтологию; в противном случае он, вероятно, использует схему RDFS (или вообще не имеет схемы).
Ваша идея кажется действительной для меня, вы можете попытаться запросить список конструкций OWL и посмотреть, есть ли у вас какие-либо результаты. Вы можете сделать то же самое для RDFS. Вы должны предположить, что у вас есть доступ к схеме данных (основная особенность семантической сети), иначе считайте ее графиком RDF. – loopasam
Вопрос о том, является ли «источник данных OWL или RDF/XML», не имеет большого смысла. SPARQL предназначен для запроса RDF. RDF/XML - это определенная сериализация RDF, и не имеет значения, как конечная точка SPARQL хранит ваши данные, если вы можете запросить ее. OWL может быть сериализована в RDF, поэтому может случиться, что вы запрашиваете сериализацию RDF некоторых данных OWL. Конечно, сериализация некоторых данных OWL не будет отличаться от данных «не-OWL». Например,. утверждение свойства объекта «ArshamMesbah использует StackOverflow» сериализуется как тройной «ArshamMesbah использует StackOverflow». –
Все, что сказал, @loopasam, если абсолютно правильно; если данные, которые вы запрашиваете, являются сериализацией RDF некоторых данных OWL, вы ожидаете увидеть некоторые вещи, которые являются «owl: Class'es, properties и т. д. –