Assemblers (裝配器) 是Jena中用於描述將要構建的對象(一般是模型和數據集 models & datasets)的一種通用機制。例如, Fuseki 嚴重依賴使用 Assemblers 來描述模型和數據集.python
SPARQL 查詢是在RDF數據集上操做的。RDF 數據集由一個未命名的默認圖( a unnamed, default graph) 和 0個或多個命名圖(named graphs)構成。apache
將數據描述存儲在一個文件中,意味着應用程序工做時依賴的數據能夠隨時改變而不須要修改程序代碼。dom
This is needed for use in Fuseki.spa
可使用一個裝配文件來構造一個數據集:code
@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).對象
第一部分聲明瞭後面使用的前綴:ip
@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
陳述,。將此陳述放在文件的前面,是爲了幫助使用者閱讀文件.it
[] ja:loadClass "org.apache.jena.tdb.TDB" .
最後是一個關於TDB數據集自身的描述:io
<#graph> rdf:type tdb:DatasetTDB ; tdb:location "DB" ;
屬性 tdb:location
將文件名做爲一個字符串. 它相對於應用程序當前的工做目錄, 而與 assembler 文件位置無關.
經過觀察 tdb:GraphDataset
的一個主語(subject)能夠得到數據集的描述。若在一個文件中定義了多個 graph,應用程序必須明確指定使用哪個描述( description).
一個 assembler 能夠指明用於查詢的默認圖(default graph )是多個命名圖的集合(union of the named graphs)。經過加入 tdb:unionDefaultGraph
能夠實現此功能.
<#dataset> rdf:type tdb:DatasetTDB ; tdb:location "DB" ; tdb:unionDefaultGraph true ; .
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> ; .
可使用不一樣存儲子系統支持的圖來建立數據集,儘管此時查詢不必定高效. 要在數據集中包含命名圖,請使用下面的詞彙:
@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 .
這提供了與複雜模型設置(如推理機)的集成。
一些定義
@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 .