|
@@ -8,6 +8,7 @@ local triple = require "lsup.triple"
|
|
|
local graph = require "lsup.graph"
|
|
|
|
|
|
local pkar = require "pocket_archive"
|
|
|
+local model = require "pocket_archive.model"
|
|
|
|
|
|
|
|
|
-- Compile all templates once.
|
|
@@ -32,12 +33,40 @@ M.generate_resource = function(gr_uri)
|
|
|
local gr = graph.get(gr_uri, pkar.store)
|
|
|
local dmd = {}
|
|
|
local rel = {}
|
|
|
-
|
|
|
- for trp in gr:lookup(gr_uri) do
|
|
|
- -- TODO transform data here according to model.
|
|
|
- dmd[trp.p.data] = trp.o
|
|
|
+ local children = {}
|
|
|
+
|
|
|
+ local res_type
|
|
|
+ local type_attr = gr:attr(
|
|
|
+ gr_uri, term.new_iriref("pas:contentType", pkar.nsm))
|
|
|
+ res_type = type_attr[1].data
|
|
|
+ local mconf = model.models[res_type]
|
|
|
+
|
|
|
+ local attrs = gr:connections(gr_uri, term.LINK_OUTBOUND)
|
|
|
+ for p, ots in pairs(attrs) do
|
|
|
+ if ((mconf.attributes or {})[p.data] or {}).type == "rel" then
|
|
|
+ -- Relationship.
|
|
|
+ rel[p.data] = {}
|
|
|
+ for o in pairs(ots) do table.insert(dmd[p.data], o.data) end
|
|
|
+ elseif p.data == "pas:firstChild" then
|
|
|
+ -- Children.
|
|
|
+ for o in pairs(ots) do table.insert(children, o.data) end
|
|
|
+ elseif p.data == "pas:next" then
|
|
|
+ -- Sibling.
|
|
|
+ for o in pairs(ots) do ls_next = o.data break end
|
|
|
+ else
|
|
|
+ -- Descriptive metadata.
|
|
|
+ dmd[p.data] = {}
|
|
|
+ -- TODO differentiate term types
|
|
|
+ for o in pairs(ots) do table.insert(dmd[p.data], o.data) end
|
|
|
+ end
|
|
|
end
|
|
|
- pp.dump(rsrc_data)
|
|
|
+ table.sort(dmd)
|
|
|
+ table.sort(rel)
|
|
|
+ table.sort(children)
|
|
|
+ print("DMD:")
|
|
|
+ pp.dump(dmd)
|
|
|
+ print("REL:")
|
|
|
+ pp.dump(rel)
|
|
|
|
|
|
out_html = res_tpl({
|
|
|
title = pkar.config.site.title or "Pocket Archive",
|
|
@@ -45,6 +74,8 @@ M.generate_resource = function(gr_uri)
|
|
|
pkar = pkar,
|
|
|
dmd = dmd,
|
|
|
rel = rel,
|
|
|
+ children = children,
|
|
|
+ ls_next = ls_next,
|
|
|
})
|
|
|
|
|
|
local res_id = gr_uri.data:gsub(pkar.nsm:get_ns("par"), "")
|