2013-08-04 5 views
1

Как получить список URI под пространством имен в RDFlib?RDFLib: получить все URI под пространством имен

Например, мы можем сделать:

from rdflib.namespace import FOAF 

Но как узнать, какие идентификаторы URI доступны в FOAF?

На самом деле существует несколько пространств имен (RDF, RDFS, FOAF, ...), и мне трудно исследовать, какие URI находятся внутри каждого из них, и какой из них использовать. Скажите, если я хочу выразить отношения, связанные с принадлежностью, следует ли использовать RDFS.member или что-то еще? Есть ли стандарт для связанных данных или он все еще является ad-hoc?

Я новичок в RDF и сожалею, если это кажется очевидным вопросом.

Спасибо!

ответ

0

IRI - это просто непрозрачные идентификаторы. Хотя мы говорим о связанных данных и семантической сети, семантика rdfs:member значение, присвоенное свойству, определяется за пределами семантической сети (надеюсь, по хорошей документации, которая должна, конечно, быть связана с этим свойством как rdfs:comment или тому подобное), а также с использованием. Для rdfs:member, описание исходит из ФРР рекомендации:

5.1.6 rdfs:member

RDFS: член является экземпляром РДФ: Имущество, которое является супер-свойством всех членских контейнера свойств, т.е. каждое свойство членства контейнер имеет отношение rdfs: subPropertyOf к свойству rdfs: member.

rdfs: домен rdfs: member is rdfs: Resource. Rdfs: диапазон rdfs: member - rdfs: Resource.

Членские контейнера свойства описаны в том же документе:

rdfs:ContainerMembershipProperty

RDFS: класс ContainerMembershipProperty имеет как экземпляры свойства RDF: _1, РДФ: _2, РДФ: _3. .. которые используются для указания, что ресурс является членом контейнера. rdfs: ContainerMembershipProperty - это подкласс rdf: Property. Каждый экземпляр rdfs: ContainerMembershipProperty - это rdfs: subPropertyOf свойство rdfs: member.

Учитывая контейнер С, тройных форм:

С РДФОМ: _nnn О

, где NNN представляет собой десятичное представление целого числа больше 0, без ведущих нулей, состояния что O является членом контейнера C.

Свойства членства в контейнере могут применяться к ресурсам, отличным от контейнеров.

Я был на самом деле немного удивился, прочитав эту последнюю строку, но так как членские свойства и rdfs:member могут быть применены к другим, чем контейнеры ресурсов, кажется, это было бы приемлемо использовать их на своих собственных структур данных.

Несмотря на это, было бы более уместным определить ваше собственное более конкретное свойство и просто утверждать, что это подкласс от rdfs:member. Например, вы можете указать, что свойство politics:memberStateOf, относящее национальное государство к некоторому многонациональному союзу, является rdfs:subPropertyOf rdfs:member.

Консультации по документации словарей - хорошая идея и в других ситуациях. Например, the examples на странице RDFLib действительно включают некоторое использование FOAF:

from rdflib import RDF 
... 
# Create a namespace object for the Friend of a friend namespace. 
FOAF = Namespace("http://xmlns.com/foaf/0.1/") 
... 
# Add triples using store's add method. 
store.add((donna, RDF.type, FOAF["Person"])) 
store.add((donna, FOAF["nick"], Literal("donna", lang="foo"))) 

То, как FOAF используется здесь (который немного отличается в вашем вопросе, возможно, есть библиотека для него сейчас) с передаваемые строки зависят от того, что известно, какие URI должны существовать, и эта информация доступна в FOAF specification. Хотя кажется, что RDF пространства имен имеют некоторые символические константы определены (например, RDF.type), the documentation говорит, что RDF.type фактически эквивалентно RDF['type']:

Полностью квалифицированные идентификаторы URI в пространстве имен могут быть построены либо атрибутом или словаря доступа на пространства имен экземпляров:

>>> owl.seeAlso 
    rdflib.term.URIRef(u'http://www.w3.org/2002/07/owl#seeAlso') 
    >>> owl['seeAlso'] 
    rdflib.term.URIRef(u'http://www.w3.org/2002/07/owl#seeAlso') 
+0

Спасибо большое, Иисус! Указатели на документацию RDFS и FOAF очень полезны! и я действительно задавался вопросом, должен ли я определять свойства самостоятельно. Идея subproperty великолепна! – freesoil

+0

Я бы хотел, чтобы rdflib предоставил функцию для перечисления всех свойств под пространством имен :) В отдельном примечании, учитывая столько пространств имен RDF, где нет простого способа исследовать и перемещаться, скоро нам понадобятся презентации RDF для всех пространств имен RDF :) – freesoil

+0

@freesoil Я не знаю, включает ли RDFlib что-то подобное, но Йена определяет ряд [классов лексики] (http://jena.apache.org/documentation/javadoc/jena/com/hp/hpl/ jena/vocabulary/package-summary.html), которые имеют константы для различных свойств и классов в пространстве имен, например ['RDFS.member'] (http://jena.apache.org/documentation/javadoc/jena/com /hp/hpl/jena/vocabulary/RDFS.html#member). Jena включает инструмент [schemagen] (http://jena.apache.org/documentation/tools/schemagen.html) для автоматического создания этих классов. Возможно, вы могли бы сделать что-то подобное с rdflib. –