如何使用芝麻从 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 Data → Namespaces). 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,并雇用了我。)
如何在 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 Data → Namespaces). 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,并雇用了我。)