如何使用芝麻从 Virtuoso 获取前缀和命名空间列表

How to get the prefix and namespace list from Virtuoso, using Sesame

如何在 Virtuoso 中获取词汇表(或图形)的前缀和命名空间列表,就像我们在 Sesame 中一样:

在 Sesame 中,我们可以使用 RepositoryConnection 对象检索词汇表(存储库)的前缀和命名空间列表,

RepositoryResult<Namespace> nameSpaces = connection.getNamespaces();

但是当我们将其上传到 Virtuoso 时,我们如何获得相同的词汇列表。

VirtGraph给出默认前缀和命名空间列表,但不给出上传词表中的前缀和命名空间列表。

您最初问题的措辞表明您可能认为 "vocabulary"、"Graph" 和 "repository" 都是同义词。他们不是!一个 "repository"(也称为数据存储)可能包含一个或多个 "Graphs",其中一个或多个可能包含一个 "vocabulary"(或者更常见的 RDF 说法,一个 "ontology"),它描述了用于描述某些 class(es) 实体的术语,有或没有 "instance data"(有时称为 "records",这是实际描述classes)的一些实际实例)。

就是说——RDF-Turtle、RDF-N3 和类似文件中的 PREFIX(或 @prefix)语句实际上并不是数据的一部分;它们是序列化的一部分。因此,它们不会作为前缀或名称空间自动保存在 Virtuoso 数据存储中。

Virtuoso Conductor 提供了一个部分用于定义命名空间(http://{virtuoso-host-fqdn}:{port}/conductor/Linked DataNamespaces). We generally recommend working through that interface, but experts can also work directly with the relevant SQL table, DB.DBA.SYS_XML_PERSISTENT_NS_DECL. Namespaces defined here are used when Virtuoso produces serialized output in formats which support CURIEs(a/k/a 紧凑 URI),以及 Virtuoso 在 SPARQL 查询和其他地方解释 CURIE 的时间。

您可以通过内置页面,http://{virtuoso-host-fqdn}:{port}/sparql?help=nsdecl, as may be seen on DBpedia,或通过任何SQL连接(iSQL,ODBC,JDBC,查看当前定义的命名空间,等)--

  SELECT  NS_PREFIX, 
          NS_URL 
    FROM  DB.DBA.SYS_XML_PERSISTENT_NS_DECL
ORDER BY  LOWER(NS_PREFIX) ;

您也可以使用 Sesame(现在是 RDF4J)方法来获取这些,如 documentation and sample code we provide --

中的这个片段
// test getNamespace
Namespace testns = null;
RepositoryResult<Namespace> namespaces = null;
boolean hasNamespaces = false;

try {
    namespaces = con.getNamespaces();
    hasNamespaces = namespaces.hasNext();
    while (namespaces.hasNext()) {
        Namespace ns = namespaces.next();
        // LOG("Namespace found: (" + ns.getName() + " " + ns.getPrefix() + ")");
        testns = ns;
    }
}
catch (Exception e) {
    log("Error[" + e + "]");
    e.printStackTrace();
    ok = false;
}

我们的提供商也有删除和更新已注册命名空间的方法,这些方法在 VirtuosoRepositoryConnection class 中实现,如每个提供商的 API 文档中所述(RDF4J, Sesame 4, Sesame 2).

(ObDisclaimer:OpenLink Software produces Virtuoso,并雇用了我。)