TDB Assembler Assemblers (裝配器) 是Jena中用於描述將要構建的對象(通常是模型和數據集 models & datasets)的一種通用機制。例如, Fuseki 嚴重依賴使用 Assemblers 來描述模型和數據集. SPARQL 查詢是在RDF數據集上操作的。RDF ...
TDB Assembler
Assemblers (裝配器) 是Jena中用於描述將要構建的對象(通常是模型和數據集 models & datasets)的一種通用機制。例如, Fuseki 嚴重依賴使用 Assemblers 來描述模型和數據集.
SPARQL 查詢是在RDF數據集上操作的。RDF 數據集由一個未命名的預設圖( a unnamed, default graph) 和 0個或多個命名圖(named graphs)構成。
將數據描述存儲在一個文件中,意味著應用程式工作時依賴的數據可以隨時改變而不需要修改程式代碼。
Dataset
This is needed for use in Fuseki.
可以使用一個裝配文件來構造一個數據集:
@prefix tdb: <http://jena.hpl.hp.com/2008/tdb#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix ja: <http://jena.hpl.hp.com/2005/11/Assembler#> .
[] ja:loadClass "org.apache.jena.tdb.TDB" .
tdb:DatasetTDB rdfs:subClassOf ja:RDFDataset .
tdb:GraphTDB rdfs:subClassOf ja:Model .
<#dataset> rdf:type tdb:DatasetTDB ;
tdb:location "DB" ;
.
一個位置只能存儲一個數據集。 (filing system directory).
第一部分聲明瞭後面使用的首碼:
@prefix tdb: <http://jena.hpl.hp.com/2008/tdb#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix ja: <http://jena.hpl.hp.com/2005/11/Assembler#> .
緊接著是一條載入TDB的陳述(a statement). TDB 在載入時會自動初始化. 但TDB的 jar文件必須在 Java 的classpath目錄下.
對於機器來說,此陳述在本文件中的順序並不影響其功能,因為 jena 的裝配文件系統( assembler system)會在嘗試裝配任何對象之前,先檢查所有的 ja:loadClass
陳述,。將此陳述放在文件的前面,是為了幫助使用者閱讀文件.
[] ja:loadClass "org.apache.jena.tdb.TDB" .
最後是一個關於TDB數據集自身的描述:
<#graph> rdf:type tdb:DatasetTDB ;
tdb:location "DB" ;
屬性 tdb:location
將文件名作為一個字元串. 它相對於應用程式當前的工作目錄, 而與 assembler 文件位置無關.
通過觀察 tdb:GraphDataset
的一個主語(subject)可以獲得數據集的描述。若在一個文件中定義了多個 graph,應用程式必須明確指定使用哪一個描述( description).
Union Default Graph
一個 assembler 可以指明用於查詢的預設圖(default graph )是多個命名圖的集合(union of the named graphs)。通過加入 tdb:unionDefaultGraph
可以實現此功能.
<#dataset> rdf:type tdb:DatasetTDB ;
tdb:location "DB" ;
tdb:unionDefaultGraph true ;
.
Graph
TDB 總是將數據存儲在一個 RDF 數據集中. 可以只使用數據集中的一個圖. 通常的做法是使用數據集中的預設圖。
TDB數據集中一個單一的圖可以採用下述描述:
@prefix tdb: <http://jena.hpl.hp.com/2008/tdb#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix ja: <http://jena.hpl.hp.com/2005/11/Assembler#> .
[] ja:loadClass "org.apache.jena.tdb.TDB" .
# 聲明一個數據集,並指明其位置
<#dataset> rdf:type tdb:DatasetTDB ;
tdb:location "DB" ;
# 聲明一個圖,並指明其數據集
<#graph> rdf:type tdb:GraphTDB ;
tdb:dataset <#dataset> .
某位置下的數據集中的一個特定的命名圖可以這樣裝配:
<#graphNamed> rdf:type tdb:GraphTDB ;
tdb:dataset <#dataset> .
tdb:graphName <http://example/graph1> ;
.
Mixed Datasets
可以使用不同存儲子系統支持的圖來創建數據集,儘管此時查詢不一定高效. 要在數據集中包含命名圖,請使用下麵的辭彙:
@prefix tdb: <http://jena.hpl.hp.com/2008/tdb#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix ja: <http://jena.hpl.hp.com/2005/11/Assembler#> .
[] ja:loadClass "org.apache.jena.tdb.TDB" .
tdb:DatasetTDB rdfs:subClassOf ja:RDFDataset .
tdb:GraphTDB rdfs:subClassOf ja:Model .
# A dataset of one TDB-backed graph as the default graph and
# an in-memory graph as a named graph.
<#dataset> rdf:type ja:RDFDataset ;
ja:defaultGraph <#graph> ;
ja:namedGraph
[ ja:graphName <http://example.org/name1> ;
ja:graph <#graph2> ] ;
.
<#graph> rdf:type tdb:GraphTDB ;
tdb:location "DB" ;
.
<#graph2> rdf:type ja:MemoryModel ;
ja:content [ja:externalContent <file:Data/books.n3> ] ;
.
註意,此處我們增加了一些內容:
tdb:DatasetTDB rdfs:subClassOf ja:RDFDataset .
tdb:GraphTDB rdfs:subClassOf ja:Model .
這提供了與複雜模型設置(如推理機)的集成。
RDFS
一些定義
@prefix tdb: <http://jena.hpl.hp.com/2008/tdb#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix ja: <http://jena.hpl.hp.com/2005/11/Assembler#> .
tdb:Dataset a rdfs:Class .
tdb:GraphTDB a rdfs:Class .
tdb:DatasetTDB rdfs:subClassOf ja:RDFDataset .
tdb:GraphTDB rdfs:subClassOf ja:Model .
# tdb:location 是一個 rdf:Property
# 定義域(domain,subject)是tdb:Dataset 或 tdb:GraphTDB
# 值域(range,object)是簡單文本值
tdb:location a rdf:Property ;
# domain is tdb:Dataset or tdb:GraphTDB
# The range is simple literal
.
tdb:unionDefaultGraph a rdf:Property ;
rdfs:domain tdb:Dataset ;
# The range is xsd:boolean
.
tdb:graphName a rdf:Property ;
rdfs:domain tdb:GraphTDB ;
# range is a URI
.