<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://onto-wiki.eu/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Maintenance+script</id>
	<title>Onto-Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://onto-wiki.eu/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Maintenance+script"/>
	<link rel="alternate" type="text/html" href="https://onto-wiki.eu/wiki/Special:Contributions/Maintenance_script"/>
	<updated>2026-04-09T02:38:04Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.39.3</generator>
	<entry>
		<id>https://onto-wiki.eu/w/index.php?title=JsonSchema:UuidUriProperty&amp;diff=5649</id>
		<title>JsonSchema:UuidUriProperty</title>
		<link rel="alternate" type="text/html" href="https://onto-wiki.eu/w/index.php?title=JsonSchema:UuidUriProperty&amp;diff=5649"/>
		<updated>2023-04-23T05:10:57Z</updated>

		<summary type="html">&lt;p&gt;Maintenance script: Update package: OSW Core&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
    &amp;quot;title&amp;quot;: &amp;quot;URI&amp;quot;,&lt;br /&gt;
    &amp;quot;format&amp;quot;: &amp;quot;autocomplete&amp;quot;,&lt;br /&gt;
    &amp;quot;eval_template&amp;quot;: {&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;wikitext&amp;quot;,&lt;br /&gt;
        &amp;quot;value&amp;quot;: &amp;quot;Item:OSW{{#sub: {{#replace: {{#replace: {{#explode: {{{self|}}} |#|1}} |_|}} |-|}} |-32}}&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;options&amp;quot;: {&lt;br /&gt;
        &amp;quot;autocomplete&amp;quot;: {&lt;br /&gt;
            &amp;quot;query&amp;quot;: &amp;quot;[[Category:OSW57beed5e1294434ba77bb6516e461456]]|?Equivalent_URI=uri&amp;quot;,&lt;br /&gt;
            &amp;quot;store_template&amp;quot;: {&lt;br /&gt;
                &amp;quot;type&amp;quot;: [&lt;br /&gt;
                    &amp;quot;handlebars&amp;quot;&lt;br /&gt;
                ],&lt;br /&gt;
                &amp;quot;value&amp;quot;: &amp;quot;{{{result.printouts.uri.[0]}}}&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Maintenance script</name></author>
	</entry>
	<entry>
		<id>https://onto-wiki.eu/w/index.php?title=Module:Entity&amp;diff=5648</id>
		<title>Module:Entity</title>
		<link rel="alternate" type="text/html" href="https://onto-wiki.eu/w/index.php?title=Module:Entity&amp;diff=5648"/>
		<updated>2023-04-23T05:10:32Z</updated>

		<summary type="html">&lt;p&gt;Maintenance script: Update package: OSW Core&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local p = {} --p stands for package&lt;br /&gt;
local mwjson = require(&#039;Module:MwJson&#039;)&lt;br /&gt;
&lt;br /&gt;
function p.process(frame, mode, title)&lt;br /&gt;
	local msg = &amp;quot;Debug Output: &amp;lt;br&amp;gt;&amp;quot; --debug msg&lt;br /&gt;
&lt;br /&gt;
	local res = &amp;quot;&amp;quot;&lt;br /&gt;
	if title == nil then title = mw.title.getCurrentTitle().fullText end&lt;br /&gt;
	local namespace = mwjson.splitString(title, &#039;:&#039;)[1]&lt;br /&gt;
	&lt;br /&gt;
	local jsondata_res = mwjson.loadJson({title=title, slot=mwjson.slots.jsondata})&lt;br /&gt;
	local jsondata = jsondata_res.json&lt;br /&gt;
	local debug = mwjson.defaultArg(jsondata[mwjson.keys.debug], false)&lt;br /&gt;
	msg = msg .. jsondata_res.debug_msg&lt;br /&gt;
	&lt;br /&gt;
	local process_res = nil&lt;br /&gt;
	if (namespace == &amp;quot;Category&amp;quot;) then&lt;br /&gt;
		if (mode == &amp;quot;header&amp;quot;) then process_res = mwjson.processJsondata({frame=frame, jsondata=jsondata, mode=mwjson.mode.header, categories={&amp;quot;Category:Category&amp;quot;}, recursive=true, debug=debug}) end&lt;br /&gt;
		if (mode == &amp;quot;footer&amp;quot;) then process_res = mwjson.processJsondata({frame=frame, jsondata=jsondata, mode=mwjson.mode.footer, categories={&amp;quot;Category:Category&amp;quot;}, recursive=true, debug=debug}) end&lt;br /&gt;
		mw.smw.set( {[&amp;quot;IsA&amp;quot;]=&amp;quot;Category:Category&amp;quot;}) --Todo: use type / HasType ?&lt;br /&gt;
	else&lt;br /&gt;
		if (mode == &amp;quot;header&amp;quot;) then process_res = mwjson.processJsondata({frame=frame, jsondata=jsondata, mode=mwjson.mode.header, debug=debug}) end&lt;br /&gt;
		if (mode == &amp;quot;footer&amp;quot;) then process_res = mwjson.processJsondata({frame=frame, jsondata=jsondata, mode=mwjson.mode.footer, debug=debug}) end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	res = res .. process_res.wikitext&lt;br /&gt;
	msg = msg .. process_res.debug_msg&lt;br /&gt;
&lt;br /&gt;
	if (debug) then res = msg .. res  end&lt;br /&gt;
	--if (debug) then mw.log(msg) end&lt;br /&gt;
	--mw.logObject(res)&lt;br /&gt;
	return res&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.header(frame, title)&lt;br /&gt;
	return p.process(frame, &amp;quot;header&amp;quot;, title)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.footer(frame, title)&lt;br /&gt;
	return p.process(frame, &amp;quot;footer&amp;quot;, title)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--test: mw.logObject(p.query(mw.getCurrentFrame(), &#039;{&amp;quot;category&amp;quot;:&amp;quot;Category:Hardware&amp;quot;,&amp;quot;manufacturer&amp;quot;:&amp;quot;TestM&amp;quot;}&#039;))&lt;br /&gt;
function p.query(frame, jsondata_str)&lt;br /&gt;
	if (jsondata_str == nil) then jsondata_str = frame.args[&#039;jsondata&#039;] end&lt;br /&gt;
	--local res = mwjson.processJsondata({frame=frame, jsondata=mw.text.jsonDecode(jsondata_str), mode=mwjson.mode.query}).wikitext&lt;br /&gt;
	return jsondata_str --.. &amp;quot;&amp;lt;br&amp;gt;&amp;quot; .. res&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;br /&gt;
&lt;br /&gt;
--DEBUG (direct invoke)&lt;br /&gt;
--[[&lt;br /&gt;
frame = mw.getCurrentFrame() -- Get a frame object&lt;br /&gt;
title=&amp;quot;Item:OSL7d7193567ea14e4e89b74de88983b718&amp;quot;&lt;br /&gt;
newFrame = frame:newChild{ title=title, args = {}}&lt;br /&gt;
mw.log(p.header( newFrame, title ) ) &lt;br /&gt;
--]]&lt;/div&gt;</summary>
		<author><name>Maintenance script</name></author>
	</entry>
	<entry>
		<id>https://onto-wiki.eu/w/index.php?title=Category:Category&amp;diff=5647</id>
		<title>Category:Category</title>
		<link rel="alternate" type="text/html" href="https://onto-wiki.eu/w/index.php?title=Category:Category&amp;diff=5647"/>
		<updated>2023-04-23T05:10:00Z</updated>

		<summary type="html">&lt;p&gt;Maintenance script: Update package: OSW Core&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Maintenance script</name></author>
	</entry>
	<entry>
		<id>https://onto-wiki.eu/w/index.php?title=Category:Item&amp;diff=5646</id>
		<title>Category:Item</title>
		<link rel="alternate" type="text/html" href="https://onto-wiki.eu/w/index.php?title=Category:Item&amp;diff=5646"/>
		<updated>2023-04-23T05:09:47Z</updated>

		<summary type="html">&lt;p&gt;Maintenance script: Update package: OSW Core&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Maintenance script</name></author>
	</entry>
	<entry>
		<id>https://onto-wiki.eu/w/index.php?title=Category:Category&amp;diff=3352</id>
		<title>Category:Category</title>
		<link rel="alternate" type="text/html" href="https://onto-wiki.eu/w/index.php?title=Category:Category&amp;diff=3352"/>
		<updated>2023-04-20T18:14:06Z</updated>

		<summary type="html">&lt;p&gt;Maintenance script: Update package: OSW Core&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Maintenance script</name></author>
	</entry>
	<entry>
		<id>https://onto-wiki.eu/w/index.php?title=Category:OSWe5aa96bffb1c4d95be7fbd46142ad203&amp;diff=3351</id>
		<title>Category:OSWe5aa96bffb1c4d95be7fbd46142ad203</title>
		<link rel="alternate" type="text/html" href="https://onto-wiki.eu/w/index.php?title=Category:OSWe5aa96bffb1c4d95be7fbd46142ad203&amp;diff=3351"/>
		<updated>2023-04-20T18:13:57Z</updated>

		<summary type="html">&lt;p&gt;Maintenance script: Update package: OSW Core&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Maintenance script</name></author>
	</entry>
	<entry>
		<id>https://onto-wiki.eu/w/index.php?title=Category:OSWff333fd349af4f65a69100405a9e60c7&amp;diff=3350</id>
		<title>Category:OSWff333fd349af4f65a69100405a9e60c7</title>
		<link rel="alternate" type="text/html" href="https://onto-wiki.eu/w/index.php?title=Category:OSWff333fd349af4f65a69100405a9e60c7&amp;diff=3350"/>
		<updated>2023-04-20T18:12:53Z</updated>

		<summary type="html">&lt;p&gt;Maintenance script: Update package: OSW Core&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Maintenance script</name></author>
	</entry>
	<entry>
		<id>https://onto-wiki.eu/w/index.php?title=Category:Item&amp;diff=3349</id>
		<title>Category:Item</title>
		<link rel="alternate" type="text/html" href="https://onto-wiki.eu/w/index.php?title=Category:Item&amp;diff=3349"/>
		<updated>2023-04-20T18:12:33Z</updated>

		<summary type="html">&lt;p&gt;Maintenance script: Update package: OSW Core&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Maintenance script</name></author>
	</entry>
	<entry>
		<id>https://onto-wiki.eu/w/index.php?title=Module:MwJson&amp;diff=3348</id>
		<title>Module:MwJson</title>
		<link rel="alternate" type="text/html" href="https://onto-wiki.eu/w/index.php?title=Module:MwJson&amp;diff=3348"/>
		<updated>2023-04-20T18:12:28Z</updated>

		<summary type="html">&lt;p&gt;Maintenance script: Update package: OSW Core&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local lustache = require(&amp;quot;Module:Lustache&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
local p = {} --p stands for package&lt;br /&gt;
&lt;br /&gt;
p.keys = { --jsonschema / json-ld keys&lt;br /&gt;
	category=&#039;type&#039;, &lt;br /&gt;
	subcategory=&#039;subclass_of&#039;,&lt;br /&gt;
	schema_type=&#039;schema_type&#039;,&lt;br /&gt;
	property_ns_prefix=&#039;Property&#039;,&lt;br /&gt;
	schema=&#039;osl_schema&#039;, &lt;br /&gt;
	template=&#039;eval_template&#039;,&lt;br /&gt;
	mode=&#039;mode&#039;,&lt;br /&gt;
	context=&#039;@context&#039;,&lt;br /&gt;
	allOf=&#039;allOf&#039;,&lt;br /&gt;
	label=&#039;label&#039;,&lt;br /&gt;
	name=&#039;name&#039;,&lt;br /&gt;
	description=&#039;description&#039;,&lt;br /&gt;
	text=&#039;text&#039;,&lt;br /&gt;
	debug=&#039;_debug&#039;&lt;br /&gt;
} &lt;br /&gt;
p.slots = { --slot names&lt;br /&gt;
	jsondata=&#039;jsondata&#039;, &lt;br /&gt;
	jsonschema=&#039;jsonschema&#039;, &lt;br /&gt;
	header_template=&#039;header_template&#039;,&lt;br /&gt;
	footer_template=&#039;footer_template&#039;,&lt;br /&gt;
	data_template=&#039;data_template&#039;&lt;br /&gt;
} &lt;br /&gt;
p.mode = {&lt;br /&gt;
	header=&#039;header&#039;,&lt;br /&gt;
	footer=&#039;footer&#039;,&lt;br /&gt;
	query=&#039;query&#039;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
--loads json from a wiki page&lt;br /&gt;
--test: mw.logObject(p.loadJson({title=&amp;quot;JsonSchema:Entity&amp;quot;}))&lt;br /&gt;
--test: mw.logObject(p.loadJson({title=&amp;quot;Category:Entity&amp;quot;, slot=&amp;quot;jsonschema&amp;quot;}))&lt;br /&gt;
function p.loadJson(args)&lt;br /&gt;
	local page_title = p.defaultArg(args.title, &amp;quot;JsonSchema:Entity&amp;quot;) --for testing&lt;br /&gt;
	local slot = p.defaultArg(args.slot, nil)&lt;br /&gt;
	local debug = p.defaultArg(args.debug, nil)&lt;br /&gt;
	local msg = &amp;quot;&amp;quot;&lt;br /&gt;
	&lt;br /&gt;
	local json = {}&lt;br /&gt;
	&lt;br /&gt;
	if (slot == nil) then&lt;br /&gt;
		--json = mw.loadJsonData( &amp;quot;JsonSchema:Entity&amp;quot; ) --requires MediaWiki 1.39&lt;br /&gt;
		local page = mw.title.makeTitle(p.splitString(page_title, &#039;:&#039;)[1], p.splitString(page_title, &#039;:&#039;)[2])&lt;br /&gt;
		local text = page:getContent()&lt;br /&gt;
		if (text ~= nil) then json = mw.text.jsonDecode(text) end&lt;br /&gt;
	else&lt;br /&gt;
		if (debug) then msg = msg .. &amp;quot;Fetch slot &amp;quot; .. p.slots.jsondata .. &amp;quot; from page &amp;quot; .. title .. &amp;quot;&amp;lt;br&amp;gt;&amp;quot; end&lt;br /&gt;
		local text = mw.slots.slotContent( slot , page_title )&lt;br /&gt;
		if (text ~= nil) then json = mw.text.jsonDecode(text) end&lt;br /&gt;
	end	&lt;br /&gt;
	&lt;br /&gt;
	--mw.logObject(json)&lt;br /&gt;
&lt;br /&gt;
	return {json=json, debug_msg=msg}&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- test: mw.logObject(p.walkJsonSchema({jsonschema=p.loadJson({title=&amp;quot;Category:Hardware&amp;quot;, slot=&amp;quot;jsonschema&amp;quot;}).json, debug=true}).jsonschema)&lt;br /&gt;
function p.walkJsonSchema(args)&lt;br /&gt;
	local jsonschema = p.defaultArg(args.jsonschema, {})&lt;br /&gt;
	local jsonschemas = p.defaultArg(args.jsonschemas, {})&lt;br /&gt;
	local categories = p.defaultArg(args.categories, nil)&lt;br /&gt;
	local visited = p.defaultArg(args.visited, {})&lt;br /&gt;
	local mode = p.defaultArg(args.mode, p.mode.header)&lt;br /&gt;
	--local merged_jsonschema = p.defaultArg(args.merged_jsonschema, {})&lt;br /&gt;
	local templates = p.defaultArg(args.templates, {})&lt;br /&gt;
	local recursive = p.defaultArg(args.recursive, true)&lt;br /&gt;
	local root = p.defaultArg(args.root, true)&lt;br /&gt;
	local debug = p.defaultArg(args.debug, false)&lt;br /&gt;
	local msg = &amp;quot;&amp;quot;&lt;br /&gt;
	local wikitext = &amp;quot;&amp;quot;&lt;br /&gt;
	&lt;br /&gt;
	local category_template_slot = nil&lt;br /&gt;
	if (mode == p.mode.footer) then category_template_slot = p.slots.footer_template end&lt;br /&gt;
	if (mode == p.mode.header) then category_template_slot = p.slots.header_template end&lt;br /&gt;
	&lt;br /&gt;
	if (categories == nil) then categories = p.getCategories({jsonschema=jsonschema, includeNamespace=true}).categories end&lt;br /&gt;
	if (type(categories) ~= &#039;table&#039;) then categories = {categories} end&lt;br /&gt;
	if (debug) then msg = msg .. &amp;quot;Supercategories: &amp;quot; .. mw.dumpObject(categories) .. &amp;quot;\n&amp;lt;br&amp;gt;&amp;quot; end&lt;br /&gt;
	for k, category in pairs(categories) do&lt;br /&gt;
		if (not p.tableContains(visited, category)) then&lt;br /&gt;
			--mw.logObject(&amp;quot;Visit &amp;quot; .. category)&lt;br /&gt;
			if (debug) then msg = msg .. &amp;quot;Fetch slot &amp;quot; .. p.slots.jsonschema .. &amp;quot; from page &amp;quot; .. category .. &amp;quot;\n&amp;lt;br&amp;gt;&amp;quot; end&lt;br /&gt;
			local super_jsonschema_str = mw.slots.slotContent( p.slots.jsonschema , category )&lt;br /&gt;
			if (super_jsonschema_str ~= nil) then&lt;br /&gt;
				super_jsonschema = mw.text.jsonDecode( super_jsonschema_str )&lt;br /&gt;
				if (recursive) then	&lt;br /&gt;
					local res = p.walkJsonSchema({jsonschema=super_jsonschema, jsonschemas=jsonschemas, templates=templates, mode=mode, visited=visited, root=false})&lt;br /&gt;
					wikitext = wikitext .. res.wikitext &lt;br /&gt;
				end&lt;br /&gt;
				--table.insert(jsonschemas, mw.text.jsonDecode( super_jsonschema_str )) --keep a copy of the schema, super_jsonschema passed by references gets modified&lt;br /&gt;
				--table.insert(jsonschemas, super_jsonschema ) &lt;br /&gt;
				--mw.logObject(&amp;quot;Store &amp;quot; .. category)&lt;br /&gt;
				table.insert(visited, category)&lt;br /&gt;
				jsonschemas[category] = mw.text.jsonDecode( super_jsonschema_str ) --keep a copy of the schema, super_jsonschema passed by references gets modified&lt;br /&gt;
				--jsonschema = p.tableMerge(jsonschema, super_jsonschema) --merge superschema is done by the caller&lt;br /&gt;
			end&lt;br /&gt;
			&lt;br /&gt;
			if (debug) then msg = msg .. &amp;quot;Fetch slot &amp;quot; .. category_template_slot .. &amp;quot; from page &amp;quot; .. category .. &amp;quot;\n&amp;lt;br&amp;gt;&amp;quot; end&lt;br /&gt;
			templates[category] = mw.slots.slotContent( category_template_slot , category )&lt;br /&gt;
		end&lt;br /&gt;
	end	&lt;br /&gt;
	if (root) then&lt;br /&gt;
		jsonschema = {}&lt;br /&gt;
		for i, category in ipairs(visited) do&lt;br /&gt;
			jsonschema = p.tableMerge(jsonschema, jsonschemas[category]) --merge all schemas&lt;br /&gt;
		end	&lt;br /&gt;
	end&lt;br /&gt;
	if (debug) then wikitext = msg .. wikitext  end&lt;br /&gt;
	return {jsonschema=jsonschema, jsonschemas=jsonschemas, templates=templates, visited=visited, wikitext=wikitext}&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[ test: &lt;br /&gt;
category = &amp;quot;Category:Hardware&amp;quot;&lt;br /&gt;
page = &amp;quot;Item:OSW7d7193567ea14e4e89b74de88983b718&amp;quot;&lt;br /&gt;
category2 = &amp;quot;Category:OSW80e240a2e17d4ae5adfe6419051aa0bb&amp;quot;&lt;br /&gt;
page2 = &amp;quot;Item:OSWa4da6664aeac466a86b09e6b32a1cb41&amp;quot;&lt;br /&gt;
mw.logObject(p.expandEmbeddedTemplates({&lt;br /&gt;
	jsonschema=p.walkJsonSchema({jsonschema=p.loadJson({title=category, slot=&amp;quot;jsonschema&amp;quot;}).json, debug=true}).jsonschema, &lt;br /&gt;
	jsondata=p.loadJson({title=page, slot=&amp;quot;jsondata&amp;quot;}).json,&lt;br /&gt;
	debug=true, mode=&amp;quot;render&amp;quot;&lt;br /&gt;
}).res)&lt;br /&gt;
--]]&lt;br /&gt;
function p.expandEmbeddedTemplates(args)&lt;br /&gt;
	local frame = p.defaultArg(args.frame, mw.getCurrentFrame())&lt;br /&gt;
	local jsondata = p.defaultArg(args.jsondata, {})&lt;br /&gt;
	local jsonschema = p.defaultArg(args.jsonschema, {})&lt;br /&gt;
	local template = p.defaultArg(args.template, nil)&lt;br /&gt;
	local mode = p.defaultArg(args.mode, nil)&lt;br /&gt;
	local stringify_arrays = p.defaultArg(args.stringify_arrays, false)&lt;br /&gt;
	local msg = &amp;quot;&amp;quot;&lt;br /&gt;
	local res = p.defaultArg(args.jsondata, &amp;quot;&amp;quot;)&lt;br /&gt;
	&lt;br /&gt;
	for k,v in pairs(jsondata) do&lt;br /&gt;
		local eval_template = nil&lt;br /&gt;
		local eval_templates = p.defaultArgPath(jsonschema, {&amp;quot;properties&amp;quot;, k, p.keys.template}, {})&lt;br /&gt;
		if (eval_templates[1] == nil) then eval_templates = {eval_templates} end --ensure list of objects&lt;br /&gt;
		for i, t in pairs(eval_templates) do&lt;br /&gt;
			if (t[p.keys.mode] ~= nil and t[p.keys.mode] == mode) then eval_template = t --use only render templates in render mode and store templates in store mode&lt;br /&gt;
			elseif (t[p.keys.mode] == nil) then  eval_template = t --default&lt;br /&gt;
			elseif (debug) then msg = msg .. &amp;quot;Ignore eval_template&amp;quot; .. mw.dumpObject( t ) .. &amp;quot;\n&amp;lt;br&amp;gt;&amp;quot;&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		if (eval_template ~= nil and eval_template.value ~= nil and (eval_template.type == &amp;quot;mustache&amp;quot; or eval_template.type == &amp;quot;mustache-wikitext&amp;quot;)) then&lt;br /&gt;
			-- mustache can handle objects and array to we can parse it directly&lt;br /&gt;
			-- todo: handle nested templates&lt;br /&gt;
			if (debug) then msg = msg .. &amp;quot;Parse mustache template &amp;quot; .. eval_template.value .. &amp;quot; with params &amp;quot; .. mw.dumpObject( {[k]=v} ) .. &amp;quot;\n&amp;lt;br&amp;gt;&amp;quot; end&lt;br /&gt;
			jsondata[k] = lustache:render(eval_template.value, {[k]=v})&lt;br /&gt;
			if (eval_template.type == &amp;quot;mustache-wikitext&amp;quot;) then &lt;br /&gt;
				jsondata[k] = frame:preprocess( jsondata[k] )&lt;br /&gt;
			end&lt;br /&gt;
		elseif type(v) == &#039;table&#039; then &lt;br /&gt;
			if (v[1] == nil) then --key value array = object/dict&lt;br /&gt;
				local sub_res = p.expandEmbeddedTemplates({frame=frame, jsondata=v, jsonschema=p.defaultArgPath(jsonschema, {&amp;quot;properties&amp;quot;, k}, {}), template=eval_template, mode=mode, stringify_arrays=stringify_arrays})&lt;br /&gt;
				msg = msg .. sub_res.debug_msg&lt;br /&gt;
				jsondata[k] = sub_res.res&lt;br /&gt;
				--if (sub_res.unparsed ~= nil) then jsondata[k] = sub_res.unparsed else jsondata[k] = sub_res.wikitext end&lt;br /&gt;
			else --list array&lt;br /&gt;
				local string_list = &amp;quot;&amp;quot;&lt;br /&gt;
				for i,e in pairs(v) do &lt;br /&gt;
					&lt;br /&gt;
					local eval_template = nil&lt;br /&gt;
					local eval_templates = p.defaultArgPath(jsonschema, {&amp;quot;properties&amp;quot;, k, &amp;quot;items&amp;quot;, p.keys.template}, {})&lt;br /&gt;
					if (eval_templates[1] == nil) then eval_templates = {eval_templates} end --ensure list of objects&lt;br /&gt;
					&lt;br /&gt;
					for i, t in pairs(eval_templates) do&lt;br /&gt;
						if (t[p.keys.mode] ~= nil and t[p.keys.mode] == mode) then eval_template = t --use only render templates in render mode and store templates in store mode&lt;br /&gt;
						elseif (t[p.keys.mode] == nil) then  eval_template = t --default&lt;br /&gt;
						elseif (debug) then msg = msg .. &amp;quot;Ignore eval_template&amp;quot; .. mw.dumpObject( t ) .. &amp;quot;\n&amp;lt;br&amp;gt;&amp;quot;&lt;br /&gt;
						end&lt;br /&gt;
					end&lt;br /&gt;
&lt;br /&gt;
					if type(e) == &#039;table&#039; then 	&lt;br /&gt;
						local sub_res = p.expandEmbeddedTemplates({frame=frame, jsondata=e, jsonschema=p.defaultArgPath(jsonschema, {&amp;quot;properties&amp;quot;, k, &amp;quot;items&amp;quot;}, {}), template=eval_template, mode=mode, stringify_arrays=stringify_arrays})&lt;br /&gt;
						msg = msg .. sub_res.debug_msg&lt;br /&gt;
						if (type(sub_res.res) == &#039;table&#039;) then &lt;br /&gt;
							if (debug) then msg = msg .. &amp;quot;Values for &amp;quot; .. k .. &amp;quot; contains non-literal items: &amp;quot; .. mw.dumpObject( sub_res.res ) .. &amp;quot; =&amp;gt; skip value in wikitemplate array param creation\n&amp;lt;br&amp;gt;&amp;quot; end&lt;br /&gt;
						else &lt;br /&gt;
							if (stringify_arrays) then string_list = string_list .. sub_res.res .. &amp;quot;;&amp;quot; &lt;br /&gt;
							else v[i] = sub_res.res end&lt;br /&gt;
						end&lt;br /&gt;
					else&lt;br /&gt;
						if (eval_template ~= nil and eval_template[&amp;quot;value&amp;quot;] ~= nil) then&lt;br /&gt;
							--evaluate single array item string as json {&amp;quot;self&amp;quot;: &amp;quot;&amp;lt;value&amp;gt;&amp;quot;, &amp;quot;.&amp;quot;: &amp;quot;&amp;lt;value&amp;gt;&amp;quot;}&lt;br /&gt;
							local sub_res = p.expandEmbeddedTemplates({frame=frame, jsondata={[&amp;quot;self&amp;quot;]=e,[&amp;quot;.&amp;quot;]=e}, jsonschema=p.defaultArgPath(jsonschema, {&amp;quot;properties&amp;quot;, k, &amp;quot;items&amp;quot;}, {}), template=eval_template, mode=mode, stringify_arrays=stringify_arrays})&lt;br /&gt;
							mw.logObject(sub_res)&lt;br /&gt;
							e = sub_res.res&lt;br /&gt;
							v[i] = e&lt;br /&gt;
						end&lt;br /&gt;
						if (stringify_arrays) then string_list = string_list .. e .. &amp;quot;;&amp;quot; end&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
				if (stringify_arrays) then jsondata[k] = string_list end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end	&lt;br /&gt;
	&lt;br /&gt;
	&lt;br /&gt;
	if (template == nil) then &lt;br /&gt;
		local templates = jsondata[p.keys.template]&lt;br /&gt;
		if (templates == nil) then templates = p.defaultArg(jsonschema[p.keys.template], {}) end&lt;br /&gt;
		if (templates[1] == nil) then templates = {templates} end --ensure list of objects&lt;br /&gt;
		for i, t in pairs(templates) do&lt;br /&gt;
			if (t[p.keys.mode] ~= nil and t[p.keys.mode] == mode) then template = t --use only render templates in render mode and store templates in store mode&lt;br /&gt;
			elseif (t[p.keys.mode] == nil) then  template = t --default&lt;br /&gt;
			elseif (debug) then msg = msg .. &amp;quot;Ignore template&amp;quot; .. mw.dumpObject( t ) .. &amp;quot;\n&amp;lt;br&amp;gt;&amp;quot;&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if template ~= nil then&lt;br /&gt;
		if (template.type == &amp;quot;wikitext&amp;quot;) then&lt;br /&gt;
			for k,v in pairs(jsondata) do&lt;br /&gt;
				if type(v) == &#039;table&#039; then &lt;br /&gt;
					if (debug) then msg = msg .. &amp;quot;Values for &amp;quot; .. k .. &amp;quot; contains non-literals: &amp;quot; .. mw.dumpObject( v ) .. &amp;quot; =&amp;gt; skip wikitemplate parsing\n&amp;lt;br&amp;gt;&amp;quot; end&lt;br /&gt;
					return {res=res, debug_msg=msg} &lt;br /&gt;
				end --not supported&lt;br /&gt;
			end			&lt;br /&gt;
			if (template.value ~= nil) then&lt;br /&gt;
				if (debug) then msg = msg .. &amp;quot;Parse wikitemplate &amp;quot; .. template.value .. &amp;quot; with params &amp;quot; .. mw.dumpObject( jsondata ) .. &amp;quot;\n&amp;lt;br&amp;gt;&amp;quot; end&lt;br /&gt;
				local child = frame:newChild{args=jsondata}&lt;br /&gt;
				res = child:preprocess( template.value )&lt;br /&gt;
			elseif (template.page ~= nil) then&lt;br /&gt;
				if (debug) then msg = msg .. &amp;quot;Parse wikitemplate &amp;quot; .. template.page .. &amp;quot; with params &amp;quot; .. mw.dumpObject( jsondata ) .. &amp;quot;\n&amp;lt;br&amp;gt;&amp;quot; end&lt;br /&gt;
				res = frame:expandTemplate{ title = template.page, args = jsondata }&lt;br /&gt;
			end&lt;br /&gt;
			&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	--if (debug) then mw.logObject(msg) end&lt;br /&gt;
	return {res=res, debug_msg=msg}&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- mw.logObject(p.processJsondata({jsondata=p.loadJson({title=&amp;quot;Item:OSW7d7193567ea14e4e89b74de88983b718&amp;quot;, slot=&amp;quot;jsondata&amp;quot;}).json, debug=true, mode=&amp;quot;header&amp;quot;}))&lt;br /&gt;
-- mw.logObject(p.processJsondata({jsondata=p.loadJson({title=&amp;quot;Item:OSWa4da6664aeac466a86b09e6b32a1cb41&amp;quot;, slot=&amp;quot;jsondata&amp;quot;}).json, debug=true, mode=&amp;quot;header&amp;quot;}))&lt;br /&gt;
-- mw.logObject(p.processJsondata({jsondata=p.loadJson({title=&amp;quot;Category:OSWb3022bbf7e7146eb8e6f6e3264f50bbe&amp;quot;, slot=&amp;quot;jsondata&amp;quot;}).json, debug=true, mode=&amp;quot;header&amp;quot;, categories={&amp;quot;Category:Category&amp;quot;}}))&lt;br /&gt;
function p.processJsondata(args)&lt;br /&gt;
	local frame = p.defaultArg(args.frame, mw.getCurrentFrame())&lt;br /&gt;
	local jsondata = p.defaultArg(args.jsondata, {})&lt;br /&gt;
	local jsonschema = p.defaultArg(args.jsonschema, {})&lt;br /&gt;
	local template = p.defaultArg(args.template, nil)&lt;br /&gt;
	local categories = p.defaultArg(args.categories, nil)&lt;br /&gt;
	local recursive = p.defaultArg(args.recursive, true)&lt;br /&gt;
	local mode = p.defaultArg(args.mode, p.mode.header)&lt;br /&gt;
	local debug = p.defaultArg(args.debug, false)&lt;br /&gt;
	local title = mw.title.getCurrentTitle()&lt;br /&gt;
	&lt;br /&gt;
	local wikitext = &amp;quot;&amp;quot;&lt;br /&gt;
	local msg = &amp;quot;&amp;quot; --debug msg&lt;br /&gt;
&lt;br /&gt;
	if (p.nilOrEmpty(jsondata) or (p.nilOrEmpty(categories) and p.nilOrEmpty(jsonschema) and p.nilOrEmpty(jsondata[p.keys.category]))) then return {wikitext=wikitext, debug_msg=msg} end --nothing to do here&lt;br /&gt;
	--if (jsondata == nil or p.tableLength(jsondata) == 0 or (categories == nil and jsonschema == nil and jsondata[p.keys.category] == nil)) then return {wikitext=wikitext, debug_msg=msg} end --nothing to do here&lt;br /&gt;
	--jsonschema = p.defaultArg(jsonschema, {})&lt;br /&gt;
	--jsondata = p.defaultArg(jsondata, {})&lt;br /&gt;
	if (categories == nil) then categories = jsondata[p.keys.category] end&lt;br /&gt;
	&lt;br /&gt;
	local schema_res = p.walkJsonSchema({jsonschema=jsonschema, categories=categories, mode=mode, recursive=recursive, debug=debug})&lt;br /&gt;
	jsonschema = p.expandJsonRef({json=schema_res.jsonschema, debug=debug}).json&lt;br /&gt;
	--mw.logObject(jsonschema)&lt;br /&gt;
	&lt;br /&gt;
	local display_label = p.defaultArgPath(jsondata, {p.keys.name}, &amp;quot;&amp;quot;)&lt;br /&gt;
	if (display_label == &amp;quot;&amp;quot; or (title.nsText ~= &amp;quot;Category&amp;quot; and title.nsText ~= &amp;quot;Property&amp;quot;)) then &lt;br /&gt;
		display_label = p.defaultArgPath(jsondata, {p.keys.label, 1, p.keys.text}, &amp;quot;&amp;quot;) --prefere label for all non-category and non-property pages&lt;br /&gt;
	end &lt;br /&gt;
	&lt;br /&gt;
	local jsonld = p.copy(jsondata)&lt;br /&gt;
	local json_data_store = p.copy(jsondata)&lt;br /&gt;
	local json_data_render = p.copy(jsondata)&lt;br /&gt;
	json_res_store = p.expandEmbeddedTemplates({jsonschema=jsonschema, jsondata=json_data_store, mode=&#039;store&#039;})&lt;br /&gt;
	msg = msg .. json_res_store.debug_msg&lt;br /&gt;
	--mw.log(&amp;quot;JSONDATA STORE&amp;quot;)&lt;br /&gt;
	--mw.logObject(json_res_store.res)&lt;br /&gt;
	&lt;br /&gt;
	local smw_res = nil&lt;br /&gt;
	if (mode == p.mode.header) then&lt;br /&gt;
		smw_res = p.getSemanticProperties({jsonschema=jsonschema, jsondata=json_res_store.res, store=false, debug=debug})&lt;br /&gt;
		jsonld[&amp;quot;@context&amp;quot;] = smw_res.context&lt;br /&gt;
		jsonld[&amp;quot;@type&amp;quot;] = p.tableMerge(p.tablefy(jsonschema.schema_type), p.tablefy(jsonld[&amp;quot;@type&amp;quot;])) --&lt;br /&gt;
		jsonld[&#039;schema:name&#039;] = p.defaultArgPath(jsonld, {p.keys.label, 1, p.keys.text}, jsonld[&#039;name&#039;]) --google does not support @value and @lang&lt;br /&gt;
		jsonld[&#039;schema:description&#039;] = p.defaultArgPath(jsonld, {p.keys.description, 1, p.keys.text}, nil)&lt;br /&gt;
		for k, v in pairs(jsonld) do&lt;br /&gt;
			if (type(v) == &amp;quot;string&amp;quot;) then&lt;br /&gt;
				local vpart = p.splitString(v, &#039;:&#039;)&lt;br /&gt;
				if (p.tableLength(vpart) == 2 and vpart[1] == &amp;quot;File&amp;quot;) then jsonld[k] = mw.getCurrentFrame():callParserFunction( &#039;filepath&#039;, { vpart[2] } ) end --google does not follow redirects via &amp;quot;File&amp;quot;:&amp;quot;wiki:Special:Redirect/file/&amp;quot;&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		wikitext = wikitext .. &amp;quot;&amp;lt;div class=&#039;jsonld-header&#039; style=&#039;display:none&#039; data-jsonld=&#039;&amp;quot; .. mw.text.jsonEncode( jsonld ):gsub(&amp;quot;&#039;&amp;quot;,&amp;quot;`&amp;quot;) .. &amp;quot;&#039;&amp;gt;&amp;lt;/div&amp;gt;&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local json_res = p.expandEmbeddedTemplates({jsonschema=jsonschema, jsondata=json_data_render, mode=&#039;render&#039;})&lt;br /&gt;
	msg = msg .. json_res.debug_msg&lt;br /&gt;
	jsondata =json_res.res&lt;br /&gt;
	--mw.log(&amp;quot;JSONDATA RENDER&amp;quot;)&lt;br /&gt;
	--mw.logObject(jsondata)&lt;br /&gt;
&lt;br /&gt;
	local max_index = p.tableLength(schema_res.visited)&lt;br /&gt;
	for i, category in ipairs(schema_res.visited) do&lt;br /&gt;
		if (mode == p.mode.footer) then category = schema_res.visited[max_index - i +1] end --reverse order for footer templates&lt;br /&gt;
		local jsonschema = schema_res.jsonschemas[category]&lt;br /&gt;
		local template = schema_res.templates[category]&lt;br /&gt;
		if (template ~= nil) then&lt;br /&gt;
			if (debug) then msg = msg .. &amp;quot;Parse \n\n&amp;quot; .. template .. &amp;quot; \n\nwith params &amp;quot; .. mw.dumpObject( jsondata ) .. &amp;quot;\n&amp;lt;br&amp;gt;&amp;quot; end&lt;br /&gt;
			local stripped_jsondata={}&lt;br /&gt;
			for k, v in pairs(jsondata) do&lt;br /&gt;
				if (type(v) ~= &#039;table&#039;) then stripped_jsondata[k] = v end --delete object values, not supported by wiki templates	&lt;br /&gt;
			end&lt;br /&gt;
			local child = frame:newChild{args=stripped_jsondata}&lt;br /&gt;
			wikitext = wikitext .. child:preprocess( template )&lt;br /&gt;
		elseif (mode == p.mode.header) then&lt;br /&gt;
			local infobox_res = p.renderInfoBox({jsonschema=jsonschema, jsondata=jsondata})&lt;br /&gt;
			wikitext = wikitext .. frame:preprocess( infobox_res.wikitext )&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	--local display_label = &amp;quot;&amp;quot;&lt;br /&gt;
	--if (jsondata[p.keys.label] ~= nil) then display_label = p.splitString(jsondata[p.keys.label], &#039;@&#039;)[1] end&lt;br /&gt;
	if (title.nsText ~= &amp;quot;Category&amp;quot;) then wikitext = wikitext .. &amp;quot;\n&amp;quot; .. p.setCategories({categories=json_res_store.res[p.keys.category], sortkey=display_label}).wikitext end--items&lt;br /&gt;
	wikitext = wikitext .. p.setCategories({categories=json_res_store.res[p.keys.subcategory], sortkey=display_label}).wikitext --classes/categories&lt;br /&gt;
	&lt;br /&gt;
	if (smw_res ~= nil) then&lt;br /&gt;
		if (debug) then msg = msg .. &amp;quot;Store page properties&amp;quot; end&lt;br /&gt;
		smw_res.properties[&#039;Display title of&#039;] = display_label --set special property display title&lt;br /&gt;
		mw.ext.displaytitle.set(display_label)&lt;br /&gt;
		--smw_res.properties[&#039;@category&#039;] = jsondata[p.keys.category]&lt;br /&gt;
		local store_res = mw.smw.set( smw_res.properties ) --store as semantic properties&lt;br /&gt;
		if (debug) then msg = msg .. mw.dumpObject(smw_res.properties) end&lt;br /&gt;
		if (store_res) then &lt;br /&gt;
			if (debug) then msg = msg .. &amp;quot;SMW SUCCESS: &amp;quot; end&lt;br /&gt;
		else&lt;br /&gt;
			wikitext = wikitext .. store_res.error &lt;br /&gt;
			if (debug) then msg = msg .. &amp;quot;SMW ERROR: &amp;quot; .. store_res.error end&lt;br /&gt;
		end&lt;br /&gt;
		--wikitext = mw.dumpObject(smw_res.properties) .. wikitext&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if (debug) then mw.logObject(res) end&lt;br /&gt;
	return {wikitext=wikitext, debug_msg=msg}&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- renders a default infobox&lt;br /&gt;
-- test: mw.logObject(p.renderInfoBox({jsonschema=p.loadJson({title=&amp;quot;JsonSchema:Entity&amp;quot;}).json, jsondata={uuid=&amp;quot;123123&amp;quot;}}))&lt;br /&gt;
function p.renderInfoBox(args)&lt;br /&gt;
	local jsondata = p.defaultArg(args.jsondata, {})&lt;br /&gt;
	local schema = p.defaultArg(args.jsonschema, nil)&lt;br /&gt;
	local context = p.buildContext({jsonschema=schema}).context&lt;br /&gt;
	local ignore_properties = {[p.keys.category]=true} -- don&#039;t render type/category on every subclass&lt;br /&gt;
	local res = &amp;quot;&amp;quot;&lt;br /&gt;
	if schema == nil then return res end&lt;br /&gt;
	local schema_label = &amp;quot;&amp;quot;&lt;br /&gt;
	if schema[&#039;title&#039;] ~= nil then schema_label = schema[&#039;title&#039;] end&lt;br /&gt;
	&lt;br /&gt;
	-- see also: https://help.fandom.com/wiki/Extension:Scribunto/HTML_Library_usage_notes&lt;br /&gt;
	local tbl = mw.html.create( &#039;table&#039; )&lt;br /&gt;
	tbl&lt;br /&gt;
		:attr( &#039;class&#039;, &#039;info_box&#039; )&lt;br /&gt;
		:tag( &#039;tr&#039; )&lt;br /&gt;
			:tag( &#039;td&#039; )&lt;br /&gt;
				:attr( &#039;class&#039;, &#039;subheading&#039; )&lt;br /&gt;
				:attr( &#039;colspan&#039;, &#039;2&#039; )&lt;br /&gt;
				:wikitext( schema_label )&lt;br /&gt;
	for k,v in pairs(jsondata) do&lt;br /&gt;
		if (not ignore_properties[k]) then&lt;br /&gt;
			if (schema[&#039;properties&#039;] ~= nil and schema[&#039;properties&#039;][k] ~= nil and (type(v) ~= &#039;table&#039; or v[1] ~= nil)) then --literal or literal array&lt;br /&gt;
				local def = schema[&#039;properties&#039;][k]&lt;br /&gt;
				--mw.logObject(def)&lt;br /&gt;
				local label = k&lt;br /&gt;
				if def[&#039;title&#039;] ~= nil then label = def[&#039;title&#039;] end&lt;br /&gt;
				--res = res .. title &amp;quot;: &amp;quot; .. v&lt;br /&gt;
				local cell = tbl:tag( &#039;tr&#039; )&lt;br /&gt;
									:tag( &#039;th&#039; )&lt;br /&gt;
										:wikitext( label )&lt;br /&gt;
										:done()&lt;br /&gt;
									:tag( &#039;td&#039; )&lt;br /&gt;
				if (type(v) == &#039;table&#039;) then&lt;br /&gt;
					for i,e in pairs(v) do &lt;br /&gt;
						if (type(e) ~= &#039;table&#039;) then &lt;br /&gt;
							local p_type = p.defaultArgPath(context, {k, &#039;@type&#039;}, &#039;@value&#039;)&lt;br /&gt;
							if (p_type == &#039;@id&#039;) then e = &amp;quot;[[&amp;quot; .. string.gsub(e, &amp;quot;Category:&amp;quot;, &amp;quot;:Category:&amp;quot;) .. &amp;quot;]]&amp;quot; end&lt;br /&gt;
							cell:wikitext(&amp;quot;\n* &amp;quot; .. e .. &amp;quot;&amp;quot;) &lt;br /&gt;
						end&lt;br /&gt;
					end&lt;br /&gt;
				else&lt;br /&gt;
					local p_type = p.defaultArgPath(context, {k, &#039;@type&#039;}, &#039;@value&#039;)&lt;br /&gt;
					if (p_type == &#039;@id&#039;) then v = &amp;quot;[[&amp;quot; .. string.gsub(v, &amp;quot;Category:&amp;quot;, &amp;quot;:Category:&amp;quot;) .. &amp;quot;]]&amp;quot; end&lt;br /&gt;
					cell:wikitext( v )&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end	&lt;br /&gt;
	res = res .. tostring( tbl )&lt;br /&gt;
	--mw.logObject(res)&lt;br /&gt;
	&lt;br /&gt;
	return {wikitext=res}&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- test&lt;br /&gt;
-- mw.logObject(p.getCategories({jsonschema={allOf={[&amp;quot;$ref&amp;quot;]=&amp;quot;/wiki/Category:Test?action=raw&amp;amp;slot=jsonschema&amp;quot;}}, includeNamespace=true}))&lt;br /&gt;
-- mw.logObject(p.getCategories({jsonschema={allOf={{[&amp;quot;$ref&amp;quot;]=&amp;quot;/wiki/Category:Test?action=raw&amp;amp;slot=jsonschema&amp;quot;}, {[&amp;quot;$ref&amp;quot;]=&amp;quot;/wiki/Category:Test2?action=raw&amp;amp;slot=jsonschema&amp;quot;}}}}))&lt;br /&gt;
function p.getCategories(args)&lt;br /&gt;
	local jsonschema = p.defaultArg(args.jsonschema, {})&lt;br /&gt;
	local includeNamespace = p.defaultArg(args.includeNamespace, false)&lt;br /&gt;
	&lt;br /&gt;
	local categories = {}&lt;br /&gt;
		local allOf = jsonschema[p.keys.allOf]&lt;br /&gt;
		if (allOf ~= nil) then&lt;br /&gt;
			--properties[&#039;@category&#039;] = {}&lt;br /&gt;
			for k, entry in pairs(allOf) do&lt;br /&gt;
				if type(entry) == &#039;table&#039; then -- &amp;quot;allOf&amp;quot;: [{&amp;quot;$ref&amp;quot;: &amp;quot;/wiki/Category:Test?action=raw&amp;quot;}]&lt;br /&gt;
					for p, v in pairs(entry) do&lt;br /&gt;
						if (p == &#039;$ref&#039;) then&lt;br /&gt;
							for category in v:gmatch(&amp;quot;Category:([^?]+)&amp;quot;) do -- e.g. &amp;quot;/wiki/Category:Test?action=raw&amp;quot;&lt;br /&gt;
								if (includeNamespace) then category = &amp;quot;Category:&amp;quot; .. category end&lt;br /&gt;
							    table.insert(categories, category)&lt;br /&gt;
							end&lt;br /&gt;
						end&lt;br /&gt;
					end&lt;br /&gt;
				else -- &amp;quot;allOf&amp;quot;: {&amp;quot;$ref&amp;quot;: &amp;quot;/wiki/Category:Test?action=raw&amp;quot;}&lt;br /&gt;
					if (k == &#039;$ref&#039;) then&lt;br /&gt;
						for category in entry:gmatch(&amp;quot;Category:([^?]+)&amp;quot;) do -- e.g. &amp;quot;/wiki/Category:Test?action=raw&amp;quot;&lt;br /&gt;
							if (includeNamespace) then category = &amp;quot;Category:&amp;quot; .. category end&lt;br /&gt;
							table.insert(categories, category)&lt;br /&gt;
						end&lt;br /&gt;
					end	&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end	&lt;br /&gt;
		&lt;br /&gt;
	return {categories=categories}&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--sets a list of categories on the page&lt;br /&gt;
--test: mw.logObject(p.setCategories({categories={&amp;quot;Cat1&amp;quot;, &amp;quot;Category:Cat2&amp;quot;}}))&lt;br /&gt;
function p.setCategories(args)&lt;br /&gt;
	local categories = p.defaultArg(args.categories, {})&lt;br /&gt;
	local sortkey = p.defaultArg(args.sortkey, &amp;quot;&amp;quot;)&lt;br /&gt;
	if (sortkey ~= &amp;quot;&amp;quot;) then sortkey = &amp;quot;|&amp;quot; .. sortkey end&lt;br /&gt;
	if (type(categories) ~= &#039;table&#039;) then categories = {categories} end&lt;br /&gt;
	local res = &amp;quot;&amp;quot;&lt;br /&gt;
	for k, entry in pairs(categories) do&lt;br /&gt;
		res = res .. &amp;quot;[[Category:&amp;quot; .. string.gsub(entry, &amp;quot;Category:&amp;quot;, &amp;quot;&amp;quot;) .. sortkey ..&amp;quot;]]&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
	return {wikitext=res}&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[ test&lt;br /&gt;
category = &amp;quot;Category:Entity&amp;quot;&lt;br /&gt;
jsonschema = p.expandJsonRef({json=p.loadJson({title=category, slot=&amp;quot;jsonschema&amp;quot;}).json}).json&lt;br /&gt;
mw.logObject(p.buildContext({jsonschema=jsonschema, debug=true}))&lt;br /&gt;
or&lt;br /&gt;
jsonschema = {&lt;br /&gt;
	[&amp;quot;@context&amp;quot;]={test=&amp;quot;level 0&amp;quot;}, &lt;br /&gt;
	properties={&lt;br /&gt;
		test={&lt;br /&gt;
			type=&amp;quot;object&amp;quot;,&lt;br /&gt;
			[&amp;quot;@context&amp;quot;]={test1=&amp;quot;level 1&amp;quot;}, &lt;br /&gt;
			properties= {&lt;br /&gt;
				test= {&lt;br /&gt;
					type=&amp;quot;array&amp;quot;,&lt;br /&gt;
					items= {&lt;br /&gt;
						type=&amp;quot;object&amp;quot;,&lt;br /&gt;
						[&amp;quot;@context&amp;quot;]={test2=&amp;quot;level 2&amp;quot;}&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
mw.logObject(p.buildContext({jsonschema=jsonschema, debug=true}))&lt;br /&gt;
--]]&lt;br /&gt;
&lt;br /&gt;
function p.buildContext(args)&lt;br /&gt;
	local schema = p.defaultArg(args.jsonschema, {})&lt;br /&gt;
	--mw.logObject(schema)&lt;br /&gt;
	local context = p.defaultArg(args.context, schema[p.keys.context])&lt;br /&gt;
	local result = p.defaultArg(args.result, {})&lt;br /&gt;
	if (context ~= nil) then&lt;br /&gt;
		for k,v in pairs(context) do&lt;br /&gt;
			if type(k) == &#039;number&#039; and type(v) == &#039;string&#039; then&lt;br /&gt;
				--table.insert(result, v) --skip context imports&lt;br /&gt;
			elseif (type(v) == &#039;table&#039; and v[1] ~= nil) then --custom addtional mappings, e. g. &amp;quot;type*&amp;quot;: [&amp;quot;Property:HasType&amp;quot;]&lt;br /&gt;
				result[k] = v&lt;br /&gt;
			elseif (type(v) == &#039;table&#039; and v[&#039;@id&#039;] == nil) then --subcontext&lt;br /&gt;
				p.tableMerge(result, p.buildContext({context=v}).context)&lt;br /&gt;
			else &lt;br /&gt;
				result[k] = v	&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	local properties = p.defaultArg(schema.properties, {})&lt;br /&gt;
&lt;br /&gt;
	for k,v in pairs(properties) do&lt;br /&gt;
		local subcontext = nil&lt;br /&gt;
		if (p.defaultArgPath(properties, {k, &#039;type&#039;}) == &#039;object&#039;) then&lt;br /&gt;
			--mw.logObject(properties[k])&lt;br /&gt;
			subcontext = p.buildContext({jsonschema=properties[k]}).context&lt;br /&gt;
		elseif (p.defaultArgPath(properties, {k, &#039;items&#039;, &#039;type&#039;}) == &#039;object&#039;) then &lt;br /&gt;
			mw.logObject(properties[k][&#039;items&#039;])&lt;br /&gt;
			subcontext = p.buildContext({jsonschema=properties[k][&#039;items&#039;]}).context&lt;br /&gt;
		end&lt;br /&gt;
		if (subcontext ~= nil and p.tableLength(subcontext) &amp;gt; 0) then&lt;br /&gt;
			if (result[k] == nil) then result[k] = {} end&lt;br /&gt;
			if (type(result[k]) == &#039;string&#039;) then result[k] = {[&amp;quot;@id&amp;quot;]=result[k]} end&lt;br /&gt;
			if (result[k][p.keys.context] == nil) then result[k][p.keys.context] = {} end&lt;br /&gt;
			result[k][p.keys.context] = p.tableMerge(result[k][p.keys.context], subcontext)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return {context=result}&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--maps jsondata values to semantic properties by using the @context attribute within the schema&lt;br /&gt;
--test: mw.logObject(p.getSemanticProperties({jsonschema={[&amp;quot;@context&amp;quot;]={test=&amp;quot;Property:TestProperty&amp;quot;, myObjectProperty={[&amp;quot;@id&amp;quot;]= &amp;quot;Property:MyObjectProperty&amp;quot;, [&amp;quot;@type&amp;quot;]= &amp;quot;@id&amp;quot;}}}, jsondata={test=&amp;quot;TestValue&amp;quot;, myObjectProperty=&amp;quot;123&amp;quot;}, debug=true}))&lt;br /&gt;
--test: mw.logObject(p.getSemanticProperties({jsonschema={[&amp;quot;@context&amp;quot;]={&amp;quot;some uri&amp;quot;,{test=&amp;quot;Property:TestProperty&amp;quot;, myObjectProperty={[&amp;quot;@id&amp;quot;]= &amp;quot;Property:MyObjectProperty&amp;quot;, [&amp;quot;@type&amp;quot;]= &amp;quot;@id&amp;quot;}}}}, jsondata={test=&amp;quot;TestValue&amp;quot;, myObjectProperty=&amp;quot;123&amp;quot;}, debug=true}))&lt;br /&gt;
--[[&lt;br /&gt;
mw.logObject(p.getSemanticProperties({jsonschema={[&amp;quot;@context&amp;quot;]={test=&amp;quot;Property:TestProperty&amp;quot;, subobject=&amp;quot;Property:HasSubobject&amp;quot;, myObjectProperty={[&amp;quot;@id&amp;quot;]= &amp;quot;Property:MyObjectProperty&amp;quot;, [&amp;quot;@type&amp;quot;]= &amp;quot;@id&amp;quot;}}}, jsondata={&lt;br /&gt;
test=&amp;quot;TestValue&amp;quot;, myObjectProperty=&amp;quot;123&amp;quot;, subobject={uuid=&amp;quot;123-123-123&amp;quot;, test=&amp;quot;TestValue2&amp;quot;}&lt;br /&gt;
}, debug=true}))&lt;br /&gt;
&lt;br /&gt;
mw.logObject(p.getSemanticProperties({jsonschema=p.loadJson({title=&amp;quot;Category:OSW80e240a2e17d4ae5adfe6419051aa0bb&amp;quot;, slot=&amp;quot;jsonschema&amp;quot;}).json, p.loadJson({title=&amp;quot;Item:OSWa4da6664aeac466a86b09e6b32a1cb41&amp;quot;, slot=&amp;quot;jsonsdata&amp;quot;}).json, debug=true}))&lt;br /&gt;
&lt;br /&gt;
category = &amp;quot;Category:Hardware&amp;quot;&lt;br /&gt;
page = &amp;quot;Item:OSW7d7193567ea14e4e89b74de88983b718&amp;quot;&lt;br /&gt;
category2 = &amp;quot;Category:OSW80e240a2e17d4ae5adfe6419051aa0bb&amp;quot;&lt;br /&gt;
page2 = &amp;quot;Item:OSWa4da6664aeac466a86b09e6b32a1cb41&amp;quot;&lt;br /&gt;
jsonschema =p.walkJsonSchema({jsonschema=p.loadJson({title=category, slot=&amp;quot;jsonschema&amp;quot;}).json, debug=true}).jsonschema&lt;br /&gt;
mw.logObject(p.getSemanticProperties({&lt;br /&gt;
	jsonschema=jsonschema,&lt;br /&gt;
	jsondata=p.expandEmbeddedTemplates({jsonschema=jsonschema, jsondata=p.loadJson({title=page, slot=&amp;quot;jsondata&amp;quot;}).json}).res,&lt;br /&gt;
	debug=true&lt;br /&gt;
}).properties)&lt;br /&gt;
&lt;br /&gt;
--]]&lt;br /&gt;
function p.getSemanticProperties(args)&lt;br /&gt;
	local jsondata = p.defaultArg(args.jsondata, {})&lt;br /&gt;
	local schema = p.defaultArg(args.jsonschema, {})&lt;br /&gt;
	local subschema = p.defaultArg(args.subschema, schema)&lt;br /&gt;
	local parent_schema_property = p.defaultArg(args.parent_schema_property, {})&lt;br /&gt;
	local store = p.defaultArg(args.store, false)&lt;br /&gt;
	local root = p.defaultArg(args.root, true)&lt;br /&gt;
	local debug = p.defaultArg(args.debug, false)&lt;br /&gt;
	--if (debug) then mw.logObject(&amp;quot;Call getSemanticProperties with args &amp;quot; .. mw.dumpObject( args ) .. &amp;quot;\n&amp;lt;br&amp;gt;&amp;quot;) end&lt;br /&gt;
	&lt;br /&gt;
	local properties = {} --semantic properties&lt;br /&gt;
	local property_data = {}&lt;br /&gt;
	local context = p.defaultArg(args.context, p.buildContext({jsonschema=schema}).context)&lt;br /&gt;
	local error = &amp;quot;&amp;quot;&lt;br /&gt;
	if (debug) then mw.logObject(context) end&lt;br /&gt;
	if schema ~= nil and context ~= nil then&lt;br /&gt;
		local schema_properties = p.defaultArg(subschema.properties, {})&lt;br /&gt;
		if (debug and root) then&lt;br /&gt;
			for k,v in pairs(context) do&lt;br /&gt;
				if type(k) == &#039;number&#039; then mw.logObject(&amp;quot;imports &amp;quot; .. v)&lt;br /&gt;
				elseif type(v) == &#039;table&#039; and v[&amp;quot;@id&amp;quot;] ~= nil then mw.logObject(&amp;quot;&amp;quot; .. k .. &amp;quot; maps to &amp;quot; .. v[&amp;quot;@id&amp;quot;]) &lt;br /&gt;
				else mw.logObject(&amp;quot;&amp;quot; .. k .. &amp;quot; maps to &amp;quot; .. mw.dumpObject(v)) end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		for k,v in pairs(jsondata) do&lt;br /&gt;
			local property_names = {}&lt;br /&gt;
			local mapping_found = false&lt;br /&gt;
			local property_definitions = {}&lt;br /&gt;
			if (context[k] ~= nil) then --json-ld mapping&lt;br /&gt;
				if type(context[k]) == &#039;table&#039; then table.insert(property_definitions, context[k][&amp;quot;@id&amp;quot;])&lt;br /&gt;
				else table.insert(property_definitions, context[k]) end&lt;br /&gt;
			end&lt;br /&gt;
			for term, def in pairs(context) do&lt;br /&gt;
				local term_parts = p.splitString(term, &amp;quot;*&amp;quot;)&lt;br /&gt;
				if (string.find(term, &amp;quot;*&amp;quot;, 0, true) and term_parts[1] == k) then --custom additional mapping term*(*...): &amp;quot;Property:...&amp;quot;&lt;br /&gt;
					if type(def) == &#039;table&#039; then table.insert(property_definitions, def[&amp;quot;@id&amp;quot;])&lt;br /&gt;
					else table.insert(property_definitions, def) end&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			if (debug) then mw.logObject(property_definitions) end&lt;br /&gt;
			for i,e in ipairs(property_definitions) do &lt;br /&gt;
				local property_definition = p.splitString(e, &#039;:&#039;)&lt;br /&gt;
				if property_definition[1] == p.keys.property_ns_prefix then&lt;br /&gt;
					mapping_found = true&lt;br /&gt;
					table.insert(property_names, property_definition[2])&lt;br /&gt;
					local schema_property = p.defaultArg(schema_properties[k], {})&lt;br /&gt;
					local schema_type = p.defaultArg(schema_property.type, nil) --todo: also load smw property type on demand&lt;br /&gt;
					property_data[k] = {schema_type=schema_type, schema_data=schema_property, property=property_definition[2], value=v}&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			for i, property_name in ipairs(property_names) do&lt;br /&gt;
				if (properties[property_name] == nil) then properties[property_name] = {} end --initialize empty list&lt;br /&gt;
			end&lt;br /&gt;
			if type(v) == &#039;table&#039; then &lt;br /&gt;
				--if (debug) then mw.logObject(&amp;quot;prop &amp;quot; .. k .. &amp;quot; = &amp;quot; .. mw.dumpObject(v)) end&lt;br /&gt;
				if (mapping_found) then&lt;br /&gt;
					local subcontext = p.copy(p.defaultArgPath(context, {k, p.keys.context}, {})) --deepcopy, see also https://phabricator.wikimedia.org/T269990&lt;br /&gt;
					context = p.tableMerge(context, subcontext) -- pull up nested context&lt;br /&gt;
					local values = {}&lt;br /&gt;
					if (v[1] == nil) then --key value array = object/dict&lt;br /&gt;
						local subproperties_res = p.getSemanticProperties({jsonschema=schema, jsondata=v, store=true, root=false, debug=debug, context=context, subschema=schema_properties[k], parent_schema_property=property_data[k]})&lt;br /&gt;
						local id = subproperties_res.id --subobject_id&lt;br /&gt;
						if (id ~= nil) then &lt;br /&gt;
							id = mw.title.getCurrentTitle().fullText .. &#039;#&#039; .. id&lt;br /&gt;
							table.insert(values, id) &lt;br /&gt;
						end&lt;br /&gt;
						properties = p.processStatement({subject=properties, statement=subproperties_res.properties, debug=debug}).subject&lt;br /&gt;
					else --list array&lt;br /&gt;
						for i, e in pairs(v) do&lt;br /&gt;
							if (type(e) == &#039;table&#039;) then &lt;br /&gt;
								local subproperties_res = p.getSemanticProperties({jsonschema=schema, jsondata=e, store=true, root=false, debug=debug, context=context, subschema=schema_properties[k], parent_schema_property=property_data[k]})&lt;br /&gt;
								local id = subproperties_res.id --subobject_id&lt;br /&gt;
								if (id ~= nil) then &lt;br /&gt;
									id = mw.title.getCurrentTitle().fullText .. &#039;#&#039; .. id&lt;br /&gt;
									table.insert(values, id) &lt;br /&gt;
								end&lt;br /&gt;
								properties = p.processStatement({subject=properties, statement=subproperties_res.properties, debug=debug}).subject&lt;br /&gt;
							else values = v end --plain strings&lt;br /&gt;
						end&lt;br /&gt;
					end &lt;br /&gt;
					for pi, property_name in ipairs(property_names) do&lt;br /&gt;
						for i,value in pairs(values) do table.insert(properties[property_name], value) end&lt;br /&gt;
						if (debug) then mw.logObject(&amp;quot;set &amp;quot; .. property_name .. &amp;quot; = &amp;quot; .. mw.dumpObject(values)) end&lt;br /&gt;
					end&lt;br /&gt;
				else if (debug) then mw.logObject(&amp;quot;not mapped: &amp;quot; .. k .. &amp;quot; = &amp;quot; .. mw.dumpObject(v)) end &lt;br /&gt;
				end&lt;br /&gt;
			else&lt;br /&gt;
				if (mapping_found) then &lt;br /&gt;
					for pi, property_name in ipairs(property_names) do&lt;br /&gt;
						table.insert(properties[property_name], v)&lt;br /&gt;
						if (debug) then mw.logObject(&amp;quot;set &amp;quot; .. property_name .. &amp;quot; = &amp;quot; .. mw.dumpObject(v)) end&lt;br /&gt;
					end&lt;br /&gt;
				else &lt;br /&gt;
					if (debug) then mw.logObject(&amp;quot;not mapped: &amp;quot; .. k .. &amp;quot; = &amp;quot; .. mw.dumpObject(v)) end &lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local subobjectId = nil&lt;br /&gt;
	local store_res = nil&lt;br /&gt;
	if (store) then &lt;br /&gt;
		if (root) then &lt;br /&gt;
			if (debug) then mw.logObject(&amp;quot;Store page properties&amp;quot;) end&lt;br /&gt;
			store_res = mw.smw.set( properties ) --store as semantic properties&lt;br /&gt;
		else&lt;br /&gt;
			&lt;br /&gt;
			if jsondata[&#039;uuid&#039;] ~= nil then subobjectId = &amp;quot;OSW&amp;quot; .. string.gsub(jsondata[&#039;uuid&#039;], &amp;quot;-&amp;quot;, &amp;quot;&amp;quot;) end&lt;br /&gt;
			properties[&#039;@category&#039;] = jsondata[p.keys.category]&lt;br /&gt;
			if (jsondata[p.keys.name] ~= nil) then properties[&#039;Display title of&#039;] = jsondata[p.keys.name] &lt;br /&gt;
			elseif (jsondata[p.keys.label] ~= nil and jsondata[p.keys.label][1] ~= nil) then properties[&#039;Display title of&#039;] = p.splitString(jsondata[p.keys.label][1], &#039;@&#039;)[1] &lt;br /&gt;
			else properties[&#039;Display title of&#039;] = p.defaultArg(parent_schema_property.schema_data[&#039;title&#039;], &amp;quot;&amp;quot;) end&lt;br /&gt;
			if (p.tableLength(properties) &amp;gt; 0) then&lt;br /&gt;
				store_res = mw.smw.subobject( properties, subobjectId )	--store as subobject&lt;br /&gt;
				if (debug) then mw.logObject(&amp;quot;Store subobject with id &amp;quot; .. (subobjectId or &amp;quot;&amp;lt;random&amp;gt;&amp;quot;)) end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if (debug) then mw.logObject(properties) end&lt;br /&gt;
	if (store_res ~= nil) then &lt;br /&gt;
		if (not store_res and store_res.error ~= nil) then error = error .. store_res.error end&lt;br /&gt;
	end&lt;br /&gt;
	if (debug) then mw.logObject(error) end&lt;br /&gt;
	return {properties=properties, definitions=property_data, id=subobjectId, context=context, error=error}&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.processStatement(args)&lt;br /&gt;
	local statement = p.defaultArg(args.statement)&lt;br /&gt;
	local subject = p.defaultArg(args.subject)&lt;br /&gt;
	local debug = p.defaultArg(args.debug, false)&lt;br /&gt;
&lt;br /&gt;
	-- handle &amp;quot;approved&amp;quot; statements&lt;br /&gt;
	if (statement[&amp;quot;HasSubject&amp;quot;] == nil or statement[&amp;quot;HasSubject&amp;quot;][1] == nil or statement[&amp;quot;HasSubject&amp;quot;][1] == &amp;quot;&amp;quot;) then --implicit subject&lt;br /&gt;
		if (statement[&amp;quot;HasProperty&amp;quot;] ~= nil and statement[&amp;quot;HasProperty&amp;quot;][1] ~= nil and statement[&amp;quot;HasProperty&amp;quot;][1] ~= &amp;quot;&amp;quot; and statement[&amp;quot;HasObject&amp;quot;] ~= nil) then&lt;br /&gt;
			local property = p.splitString(statement[&amp;quot;HasProperty&amp;quot;][1], &amp;quot;:&amp;quot;)[2]&lt;br /&gt;
			if (debug) then&lt;br /&gt;
				mw.log(&amp;quot;Set property &amp;quot; .. property .. &amp;quot; from statement to &amp;quot;)&lt;br /&gt;
				mw.logObject(statement[&amp;quot;HasObject&amp;quot;])&lt;br /&gt;
			end&lt;br /&gt;
			if (subject[property] == nil) then subject[property] = {} end&lt;br /&gt;
			for k, v in pairs(statement[&amp;quot;HasObject&amp;quot;]) do table.insert(subject[property], v) end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return {subject=subject}&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- build a semantic query based on provided properties and their schema definition&lt;br /&gt;
--[[ test: &lt;br /&gt;
mw.logObject(p.getSemanticQuery({&lt;br /&gt;
	jsonschema={&lt;br /&gt;
		[&amp;quot;@context&amp;quot;]={&lt;br /&gt;
			test=&amp;quot;Property:TestProperty&amp;quot;,&lt;br /&gt;
			number_max=&amp;quot;Property:HasNumber&amp;quot;,&lt;br /&gt;
			date_min=&amp;quot;Property:HasDate&amp;quot;&lt;br /&gt;
		}, &lt;br /&gt;
		properties={&lt;br /&gt;
			test={title=&amp;quot;Test&amp;quot;, type=&amp;quot;string&amp;quot;},&lt;br /&gt;
			number_max={title=&amp;quot;Number&amp;quot;, type=&amp;quot;string&amp;quot;, format=&amp;quot;number&amp;quot;, options={role={query={filter=&amp;quot;max&amp;quot;}}}},&lt;br /&gt;
			date_min={title=&amp;quot;Date&amp;quot;, type=&amp;quot;string&amp;quot;, format=&amp;quot;date&amp;quot;, options={role={query={filter=&amp;quot;min&amp;quot;}}}},&lt;br /&gt;
		}&lt;br /&gt;
	}, &lt;br /&gt;
	jsondata={test=&amp;quot;TestValue&amp;quot;, number_max=5, date_min=&amp;quot;01.01.2023&amp;quot;}&lt;br /&gt;
}))&lt;br /&gt;
--]]&lt;br /&gt;
function p.getSemanticQuery(args)&lt;br /&gt;
	--local jsondata = p.defaultArg(args.jsondata, {})&lt;br /&gt;
	--local schema = p.defaultArg(args.jsonschema, {})&lt;br /&gt;
	local res = &amp;quot;&amp;quot;&lt;br /&gt;
	local where = &amp;quot;&amp;quot;&lt;br /&gt;
	local select = &amp;quot;&amp;quot;&lt;br /&gt;
	local semantic_properties = p.getSemanticProperties(args)&lt;br /&gt;
	--mw.logObject(semantic_properties)&lt;br /&gt;
	for k,def in pairs(semantic_properties.definitions) do&lt;br /&gt;
		-- see also: https://www.semantic-mediawiki.org/wiki/Help:Search_operators&lt;br /&gt;
		local filter = p.defaultArgPath(def.schema_data, {&#039;options&#039;, &#039;role&#039;, &#039;query&#039;, &#039;filter&#039;}, &#039;eq&#039;)&lt;br /&gt;
		local value = def.value&lt;br /&gt;
		if def.schema_data.type == &#039;string&#039; and (def.schema_data.format == &#039;number&#039; or def.schema_data.format == &#039;date&#039;) then &lt;br /&gt;
			if (filter == &#039;min&#039;) then value = &amp;quot;&amp;lt;&amp;quot; .. value&lt;br /&gt;
			elseif (filter == &#039;max&#039;) then value = &amp;quot;&amp;gt;&amp;quot; .. value&lt;br /&gt;
			else value = value end --exact match&lt;br /&gt;
		elseif def.schema_data.type == &#039;string&#039; then&lt;br /&gt;
			value = &amp;quot;~*&amp;quot; .. value .. &amp;quot;*&amp;quot;&lt;br /&gt;
		end&lt;br /&gt;
		where = where .. &amp;quot;\n[[&amp;quot;.. def.property .. &amp;quot;::&amp;quot; .. value .. &amp;quot;]]&amp;quot;&lt;br /&gt;
		select = select .. &amp;quot;\n|?&amp;quot; .. def.property&lt;br /&gt;
		if (def.schema_data.title ~= nil) then select = select .. &amp;quot;=&amp;quot; .. def.schema_data.title end&lt;br /&gt;
	end&lt;br /&gt;
	if (where ~= &amp;quot;&amp;quot;) then res = &amp;quot;{{#ask:&amp;quot; .. res .. where .. select .. &amp;quot;}}&amp;quot; end&lt;br /&gt;
	return {wikitext=res}&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- HELPERS&lt;br /&gt;
&lt;br /&gt;
-- expands all $ref&lt;br /&gt;
--test: mw.logObject(p.expandJsonRef({json={items={test=&amp;quot;value&amp;quot;, [&amp;quot;$ref&amp;quot;]=&amp;quot;/wiki/JsonSchema:Label?action=raw&amp;quot;}}}).json)&lt;br /&gt;
--test: mw.logObject(p.expandJsonRef({json={[&amp;quot;$ref&amp;quot;]=&amp;quot;/wiki/Category:Item?action=raw&amp;amp;slot=jsonschema&amp;quot;}}).json)&lt;br /&gt;
--test: mw.logObject(p.expandJsonRef({json={[&amp;quot;$ref&amp;quot;]=&amp;quot;/wiki/JsonSchema:Statement?action=raw&amp;quot;}}).json)&lt;br /&gt;
function p.expandJsonRef(args)&lt;br /&gt;
	local json = p.defaultArg(args.json, {})&lt;br /&gt;
	local debug = p.defaultArg(args.debug, false)&lt;br /&gt;
	local refs = {}&lt;br /&gt;
    for k,v in pairs(json) do&lt;br /&gt;
    	if (k == &amp;quot;$ref&amp;quot;) then&lt;br /&gt;
    		-- e. g. &amp;quot;/wiki/JsonSchema:Label?action=raw&amp;quot; or &amp;quot;/wiki/Category:Entity?action=raw&amp;amp;slot=jsonschema&amp;quot;&lt;br /&gt;
    		if string.find(v, &amp;quot;#&amp;quot;) then&lt;br /&gt;
    			if (debug) then mw.logObject(&amp;quot;Skip relative reference&amp;quot;) end&lt;br /&gt;
    		else&lt;br /&gt;
	    		local uri = mw.uri.new(v)&lt;br /&gt;
	    		local ref_title = mw.text.split(uri.path, &amp;quot;wiki/&amp;quot;, true)[2]&lt;br /&gt;
	    		local ref_slot = uri.query[&amp;quot;slot&amp;quot;]&lt;br /&gt;
	    		if (debug) then &lt;br /&gt;
		    		if (ref_slot ~= nil) then mw.logObject(&amp;quot;Ref found with title &amp;quot; .. ref_title .. &amp;quot; and slot &amp;quot; .. ref_slot)&lt;br /&gt;
		    		else mw.logObject(&amp;quot;Ref found with title &amp;quot; .. ref_title) end&lt;br /&gt;
	    		end&lt;br /&gt;
	    		local ref_json = p.loadJson({title=ref_title, slot=ref_slot}).json&lt;br /&gt;
	    		refs[v] = ref_json&lt;br /&gt;
	    		json[k] = nil&lt;br /&gt;
    		end&lt;br /&gt;
    	end&lt;br /&gt;
    end&lt;br /&gt;
	--mw.logObject(refs)&lt;br /&gt;
	for k,v in pairs(refs) do&lt;br /&gt;
		json = p.tableMerge(v, json)&lt;br /&gt;
	end&lt;br /&gt;
    for k,v in pairs(json) do&lt;br /&gt;
    	if type(v) == &amp;quot;table&amp;quot; then&lt;br /&gt;
            json[k] = p.expandJsonRef({json=v}).json&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    return {json=json}&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.defaultArg(arg, default)&lt;br /&gt;
	if (arg == nil) then &lt;br /&gt;
		return default&lt;br /&gt;
	else&lt;br /&gt;
		return arg&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- returns the value of a table (dict) path or default, if the path is not defined&lt;br /&gt;
-- test: mw.logObject(p.defaultArgPath({some={defined={path=&amp;quot;value&amp;quot;}}}, {&amp;quot;some&amp;quot;, &amp;quot;defined&amp;quot;, &amp;quot;path&amp;quot;}, &amp;quot;default_value&amp;quot;))&lt;br /&gt;
-- test: mw.logObject(p.defaultArgPath({some={defined={path=&amp;quot;value&amp;quot;}}}, {&amp;quot;some&amp;quot;, &amp;quot;undefined&amp;quot;, &amp;quot;path&amp;quot;}, &amp;quot;default_value&amp;quot;))&lt;br /&gt;
function p.defaultArgPath(arg, path, default)&lt;br /&gt;
	if (arg == nil) then &lt;br /&gt;
		return default&lt;br /&gt;
	elseif (path == nil) then&lt;br /&gt;
		return arg&lt;br /&gt;
	else&lt;br /&gt;
		key = table.remove(path,1)&lt;br /&gt;
		if (key == nil) then return arg end  --end of path&lt;br /&gt;
		return p.defaultArgPath(arg[key], path, default)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.splitString(inputstr, sep)&lt;br /&gt;
	&lt;br /&gt;
        if sep == nil then&lt;br /&gt;
                sep = &amp;quot;;&amp;quot;&lt;br /&gt;
        end&lt;br /&gt;
        local t={}&lt;br /&gt;
        for str in string.gmatch(inputstr, &amp;quot;([^&amp;quot;..sep..&amp;quot;]+)&amp;quot;) do&lt;br /&gt;
                table.insert(t, str)&lt;br /&gt;
        end&lt;br /&gt;
        return t&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--dumps a table to a string (replaced by mw.dumpObject())&lt;br /&gt;
function p.dump(o)&lt;br /&gt;
   return mw.dumpObject(o)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--converts a literal to an table&lt;br /&gt;
function p.tablefy(o)&lt;br /&gt;
	if (o == nil) then o = {} end&lt;br /&gt;
	if (type(o) ~= &#039;table&#039;) then o = {o} end&lt;br /&gt;
	return o&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--true if the value is contained in the array (flat arrays only)&lt;br /&gt;
function p.tableContains (tab, val)&lt;br /&gt;
    for index, value in ipairs(tab) do&lt;br /&gt;
        if value == val then&lt;br /&gt;
            return true&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return false&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--get the size of a table&lt;br /&gt;
function p.tableLength(t)&lt;br /&gt;
  local count = 0&lt;br /&gt;
  for _ in pairs(t) do count = count + 1 end&lt;br /&gt;
  return count&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--check if a variable is nil or an empty string or table&lt;br /&gt;
function p.nilOrEmpty(o)&lt;br /&gt;
	if (o == nil) then return true&lt;br /&gt;
	elseif (type(o) == &#039;string&#039; and o == &amp;quot;&amp;quot;) then return true&lt;br /&gt;
	elseif (type(o) == &#039;table&#039; and p.tableLength(o) == 0) then return true&lt;br /&gt;
	else return false &lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- merges t2 to t1&lt;br /&gt;
--test: mw.logObject(p.tableMerge({&amp;quot;string&amp;quot;, test1=&amp;quot;test1&amp;quot;, subtable1={&amp;quot;test&amp;quot;}}, {&amp;quot;string2&amp;quot;, test1=&amp;quot;test2&amp;quot;, test3=&amp;quot;test4&amp;quot;}))&lt;br /&gt;
function p.tableMerge(t1, t2)&lt;br /&gt;
    for k,v in pairs(t2) do&lt;br /&gt;
        if type(v) == &amp;quot;table&amp;quot; then&lt;br /&gt;
            if type(t1[k] or false) == &amp;quot;table&amp;quot; then&lt;br /&gt;
                p.tableMerge(t1[k] or {}, t2[k] or {})&lt;br /&gt;
            else&lt;br /&gt;
                if type(k) == &#039;number&#039; then table.insert(t1, v)&lt;br /&gt;
            	else t1[k] = v end&lt;br /&gt;
            end&lt;br /&gt;
        else&lt;br /&gt;
        	if type(k) == &#039;number&#039; then table.insert(t1, v)&lt;br /&gt;
            else t1[k] = v end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    return t1&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- from https://stackoverflow.com/questions/640642/how-do-you-copy-a-lua-table-by-value&lt;br /&gt;
function p.copy(obj, seen)&lt;br /&gt;
  if type(obj) ~= &#039;table&#039; then return obj end&lt;br /&gt;
  if seen and seen[obj] then return seen[obj] end&lt;br /&gt;
  local s = seen or {}&lt;br /&gt;
  local res = setmetatable({}, getmetatable(obj))&lt;br /&gt;
  s[obj] = res&lt;br /&gt;
  for k, v in pairs(obj) do res[p.copy(k, s)] = p.copy(v, s) end&lt;br /&gt;
  return res&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Maintenance script</name></author>
	</entry>
	<entry>
		<id>https://onto-wiki.eu/w/index.php?title=Category:Entity&amp;diff=3347</id>
		<title>Category:Entity</title>
		<link rel="alternate" type="text/html" href="https://onto-wiki.eu/w/index.php?title=Category:Entity&amp;diff=3347"/>
		<updated>2023-04-20T18:12:27Z</updated>

		<summary type="html">&lt;p&gt;Maintenance script: Update package: OSW Core&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Maintenance script</name></author>
	</entry>
	<entry>
		<id>https://onto-wiki.eu/w/index.php?title=Category:OSW2ac4493f8635481eaf1db961b63c8325&amp;diff=3346</id>
		<title>Category:OSW2ac4493f8635481eaf1db961b63c8325</title>
		<link rel="alternate" type="text/html" href="https://onto-wiki.eu/w/index.php?title=Category:OSW2ac4493f8635481eaf1db961b63c8325&amp;diff=3346"/>
		<updated>2023-04-20T18:12:11Z</updated>

		<summary type="html">&lt;p&gt;Maintenance script: Update package: OSW Core&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Maintenance script</name></author>
	</entry>
	<entry>
		<id>https://onto-wiki.eu/w/index.php?title=Category:OSWe427aafafbac4262955b9f690a83405d&amp;diff=3345</id>
		<title>Category:OSWe427aafafbac4262955b9f690a83405d</title>
		<link rel="alternate" type="text/html" href="https://onto-wiki.eu/w/index.php?title=Category:OSWe427aafafbac4262955b9f690a83405d&amp;diff=3345"/>
		<updated>2023-04-20T18:11:59Z</updated>

		<summary type="html">&lt;p&gt;Maintenance script: Update package: OSW Core&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Suggested class structure ===&lt;br /&gt;
{{Template:ELN/Editor/DrawIO|file_name=tool-schema|page_name=Category:OSWe427aafafbac4262955b9f690a83405d|full_width=0}}&lt;/div&gt;</summary>
		<author><name>Maintenance script</name></author>
	</entry>
	<entry>
		<id>https://onto-wiki.eu/w/index.php?title=JsonSchema:UuidUriProperty&amp;diff=3337</id>
		<title>JsonSchema:UuidUriProperty</title>
		<link rel="alternate" type="text/html" href="https://onto-wiki.eu/w/index.php?title=JsonSchema:UuidUriProperty&amp;diff=3337"/>
		<updated>2023-04-04T14:07:38Z</updated>

		<summary type="html">&lt;p&gt;Maintenance script: Update package: OSW Core&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
    &amp;quot;title&amp;quot;: &amp;quot;URI&amp;quot;,&lt;br /&gt;
    &amp;quot;format&amp;quot;: &amp;quot;autocomplete&amp;quot;,&lt;br /&gt;
    &amp;quot;eval_template&amp;quot;: {&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;wikitext&amp;quot;,&lt;br /&gt;
        &amp;quot;value&amp;quot;: &amp;quot;Item:OSW{{#sub: {{#replace: {{#replace: {{#explode: {{{self|}}} |#|1}} |_|}} |-|}} |-32}}&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;options&amp;quot;: {&lt;br /&gt;
        &amp;quot;autocomplete&amp;quot;: {&lt;br /&gt;
            &amp;quot;query&amp;quot;: &amp;quot;[[Category:OSW57beed5e1294434ba77bb6516e461456]]|?Equivalent_URI=uri&amp;quot;,&lt;br /&gt;
            &amp;quot;store_template&amp;quot;: {&lt;br /&gt;
                &amp;quot;type&amp;quot;: [&lt;br /&gt;
                    &amp;quot;handlebars&amp;quot;&lt;br /&gt;
                ],&lt;br /&gt;
                &amp;quot;value&amp;quot;: &amp;quot;{{{result.printouts.uri.[0]}}}&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Maintenance script</name></author>
	</entry>
	<entry>
		<id>https://onto-wiki.eu/w/index.php?title=Category:OSWff333fd349af4f65a69100405a9e60c7&amp;diff=3336</id>
		<title>Category:OSWff333fd349af4f65a69100405a9e60c7</title>
		<link rel="alternate" type="text/html" href="https://onto-wiki.eu/w/index.php?title=Category:OSWff333fd349af4f65a69100405a9e60c7&amp;diff=3336"/>
		<updated>2023-04-04T14:07:37Z</updated>

		<summary type="html">&lt;p&gt;Maintenance script: Update package: OSW Core&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Maintenance script</name></author>
	</entry>
	<entry>
		<id>https://onto-wiki.eu/w/index.php?title=Category:OSW69f251a900944602a08d1cca830249b5&amp;diff=3335</id>
		<title>Category:OSW69f251a900944602a08d1cca830249b5</title>
		<link rel="alternate" type="text/html" href="https://onto-wiki.eu/w/index.php?title=Category:OSW69f251a900944602a08d1cca830249b5&amp;diff=3335"/>
		<updated>2023-04-04T14:07:34Z</updated>

		<summary type="html">&lt;p&gt;Maintenance script: Update package: OSW Core&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Maintenance script</name></author>
	</entry>
	<entry>
		<id>https://onto-wiki.eu/w/index.php?title=Template:Editor/Graph&amp;diff=3334</id>
		<title>Template:Editor/Graph</title>
		<link rel="alternate" type="text/html" href="https://onto-wiki.eu/w/index.php?title=Template:Editor/Graph&amp;diff=3334"/>
		<updated>2023-04-04T14:07:30Z</updated>

		<summary type="html">&lt;p&gt;Maintenance script: Update package: OSW Core&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;includeonly&amp;gt;{{Template:Helper/UI/VE/Visible&lt;br /&gt;
|icon=articleDisambiguation&lt;br /&gt;
|content=Graph &#039;&#039;{{{file_name}}}&#039;&#039;&lt;br /&gt;
}}&lt;br /&gt;
{{Template:Helper/UI/VE/Hidden &lt;br /&gt;
|content=&amp;lt;div id=&amp;quot;{{#if: {{{page_name|}}}|{{#replace:{{#replace: {{{page_name}}}|/|-}}|:|-}}-|}}{{{file_name}}}&amp;quot; style=&amp;quot;width: {{#ifeq: {{{full_width|0}}}|1|100%| {{{width|600px}}} }};&amp;quot; class=&amp;quot;InteractiveSemanticGraph&amp;quot; data-config=&#039;{ &lt;br /&gt;
  &amp;quot;uuid&amp;quot;: &amp;quot;{{{uuid|}}}&amp;quot;,&lt;br /&gt;
  &amp;quot;name&amp;quot;:&amp;quot;{{#if: {{{page_name|}}}|{{#replace:{{#replace: {{{page_name}}}|/|-}}|:|-}}-|}}{{{file_name}}}&amp;quot;,&lt;br /&gt;
  &amp;quot;root&amp;quot;:&amp;quot;{{{root|}}}&amp;quot;,&lt;br /&gt;
  &amp;quot;properties&amp;quot;:[{{#arraymap:{{{properties|}}}|;|x|&amp;quot;x&amp;quot;|,}}],&lt;br /&gt;
  &amp;quot;depth&amp;quot;:{{{depth|2}}},&lt;br /&gt;
  &amp;quot;edit&amp;quot;:{{#ifeq: {{{edit|0}}}|1|true|false}}, &lt;br /&gt;
  &amp;quot;permalink&amp;quot;:{{#ifeq: {{{permalink|0}}}|1|true|false}}, &lt;br /&gt;
  &amp;quot;edge_labels&amp;quot;: {{#ifeq: {{{edge_labels|1}}}|1|true|false}},&lt;br /&gt;
  &amp;quot;hint&amp;quot;:{{#ifeq: {{{hint|0}}}|1|true|false}}&lt;br /&gt;
}&#039;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
}}&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;[[Category:OSL/Infrastructure/Template/User]]&lt;br /&gt;
&amp;lt;templatedata&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	&amp;quot;params&amp;quot;: {&lt;br /&gt;
		&amp;quot;file_name&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: {&lt;br /&gt;
				&amp;quot;en&amp;quot;: &amp;quot;Graph name&amp;quot;,&lt;br /&gt;
				&amp;quot;de&amp;quot;: &amp;quot;Name des Graph-Name&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;quot;description&amp;quot;: {&lt;br /&gt;
				&amp;quot;en&amp;quot;: &amp;quot;Must be unique on this page&amp;quot;,&lt;br /&gt;
				&amp;quot;de&amp;quot;: &amp;quot;Muss eindeutig auf dieser Seite sein&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;quot;required&amp;quot;: true,&lt;br /&gt;
			&amp;quot;autovalue&amp;quot;: &amp;quot;graph-01&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;root&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: {&lt;br /&gt;
				&amp;quot;en&amp;quot;: &amp;quot;Root page name&amp;quot;,&lt;br /&gt;
				&amp;quot;de&amp;quot;: &amp;quot;Name der Wurzelseite&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;quot;description&amp;quot;: {&lt;br /&gt;
				&amp;quot;en&amp;quot;: &amp;quot;Dafault value is the current page&amp;quot;,&lt;br /&gt;
				&amp;quot;de&amp;quot;: &amp;quot;Standardwert ist die aktuelle Seite&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;wiki-page-name&amp;quot;,&lt;br /&gt;
			&amp;quot;required&amp;quot;: true,&lt;br /&gt;
			&amp;quot;autovalue&amp;quot;: &amp;quot;{{subst:FULLPAGENAME}}&amp;quot;,&lt;br /&gt;
			&amp;quot;suggested&amp;quot;: true&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;properties&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: {&lt;br /&gt;
				&amp;quot;en&amp;quot;: &amp;quot;Properties&amp;quot;,&lt;br /&gt;
				&amp;quot;de&amp;quot;: &amp;quot;Attribute&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;quot;description&amp;quot;: {&lt;br /&gt;
				&amp;quot;en&amp;quot;: &amp;quot;Semicolon separated property list used to expand the root node&amp;quot;,&lt;br /&gt;
				&amp;quot;de&amp;quot;: &amp;quot;Per Semicolon getrennte Attributliste, mit der der Wurzelknoten erweitert wird&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;quot;required&amp;quot;: true,&lt;br /&gt;
			&amp;quot;autovalue&amp;quot;: &amp;quot;IsA; HasPart&amp;quot;,&lt;br /&gt;
			&amp;quot;suggested&amp;quot;: true&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;depth&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: {&lt;br /&gt;
				&amp;quot;en&amp;quot;: &amp;quot;Expansion depth&amp;quot;,&lt;br /&gt;
				&amp;quot;de&amp;quot;: &amp;quot;Expandierungstiefe&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;quot;description&amp;quot;: {&lt;br /&gt;
				&amp;quot;en&amp;quot;: &amp;quot;Defines how far the graph is unfolded automatically with the given properties&amp;quot;,&lt;br /&gt;
				&amp;quot;de&amp;quot;: &amp;quot;Gibt an, wie weitd er Graph mit den gegebenen Attributen automatische aufgeklappt wird&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;quot;required&amp;quot;: false,&lt;br /&gt;
			&amp;quot;autovalue&amp;quot;: &amp;quot;2&amp;quot;,&lt;br /&gt;
			&amp;quot;suggested&amp;quot;: true&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;width&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: {&lt;br /&gt;
				&amp;quot;en&amp;quot;: &amp;quot;Width&amp;quot;,&lt;br /&gt;
				&amp;quot;de&amp;quot;: &amp;quot;Breite&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;quot;description&amp;quot;: {&lt;br /&gt;
				&amp;quot;en&amp;quot;: &amp;quot;Width of the graph in pixels&amp;quot;,&lt;br /&gt;
				&amp;quot;de&amp;quot;: &amp;quot;Breite des Graphen in Pixeln&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
			&amp;quot;autovalue&amp;quot;: &amp;quot;600px&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;full_width&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: {&lt;br /&gt;
				&amp;quot;en&amp;quot;: &amp;quot;Full width&amp;quot;,&lt;br /&gt;
				&amp;quot;de&amp;quot;: &amp;quot;Gesamte Seitenbreite&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;quot;description&amp;quot;: {&lt;br /&gt;
				&amp;quot;en&amp;quot;: &amp;quot;Used the full page width to display the graph&amp;quot;,&lt;br /&gt;
				&amp;quot;de&amp;quot;: &amp;quot;Nutzt die gesamte Seitenbreite zur Darstellung des Graphen&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;boolean&amp;quot;,&lt;br /&gt;
			&amp;quot;autovalue&amp;quot;: &amp;quot;0&amp;quot;,&lt;br /&gt;
			&amp;quot;suggested&amp;quot;: true&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;edit&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: {&lt;br /&gt;
				&amp;quot;en&amp;quot;: &amp;quot;Edit modus&amp;quot;,&lt;br /&gt;
				&amp;quot;de&amp;quot;: &amp;quot;Bearbeitungsmodus&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;quot;description&amp;quot;: {&lt;br /&gt;
				&amp;quot;en&amp;quot;: &amp;quot;Allows editing the graph&amp;quot;,&lt;br /&gt;
				&amp;quot;de&amp;quot;: &amp;quot;Erlaubt die Bearbeitung des Graphs&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;boolean&amp;quot;,&lt;br /&gt;
			&amp;quot;autovalue&amp;quot;: &amp;quot;0&amp;quot;,&lt;br /&gt;
			&amp;quot;suggested&amp;quot;: true&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;edge_labels&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: {&lt;br /&gt;
				&amp;quot;en&amp;quot;: &amp;quot;Edge labels&amp;quot;,&lt;br /&gt;
				&amp;quot;de&amp;quot;: &amp;quot;Kantenbeschriftungen&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;quot;description&amp;quot;: {&lt;br /&gt;
				&amp;quot;en&amp;quot;: &amp;quot;Displays edge labels&amp;quot;,&lt;br /&gt;
				&amp;quot;de&amp;quot;: &amp;quot;Zeigt die Namen der Verbindungslinien an&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;boolean&amp;quot;,&lt;br /&gt;
			&amp;quot;autovalue&amp;quot;: &amp;quot;1&amp;quot;,&lt;br /&gt;
			&amp;quot;suggested&amp;quot;: false&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;permalink&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: {&lt;br /&gt;
				&amp;quot;en&amp;quot;: &amp;quot;Permalink&amp;quot;,&lt;br /&gt;
				&amp;quot;de&amp;quot;: &amp;quot;Permalink&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;quot;description&amp;quot;: {&lt;br /&gt;
				&amp;quot;en&amp;quot;: &amp;quot;Creates a permalink for the state of the graph&amp;quot;,&lt;br /&gt;
				&amp;quot;de&amp;quot;: &amp;quot;Erstellt einen Permalink für den Zustand des Graphs&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;boolean&amp;quot;,&lt;br /&gt;
			&amp;quot;autovalue&amp;quot;: &amp;quot;0&amp;quot;,&lt;br /&gt;
			&amp;quot;suggested&amp;quot;: false&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;hint&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: {&lt;br /&gt;
				&amp;quot;en&amp;quot;: &amp;quot;Show hints&amp;quot;,&lt;br /&gt;
				&amp;quot;de&amp;quot;: &amp;quot;Hinweise zeigen&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;quot;description&amp;quot;: {&lt;br /&gt;
				&amp;quot;en&amp;quot;: &amp;quot;Shows additional information beside the graph&amp;quot;,&lt;br /&gt;
				&amp;quot;de&amp;quot;: &amp;quot;Zeigt zusätzliche Informationen neben dem Graphen an&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;boolean&amp;quot;,&lt;br /&gt;
			&amp;quot;autovalue&amp;quot;: &amp;quot;0&amp;quot;,&lt;br /&gt;
			&amp;quot;suggested&amp;quot;: false&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;page_name&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: {&lt;br /&gt;
				&amp;quot;en&amp;quot;: &amp;quot;Page name&amp;quot;,&lt;br /&gt;
				&amp;quot;de&amp;quot;: &amp;quot;Seitename&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;quot;description&amp;quot;: {&lt;br /&gt;
				&amp;quot;en&amp;quot;: &amp;quot;is filled in automatically&amp;quot;,&lt;br /&gt;
				&amp;quot;de&amp;quot;: &amp;quot;wird automatisch ausgefüllt&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;wiki-page-name&amp;quot;,&lt;br /&gt;
			&amp;quot;autovalue&amp;quot;: &amp;quot;{{subst:FULLPAGENAME}}&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uuid&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: {&lt;br /&gt;
				&amp;quot;en&amp;quot;: &amp;quot;Unique ID&amp;quot;,&lt;br /&gt;
				&amp;quot;de&amp;quot;: &amp;quot;Eindeutige ID&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;quot;description&amp;quot;: {&lt;br /&gt;
				&amp;quot;en&amp;quot;: &amp;quot;Automatically generated and should not be changed&amp;quot;,&lt;br /&gt;
				&amp;quot;de&amp;quot;: &amp;quot;Wird automatisch generiert und sollte nicht verändert werden&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
			&amp;quot;required&amp;quot;: false&lt;br /&gt;
		}&lt;br /&gt;
	},&lt;br /&gt;
	&amp;quot;description&amp;quot;: {&lt;br /&gt;
		&amp;quot;en&amp;quot;: &amp;quot;Adds a semantic graph viewer and editor&amp;quot;,&lt;br /&gt;
		&amp;quot;de&amp;quot;: &amp;quot;Fügt einen semantischen Graphen ein&amp;quot;&lt;br /&gt;
	},&lt;br /&gt;
	&amp;quot;format&amp;quot;: &amp;quot;block&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/templatedata&amp;gt;&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Maintenance script</name></author>
	</entry>
	<entry>
		<id>https://onto-wiki.eu/w/index.php?title=Template:Editor/SvgEdit&amp;diff=3333</id>
		<title>Template:Editor/SvgEdit</title>
		<link rel="alternate" type="text/html" href="https://onto-wiki.eu/w/index.php?title=Template:Editor/SvgEdit&amp;diff=3333"/>
		<updated>2023-04-04T14:07:26Z</updated>

		<summary type="html">&lt;p&gt;Maintenance script: Update package: OSW Core&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;includeonly&amp;gt;{{Template:Helper/UI/VE/Visible&lt;br /&gt;
|icon=highlight&lt;br /&gt;
|content=Sketch &#039;&#039;{{{file_name}}}&#039;&#039;&lt;br /&gt;
}}&lt;br /&gt;
{{Template:Helper/UI/VE/Hidden &lt;br /&gt;
|content=&amp;lt;div class=&amp;quot;SvgEdit&amp;quot; style=&amp;quot;width: {{{width|100%}}}; height: 500px;&amp;quot; data-config=&#039;{&lt;br /&gt;
  &amp;quot;file_title&amp;quot;: &amp;quot;{{#if:{{{uuid|}}}|OSW{{#replace:{{{uuid}}}|-|}}|{{#replace:{{#replace: {{{page_name}}}|/|-}}|:|-}}-{{{file_name}}}}}.svg&amp;quot;, &lt;br /&gt;
  &amp;quot;file_label&amp;quot;: &amp;quot;{{{file_name}}}&amp;quot;&lt;br /&gt;
}&#039;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
}}&amp;lt;div style=&amp;quot;display:none&amp;quot;&amp;gt;[[Media:{{#if:{{{uuid|}}}|OSW{{#replace:{{{uuid}}}|-|}}|{{#replace:{{#replace: {{{page_name}}}|/|-}}|:|-}}-{{{file_name}}}}}.svg]]&amp;lt;/div&amp;gt;&amp;lt;/includeonly&amp;gt;&amp;lt;!-- Hidden link to file to include file in page images--&amp;gt;&lt;br /&gt;
&amp;lt;noinclude&amp;gt;[[Category:OSL/Infrastructure/Template/User]]&lt;br /&gt;
&amp;lt;templatedata&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	&amp;quot;params&amp;quot;: {&lt;br /&gt;
		&amp;quot;file_name&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: {&lt;br /&gt;
				&amp;quot;en&amp;quot;: &amp;quot;Name&amp;quot;,&lt;br /&gt;
				&amp;quot;de&amp;quot;: &amp;quot;Name&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;quot;description&amp;quot;: {&lt;br /&gt;
				&amp;quot;en&amp;quot;: &amp;quot;Sketch name&amp;quot;,&lt;br /&gt;
				&amp;quot;de&amp;quot;: &amp;quot;Name der Zeichnung&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
			&amp;quot;required&amp;quot;: true,&lt;br /&gt;
			&amp;quot;autovalue&amp;quot;: &amp;quot;sketch-01&amp;quot;,&lt;br /&gt;
			&amp;quot;suggested&amp;quot;: true&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;width&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: {&lt;br /&gt;
				&amp;quot;en&amp;quot;: &amp;quot;Breite&amp;quot;,&lt;br /&gt;
				&amp;quot;de&amp;quot;: &amp;quot;Breite&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;quot;description&amp;quot;: {&lt;br /&gt;
				&amp;quot;en&amp;quot;: &amp;quot;Width of the graphic&amp;quot;,&lt;br /&gt;
				&amp;quot;de&amp;quot;: &amp;quot;Breite der Graphik&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
			&amp;quot;autovalue&amp;quot;: &amp;quot;100%&amp;quot;,&lt;br /&gt;
			&amp;quot;example&amp;quot;: {&lt;br /&gt;
				&amp;quot;en&amp;quot;: &amp;quot;600px or 100%&amp;quot;,&lt;br /&gt;
				&amp;quot;de&amp;quot;: &amp;quot;600px oder 100%&amp;quot;&lt;br /&gt;
			}&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;page_name&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: {&lt;br /&gt;
				&amp;quot;en&amp;quot;: &amp;quot;Page name&amp;quot;,&lt;br /&gt;
				&amp;quot;de&amp;quot;: &amp;quot;Seitename&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;quot;description&amp;quot;: {&lt;br /&gt;
				&amp;quot;en&amp;quot;: &amp;quot;is filled in automatically and should not be changed&amp;quot;,&lt;br /&gt;
				&amp;quot;de&amp;quot;: &amp;quot;wird automatisch ausgefüllt und sollte nicht verändert werden&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;wiki-page-name&amp;quot;,&lt;br /&gt;
			&amp;quot;autovalue&amp;quot;: &amp;quot;{{subst:FULLPAGENAME}}&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uuid&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: {&lt;br /&gt;
				&amp;quot;en&amp;quot;: &amp;quot;Unique ID&amp;quot;,&lt;br /&gt;
				&amp;quot;de&amp;quot;: &amp;quot;Eindeutige ID&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;quot;description&amp;quot;: {&lt;br /&gt;
				&amp;quot;en&amp;quot;: &amp;quot;Automatically generated and should not be changed&amp;quot;,&lt;br /&gt;
				&amp;quot;de&amp;quot;: &amp;quot;Wird automatisch generiert und sollte nicht verändert werden&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
			&amp;quot;required&amp;quot;: false&lt;br /&gt;
		}&lt;br /&gt;
	},&lt;br /&gt;
	&amp;quot;description&amp;quot;: {&lt;br /&gt;
		&amp;quot;en&amp;quot;: &amp;quot;Adds a freehand graphic editor&amp;quot;,&lt;br /&gt;
		&amp;quot;de&amp;quot;: &amp;quot;Fügt einen Freihand-Grafik-Editor hinzu&amp;quot;&lt;br /&gt;
	},&lt;br /&gt;
	&amp;quot;format&amp;quot;: &amp;quot;\n{{_\n| _ = _\n}}\n&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/templatedata&amp;gt;&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Maintenance script</name></author>
	</entry>
	<entry>
		<id>https://onto-wiki.eu/w/index.php?title=Template:Editor/DrawIO&amp;diff=3332</id>
		<title>Template:Editor/DrawIO</title>
		<link rel="alternate" type="text/html" href="https://onto-wiki.eu/w/index.php?title=Template:Editor/DrawIO&amp;diff=3332"/>
		<updated>2023-04-04T14:07:24Z</updated>

		<summary type="html">&lt;p&gt;Maintenance script: Update package: OSW Core&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;includeonly&amp;gt;{{Template:Helper/UI/VE/Visible&lt;br /&gt;
|icon=browser&lt;br /&gt;
|content=Diagram &#039;&#039;{{{file_name}}}&#039;&#039;&lt;br /&gt;
}}&lt;br /&gt;
{{Template:Helper/UI/VE/Hidden &lt;br /&gt;
|content={{#drawio:{{#if:{{{uuid|}}}|OSW{{#replace:{{{uuid}}}|-|}}|{{#if: {{{page_name|}}}|{{#replace:{{#replace: {{{page_name}}}|/|-}}|:|-}}-|}}{{{file_name}}}}}|type={{{type|svg}}}|max-width={{#ifeq: {{{full_width|0}}}|1|100%| {{{width|500px}}} }} |label={{{file_name|}}} }}&lt;br /&gt;
}}&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;[[Category:OSL/Infrastructure/Template/User]]&lt;br /&gt;
&amp;lt;templatedata&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	&amp;quot;params&amp;quot;: {&lt;br /&gt;
		&amp;quot;file_name&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: {&lt;br /&gt;
				&amp;quot;en&amp;quot;: &amp;quot;Name&amp;quot;,&lt;br /&gt;
				&amp;quot;de&amp;quot;: &amp;quot;Name&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;quot;description&amp;quot;: {&lt;br /&gt;
				&amp;quot;en&amp;quot;: &amp;quot;Name of the diagram&amp;quot;,&lt;br /&gt;
				&amp;quot;de&amp;quot;: &amp;quot;Name des Diagramms&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
			&amp;quot;required&amp;quot;: true&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;type&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: {&lt;br /&gt;
				&amp;quot;en&amp;quot;: &amp;quot;File format&amp;quot;,&lt;br /&gt;
				&amp;quot;de&amp;quot;: &amp;quot;Dateiformat&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;quot;description&amp;quot;: {&lt;br /&gt;
				&amp;quot;en&amp;quot;: &amp;quot;The drawing can be saved as a vector or raster graphic&amp;quot;,&lt;br /&gt;
				&amp;quot;de&amp;quot;: &amp;quot;Die Zeichnung kann als Vektor- oder Rastergraphik gespeichert werden&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;quot;example&amp;quot;: &amp;quot;svg oder png&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
			&amp;quot;autovalue&amp;quot;: &amp;quot;svg&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;width&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: {&lt;br /&gt;
				&amp;quot;en&amp;quot;: &amp;quot;Width&amp;quot;,&lt;br /&gt;
				&amp;quot;de&amp;quot;: &amp;quot;Breite&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;quot;description&amp;quot;: {&lt;br /&gt;
				&amp;quot;en&amp;quot;: &amp;quot;Display width of the graphic in pixels&amp;quot;,&lt;br /&gt;
				&amp;quot;de&amp;quot;: &amp;quot;Anzeigebreite der Graphik in Pixeln&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
			&amp;quot;autovalue&amp;quot;: &amp;quot;600px&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;page_name&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: {&lt;br /&gt;
				&amp;quot;en&amp;quot;: &amp;quot;Page name&amp;quot;,&lt;br /&gt;
				&amp;quot;de&amp;quot;: &amp;quot;Seitename&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;quot;description&amp;quot;: {&lt;br /&gt;
				&amp;quot;en&amp;quot;: &amp;quot;is filled in automatically and should not be changed&amp;quot;,&lt;br /&gt;
				&amp;quot;de&amp;quot;: &amp;quot;wird automatisch ausgefüllt und sollte nicht verändert werden&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;wiki-page-name&amp;quot;,&lt;br /&gt;
			&amp;quot;autovalue&amp;quot;: &amp;quot;{{subst:FULLPAGENAME}}&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;full_width&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: {&lt;br /&gt;
				&amp;quot;en&amp;quot;: &amp;quot;Full width&amp;quot;,&lt;br /&gt;
				&amp;quot;de&amp;quot;: &amp;quot;Gesamte Seitenbreite&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;quot;description&amp;quot;: {&lt;br /&gt;
				&amp;quot;en&amp;quot;: &amp;quot;Used the full page width to display the diagram&amp;quot;,&lt;br /&gt;
				&amp;quot;de&amp;quot;: &amp;quot;Nutzt die gesamte Seitenbreite zur Darstellung des Diagramms&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;boolean&amp;quot;,&lt;br /&gt;
			&amp;quot;autovalue&amp;quot;: &amp;quot;0&amp;quot;,&lt;br /&gt;
			&amp;quot;suggested&amp;quot;: true&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uuid&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: {&lt;br /&gt;
				&amp;quot;en&amp;quot;: &amp;quot;Unique ID&amp;quot;,&lt;br /&gt;
				&amp;quot;de&amp;quot;: &amp;quot;Eindeutige ID&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;quot;description&amp;quot;: {&lt;br /&gt;
				&amp;quot;en&amp;quot;: &amp;quot;Automatically generated and should not be changed&amp;quot;,&lt;br /&gt;
				&amp;quot;de&amp;quot;: &amp;quot;Wird automatisch generiert und sollte nicht verändert werden&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
			&amp;quot;required&amp;quot;: false&lt;br /&gt;
		}&lt;br /&gt;
	},&lt;br /&gt;
	&amp;quot;description&amp;quot;: {&lt;br /&gt;
		&amp;quot;en&amp;quot;: &amp;quot;Adds a MS-Visio-like diagram editor&amp;quot;,&lt;br /&gt;
		&amp;quot;de&amp;quot;: &amp;quot;Fügt einen MS Visio ähnlichen Graphikeditor ein&amp;quot;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/templatedata&amp;gt;&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Maintenance script</name></author>
	</entry>
	<entry>
		<id>https://onto-wiki.eu/w/index.php?title=Template:Editor/Spreadsheet&amp;diff=3331</id>
		<title>Template:Editor/Spreadsheet</title>
		<link rel="alternate" type="text/html" href="https://onto-wiki.eu/w/index.php?title=Template:Editor/Spreadsheet&amp;diff=3331"/>
		<updated>2023-04-04T14:07:13Z</updated>

		<summary type="html">&lt;p&gt;Maintenance script: Update package: OSW Core&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;includeonly&amp;gt;{{Template:Helper/UI/VE/Visible&lt;br /&gt;
|icon=table&lt;br /&gt;
|content=Spreadsheet &#039;&#039;{{{file_name}}}&#039;&#039;&lt;br /&gt;
}}&lt;br /&gt;
{{Template:Helper/UI/VE/Hidden &lt;br /&gt;
|content=&amp;lt;div class=&amp;quot;SpreadsheetEditor&amp;quot; style=&amp;quot;width:{{{width|100%}}};height:{{{height|500px}}}; max-width:100%;&amp;quot; data-filename=&amp;quot;{{#if:{{{uuid|}}}|OSW{{#replace:{{{uuid}}}|-|}}|{{#replace:{{#replace: {{{page_name}}}|/|-}}|:|-}}-{{{file_name}}}}}.luckysheet.{{{format|json}}}&amp;quot; data-config=&#039;{&lt;br /&gt;
  &amp;quot;file_title&amp;quot;: &amp;quot;{{#if:{{{uuid|}}}|OSW{{#replace:{{{uuid}}}|-|}}|{{#replace:{{#replace: {{{page_name}}}|/|-}}|:|-}}-{{{file_name}}}}}.luckysheet.{{{format|json}}}&amp;quot;,&lt;br /&gt;
  &amp;quot;file_label&amp;quot;: &amp;quot;{{{file_name}}}&amp;quot;&lt;br /&gt;
}&#039;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
}}&amp;lt;/includeonly&amp;gt;&lt;br /&gt;
&amp;lt;noinclude&amp;gt;[[Category:OSL/Infrastructure/Template/User]]&lt;br /&gt;
&amp;lt;templatedata&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	&amp;quot;params&amp;quot;: {&lt;br /&gt;
		&amp;quot;file_name&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: {&lt;br /&gt;
				&amp;quot;en&amp;quot;: &amp;quot;Name&amp;quot;,&lt;br /&gt;
				&amp;quot;de&amp;quot;: &amp;quot;Name&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;quot;description&amp;quot;: {&lt;br /&gt;
				&amp;quot;en&amp;quot;: &amp;quot;Spreadsheet name&amp;quot;,&lt;br /&gt;
				&amp;quot;de&amp;quot;: &amp;quot;Name des Dokuments, muss eindeutig auf dieser Seite sein&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
			&amp;quot;required&amp;quot;: true,&lt;br /&gt;
			&amp;quot;autovalue&amp;quot;: &amp;quot;spreadsheet-01&amp;quot;,&lt;br /&gt;
			&amp;quot;suggested&amp;quot;: true&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;format&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: {&lt;br /&gt;
				&amp;quot;en&amp;quot;: &amp;quot;File format&amp;quot;,&lt;br /&gt;
				&amp;quot;de&amp;quot;: &amp;quot;Dateiformat&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;quot;description&amp;quot;: {&lt;br /&gt;
				&amp;quot;en&amp;quot;: &amp;quot;Storage format for the document (currently only json available)&amp;quot;,&lt;br /&gt;
				&amp;quot;de&amp;quot;: &amp;quot;Format in dem das Dokument gespeichert wird (aktuell nur json möglich)&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
			&amp;quot;required&amp;quot;: false,&lt;br /&gt;
			&amp;quot;autovalue&amp;quot;: &amp;quot;json&amp;quot;,&lt;br /&gt;
			&amp;quot;suggested&amp;quot;: false&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;width&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: {&lt;br /&gt;
				&amp;quot;en&amp;quot;: &amp;quot;Width &amp;quot;,&lt;br /&gt;
				&amp;quot;de&amp;quot;: &amp;quot;Breite&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;quot;description&amp;quot;: {&lt;br /&gt;
				&amp;quot;en&amp;quot;: &amp;quot;Display width of the document in pixels or percent&amp;quot;,&lt;br /&gt;
				&amp;quot;de&amp;quot;: &amp;quot;Anzeigebreite des Dokuments in Pixeln oder Prozent&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
			&amp;quot;autovalue&amp;quot;: &amp;quot;100%&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;height&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: {&lt;br /&gt;
				&amp;quot;en&amp;quot;: &amp;quot;Height&amp;quot;,&lt;br /&gt;
				&amp;quot;de&amp;quot;: &amp;quot;Höhe&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;quot;description&amp;quot;: {&lt;br /&gt;
				&amp;quot;en&amp;quot;: &amp;quot;Display height of the document in pixels&amp;quot;,&lt;br /&gt;
				&amp;quot;de&amp;quot;: &amp;quot;Anzeigehöhe des Dokuments in Pixeln&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
			&amp;quot;autovalue&amp;quot;: &amp;quot;500px&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;page_name&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: {&lt;br /&gt;
				&amp;quot;en&amp;quot;: &amp;quot;Page name&amp;quot;,&lt;br /&gt;
				&amp;quot;de&amp;quot;: &amp;quot;Seitename&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;quot;description&amp;quot;: {&lt;br /&gt;
				&amp;quot;en&amp;quot;: &amp;quot;is filled in automatically&amp;quot;,&lt;br /&gt;
				&amp;quot;de&amp;quot;: &amp;quot;wird automatisch ausgefüllt&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;wiki-page-name&amp;quot;,&lt;br /&gt;
			&amp;quot;autovalue&amp;quot;: &amp;quot;{{subst:FULLPAGENAME}}&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uuid&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: {&lt;br /&gt;
				&amp;quot;en&amp;quot;: &amp;quot;Unique ID&amp;quot;,&lt;br /&gt;
				&amp;quot;de&amp;quot;: &amp;quot;Eindeutige ID&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;quot;description&amp;quot;: {&lt;br /&gt;
				&amp;quot;en&amp;quot;: &amp;quot;Automatically generated and should not be changed&amp;quot;,&lt;br /&gt;
				&amp;quot;de&amp;quot;: &amp;quot;Wird automatisch generiert und sollte nicht verändert werden&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
			&amp;quot;required&amp;quot;: false&lt;br /&gt;
		}&lt;br /&gt;
	},&lt;br /&gt;
	&amp;quot;description&amp;quot;: {&lt;br /&gt;
		&amp;quot;en&amp;quot;: &amp;quot;Adds a SpreadsheetEditor&amp;quot;,&lt;br /&gt;
		&amp;quot;de&amp;quot;: &amp;quot;Erstellt ein MS-Excel-ähnlichen Editor&amp;quot;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/templatedata&amp;gt;&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Maintenance script</name></author>
	</entry>
	<entry>
		<id>https://onto-wiki.eu/w/index.php?title=Category:Property&amp;diff=3330</id>
		<title>Category:Property</title>
		<link rel="alternate" type="text/html" href="https://onto-wiki.eu/w/index.php?title=Category:Property&amp;diff=3330"/>
		<updated>2023-04-04T14:07:11Z</updated>

		<summary type="html">&lt;p&gt;Maintenance script: Update package: OSW Core&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Maintenance script</name></author>
	</entry>
	<entry>
		<id>https://onto-wiki.eu/w/index.php?title=Category:ObjectProperty&amp;diff=3329</id>
		<title>Category:ObjectProperty</title>
		<link rel="alternate" type="text/html" href="https://onto-wiki.eu/w/index.php?title=Category:ObjectProperty&amp;diff=3329"/>
		<updated>2023-04-04T14:07:04Z</updated>

		<summary type="html">&lt;p&gt;Maintenance script: Update package: OSW Core&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Maintenance script</name></author>
	</entry>
	<entry>
		<id>https://onto-wiki.eu/w/index.php?title=Category:OSW1b15ddcf042c4599bd9d431cbfdf3430&amp;diff=3328</id>
		<title>Category:OSW1b15ddcf042c4599bd9d431cbfdf3430</title>
		<link rel="alternate" type="text/html" href="https://onto-wiki.eu/w/index.php?title=Category:OSW1b15ddcf042c4599bd9d431cbfdf3430&amp;diff=3328"/>
		<updated>2023-04-04T14:07:03Z</updated>

		<summary type="html">&lt;p&gt;Maintenance script: Update package: OSW Core&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Maintenance script</name></author>
	</entry>
	<entry>
		<id>https://onto-wiki.eu/w/index.php?title=Category:OSW11a53cdfbdc24524bf8ac435cbf65d9d&amp;diff=3327</id>
		<title>Category:OSW11a53cdfbdc24524bf8ac435cbf65d9d</title>
		<link rel="alternate" type="text/html" href="https://onto-wiki.eu/w/index.php?title=Category:OSW11a53cdfbdc24524bf8ac435cbf65d9d&amp;diff=3327"/>
		<updated>2023-04-04T14:06:59Z</updated>

		<summary type="html">&lt;p&gt;Maintenance script: Update package: OSW Core&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Maintenance script</name></author>
	</entry>
	<entry>
		<id>https://onto-wiki.eu/w/index.php?title=Template:Editor/Wellplate&amp;diff=3326</id>
		<title>Template:Editor/Wellplate</title>
		<link rel="alternate" type="text/html" href="https://onto-wiki.eu/w/index.php?title=Template:Editor/Wellplate&amp;diff=3326"/>
		<updated>2023-04-04T14:06:53Z</updated>

		<summary type="html">&lt;p&gt;Maintenance script: Update package: OSW Core&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;includeonly&amp;gt;{{Template:Helper/UI/VE/Visible&lt;br /&gt;
|icon=die&lt;br /&gt;
|content=Wellplate &#039;&#039;{{{file_name}}}&#039;&#039;&lt;br /&gt;
}}&lt;br /&gt;
{{Template:Helper/UI/VE/Hidden &lt;br /&gt;
|content=&amp;lt;div class=&amp;quot;WellplateEditor&amp;quot; style=&amp;quot;display:hide;&amp;quot; data-config=&#039;{&lt;br /&gt;
  &amp;quot;file_title&amp;quot;: &amp;quot;{{#if:{{{uuid|}}}|OSW{{#replace:{{{uuid}}}|-|}}|{{#replace:{{#replace: {{{page_name}}}|/|-}}|:|-}}-{{{file_name}}}}}.wellplate.svg&amp;quot;,&lt;br /&gt;
  &amp;quot;file_label&amp;quot;: &amp;quot;{{{file_name}}}&amp;quot;&lt;br /&gt;
}&#039;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
}}&amp;lt;/includeonly&amp;gt;&lt;br /&gt;
&amp;lt;noinclude&amp;gt;[[Category:OSL/Infrastructure/Template/User]]&lt;br /&gt;
&amp;lt;templatedata&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	&amp;quot;params&amp;quot;: {&lt;br /&gt;
		&amp;quot;file_name&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: {&lt;br /&gt;
				&amp;quot;en&amp;quot;: &amp;quot;Name&amp;quot;,&lt;br /&gt;
				&amp;quot;de&amp;quot;: &amp;quot;Name&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;quot;description&amp;quot;: {&lt;br /&gt;
				&amp;quot;en&amp;quot;: &amp;quot;Wellplate name&amp;quot;,&lt;br /&gt;
				&amp;quot;de&amp;quot;: &amp;quot;Name der Wellplatte, muss eindeutig auf dieser Seite sein&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
			&amp;quot;required&amp;quot;: true,&lt;br /&gt;
			&amp;quot;autovalue&amp;quot;: &amp;quot;wellplate-01&amp;quot;,&lt;br /&gt;
			&amp;quot;suggested&amp;quot;: true&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;page_name&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: {&lt;br /&gt;
				&amp;quot;en&amp;quot;: &amp;quot;Page name&amp;quot;,&lt;br /&gt;
				&amp;quot;de&amp;quot;: &amp;quot;Seitename&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;quot;description&amp;quot;: {&lt;br /&gt;
				&amp;quot;en&amp;quot;: &amp;quot;is filled in automatically&amp;quot;,&lt;br /&gt;
				&amp;quot;de&amp;quot;: &amp;quot;wird automatisch ausgefüllt&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;wiki-page-name&amp;quot;,&lt;br /&gt;
			&amp;quot;autovalue&amp;quot;: &amp;quot;{{subst:FULLPAGENAME}}&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uuid&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: {&lt;br /&gt;
				&amp;quot;en&amp;quot;: &amp;quot;Unique ID&amp;quot;,&lt;br /&gt;
				&amp;quot;de&amp;quot;: &amp;quot;Eindeutige ID&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;quot;description&amp;quot;: {&lt;br /&gt;
				&amp;quot;en&amp;quot;: &amp;quot;Automatically generated and should not be changed&amp;quot;,&lt;br /&gt;
				&amp;quot;de&amp;quot;: &amp;quot;Wird automatisch generiert und sollte nicht verändert werden&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
			&amp;quot;required&amp;quot;: false&lt;br /&gt;
		}&lt;br /&gt;
	},&lt;br /&gt;
	&amp;quot;description&amp;quot;: {&lt;br /&gt;
		&amp;quot;en&amp;quot;: &amp;quot;Adds a wellplate editor&amp;quot;,&lt;br /&gt;
		&amp;quot;de&amp;quot;: &amp;quot;Fügt einen Wellplatten-Editor hinzu &amp;quot;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/templatedata&amp;gt;&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Maintenance script</name></author>
	</entry>
	<entry>
		<id>https://onto-wiki.eu/w/index.php?title=Template:Editor/Kekule&amp;diff=3325</id>
		<title>Template:Editor/Kekule</title>
		<link rel="alternate" type="text/html" href="https://onto-wiki.eu/w/index.php?title=Template:Editor/Kekule&amp;diff=3325"/>
		<updated>2023-04-04T14:06:50Z</updated>

		<summary type="html">&lt;p&gt;Maintenance script: Update package: OSW Core&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;includeonly&amp;gt;{{Template:Helper/UI/VE/Visible&lt;br /&gt;
|icon=labFlask&lt;br /&gt;
|content=ChemEditor &#039;&#039;{{{file_name}}}&#039;&#039;&lt;br /&gt;
}}&lt;br /&gt;
{{Template:Helper/UI/VE/Hidden &lt;br /&gt;
|content=&amp;lt;div class=&amp;quot;div_kekule_view_edit&amp;quot; id=&amp;quot;chemViewEdit_{{#if:{{{uuid|}}}|{{{uuid}}}|{{{file_name}}}}}&amp;quot; style=&amp;quot;width:{{{width|600px}}};height:{{{height|500px}}};border:1px solid black;&amp;quot; data-config=&#039;{&lt;br /&gt;
  &amp;quot;file_title&amp;quot;: &amp;quot;{{#if:{{{uuid|}}}|OSW{{#replace:{{{uuid}}}|-|}}|{{#replace:{{#replace: {{{page_name}}}|/|-}}|:|-}}-{{{file_name}}}}}.kekule.{{{format|json}}}&amp;quot;,&lt;br /&gt;
  &amp;quot;file_label&amp;quot;: &amp;quot;{{{file_name}}}&amp;quot;&lt;br /&gt;
}&#039;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
}}&amp;lt;/includeonly&amp;gt;&lt;br /&gt;
&amp;lt;noinclude&amp;gt;[[Category:OSL/Infrastructure/Template/User]]&lt;br /&gt;
&amp;lt;templatedata&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	&amp;quot;params&amp;quot;: {&lt;br /&gt;
		&amp;quot;file_name&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: {&lt;br /&gt;
				&amp;quot;en&amp;quot;: &amp;quot;Name&amp;quot;,&lt;br /&gt;
				&amp;quot;de&amp;quot;: &amp;quot;Name&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;quot;description&amp;quot;: {&lt;br /&gt;
				&amp;quot;en&amp;quot;: &amp;quot;ChemDoc name&amp;quot;,&lt;br /&gt;
				&amp;quot;de&amp;quot;: &amp;quot;Name des Dokuments, muss eindeutig auf dieser Seite sein&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
			&amp;quot;required&amp;quot;: true,&lt;br /&gt;
			&amp;quot;autovalue&amp;quot;: &amp;quot;chemdoc-01&amp;quot;,&lt;br /&gt;
			&amp;quot;suggested&amp;quot;: true&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;format&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: {&lt;br /&gt;
				&amp;quot;en&amp;quot;: &amp;quot;File format&amp;quot;,&lt;br /&gt;
				&amp;quot;de&amp;quot;: &amp;quot;Dateiformat&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;quot;description&amp;quot;: {&lt;br /&gt;
				&amp;quot;en&amp;quot;: &amp;quot;Storage format for the document (currently only json available)&amp;quot;,&lt;br /&gt;
				&amp;quot;de&amp;quot;: &amp;quot;Format in dem das Dokument gespeichert wird (aktuell nur json möglich)&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
			&amp;quot;required&amp;quot;: false,&lt;br /&gt;
			&amp;quot;autovalue&amp;quot;: &amp;quot;json&amp;quot;,&lt;br /&gt;
			&amp;quot;suggested&amp;quot;: false&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;width&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: {&lt;br /&gt;
				&amp;quot;en&amp;quot;: &amp;quot;Width &amp;quot;,&lt;br /&gt;
				&amp;quot;de&amp;quot;: &amp;quot;Breite&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;quot;description&amp;quot;: {&lt;br /&gt;
				&amp;quot;en&amp;quot;: &amp;quot;Display width of the document in pixels or percent&amp;quot;,&lt;br /&gt;
				&amp;quot;de&amp;quot;: &amp;quot;Anzeigebreite des Dokuments in Pixeln oder Prozent&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
			&amp;quot;autovalue&amp;quot;: &amp;quot;600px&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;height&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: {&lt;br /&gt;
				&amp;quot;en&amp;quot;: &amp;quot;Height&amp;quot;,&lt;br /&gt;
				&amp;quot;de&amp;quot;: &amp;quot;Höhe&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;quot;description&amp;quot;: {&lt;br /&gt;
				&amp;quot;en&amp;quot;: &amp;quot;Display height of the document in pixels&amp;quot;,&lt;br /&gt;
				&amp;quot;de&amp;quot;: &amp;quot;Anzeigehöhe des Dokuments in Pixeln&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
			&amp;quot;autovalue&amp;quot;: &amp;quot;500px&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;page_name&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: {&lt;br /&gt;
				&amp;quot;en&amp;quot;: &amp;quot;Page name&amp;quot;,&lt;br /&gt;
				&amp;quot;de&amp;quot;: &amp;quot;Seitename&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;quot;description&amp;quot;: {&lt;br /&gt;
				&amp;quot;en&amp;quot;: &amp;quot;is filled in automatically&amp;quot;,&lt;br /&gt;
				&amp;quot;de&amp;quot;: &amp;quot;wird automatisch ausgefüllt&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;wiki-page-name&amp;quot;,&lt;br /&gt;
			&amp;quot;autovalue&amp;quot;: &amp;quot;{{subst:FULLPAGENAME}}&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;uuid&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: {&lt;br /&gt;
				&amp;quot;en&amp;quot;: &amp;quot;Unique ID&amp;quot;,&lt;br /&gt;
				&amp;quot;de&amp;quot;: &amp;quot;Eindeutige ID&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;quot;description&amp;quot;: {&lt;br /&gt;
				&amp;quot;en&amp;quot;: &amp;quot;Automatically generated and should not be changed&amp;quot;,&lt;br /&gt;
				&amp;quot;de&amp;quot;: &amp;quot;Wird automatisch generiert und sollte nicht verändert werden&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
			&amp;quot;required&amp;quot;: false&lt;br /&gt;
		}&lt;br /&gt;
	},&lt;br /&gt;
	&amp;quot;description&amp;quot;: {&lt;br /&gt;
		&amp;quot;en&amp;quot;: &amp;quot;Adds a ChemEditor&amp;quot;,&lt;br /&gt;
		&amp;quot;de&amp;quot;: &amp;quot;Erstellt ein Chemie-Editor (Kekule Composer Widget) zum bearbeiten der angegebenen Unterseite&amp;quot;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/templatedata&amp;gt;&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Maintenance script</name></author>
	</entry>
	<entry>
		<id>https://onto-wiki.eu/w/index.php?title=Category:QuantityProperty&amp;diff=3324</id>
		<title>Category:QuantityProperty</title>
		<link rel="alternate" type="text/html" href="https://onto-wiki.eu/w/index.php?title=Category:QuantityProperty&amp;diff=3324"/>
		<updated>2023-04-04T14:06:43Z</updated>

		<summary type="html">&lt;p&gt;Maintenance script: Update package: OSW Core&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Maintenance script</name></author>
	</entry>
	<entry>
		<id>https://onto-wiki.eu/w/index.php?title=Template:Editor/Kekule/Default&amp;diff=47</id>
		<title>Template:Editor/Kekule/Default</title>
		<link rel="alternate" type="text/html" href="https://onto-wiki.eu/w/index.php?title=Template:Editor/Kekule/Default&amp;diff=47"/>
		<updated>2023-03-25T05:55:44Z</updated>

		<summary type="html">&lt;p&gt;Maintenance script: Install package: OSW Core&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{&lt;br /&gt;
    &amp;quot;coordPos2D&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;coordPos3D&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;defAutoScaleRefLength&amp;quot;: 0.6200123411069938,&lt;br /&gt;
    &amp;quot;root&amp;quot;: {&lt;br /&gt;
        &amp;quot;id&amp;quot;: &amp;quot;o1&amp;quot;,&lt;br /&gt;
        &amp;quot;coordPos2D&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;coordPos3D&amp;quot;: 0,&lt;br /&gt;
        &amp;quot;children&amp;quot;: {&lt;br /&gt;
            &amp;quot;id&amp;quot;: &amp;quot;o2&amp;quot;,&lt;br /&gt;
            &amp;quot;coordPos2D&amp;quot;: 0,&lt;br /&gt;
            &amp;quot;coordPos3D&amp;quot;: 0,&lt;br /&gt;
            &amp;quot;items&amp;quot;: [&lt;br /&gt;
                {&lt;br /&gt;
                    &amp;quot;__type__&amp;quot;: &amp;quot;Kekule.TextBlock&amp;quot;,&lt;br /&gt;
                    &amp;quot;id&amp;quot;: &amp;quot;t1&amp;quot;,&lt;br /&gt;
                    &amp;quot;coordPos2D&amp;quot;: 21,&lt;br /&gt;
                    &amp;quot;coordPos3D&amp;quot;: 0,&lt;br /&gt;
                    &amp;quot;needRecalcSize&amp;quot;: true,&lt;br /&gt;
                    &amp;quot;coord2D&amp;quot;: {&lt;br /&gt;
                        &amp;quot;x&amp;quot;: 6.712666946385053,&lt;br /&gt;
                        &amp;quot;y&amp;quot;: 36.78739890568163,&lt;br /&gt;
                        &amp;quot;__type__&amp;quot;: &amp;quot;object&amp;quot;&lt;br /&gt;
                    },&lt;br /&gt;
                    &amp;quot;size2D&amp;quot;: {&lt;br /&gt;
                        &amp;quot;x&amp;quot;: 8.075775784270949,&lt;br /&gt;
                        &amp;quot;y&amp;quot;: 0.3472069110199172,&lt;br /&gt;
                        &amp;quot;__type__&amp;quot;: &amp;quot;object&amp;quot;&lt;br /&gt;
                    },&lt;br /&gt;
                    &amp;quot;text&amp;quot;: &amp;quot;\u00d6ffne den Editor um dieses Dokument zu bearbeiten&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    &amp;quot;__type__&amp;quot;: &amp;quot;Kekule.TextBlock&amp;quot;,&lt;br /&gt;
                    &amp;quot;id&amp;quot;: &amp;quot;t2&amp;quot;,&lt;br /&gt;
                    &amp;quot;coordPos2D&amp;quot;: 21,&lt;br /&gt;
                    &amp;quot;coordPos3D&amp;quot;: 0,&lt;br /&gt;
                    &amp;quot;needRecalcSize&amp;quot;: true,&lt;br /&gt;
                    &amp;quot;coord2D&amp;quot;: {&lt;br /&gt;
                        &amp;quot;x&amp;quot;: 6.712666946385053,&lt;br /&gt;
                        &amp;quot;y&amp;quot;: 36.258321707936986,&lt;br /&gt;
                        &amp;quot;__type__&amp;quot;: &amp;quot;object&amp;quot;&lt;br /&gt;
                    },&lt;br /&gt;
                    &amp;quot;size2D&amp;quot;: {&lt;br /&gt;
                        &amp;quot;x&amp;quot;: 5.786781850331941,&lt;br /&gt;
                        &amp;quot;y&amp;quot;: 0.3472069110199172,&lt;br /&gt;
                        &amp;quot;__type__&amp;quot;: &amp;quot;object&amp;quot;&lt;br /&gt;
                    },&lt;br /&gt;
                    &amp;quot;text&amp;quot;: &amp;quot;Open the Editor to edit this Document&amp;quot;&lt;br /&gt;
                }&lt;br /&gt;
            ],&lt;br /&gt;
            &amp;quot;__type__&amp;quot;: &amp;quot;Kekule.ChemObjList&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;__type__&amp;quot;: &amp;quot;Kekule.ChemSpaceElement&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;enableAutoId&amp;quot;: true,&lt;br /&gt;
    &amp;quot;screenSize&amp;quot;: {&lt;br /&gt;
        &amp;quot;x&amp;quot;: 900,&lt;br /&gt;
        &amp;quot;y&amp;quot;: 1500,&lt;br /&gt;
        &amp;quot;__type__&amp;quot;: &amp;quot;object&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;size2D&amp;quot;: {&lt;br /&gt;
        &amp;quot;x&amp;quot;: 22.320444279851777,&lt;br /&gt;
        &amp;quot;y&amp;quot;: 37.200740466419624,&lt;br /&gt;
        &amp;quot;__type__&amp;quot;: &amp;quot;object&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;__type__&amp;quot;: &amp;quot;Kekule.ChemDocument&amp;quot;&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Maintenance script</name></author>
	</entry>
	<entry>
		<id>https://onto-wiki.eu/w/index.php?title=Template:Editor/Graph&amp;diff=46</id>
		<title>Template:Editor/Graph</title>
		<link rel="alternate" type="text/html" href="https://onto-wiki.eu/w/index.php?title=Template:Editor/Graph&amp;diff=46"/>
		<updated>2023-03-25T05:55:44Z</updated>

		<summary type="html">&lt;p&gt;Maintenance script: Install package: OSW Core&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;includeonly&amp;gt;{{Template:Helper/UI/VE/Visible&lt;br /&gt;
|icon=articleDisambiguation&lt;br /&gt;
|content=Graph &#039;&#039;{{{file_name}}}&#039;&#039;&lt;br /&gt;
}}&lt;br /&gt;
{{Template:Helper/UI/VE/Hidden &lt;br /&gt;
|content=&amp;lt;div id=&amp;quot;{{#if: {{{page_name|}}}|{{#replace:{{#replace: {{{page_name}}}|/|-}}|:|-}}-|}}{{{file_name}}}&amp;quot; style=&amp;quot;width: {{#ifeq: {{{full_width|0}}}|1|100%| {{{width|600px}}} }};&amp;quot; class=&amp;quot;InteractiveSemanticGraph&amp;quot; data-config=&#039;{ &lt;br /&gt;
  &amp;quot;name&amp;quot;:&amp;quot;{{#if: {{{page_name|}}}|{{#replace:{{#replace: {{{page_name}}}|/|-}}|:|-}}-|}}{{{file_name}}}&amp;quot;,&lt;br /&gt;
  &amp;quot;root&amp;quot;:&amp;quot;{{{root|}}}&amp;quot;,&lt;br /&gt;
  &amp;quot;properties&amp;quot;:[{{#arraymap:{{{properties|}}}|;|x|&amp;quot;x&amp;quot;|,}}],&lt;br /&gt;
  &amp;quot;depth&amp;quot;:{{{depth|2}}},&lt;br /&gt;
  &amp;quot;edit&amp;quot;:{{#ifeq: {{{edit|0}}}|1|true|false}}, &lt;br /&gt;
  &amp;quot;permalink&amp;quot;:{{#ifeq: {{{permalink|0}}}|1|true|false}}, &lt;br /&gt;
  &amp;quot;edge_labels&amp;quot;: {{#ifeq: {{{edge_labels|1}}}|1|true|false}},&lt;br /&gt;
  &amp;quot;hint&amp;quot;:{{#ifeq: {{{hint|0}}}|1|true|false}}&lt;br /&gt;
}&#039;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
}}&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;[[Category:OSL/Infrastructure/Template/User]]&lt;br /&gt;
&amp;lt;templatedata&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	&amp;quot;params&amp;quot;: {&lt;br /&gt;
		&amp;quot;file_name&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: {&lt;br /&gt;
				&amp;quot;en&amp;quot;: &amp;quot;Graph name&amp;quot;,&lt;br /&gt;
				&amp;quot;de&amp;quot;: &amp;quot;Name des Graph-Name&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;quot;description&amp;quot;: {&lt;br /&gt;
				&amp;quot;en&amp;quot;: &amp;quot;Must be unique on this page&amp;quot;,&lt;br /&gt;
				&amp;quot;de&amp;quot;: &amp;quot;Muss eindeutig auf dieser Seite sein&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;quot;required&amp;quot;: true,&lt;br /&gt;
			&amp;quot;autovalue&amp;quot;: &amp;quot;graph-01&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;root&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: {&lt;br /&gt;
				&amp;quot;en&amp;quot;: &amp;quot;Root page name&amp;quot;,&lt;br /&gt;
				&amp;quot;de&amp;quot;: &amp;quot;Name der Wurzelseite&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;quot;description&amp;quot;: {&lt;br /&gt;
				&amp;quot;en&amp;quot;: &amp;quot;Dafault value is the current page&amp;quot;,&lt;br /&gt;
				&amp;quot;de&amp;quot;: &amp;quot;Standardwert ist die aktuelle Seite&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;wiki-page-name&amp;quot;,&lt;br /&gt;
			&amp;quot;required&amp;quot;: true,&lt;br /&gt;
			&amp;quot;autovalue&amp;quot;: &amp;quot;{{subst:FULLPAGENAME}}&amp;quot;,&lt;br /&gt;
			&amp;quot;suggested&amp;quot;: true&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;properties&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: {&lt;br /&gt;
				&amp;quot;en&amp;quot;: &amp;quot;Properties&amp;quot;,&lt;br /&gt;
				&amp;quot;de&amp;quot;: &amp;quot;Attribute&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;quot;description&amp;quot;: {&lt;br /&gt;
				&amp;quot;en&amp;quot;: &amp;quot;Semicolon separated property list used to expand the root node&amp;quot;,&lt;br /&gt;
				&amp;quot;de&amp;quot;: &amp;quot;Per Semicolon getrennte Attributliste, mit der der Wurzelknoten erweitert wird&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;quot;required&amp;quot;: true,&lt;br /&gt;
			&amp;quot;autovalue&amp;quot;: &amp;quot;IsA; HasPart&amp;quot;,&lt;br /&gt;
			&amp;quot;suggested&amp;quot;: true&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;depth&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: {&lt;br /&gt;
				&amp;quot;en&amp;quot;: &amp;quot;Expansion depth&amp;quot;,&lt;br /&gt;
				&amp;quot;de&amp;quot;: &amp;quot;Expandierungstiefe&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;quot;description&amp;quot;: {&lt;br /&gt;
				&amp;quot;en&amp;quot;: &amp;quot;Defines how far the graph is unfolded automatically with the given properties&amp;quot;,&lt;br /&gt;
				&amp;quot;de&amp;quot;: &amp;quot;Gibt an, wie weitd er Graph mit den gegebenen Attributen automatische aufgeklappt wird&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;quot;required&amp;quot;: false,&lt;br /&gt;
			&amp;quot;autovalue&amp;quot;: &amp;quot;2&amp;quot;,&lt;br /&gt;
			&amp;quot;suggested&amp;quot;: true&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;width&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: {&lt;br /&gt;
				&amp;quot;en&amp;quot;: &amp;quot;Width&amp;quot;,&lt;br /&gt;
				&amp;quot;de&amp;quot;: &amp;quot;Breite&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;quot;description&amp;quot;: {&lt;br /&gt;
				&amp;quot;en&amp;quot;: &amp;quot;Width of the graph in pixels&amp;quot;,&lt;br /&gt;
				&amp;quot;de&amp;quot;: &amp;quot;Breite des Graphen in Pixeln&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
			&amp;quot;autovalue&amp;quot;: &amp;quot;600px&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;full_width&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: {&lt;br /&gt;
				&amp;quot;en&amp;quot;: &amp;quot;Full width&amp;quot;,&lt;br /&gt;
				&amp;quot;de&amp;quot;: &amp;quot;Gesamte Seitenbreite&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;quot;description&amp;quot;: {&lt;br /&gt;
				&amp;quot;en&amp;quot;: &amp;quot;Used the full page width to display the graph&amp;quot;,&lt;br /&gt;
				&amp;quot;de&amp;quot;: &amp;quot;Nutzt die gesamte Seitenbreite zur Darstellung des Graphen&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;boolean&amp;quot;,&lt;br /&gt;
			&amp;quot;autovalue&amp;quot;: &amp;quot;0&amp;quot;,&lt;br /&gt;
			&amp;quot;suggested&amp;quot;: true&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;edit&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: {&lt;br /&gt;
				&amp;quot;en&amp;quot;: &amp;quot;Edit modus&amp;quot;,&lt;br /&gt;
				&amp;quot;de&amp;quot;: &amp;quot;Bearbeitungsmodus&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;quot;description&amp;quot;: {&lt;br /&gt;
				&amp;quot;en&amp;quot;: &amp;quot;Allows editing the graph&amp;quot;,&lt;br /&gt;
				&amp;quot;de&amp;quot;: &amp;quot;Erlaubt die Bearbeitung des Graphs&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;boolean&amp;quot;,&lt;br /&gt;
			&amp;quot;autovalue&amp;quot;: &amp;quot;0&amp;quot;,&lt;br /&gt;
			&amp;quot;suggested&amp;quot;: true&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;edge_labels&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: {&lt;br /&gt;
				&amp;quot;en&amp;quot;: &amp;quot;Edge labels&amp;quot;,&lt;br /&gt;
				&amp;quot;de&amp;quot;: &amp;quot;Kantenbeschriftungen&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;quot;description&amp;quot;: {&lt;br /&gt;
				&amp;quot;en&amp;quot;: &amp;quot;Displays edge labels&amp;quot;,&lt;br /&gt;
				&amp;quot;de&amp;quot;: &amp;quot;Zeigt die Namen der Verbindungslinien an&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;boolean&amp;quot;,&lt;br /&gt;
			&amp;quot;autovalue&amp;quot;: &amp;quot;1&amp;quot;,&lt;br /&gt;
			&amp;quot;suggested&amp;quot;: false&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;permalink&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: {&lt;br /&gt;
				&amp;quot;en&amp;quot;: &amp;quot;Permalink&amp;quot;,&lt;br /&gt;
				&amp;quot;de&amp;quot;: &amp;quot;Permalink&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;quot;description&amp;quot;: {&lt;br /&gt;
				&amp;quot;en&amp;quot;: &amp;quot;Creates a permalink for the state of the graph&amp;quot;,&lt;br /&gt;
				&amp;quot;de&amp;quot;: &amp;quot;Erstellt einen Permalink für den Zustand des Graphs&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;boolean&amp;quot;,&lt;br /&gt;
			&amp;quot;autovalue&amp;quot;: &amp;quot;0&amp;quot;,&lt;br /&gt;
			&amp;quot;suggested&amp;quot;: false&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;hint&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: {&lt;br /&gt;
				&amp;quot;en&amp;quot;: &amp;quot;Show hints&amp;quot;,&lt;br /&gt;
				&amp;quot;de&amp;quot;: &amp;quot;Hinweise zeigen&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;quot;description&amp;quot;: {&lt;br /&gt;
				&amp;quot;en&amp;quot;: &amp;quot;Shows additional information beside the graph&amp;quot;,&lt;br /&gt;
				&amp;quot;de&amp;quot;: &amp;quot;Zeigt zusätzliche Informationen neben dem Graphen an&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;boolean&amp;quot;,&lt;br /&gt;
			&amp;quot;autovalue&amp;quot;: &amp;quot;0&amp;quot;,&lt;br /&gt;
			&amp;quot;suggested&amp;quot;: false&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;page_name&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: {&lt;br /&gt;
				&amp;quot;en&amp;quot;: &amp;quot;Page name&amp;quot;,&lt;br /&gt;
				&amp;quot;de&amp;quot;: &amp;quot;Seitename&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;quot;description&amp;quot;: {&lt;br /&gt;
				&amp;quot;en&amp;quot;: &amp;quot;is filled in automatically&amp;quot;,&lt;br /&gt;
				&amp;quot;de&amp;quot;: &amp;quot;wird automatisch ausgefüllt&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;wiki-page-name&amp;quot;,&lt;br /&gt;
			&amp;quot;autovalue&amp;quot;: &amp;quot;{{subst:FULLPAGENAME}}&amp;quot;&lt;br /&gt;
		}&lt;br /&gt;
	},&lt;br /&gt;
	&amp;quot;description&amp;quot;: {&lt;br /&gt;
		&amp;quot;en&amp;quot;: &amp;quot;Adds a semantic graph viewer and editor&amp;quot;,&lt;br /&gt;
		&amp;quot;de&amp;quot;: &amp;quot;Fügt einen semantischen Graphen ein&amp;quot;&lt;br /&gt;
	},&lt;br /&gt;
	&amp;quot;format&amp;quot;: &amp;quot;block&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/templatedata&amp;gt;&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Maintenance script</name></author>
	</entry>
	<entry>
		<id>https://onto-wiki.eu/w/index.php?title=Module:Lustache/Scanner&amp;diff=45</id>
		<title>Module:Lustache/Scanner</title>
		<link rel="alternate" type="text/html" href="https://onto-wiki.eu/w/index.php?title=Module:Lustache/Scanner&amp;diff=45"/>
		<updated>2023-03-25T05:55:43Z</updated>

		<summary type="html">&lt;p&gt;Maintenance script: Install package: OSW Core&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local string_find, string_match, string_sub =&lt;br /&gt;
      string.find, string.match, string.sub&lt;br /&gt;
&lt;br /&gt;
local scanner = {}&lt;br /&gt;
&lt;br /&gt;
-- Returns `true` if the tail is empty (end of string).&lt;br /&gt;
function scanner:eos()&lt;br /&gt;
  return self.tail == &amp;quot;&amp;quot;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Tries to match the given regular expression at the current position.&lt;br /&gt;
-- Returns the matched text if it can match, `null` otherwise.&lt;br /&gt;
function scanner:scan(pattern)&lt;br /&gt;
  local match = string_match(self.tail, pattern)&lt;br /&gt;
&lt;br /&gt;
  if match and string_find(self.tail, pattern) == 1 then&lt;br /&gt;
    self.tail = string_sub(self.tail, #match + 1)&lt;br /&gt;
    self.pos = self.pos + #match&lt;br /&gt;
&lt;br /&gt;
    return match&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Skips all text until the given regular expression can be matched. Returns&lt;br /&gt;
-- the skipped string, which is the entire tail of this scanner if no match&lt;br /&gt;
-- can be made.&lt;br /&gt;
function scanner:scan_until(pattern)&lt;br /&gt;
&lt;br /&gt;
  local match&lt;br /&gt;
  local pos = string_find(self.tail, pattern)&lt;br /&gt;
&lt;br /&gt;
  if pos == nil then&lt;br /&gt;
    match = self.tail&lt;br /&gt;
    self.pos = self.pos + #self.tail&lt;br /&gt;
    self.tail = &amp;quot;&amp;quot;&lt;br /&gt;
  elseif pos == 1 then&lt;br /&gt;
    match = nil&lt;br /&gt;
  else&lt;br /&gt;
    match = string_sub(self.tail, 1, pos - 1)&lt;br /&gt;
    self.tail = string_sub(self.tail, pos)&lt;br /&gt;
    self.pos = self.pos + #match&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  return match&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function scanner:new(str)&lt;br /&gt;
  local out = {&lt;br /&gt;
    str  = str,&lt;br /&gt;
    tail = str,&lt;br /&gt;
    pos  = 1&lt;br /&gt;
  }&lt;br /&gt;
  return setmetatable(out, { __index = self } )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return scanner&lt;/div&gt;</summary>
		<author><name>Maintenance script</name></author>
	</entry>
	<entry>
		<id>https://onto-wiki.eu/w/index.php?title=Module:Entity&amp;diff=44</id>
		<title>Module:Entity</title>
		<link rel="alternate" type="text/html" href="https://onto-wiki.eu/w/index.php?title=Module:Entity&amp;diff=44"/>
		<updated>2023-03-25T05:55:42Z</updated>

		<summary type="html">&lt;p&gt;Maintenance script: Install package: OSW Core&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local p = {} --p stands for package&lt;br /&gt;
local mwjson = require(&#039;Module:MwJson&#039;)&lt;br /&gt;
&lt;br /&gt;
function p.process(frame, mode, title)&lt;br /&gt;
	local msg = &amp;quot;Debug Output: &amp;lt;br&amp;gt;&amp;quot; --debug msg&lt;br /&gt;
&lt;br /&gt;
	local res = &amp;quot;&amp;quot;&lt;br /&gt;
	if title == nil then title = mw.title.getCurrentTitle().fullText end&lt;br /&gt;
	local namespace = mwjson.splitString(title, &#039;:&#039;)[1]&lt;br /&gt;
	&lt;br /&gt;
	local jsondata_res = mwjson.loadJson({title=title, slot=mwjson.slots.jsondata})&lt;br /&gt;
	local jsondata = jsondata_res.json&lt;br /&gt;
	local debug = mwjson.defaultArg(jsondata[mwjson.keys.debug], false)&lt;br /&gt;
	msg = msg .. jsondata_res.debug_msg&lt;br /&gt;
	&lt;br /&gt;
	local process_res = nil&lt;br /&gt;
	if (namespace == &amp;quot;Category&amp;quot;) then&lt;br /&gt;
		if (mode == &amp;quot;header&amp;quot;) then process_res = mwjson.processJsondata({frame=frame, jsondata=jsondata, mode=mwjson.mode.header, categories={&amp;quot;Category:Category&amp;quot;}, recursive=true, debug=debug}) end&lt;br /&gt;
		if (mode == &amp;quot;footer&amp;quot;) then process_res = mwjson.processJsondata({frame=frame, jsondata=jsondata, mode=mwjson.mode.footer, categories={&amp;quot;Category:Category&amp;quot;}, recursive=true, debug=debug}) end&lt;br /&gt;
		mw.smw.set( {[&amp;quot;IsA&amp;quot;]=&amp;quot;Category:Category&amp;quot;}) --Todo: use type / HasType ?&lt;br /&gt;
	else&lt;br /&gt;
		if (mode == &amp;quot;header&amp;quot;) then process_res = mwjson.processJsondata({frame=frame, jsondata=jsondata, mode=mwjson.mode.header, debug=debug}) end&lt;br /&gt;
		if (mode == &amp;quot;footer&amp;quot;) then process_res = mwjson.processJsondata({frame=frame, jsondata=jsondata, mode=mwjson.mode.footer, debug=debug}) end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	res = res .. process_res.wikitext&lt;br /&gt;
	msg = msg .. process_res.debug_msg&lt;br /&gt;
&lt;br /&gt;
	if (debug) then res = msg .. res  end&lt;br /&gt;
	--if (debug) then mw.log(msg) end&lt;br /&gt;
	--mw.logObject(res)&lt;br /&gt;
	return res&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.header(frame, title)&lt;br /&gt;
	return p.process(frame, &amp;quot;header&amp;quot;, title)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.footer(frame, title)&lt;br /&gt;
	return p.process(frame, &amp;quot;footer&amp;quot;, title)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--test: mw.logObject(p.query(mw.getCurrentFrame(), &#039;{&amp;quot;category&amp;quot;:&amp;quot;Category:Hardware&amp;quot;,&amp;quot;manufacturer&amp;quot;:&amp;quot;TestM&amp;quot;}&#039;))&lt;br /&gt;
function p.query(frame, jsondata_str)&lt;br /&gt;
	if (jsondata_str == nil) then jsondata_str = frame.args[&#039;jsondata&#039;] end&lt;br /&gt;
	--local res = mwjson.processJsondata({frame=frame, jsondata=mw.text.jsonDecode(jsondata_str), mode=mwjson.mode.query}).wikitext&lt;br /&gt;
	return jsondata_str --.. &amp;quot;&amp;lt;br&amp;gt;&amp;quot; .. res&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;br /&gt;
&lt;br /&gt;
--DEBUG (direct invoke)&lt;br /&gt;
--[[&lt;br /&gt;
frame = mw.getCurrentFrame() -- Get a frame object&lt;br /&gt;
title=&amp;quot;Item:OSL7d7193567ea14e4e89b74de88983b718&amp;quot;&lt;br /&gt;
newFrame = frame:newChild{ title=title, args = {}}&lt;br /&gt;
mw.log(p.header( newFrame, title ) ) &lt;br /&gt;
--]]&lt;/div&gt;</summary>
		<author><name>Maintenance script</name></author>
	</entry>
	<entry>
		<id>https://onto-wiki.eu/w/index.php?title=Template:Decoration/Annotation&amp;diff=43</id>
		<title>Template:Decoration/Annotation</title>
		<link rel="alternate" type="text/html" href="https://onto-wiki.eu/w/index.php?title=Template:Decoration/Annotation&amp;diff=43"/>
		<updated>2023-03-25T05:55:38Z</updated>

		<summary type="html">&lt;p&gt;Maintenance script: Install package: OSW Core&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;includeonly&amp;gt;{{#info: {{{text|}}} |{{{type| {{#ifeq: {{{error|}}}|1|error| {{#ifeq: {{{warning|}}}|1|warning| {{#ifeq: {{{question|}}}|1|note| {{#ifeq: {{{info|}}}|1|info|info&amp;lt;!-- default value --&amp;gt;}} }} }} }} }}} |max-width= |theme= }}&amp;lt;/includeonly&amp;gt;&lt;br /&gt;
&amp;lt;noinclude&amp;gt;[[Category:OSL/Infrastructure/Template/User]]&lt;br /&gt;
&amp;lt;templatedata&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	&amp;quot;params&amp;quot;: {&lt;br /&gt;
		&amp;quot;text&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: {&lt;br /&gt;
				&amp;quot;de&amp;quot;: &amp;quot;Text der Anmerkung&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
			&amp;quot;required&amp;quot;: true,&lt;br /&gt;
			&amp;quot;suggested&amp;quot;: true&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;error&amp;quot;: {&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;boolean&amp;quot;,&lt;br /&gt;
			&amp;quot;autovalue&amp;quot;: &amp;quot;0&amp;quot;,&lt;br /&gt;
			&amp;quot;suggested&amp;quot;: true,&lt;br /&gt;
			&amp;quot;label&amp;quot;: {&lt;br /&gt;
				&amp;quot;de&amp;quot;: &amp;quot;Fehler&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;quot;description&amp;quot;: {&lt;br /&gt;
				&amp;quot;de&amp;quot;: &amp;quot;Wird als rotes Symbol dargestellt&amp;quot;&lt;br /&gt;
			}&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;warning&amp;quot;: {&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;boolean&amp;quot;,&lt;br /&gt;
			&amp;quot;suggested&amp;quot;: true,&lt;br /&gt;
			&amp;quot;label&amp;quot;: {&lt;br /&gt;
				&amp;quot;de&amp;quot;: &amp;quot;Warnung&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;quot;description&amp;quot;: {&lt;br /&gt;
				&amp;quot;de&amp;quot;: &amp;quot;Wird als orangenes Ausrufezeichen dargestellt&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;quot;autovalue&amp;quot;: &amp;quot;0&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;question&amp;quot;: {&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;boolean&amp;quot;,&lt;br /&gt;
			&amp;quot;suggested&amp;quot;: true,&lt;br /&gt;
			&amp;quot;label&amp;quot;: {&lt;br /&gt;
				&amp;quot;de&amp;quot;: &amp;quot;Frage&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;quot;description&amp;quot;: {&lt;br /&gt;
				&amp;quot;de&amp;quot;: &amp;quot;Wird als blaues Fragezeichen dargestellt&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;quot;autovalue&amp;quot;: &amp;quot;0&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;info&amp;quot;: {&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;boolean&amp;quot;,&lt;br /&gt;
			&amp;quot;autovalue&amp;quot;: &amp;quot;1&amp;quot;,&lt;br /&gt;
			&amp;quot;suggested&amp;quot;: true,&lt;br /&gt;
			&amp;quot;label&amp;quot;: {&lt;br /&gt;
				&amp;quot;de&amp;quot;: &amp;quot;Information&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;quot;description&amp;quot;: {&lt;br /&gt;
				&amp;quot;de&amp;quot;: &amp;quot;Wird als blaues \&amp;quot;i\&amp;quot; dargestellt&amp;quot;&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
	},&lt;br /&gt;
	&amp;quot;description&amp;quot;: {&lt;br /&gt;
		&amp;quot;de&amp;quot;: &amp;quot;Fügt eine Anmerkung in den Text ein&amp;quot;,&lt;br /&gt;
		&amp;quot;en&amp;quot;: &amp;quot;Adds a text annotation&amp;quot;&lt;br /&gt;
	},&lt;br /&gt;
	&amp;quot;format&amp;quot;: &amp;quot;inline&amp;quot;,&lt;br /&gt;
	&amp;quot;paramOrder&amp;quot;: [&lt;br /&gt;
		&amp;quot;text&amp;quot;,&lt;br /&gt;
		&amp;quot;info&amp;quot;,&lt;br /&gt;
		&amp;quot;question&amp;quot;,&lt;br /&gt;
		&amp;quot;warning&amp;quot;,&lt;br /&gt;
		&amp;quot;error&amp;quot;&lt;br /&gt;
	]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/templatedata&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Test ==&lt;br /&gt;
*{{Template:Decoration/Annotation|text=Default Info}} &lt;br /&gt;
*{{Template:Decoration/Annotation|text=Error|error=1}}&lt;br /&gt;
*{{Template:Decoration/Annotation|text=Warning|warning=1}}&lt;br /&gt;
*{{Template:Decoration/Annotation|text=Question|question=1}}&lt;br /&gt;
*{{Template:Decoration/Annotation|text=Info|info=1}}&lt;br /&gt;
*{{Template:Decoration/Annotation|text=Explicit Warning|type=warning}}&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Maintenance script</name></author>
	</entry>
	<entry>
		<id>https://onto-wiki.eu/w/index.php?title=Template:Helper/UI/Tiles/Grid&amp;diff=42</id>
		<title>Template:Helper/UI/Tiles/Grid</title>
		<link rel="alternate" type="text/html" href="https://onto-wiki.eu/w/index.php?title=Template:Helper/UI/Tiles/Grid&amp;diff=42"/>
		<updated>2023-03-25T05:55:38Z</updated>

		<summary type="html">&lt;p&gt;Maintenance script: Install package: OSW Core&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;includeonly&amp;gt;&amp;lt;!-- &amp;lt;div class=dynamic-page-form-link&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;custom-link-tile-grid custom-link-tile-grid-size-x-100% custom-link-tile-grid-size-y-100% custom-link-tile-grid-tile-size-x-250px custom-link-tile-grid-tile-size-y-250px&amp;quot; style=&amp;quot;display:none&amp;gt;&lt;br /&gt;
{{{tiles|}}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt; --&amp;gt;&lt;br /&gt;
&amp;lt;div&amp;gt;&lt;br /&gt;
  &amp;lt;ul class=&amp;quot;custom-link-tile2_grid&amp;quot;&amp;gt;&lt;br /&gt;
{{{tiles|}}}&lt;br /&gt;
  &amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/includeonly&amp;gt;&lt;/div&gt;</summary>
		<author><name>Maintenance script</name></author>
	</entry>
	<entry>
		<id>https://onto-wiki.eu/w/index.php?title=Module:MwJson&amp;diff=41</id>
		<title>Module:MwJson</title>
		<link rel="alternate" type="text/html" href="https://onto-wiki.eu/w/index.php?title=Module:MwJson&amp;diff=41"/>
		<updated>2023-03-25T05:55:37Z</updated>

		<summary type="html">&lt;p&gt;Maintenance script: Install package: OSW Core&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local lustache = require(&amp;quot;Module:Lustache&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
local p = {} --p stands for package&lt;br /&gt;
&lt;br /&gt;
p.keys = { --jsonschema / json-ld keys&lt;br /&gt;
	category=&#039;type&#039;, &lt;br /&gt;
	subcategory=&#039;subclass_of&#039;,&lt;br /&gt;
	schema_type=&#039;schema_type&#039;,&lt;br /&gt;
	property_ns_prefix=&#039;Property&#039;,&lt;br /&gt;
	schema=&#039;osl_schema&#039;, &lt;br /&gt;
	template=&#039;eval_template&#039;,&lt;br /&gt;
	mode=&#039;mode&#039;,&lt;br /&gt;
	context=&#039;@context&#039;,&lt;br /&gt;
	allOf=&#039;allOf&#039;,&lt;br /&gt;
	label=&#039;label&#039;,&lt;br /&gt;
	name=&#039;name&#039;,&lt;br /&gt;
	description=&#039;description&#039;,&lt;br /&gt;
	text=&#039;text&#039;,&lt;br /&gt;
	debug=&#039;_debug&#039;&lt;br /&gt;
} &lt;br /&gt;
p.slots = { --slot names&lt;br /&gt;
	jsondata=&#039;jsondata&#039;, &lt;br /&gt;
	jsonschema=&#039;jsonschema&#039;, &lt;br /&gt;
	header_template=&#039;header_template&#039;,&lt;br /&gt;
	footer_template=&#039;footer_template&#039;,&lt;br /&gt;
	data_template=&#039;data_template&#039;&lt;br /&gt;
} &lt;br /&gt;
p.mode = {&lt;br /&gt;
	header=&#039;header&#039;,&lt;br /&gt;
	footer=&#039;footer&#039;,&lt;br /&gt;
	query=&#039;query&#039;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
--loads json from a wiki page&lt;br /&gt;
--test: mw.logObject(p.loadJson({title=&amp;quot;JsonSchema:Entity&amp;quot;}))&lt;br /&gt;
--test: mw.logObject(p.loadJson({title=&amp;quot;Category:Entity&amp;quot;, slot=&amp;quot;jsonschema&amp;quot;}))&lt;br /&gt;
function p.loadJson(args)&lt;br /&gt;
	local page_title = p.defaultArg(args.title, &amp;quot;JsonSchema:Entity&amp;quot;) --for testing&lt;br /&gt;
	local slot = p.defaultArg(args.slot, nil)&lt;br /&gt;
	local debug = p.defaultArg(args.debug, nil)&lt;br /&gt;
	local msg = &amp;quot;&amp;quot;&lt;br /&gt;
	&lt;br /&gt;
	local json = {}&lt;br /&gt;
	&lt;br /&gt;
	if (slot == nil) then&lt;br /&gt;
		--json = mw.loadJsonData( &amp;quot;JsonSchema:Entity&amp;quot; ) --requires MediaWiki 1.39&lt;br /&gt;
		local page = mw.title.makeTitle(p.splitString(page_title, &#039;:&#039;)[1], p.splitString(page_title, &#039;:&#039;)[2])&lt;br /&gt;
		local text = page:getContent()&lt;br /&gt;
		if (text ~= nil) then json = mw.text.jsonDecode(text) end&lt;br /&gt;
	else&lt;br /&gt;
		if (debug) then msg = msg .. &amp;quot;Fetch slot &amp;quot; .. p.slots.jsondata .. &amp;quot; from page &amp;quot; .. title .. &amp;quot;&amp;lt;br&amp;gt;&amp;quot; end&lt;br /&gt;
		local text = mw.slots.slotContent( slot , page_title )&lt;br /&gt;
		if (text ~= nil) then json = mw.text.jsonDecode(text) end&lt;br /&gt;
	end	&lt;br /&gt;
	&lt;br /&gt;
	--mw.logObject(json)&lt;br /&gt;
&lt;br /&gt;
	return {json=json, debug_msg=msg}&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- test: mw.logObject(p.walkJsonSchema({jsonschema=p.loadJson({title=&amp;quot;Category:Hardware&amp;quot;, slot=&amp;quot;jsonschema&amp;quot;}).json, debug=true}).jsonschema)&lt;br /&gt;
function p.walkJsonSchema(args)&lt;br /&gt;
	local jsonschema = p.defaultArg(args.jsonschema, {})&lt;br /&gt;
	local jsonschemas = p.defaultArg(args.jsonschemas, {})&lt;br /&gt;
	local categories = p.defaultArg(args.categories, nil)&lt;br /&gt;
	local visited = p.defaultArg(args.visited, {})&lt;br /&gt;
	local mode = p.defaultArg(args.mode, p.mode.header)&lt;br /&gt;
	--local merged_jsonschema = p.defaultArg(args.merged_jsonschema, {})&lt;br /&gt;
	local templates = p.defaultArg(args.templates, {})&lt;br /&gt;
	local recursive = p.defaultArg(args.recursive, true)&lt;br /&gt;
	local root = p.defaultArg(args.root, true)&lt;br /&gt;
	local debug = p.defaultArg(args.debug, false)&lt;br /&gt;
	local msg = &amp;quot;&amp;quot;&lt;br /&gt;
	local wikitext = &amp;quot;&amp;quot;&lt;br /&gt;
	&lt;br /&gt;
	local category_template_slot = nil&lt;br /&gt;
	if (mode == p.mode.footer) then category_template_slot = p.slots.footer_template end&lt;br /&gt;
	if (mode == p.mode.header) then category_template_slot = p.slots.header_template end&lt;br /&gt;
	&lt;br /&gt;
	if (categories == nil) then categories = p.getCategories({jsonschema=jsonschema, includeNamespace=true}).categories end&lt;br /&gt;
	if (type(categories) ~= &#039;table&#039;) then categories = {categories} end&lt;br /&gt;
	if (debug) then msg = msg .. &amp;quot;Supercategories: &amp;quot; .. mw.dumpObject(categories) .. &amp;quot;\n&amp;lt;br&amp;gt;&amp;quot; end&lt;br /&gt;
	for k, category in pairs(categories) do&lt;br /&gt;
		if (not p.tableContains(visited, category)) then&lt;br /&gt;
			--mw.logObject(&amp;quot;Visit &amp;quot; .. category)&lt;br /&gt;
			if (debug) then msg = msg .. &amp;quot;Fetch slot &amp;quot; .. p.slots.jsonschema .. &amp;quot; from page &amp;quot; .. category .. &amp;quot;\n&amp;lt;br&amp;gt;&amp;quot; end&lt;br /&gt;
			local super_jsonschema_str = mw.slots.slotContent( p.slots.jsonschema , category )&lt;br /&gt;
			if (super_jsonschema_str ~= nil) then&lt;br /&gt;
				super_jsonschema = mw.text.jsonDecode( super_jsonschema_str )&lt;br /&gt;
				if (recursive) then	&lt;br /&gt;
					local res = p.walkJsonSchema({jsonschema=super_jsonschema, jsonschemas=jsonschemas, templates=templates, mode=mode, visited=visited, root=false})&lt;br /&gt;
					wikitext = wikitext .. res.wikitext &lt;br /&gt;
				end&lt;br /&gt;
				--table.insert(jsonschemas, mw.text.jsonDecode( super_jsonschema_str )) --keep a copy of the schema, super_jsonschema passed by references gets modified&lt;br /&gt;
				--table.insert(jsonschemas, super_jsonschema ) &lt;br /&gt;
				--mw.logObject(&amp;quot;Store &amp;quot; .. category)&lt;br /&gt;
				table.insert(visited, category)&lt;br /&gt;
				jsonschemas[category] = mw.text.jsonDecode( super_jsonschema_str ) --keep a copy of the schema, super_jsonschema passed by references gets modified&lt;br /&gt;
				--jsonschema = p.tableMerge(jsonschema, super_jsonschema) --merge superschema is done by the caller&lt;br /&gt;
			end&lt;br /&gt;
			&lt;br /&gt;
			if (debug) then msg = msg .. &amp;quot;Fetch slot &amp;quot; .. category_template_slot .. &amp;quot; from page &amp;quot; .. category .. &amp;quot;\n&amp;lt;br&amp;gt;&amp;quot; end&lt;br /&gt;
			templates[category] = mw.slots.slotContent( category_template_slot , category )&lt;br /&gt;
		end&lt;br /&gt;
	end	&lt;br /&gt;
	if (root) then&lt;br /&gt;
		jsonschema = {}&lt;br /&gt;
		for i, category in ipairs(visited) do&lt;br /&gt;
			jsonschema = p.tableMerge(jsonschema, jsonschemas[category]) --merge all schemas&lt;br /&gt;
		end	&lt;br /&gt;
	end&lt;br /&gt;
	if (debug) then wikitext = msg .. wikitext  end&lt;br /&gt;
	return {jsonschema=jsonschema, jsonschemas=jsonschemas, templates=templates, visited=visited, wikitext=wikitext}&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[ test: &lt;br /&gt;
category = &amp;quot;Category:Hardware&amp;quot;&lt;br /&gt;
page = &amp;quot;Item:OSW7d7193567ea14e4e89b74de88983b718&amp;quot;&lt;br /&gt;
category2 = &amp;quot;Category:OSW80e240a2e17d4ae5adfe6419051aa0bb&amp;quot;&lt;br /&gt;
page2 = &amp;quot;Item:OSWa4da6664aeac466a86b09e6b32a1cb41&amp;quot;&lt;br /&gt;
mw.logObject(p.expandEmbeddedTemplates({&lt;br /&gt;
	jsonschema=p.walkJsonSchema({jsonschema=p.loadJson({title=category, slot=&amp;quot;jsonschema&amp;quot;}).json, debug=true}).jsonschema, &lt;br /&gt;
	jsondata=p.loadJson({title=page, slot=&amp;quot;jsondata&amp;quot;}).json,&lt;br /&gt;
	debug=true, mode=&amp;quot;render&amp;quot;&lt;br /&gt;
}).res)&lt;br /&gt;
--]]&lt;br /&gt;
function p.expandEmbeddedTemplates(args)&lt;br /&gt;
	local frame = p.defaultArg(args.frame, mw.getCurrentFrame())&lt;br /&gt;
	local jsondata = p.defaultArg(args.jsondata, {})&lt;br /&gt;
	local jsonschema = p.defaultArg(args.jsonschema, {})&lt;br /&gt;
	local template = p.defaultArg(args.template, nil)&lt;br /&gt;
	local mode = p.defaultArg(args.mode, nil)&lt;br /&gt;
	local stringify_arrays = p.defaultArg(args.stringify_arrays, false)&lt;br /&gt;
	local msg = &amp;quot;&amp;quot;&lt;br /&gt;
	local res = p.defaultArg(args.jsondata, &amp;quot;&amp;quot;)&lt;br /&gt;
	&lt;br /&gt;
	for k,v in pairs(jsondata) do&lt;br /&gt;
		local eval_template = nil&lt;br /&gt;
		local eval_templates = p.defaultArgPath(jsonschema, {&amp;quot;properties&amp;quot;, k, p.keys.template}, {})&lt;br /&gt;
		if (eval_templates[1] == nil) then eval_templates = {eval_templates} end --ensure list of objects&lt;br /&gt;
		for i, t in pairs(eval_templates) do&lt;br /&gt;
			if (t[p.keys.mode] ~= nil and t[p.keys.mode] == mode) then eval_template = t --use only render templates in render mode and store templates in store mode&lt;br /&gt;
			elseif (t[p.keys.mode] == nil) then  eval_template = t --default&lt;br /&gt;
			elseif (debug) then msg = msg .. &amp;quot;Ignore eval_template&amp;quot; .. mw.dumpObject( t ) .. &amp;quot;\n&amp;lt;br&amp;gt;&amp;quot;&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		if (eval_template ~= nil and eval_template.value ~= nil and (eval_template.type == &amp;quot;mustache&amp;quot; or eval_template.type == &amp;quot;mustache-wikitext&amp;quot;)) then&lt;br /&gt;
			-- mustache can handle objects and array to we can parse it directly&lt;br /&gt;
			-- todo: handle nested templates&lt;br /&gt;
			if (debug) then msg = msg .. &amp;quot;Parse mustache template &amp;quot; .. eval_template.value .. &amp;quot; with params &amp;quot; .. mw.dumpObject( {[k]=v} ) .. &amp;quot;\n&amp;lt;br&amp;gt;&amp;quot; end&lt;br /&gt;
			jsondata[k] = lustache:render(eval_template.value, {[k]=v})&lt;br /&gt;
			if (eval_template.type == &amp;quot;mustache-wikitext&amp;quot;) then &lt;br /&gt;
				jsondata[k] = frame:preprocess( jsondata[k] )&lt;br /&gt;
			end&lt;br /&gt;
		elseif type(v) == &#039;table&#039; then &lt;br /&gt;
			if (v[1] == nil) then --key value array = object/dict&lt;br /&gt;
				local sub_res = p.expandEmbeddedTemplates({frame=frame, jsondata=v, jsonschema=p.defaultArgPath(jsonschema, {&amp;quot;properties&amp;quot;, k}, {}), template=eval_template, mode=mode, stringify_arrays=stringify_arrays})&lt;br /&gt;
				msg = msg .. sub_res.debug_msg&lt;br /&gt;
				jsondata[k] = sub_res.res&lt;br /&gt;
				--if (sub_res.unparsed ~= nil) then jsondata[k] = sub_res.unparsed else jsondata[k] = sub_res.wikitext end&lt;br /&gt;
			else --list array&lt;br /&gt;
				local string_list = &amp;quot;&amp;quot;&lt;br /&gt;
				for i,e in pairs(v) do &lt;br /&gt;
					if type(e) == &#039;table&#039; then 	&lt;br /&gt;
						local eval_template = nil&lt;br /&gt;
						local eval_templates = p.defaultArgPath(jsonschema, {&amp;quot;properties&amp;quot;, k, &amp;quot;items&amp;quot;, p.keys.template}, {})&lt;br /&gt;
						if (eval_templates[1] == nil) then eval_templates = {eval_templates} end --ensure list of objects&lt;br /&gt;
						for i, t in pairs(eval_templates) do&lt;br /&gt;
							if (t[p.keys.mode] ~= nil and t[p.keys.mode] == mode) then eval_template = t --use only render templates in render mode and store templates in store mode&lt;br /&gt;
							elseif (t[p.keys.mode] == nil) then  eval_template = t --default&lt;br /&gt;
							elseif (debug) then msg = msg .. &amp;quot;Ignore eval_template&amp;quot; .. mw.dumpObject( t ) .. &amp;quot;\n&amp;lt;br&amp;gt;&amp;quot;&lt;br /&gt;
							end&lt;br /&gt;
						end&lt;br /&gt;
						local sub_res = p.expandEmbeddedTemplates({frame=frame, jsondata=e, jsonschema=p.defaultArgPath(jsonschema, {&amp;quot;properties&amp;quot;, k, &amp;quot;items&amp;quot;}, {}), template=eval_template, mode=mode, stringify_arrays=stringify_arrays})&lt;br /&gt;
						msg = msg .. sub_res.debug_msg&lt;br /&gt;
						if (type(sub_res.res) == &#039;table&#039;) then &lt;br /&gt;
							if (debug) then msg = msg .. &amp;quot;Values for &amp;quot; .. k .. &amp;quot; contains non-literal items: &amp;quot; .. mw.dumpObject( sub_res.res ) .. &amp;quot; =&amp;gt; skip value in wikitemplate array param creation\n&amp;lt;br&amp;gt;&amp;quot; end&lt;br /&gt;
						else &lt;br /&gt;
							if (stringify_arrays) then string_list = string_list .. sub_res.res .. &amp;quot;;&amp;quot; &lt;br /&gt;
							else v[i] = sub_res.res end&lt;br /&gt;
						end&lt;br /&gt;
					else&lt;br /&gt;
						if (stringify_arrays) then string_list = string_list .. e .. &amp;quot;;&amp;quot; end&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
				if (stringify_arrays) then jsondata[k] = string_list end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end	&lt;br /&gt;
	&lt;br /&gt;
	&lt;br /&gt;
	if (template == nil) then &lt;br /&gt;
		local templates = jsondata[p.keys.template]&lt;br /&gt;
		if (templates == nil) then templates = p.defaultArg(jsonschema[p.keys.template], {}) end&lt;br /&gt;
		if (templates[1] == nil) then templates = {templates} end --ensure list of objects&lt;br /&gt;
		for i, t in pairs(templates) do&lt;br /&gt;
			if (t[p.keys.mode] ~= nil and t[p.keys.mode] == mode) then template = t --use only render templates in render mode and store templates in store mode&lt;br /&gt;
			elseif (t[p.keys.mode] == nil) then  template = t --default&lt;br /&gt;
			elseif (debug) then msg = msg .. &amp;quot;Ignore template&amp;quot; .. mw.dumpObject( t ) .. &amp;quot;\n&amp;lt;br&amp;gt;&amp;quot;&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if template ~= nil then&lt;br /&gt;
		if (template.type == &amp;quot;wikitext&amp;quot;) then&lt;br /&gt;
			for k,v in pairs(jsondata) do&lt;br /&gt;
				if type(v) == &#039;table&#039; then &lt;br /&gt;
					if (debug) then msg = msg .. &amp;quot;Values for &amp;quot; .. k .. &amp;quot; contains non-literals: &amp;quot; .. mw.dumpObject( v ) .. &amp;quot; =&amp;gt; skip wikitemplate parsing\n&amp;lt;br&amp;gt;&amp;quot; end&lt;br /&gt;
					return {res=res, debug_msg=msg} &lt;br /&gt;
				end --not supported&lt;br /&gt;
			end			&lt;br /&gt;
			if (template.value ~= nil) then&lt;br /&gt;
				if (debug) then msg = msg .. &amp;quot;Parse wikitemplate &amp;quot; .. template.value .. &amp;quot; with params &amp;quot; .. mw.dumpObject( jsondata ) .. &amp;quot;\n&amp;lt;br&amp;gt;&amp;quot; end&lt;br /&gt;
				local child = frame:newChild{args=jsondata}&lt;br /&gt;
				res = child:preprocess( template.value )&lt;br /&gt;
			elseif (template.page ~= nil) then&lt;br /&gt;
				if (debug) then msg = msg .. &amp;quot;Parse wikitemplate &amp;quot; .. template.page .. &amp;quot; with params &amp;quot; .. mw.dumpObject( jsondata ) .. &amp;quot;\n&amp;lt;br&amp;gt;&amp;quot; end&lt;br /&gt;
				res = frame:expandTemplate{ title = template.page, args = jsondata }&lt;br /&gt;
			end&lt;br /&gt;
			&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	--if (debug) then mw.logObject(msg) end&lt;br /&gt;
	return {res=res, debug_msg=msg}&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- mw.logObject(p.processJsondata({jsondata=p.loadJson({title=&amp;quot;Item:OSW7d7193567ea14e4e89b74de88983b718&amp;quot;, slot=&amp;quot;jsondata&amp;quot;}).json, debug=true, mode=&amp;quot;header&amp;quot;}))&lt;br /&gt;
-- mw.logObject(p.processJsondata({jsondata=p.loadJson({title=&amp;quot;Item:OSWa4da6664aeac466a86b09e6b32a1cb41&amp;quot;, slot=&amp;quot;jsondata&amp;quot;}).json, debug=true, mode=&amp;quot;header&amp;quot;}))&lt;br /&gt;
-- mw.logObject(p.processJsondata({jsondata=p.loadJson({title=&amp;quot;Category:OSWb3022bbf7e7146eb8e6f6e3264f50bbe&amp;quot;, slot=&amp;quot;jsondata&amp;quot;}).json, debug=true, mode=&amp;quot;header&amp;quot;, categories={&amp;quot;Category:Category&amp;quot;}}))&lt;br /&gt;
function p.processJsondata(args)&lt;br /&gt;
	local frame = p.defaultArg(args.frame, mw.getCurrentFrame())&lt;br /&gt;
	local jsondata = p.defaultArg(args.jsondata, {})&lt;br /&gt;
	local jsonschema = p.defaultArg(args.jsonschema, {})&lt;br /&gt;
	local template = p.defaultArg(args.template, nil)&lt;br /&gt;
	local categories = p.defaultArg(args.categories, nil)&lt;br /&gt;
	local recursive = p.defaultArg(args.recursive, true)&lt;br /&gt;
	local mode = p.defaultArg(args.mode, p.mode.header)&lt;br /&gt;
	local debug = p.defaultArg(args.debug, false)&lt;br /&gt;
	local title = mw.title.getCurrentTitle()&lt;br /&gt;
	&lt;br /&gt;
	local wikitext = &amp;quot;&amp;quot;&lt;br /&gt;
	local msg = &amp;quot;&amp;quot; --debug msg&lt;br /&gt;
&lt;br /&gt;
	if (p.nilOrEmpty(jsondata) or (p.nilOrEmpty(categories) and p.nilOrEmpty(jsonschema) and p.nilOrEmpty(jsondata[p.keys.category]))) then return {wikitext=wikitext, debug_msg=msg} end --nothing to do here&lt;br /&gt;
	--if (jsondata == nil or p.tableLength(jsondata) == 0 or (categories == nil and jsonschema == nil and jsondata[p.keys.category] == nil)) then return {wikitext=wikitext, debug_msg=msg} end --nothing to do here&lt;br /&gt;
	--jsonschema = p.defaultArg(jsonschema, {})&lt;br /&gt;
	--jsondata = p.defaultArg(jsondata, {})&lt;br /&gt;
	if (categories == nil) then categories = jsondata[p.keys.category] end&lt;br /&gt;
	&lt;br /&gt;
	local schema_res = p.walkJsonSchema({jsonschema=jsonschema, categories=categories, mode=mode, recursive=recursive, debug=debug})&lt;br /&gt;
	jsonschema = p.expandJsonRef({json=schema_res.jsonschema, debug=debug}).json&lt;br /&gt;
	--mw.logObject(jsonschema)&lt;br /&gt;
	&lt;br /&gt;
	local display_label = p.defaultArgPath(jsondata, {p.keys.name}, &amp;quot;&amp;quot;)&lt;br /&gt;
	if (display_label == &amp;quot;&amp;quot; or (title.nsText ~= &amp;quot;Category&amp;quot; and title.nsText ~= &amp;quot;Property&amp;quot;)) then &lt;br /&gt;
		display_label = p.defaultArgPath(jsondata, {p.keys.label, 1, p.keys.text}, &amp;quot;&amp;quot;) --prefere label for all non-category and non-property pages&lt;br /&gt;
	end &lt;br /&gt;
	&lt;br /&gt;
	local jsonld = p.copy(jsondata)&lt;br /&gt;
	local json_data_store = p.copy(jsondata)&lt;br /&gt;
	local json_data_render = p.copy(jsondata)&lt;br /&gt;
	json_res_store = p.expandEmbeddedTemplates({jsonschema=jsonschema, jsondata=json_data_store, mode=&#039;store&#039;})&lt;br /&gt;
	msg = msg .. json_res_store.debug_msg&lt;br /&gt;
	--mw.log(&amp;quot;JSONDATA STORE&amp;quot;)&lt;br /&gt;
	--mw.logObject(json_res_store.res)&lt;br /&gt;
	&lt;br /&gt;
	local smw_res = nil&lt;br /&gt;
	if (mode == p.mode.header) then&lt;br /&gt;
		smw_res = p.getSemanticProperties({jsonschema=jsonschema, jsondata=json_res_store.res, store=false, debug=debug})&lt;br /&gt;
		jsonld[&amp;quot;@context&amp;quot;] = smw_res.context&lt;br /&gt;
		jsonld[&amp;quot;@type&amp;quot;] = p.tableMerge(p.tablefy(jsonschema.schema_type), p.tablefy(jsonld[&amp;quot;@type&amp;quot;])) --&lt;br /&gt;
		jsonld[&#039;schema:name&#039;] = p.defaultArgPath(jsonld, {p.keys.label, 1, p.keys.text}, jsonld[&#039;name&#039;]) --google does not support @value and @lang&lt;br /&gt;
		jsonld[&#039;schema:description&#039;] = p.defaultArgPath(jsonld, {p.keys.description, 1, p.keys.text}, nil)&lt;br /&gt;
		for k, v in pairs(jsonld) do&lt;br /&gt;
			if (type(v) == &amp;quot;string&amp;quot;) then&lt;br /&gt;
				local vpart = p.splitString(v, &#039;:&#039;)&lt;br /&gt;
				if (p.tableLength(vpart) == 2 and vpart[1] == &amp;quot;File&amp;quot;) then jsonld[k] = mw.getCurrentFrame():callParserFunction( &#039;filepath&#039;, { vpart[2] } ) end --google does not follow redirects via &amp;quot;File&amp;quot;:&amp;quot;wiki:Special:Redirect/file/&amp;quot;&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		wikitext = wikitext .. &amp;quot;&amp;lt;div class=&#039;jsonld-header&#039; style=&#039;display:none&#039; data-jsonld=&#039;&amp;quot; .. mw.text.jsonEncode( jsonld ) .. &amp;quot;&#039;&amp;gt;&amp;lt;/div&amp;gt;&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local json_res = p.expandEmbeddedTemplates({jsonschema=jsonschema, jsondata=json_data_render, mode=&#039;render&#039;})&lt;br /&gt;
	msg = msg .. json_res.debug_msg&lt;br /&gt;
	jsondata =json_res.res&lt;br /&gt;
	--mw.log(&amp;quot;JSONDATA RENDER&amp;quot;)&lt;br /&gt;
	--mw.logObject(jsondata)&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
	for i, category in ipairs(schema_res.visited) do&lt;br /&gt;
		local jsonschema = schema_res.jsonschemas[category]&lt;br /&gt;
		local template = schema_res.templates[category]&lt;br /&gt;
		if (template ~= nil) then&lt;br /&gt;
			if (debug) then msg = msg .. &amp;quot;Parse \n\n&amp;quot; .. template .. &amp;quot; \n\nwith params &amp;quot; .. mw.dumpObject( jsondata ) .. &amp;quot;\n&amp;lt;br&amp;gt;&amp;quot; end&lt;br /&gt;
			local stripped_jsondata={}&lt;br /&gt;
			for k, v in pairs(jsondata) do&lt;br /&gt;
				if (type(v) ~= &#039;table&#039;) then stripped_jsondata[k] = v end --delete object values, not supported by wiki templates	&lt;br /&gt;
			end&lt;br /&gt;
			local child = frame:newChild{args=stripped_jsondata}&lt;br /&gt;
			wikitext = wikitext .. child:preprocess( template )&lt;br /&gt;
		elseif (mode == p.mode.header) then&lt;br /&gt;
			local infobox_res = p.renderInfoBox({jsonschema=jsonschema, jsondata=jsondata})&lt;br /&gt;
			wikitext = wikitext .. frame:preprocess( infobox_res.wikitext )&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	--local display_label = &amp;quot;&amp;quot;&lt;br /&gt;
	--if (jsondata[p.keys.label] ~= nil) then display_label = p.splitString(jsondata[p.keys.label], &#039;@&#039;)[1] end&lt;br /&gt;
	if (title.nsText ~= &amp;quot;Category&amp;quot;) then wikitext = wikitext .. &amp;quot;\n&amp;quot; .. p.setCategories({categories=jsondata[p.keys.category], sortkey=display_label}).wikitext end--items&lt;br /&gt;
	wikitext = wikitext .. p.setCategories({categories=jsondata[p.keys.subcategory], sortkey=display_label}).wikitext --classes/categories&lt;br /&gt;
	&lt;br /&gt;
	if (smw_res ~= nil) then&lt;br /&gt;
		if (debug) then msg = msg .. &amp;quot;Store page properties&amp;quot; end&lt;br /&gt;
		smw_res.properties[&#039;Display title of&#039;] = display_label --set special property display title&lt;br /&gt;
		mw.ext.displaytitle.set(display_label)&lt;br /&gt;
		--smw_res.properties[&#039;@category&#039;] = jsondata[p.keys.category]&lt;br /&gt;
		local store_res = mw.smw.set( smw_res.properties ) --store as semantic properties&lt;br /&gt;
		if (debug) then msg = msg .. mw.dumpObject(smw_res.properties) end&lt;br /&gt;
		if (store_res) then &lt;br /&gt;
			if (debug) then msg = msg .. &amp;quot;SMW SUCCESS: &amp;quot; end&lt;br /&gt;
		else&lt;br /&gt;
			wikitext = wikitext .. store_res.error &lt;br /&gt;
			if (debug) then msg = msg .. &amp;quot;SMW ERROR: &amp;quot; .. store_res.error end&lt;br /&gt;
		end&lt;br /&gt;
		--wikitext = mw.dumpObject(smw_res.properties) .. wikitext&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if (debug) then mw.logObject(res) end&lt;br /&gt;
	return {wikitext=wikitext, debug_msg=msg}&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- renders a default infobox&lt;br /&gt;
-- test: mw.logObject(p.renderInfoBox({jsonschema=p.loadJson({title=&amp;quot;JsonSchema:Entity&amp;quot;}).json, jsondata={uuid=&amp;quot;123123&amp;quot;}}))&lt;br /&gt;
function p.renderInfoBox(args)&lt;br /&gt;
	local jsondata = p.defaultArg(args.jsondata, {})&lt;br /&gt;
	local schema = p.defaultArg(args.jsonschema, nil)&lt;br /&gt;
	local context = p.buildContext({jsonschema=schema}).context&lt;br /&gt;
	local res = &amp;quot;&amp;quot;&lt;br /&gt;
	if schema == nil then return res end&lt;br /&gt;
	local schema_label = &amp;quot;&amp;quot;&lt;br /&gt;
	if schema[&#039;title&#039;] ~= nil then schema_label = schema[&#039;title&#039;] end&lt;br /&gt;
	&lt;br /&gt;
	-- see also: https://help.fandom.com/wiki/Extension:Scribunto/HTML_Library_usage_notes&lt;br /&gt;
	local tbl = mw.html.create( &#039;table&#039; )&lt;br /&gt;
	tbl&lt;br /&gt;
		:attr( &#039;class&#039;, &#039;info_box&#039; )&lt;br /&gt;
		:tag( &#039;tr&#039; )&lt;br /&gt;
			:tag( &#039;td&#039; )&lt;br /&gt;
				:attr( &#039;class&#039;, &#039;subheading&#039; )&lt;br /&gt;
				:attr( &#039;colspan&#039;, &#039;2&#039; )&lt;br /&gt;
				:wikitext( schema_label )&lt;br /&gt;
	for k,v in pairs(jsondata) do&lt;br /&gt;
		if (schema[&#039;properties&#039;] ~= nil and schema[&#039;properties&#039;][k] ~= nil and (type(v) ~= &#039;table&#039; or v[1] ~= nil)) then --literal or literal array&lt;br /&gt;
			local def = schema[&#039;properties&#039;][k]&lt;br /&gt;
			--mw.logObject(def)&lt;br /&gt;
			local label = k&lt;br /&gt;
			if def[&#039;title&#039;] ~= nil then label = def[&#039;title&#039;] end&lt;br /&gt;
			--res = res .. title &amp;quot;: &amp;quot; .. v&lt;br /&gt;
			local cell = tbl:tag( &#039;tr&#039; )&lt;br /&gt;
								:tag( &#039;th&#039; )&lt;br /&gt;
									:wikitext( label )&lt;br /&gt;
									:done()&lt;br /&gt;
								:tag( &#039;td&#039; )&lt;br /&gt;
			if (type(v) == &#039;table&#039;) then&lt;br /&gt;
				for i,e in pairs(v) do &lt;br /&gt;
					if (type(e) ~= &#039;table&#039;) then &lt;br /&gt;
						local p_type = p.defaultArgPath(context, {k, &#039;@type&#039;}, &#039;@value&#039;)&lt;br /&gt;
						if (p_type == &#039;@id&#039;) then e = &amp;quot;[[&amp;quot; .. string.gsub(e, &amp;quot;Category:&amp;quot;, &amp;quot;:Category:&amp;quot;) .. &amp;quot;]]&amp;quot; end&lt;br /&gt;
						cell:wikitext(&amp;quot;\n* &amp;quot; .. e .. &amp;quot;&amp;quot;) &lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
			else&lt;br /&gt;
				local p_type = p.defaultArgPath(context, {k, &#039;@type&#039;}, &#039;@value&#039;)&lt;br /&gt;
				if (p_type == &#039;@id&#039;) then v = &amp;quot;[[&amp;quot; .. string.gsub(v, &amp;quot;Category:&amp;quot;, &amp;quot;:Category:&amp;quot;) .. &amp;quot;]]&amp;quot; end&lt;br /&gt;
				cell:wikitext( v )&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end	&lt;br /&gt;
	res = res .. tostring( tbl )&lt;br /&gt;
	--mw.logObject(res)&lt;br /&gt;
	&lt;br /&gt;
	return {wikitext=res}&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- test&lt;br /&gt;
-- mw.logObject(p.getCategories({jsonschema={allOf={[&amp;quot;$ref&amp;quot;]=&amp;quot;/wiki/Category:Test?action=raw&amp;amp;slot=jsonschema&amp;quot;}}, includeNamespace=true}))&lt;br /&gt;
-- mw.logObject(p.getCategories({jsonschema={allOf={{[&amp;quot;$ref&amp;quot;]=&amp;quot;/wiki/Category:Test?action=raw&amp;amp;slot=jsonschema&amp;quot;}, {[&amp;quot;$ref&amp;quot;]=&amp;quot;/wiki/Category:Test2?action=raw&amp;amp;slot=jsonschema&amp;quot;}}}}))&lt;br /&gt;
function p.getCategories(args)&lt;br /&gt;
	local jsonschema = p.defaultArg(args.jsonschema, {})&lt;br /&gt;
	local includeNamespace = p.defaultArg(args.includeNamespace, false)&lt;br /&gt;
	&lt;br /&gt;
	local categories = {}&lt;br /&gt;
		local allOf = jsonschema[p.keys.allOf]&lt;br /&gt;
		if (allOf ~= nil) then&lt;br /&gt;
			--properties[&#039;@category&#039;] = {}&lt;br /&gt;
			for k, entry in pairs(allOf) do&lt;br /&gt;
				if type(entry) == &#039;table&#039; then -- &amp;quot;allOf&amp;quot;: [{&amp;quot;$ref&amp;quot;: &amp;quot;/wiki/Category:Test?action=raw&amp;quot;}]&lt;br /&gt;
					for p, v in pairs(entry) do&lt;br /&gt;
						if (p == &#039;$ref&#039;) then&lt;br /&gt;
							for category in v:gmatch(&amp;quot;Category:([^?]+)&amp;quot;) do -- e.g. &amp;quot;/wiki/Category:Test?action=raw&amp;quot;&lt;br /&gt;
								if (includeNamespace) then category = &amp;quot;Category:&amp;quot; .. category end&lt;br /&gt;
							    table.insert(categories, category)&lt;br /&gt;
							end&lt;br /&gt;
						end&lt;br /&gt;
					end&lt;br /&gt;
				else -- &amp;quot;allOf&amp;quot;: {&amp;quot;$ref&amp;quot;: &amp;quot;/wiki/Category:Test?action=raw&amp;quot;}&lt;br /&gt;
					if (k == &#039;$ref&#039;) then&lt;br /&gt;
						for category in entry:gmatch(&amp;quot;Category:([^?]+)&amp;quot;) do -- e.g. &amp;quot;/wiki/Category:Test?action=raw&amp;quot;&lt;br /&gt;
							if (includeNamespace) then category = &amp;quot;Category:&amp;quot; .. category end&lt;br /&gt;
							table.insert(categories, category)&lt;br /&gt;
						end&lt;br /&gt;
					end	&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end	&lt;br /&gt;
		&lt;br /&gt;
	return {categories=categories}&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--sets a list of categories on the page&lt;br /&gt;
--test: mw.logObject(p.setCategories({categories={&amp;quot;Cat1&amp;quot;, &amp;quot;Category:Cat2&amp;quot;}}))&lt;br /&gt;
function p.setCategories(args)&lt;br /&gt;
	local categories = p.defaultArg(args.categories, {})&lt;br /&gt;
	local sortkey = p.defaultArg(args.sortkey, &amp;quot;&amp;quot;)&lt;br /&gt;
	if (sortkey ~= &amp;quot;&amp;quot;) then sortkey = &amp;quot;|&amp;quot; .. sortkey end&lt;br /&gt;
	if (type(categories) ~= &#039;table&#039;) then categories = {categories} end&lt;br /&gt;
	local res = &amp;quot;&amp;quot;&lt;br /&gt;
	for k, entry in pairs(categories) do&lt;br /&gt;
		res = res .. &amp;quot;[[Category:&amp;quot; .. string.gsub(entry, &amp;quot;Category:&amp;quot;, &amp;quot;&amp;quot;) .. sortkey ..&amp;quot;]]&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
	return {wikitext=res}&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[ test&lt;br /&gt;
category = &amp;quot;Category:Entity&amp;quot;&lt;br /&gt;
jsonschema = p.expandJsonRef({json=p.loadJson({title=category, slot=&amp;quot;jsonschema&amp;quot;}).json}).json&lt;br /&gt;
mw.logObject(p.buildContext({jsonschema=jsonschema, debug=true}))&lt;br /&gt;
or&lt;br /&gt;
jsonschema = {&lt;br /&gt;
	[&amp;quot;@context&amp;quot;]={test=&amp;quot;level 0&amp;quot;}, &lt;br /&gt;
	properties={&lt;br /&gt;
		test={&lt;br /&gt;
			type=&amp;quot;object&amp;quot;,&lt;br /&gt;
			[&amp;quot;@context&amp;quot;]={test1=&amp;quot;level 1&amp;quot;}, &lt;br /&gt;
			properties= {&lt;br /&gt;
				test= {&lt;br /&gt;
					type=&amp;quot;array&amp;quot;,&lt;br /&gt;
					items= {&lt;br /&gt;
						type=&amp;quot;object&amp;quot;,&lt;br /&gt;
						[&amp;quot;@context&amp;quot;]={test2=&amp;quot;level 2&amp;quot;}&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
mw.logObject(p.buildContext({jsonschema=jsonschema, debug=true}))&lt;br /&gt;
--]]&lt;br /&gt;
&lt;br /&gt;
function p.buildContext(args)&lt;br /&gt;
	local schema = p.defaultArg(args.jsonschema, {})&lt;br /&gt;
	--mw.logObject(schema)&lt;br /&gt;
	local context = p.defaultArg(args.context, schema[p.keys.context])&lt;br /&gt;
	local result = p.defaultArg(args.result, {})&lt;br /&gt;
	if (context ~= nil) then&lt;br /&gt;
		for k,v in pairs(context) do&lt;br /&gt;
			if type(k) == &#039;number&#039; and type(v) == &#039;string&#039; then&lt;br /&gt;
				--table.insert(result, v) --skip context imports&lt;br /&gt;
			elseif (type(v) == &#039;table&#039; and v[1] ~= nil) then --custom addtional mappings, e. g. &amp;quot;type*&amp;quot;: [&amp;quot;Property:HasType&amp;quot;]&lt;br /&gt;
				result[k] = v&lt;br /&gt;
			elseif (type(v) == &#039;table&#039; and v[&#039;@id&#039;] == nil) then --subcontext&lt;br /&gt;
				p.tableMerge(result, p.buildContext({context=v}).context)&lt;br /&gt;
			else &lt;br /&gt;
				result[k] = v	&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	local properties = p.defaultArg(schema.properties, {})&lt;br /&gt;
&lt;br /&gt;
	for k,v in pairs(properties) do&lt;br /&gt;
		local subcontext = nil&lt;br /&gt;
		if (p.defaultArgPath(properties, {k, &#039;type&#039;}) == &#039;object&#039;) then&lt;br /&gt;
			--mw.logObject(properties[k])&lt;br /&gt;
			subcontext = p.buildContext({jsonschema=properties[k]}).context&lt;br /&gt;
		elseif (p.defaultArgPath(properties, {k, &#039;items&#039;, &#039;type&#039;}) == &#039;object&#039;) then &lt;br /&gt;
			mw.logObject(properties[k][&#039;items&#039;])&lt;br /&gt;
			subcontext = p.buildContext({jsonschema=properties[k][&#039;items&#039;]}).context&lt;br /&gt;
		end&lt;br /&gt;
		if (subcontext ~= nil and p.tableLength(subcontext) &amp;gt; 0) then&lt;br /&gt;
			if (result[k] == nil) then result[k] = {} end&lt;br /&gt;
			if (type(result[k]) == &#039;string&#039;) then result[k] = {[&amp;quot;@id&amp;quot;]=result[k]} end&lt;br /&gt;
			if (result[k][p.keys.context] == nil) then result[k][p.keys.context] = {} end&lt;br /&gt;
			result[k][p.keys.context] = p.tableMerge(result[k][p.keys.context], subcontext)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return {context=result}&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--maps jsondata values to semantic properties by using the @context attribute within the schema&lt;br /&gt;
--test: mw.logObject(p.getSemanticProperties({jsonschema={[&amp;quot;@context&amp;quot;]={test=&amp;quot;Property:TestProperty&amp;quot;, myObjectProperty={[&amp;quot;@id&amp;quot;]= &amp;quot;Property:MyObjectProperty&amp;quot;, [&amp;quot;@type&amp;quot;]= &amp;quot;@id&amp;quot;}}}, jsondata={test=&amp;quot;TestValue&amp;quot;, myObjectProperty=&amp;quot;123&amp;quot;}, debug=true}))&lt;br /&gt;
--test: mw.logObject(p.getSemanticProperties({jsonschema={[&amp;quot;@context&amp;quot;]={&amp;quot;some uri&amp;quot;,{test=&amp;quot;Property:TestProperty&amp;quot;, myObjectProperty={[&amp;quot;@id&amp;quot;]= &amp;quot;Property:MyObjectProperty&amp;quot;, [&amp;quot;@type&amp;quot;]= &amp;quot;@id&amp;quot;}}}}, jsondata={test=&amp;quot;TestValue&amp;quot;, myObjectProperty=&amp;quot;123&amp;quot;}, debug=true}))&lt;br /&gt;
--[[&lt;br /&gt;
mw.logObject(p.getSemanticProperties({jsonschema={[&amp;quot;@context&amp;quot;]={test=&amp;quot;Property:TestProperty&amp;quot;, subobject=&amp;quot;Property:HasSubobject&amp;quot;, myObjectProperty={[&amp;quot;@id&amp;quot;]= &amp;quot;Property:MyObjectProperty&amp;quot;, [&amp;quot;@type&amp;quot;]= &amp;quot;@id&amp;quot;}}}, jsondata={&lt;br /&gt;
test=&amp;quot;TestValue&amp;quot;, myObjectProperty=&amp;quot;123&amp;quot;, subobject={uuid=&amp;quot;123-123-123&amp;quot;, test=&amp;quot;TestValue2&amp;quot;}&lt;br /&gt;
}, debug=true}))&lt;br /&gt;
&lt;br /&gt;
mw.logObject(p.getSemanticProperties({jsonschema=p.loadJson({title=&amp;quot;Category:OSW80e240a2e17d4ae5adfe6419051aa0bb&amp;quot;, slot=&amp;quot;jsonschema&amp;quot;}).json, p.loadJson({title=&amp;quot;Item:OSWa4da6664aeac466a86b09e6b32a1cb41&amp;quot;, slot=&amp;quot;jsonsdata&amp;quot;}).json, debug=true}))&lt;br /&gt;
&lt;br /&gt;
category = &amp;quot;Category:Hardware&amp;quot;&lt;br /&gt;
page = &amp;quot;Item:OSW7d7193567ea14e4e89b74de88983b718&amp;quot;&lt;br /&gt;
category2 = &amp;quot;Category:OSW80e240a2e17d4ae5adfe6419051aa0bb&amp;quot;&lt;br /&gt;
page2 = &amp;quot;Item:OSWa4da6664aeac466a86b09e6b32a1cb41&amp;quot;&lt;br /&gt;
jsonschema =p.walkJsonSchema({jsonschema=p.loadJson({title=category, slot=&amp;quot;jsonschema&amp;quot;}).json, debug=true}).jsonschema&lt;br /&gt;
mw.logObject(p.getSemanticProperties({&lt;br /&gt;
	jsonschema=jsonschema,&lt;br /&gt;
	jsondata=p.expandEmbeddedTemplates({jsonschema=jsonschema, jsondata=p.loadJson({title=page, slot=&amp;quot;jsondata&amp;quot;}).json}).res,&lt;br /&gt;
	debug=true&lt;br /&gt;
}).properties)&lt;br /&gt;
&lt;br /&gt;
--]]&lt;br /&gt;
function p.getSemanticProperties(args)&lt;br /&gt;
	local jsondata = p.defaultArg(args.jsondata, {})&lt;br /&gt;
	local schema = p.defaultArg(args.jsonschema, {})&lt;br /&gt;
	local subschema = p.defaultArg(args.subschema, schema)&lt;br /&gt;
	local parent_schema_property = p.defaultArg(args.parent_schema_property, {})&lt;br /&gt;
	local store = p.defaultArg(args.store, false)&lt;br /&gt;
	local root = p.defaultArg(args.root, true)&lt;br /&gt;
	local debug = p.defaultArg(args.debug, false)&lt;br /&gt;
	--if (debug) then mw.logObject(&amp;quot;Call getSemanticProperties with args &amp;quot; .. mw.dumpObject( args ) .. &amp;quot;\n&amp;lt;br&amp;gt;&amp;quot;) end&lt;br /&gt;
	&lt;br /&gt;
	local properties = {} --semantic properties&lt;br /&gt;
	local property_data = {}&lt;br /&gt;
	local context = p.defaultArg(args.context, p.buildContext({jsonschema=schema}).context)&lt;br /&gt;
	local error = &amp;quot;&amp;quot;&lt;br /&gt;
	if (debug) then mw.logObject(context) end&lt;br /&gt;
	if schema ~= nil and context ~= nil then&lt;br /&gt;
		local schema_properties = p.defaultArg(subschema.properties, {})&lt;br /&gt;
		if (debug and root) then&lt;br /&gt;
			for k,v in pairs(context) do&lt;br /&gt;
				if type(k) == &#039;number&#039; then mw.logObject(&amp;quot;imports &amp;quot; .. v)&lt;br /&gt;
				elseif type(v) == &#039;table&#039; and v[&amp;quot;@id&amp;quot;] ~= nil then mw.logObject(&amp;quot;&amp;quot; .. k .. &amp;quot; maps to &amp;quot; .. v[&amp;quot;@id&amp;quot;]) &lt;br /&gt;
				else mw.logObject(&amp;quot;&amp;quot; .. k .. &amp;quot; maps to &amp;quot; .. mw.dumpObject(v)) end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		for k,v in pairs(jsondata) do&lt;br /&gt;
			local property_names = {}&lt;br /&gt;
			local mapping_found = false&lt;br /&gt;
			local property_definitions = {}&lt;br /&gt;
			if (context[k] ~= nil) then --json-ld mapping&lt;br /&gt;
				if type(context[k]) == &#039;table&#039; then table.insert(property_definitions, context[k][&amp;quot;@id&amp;quot;])&lt;br /&gt;
				else table.insert(property_definitions, context[k]) end&lt;br /&gt;
			end&lt;br /&gt;
			for term, def in pairs(context) do&lt;br /&gt;
				local term_parts = p.splitString(term, &amp;quot;*&amp;quot;)&lt;br /&gt;
				if (string.find(term, &amp;quot;*&amp;quot;, 0, true) and term_parts[1] == k) then --custom additional mapping term*(*...): &amp;quot;Property:...&amp;quot;&lt;br /&gt;
					table.insert(property_definitions, def)&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			if (debug) then mw.logObject(property_definitions) end&lt;br /&gt;
			for i,e in ipairs(property_definitions) do &lt;br /&gt;
				local property_definition = p.splitString(e, &#039;:&#039;)&lt;br /&gt;
				if property_definition[1] == p.keys.property_ns_prefix then&lt;br /&gt;
					mapping_found = true&lt;br /&gt;
					table.insert(property_names, property_definition[2])&lt;br /&gt;
					local schema_property = p.defaultArg(schema_properties[k], {})&lt;br /&gt;
					local schema_type = p.defaultArg(schema_property.type, nil) --todo: also load smw property type on demand&lt;br /&gt;
					property_data[k] = {schema_type=schema_type, schema_data=schema_property, property=property_definition[2], value=v}&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			for i, property_name in ipairs(property_names) do&lt;br /&gt;
				if (properties[property_name] == nil) then properties[property_name] = {} end --initialize empty list&lt;br /&gt;
			end&lt;br /&gt;
			if type(v) == &#039;table&#039; then &lt;br /&gt;
				--if (debug) then mw.logObject(&amp;quot;prop &amp;quot; .. k .. &amp;quot; = &amp;quot; .. mw.dumpObject(v)) end&lt;br /&gt;
				if (mapping_found) then&lt;br /&gt;
					local subcontext = p.copy(p.defaultArgPath(context, {k, p.keys.context}, {})) --deepcopy, see also https://phabricator.wikimedia.org/T269990&lt;br /&gt;
					context = p.tableMerge(context, subcontext) -- pull up nested context&lt;br /&gt;
					local values = {}&lt;br /&gt;
					if (v[1] == nil) then --key value array = object/dict&lt;br /&gt;
						local subproperties_res = p.getSemanticProperties({jsonschema=schema, jsondata=v, store=true, root=false, debug=debug, context=context, subschema=schema_properties[k], parent_schema_property=property_data[k]})&lt;br /&gt;
						local id = subproperties_res.id --subobject_id&lt;br /&gt;
						if (id ~= nil) then &lt;br /&gt;
							id = mw.title.getCurrentTitle().fullText .. &#039;#&#039; .. id&lt;br /&gt;
							table.insert(values, id) &lt;br /&gt;
						end&lt;br /&gt;
						properties = p.processStatement({subject=properties, statement=subproperties_res.properties, debug=debug}).subject&lt;br /&gt;
					else --list array&lt;br /&gt;
						for i, e in pairs(v) do&lt;br /&gt;
							if (type(e) == &#039;table&#039;) then &lt;br /&gt;
								local subproperties_res = p.getSemanticProperties({jsonschema=schema, jsondata=e, store=true, root=false, debug=debug, context=context, subschema=schema_properties[k], parent_schema_property=property_data[k]})&lt;br /&gt;
								local id = subproperties_res.id --subobject_id&lt;br /&gt;
								if (id ~= nil) then &lt;br /&gt;
									id = mw.title.getCurrentTitle().fullText .. &#039;#&#039; .. id&lt;br /&gt;
									table.insert(values, id) &lt;br /&gt;
								end&lt;br /&gt;
								properties = p.processStatement({subject=properties, statement=subproperties_res.properties, debug=debug}).subject&lt;br /&gt;
							else values = v end --plain strings&lt;br /&gt;
						end&lt;br /&gt;
					end &lt;br /&gt;
					for pi, property_name in ipairs(property_names) do&lt;br /&gt;
						for i,value in pairs(values) do table.insert(properties[property_name], value) end&lt;br /&gt;
						if (debug) then mw.logObject(&amp;quot;set &amp;quot; .. property_name .. &amp;quot; = &amp;quot; .. mw.dumpObject(values)) end&lt;br /&gt;
					end&lt;br /&gt;
				else if (debug) then mw.logObject(&amp;quot;not mapped: &amp;quot; .. k .. &amp;quot; = &amp;quot; .. mw.dumpObject(v)) end &lt;br /&gt;
				end&lt;br /&gt;
			else&lt;br /&gt;
				if (mapping_found) then &lt;br /&gt;
					for pi, property_name in ipairs(property_names) do&lt;br /&gt;
						table.insert(properties[property_name], v)&lt;br /&gt;
						if (debug) then mw.logObject(&amp;quot;set &amp;quot; .. property_name .. &amp;quot; = &amp;quot; .. mw.dumpObject(v)) end&lt;br /&gt;
					end&lt;br /&gt;
				else &lt;br /&gt;
					if (debug) then mw.logObject(&amp;quot;not mapped: &amp;quot; .. k .. &amp;quot; = &amp;quot; .. mw.dumpObject(v)) end &lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local subobjectId = nil&lt;br /&gt;
	local store_res = nil&lt;br /&gt;
	if (store) then &lt;br /&gt;
		if (root) then &lt;br /&gt;
			if (debug) then mw.logObject(&amp;quot;Store page properties&amp;quot;) end&lt;br /&gt;
			store_res = mw.smw.set( properties ) --store as semantic properties&lt;br /&gt;
		else&lt;br /&gt;
			&lt;br /&gt;
			if jsondata[&#039;uuid&#039;] ~= nil then subobjectId = &amp;quot;OSW&amp;quot; .. string.gsub(jsondata[&#039;uuid&#039;], &amp;quot;-&amp;quot;, &amp;quot;&amp;quot;) end&lt;br /&gt;
			properties[&#039;@category&#039;] = jsondata[p.keys.category]&lt;br /&gt;
			if (jsondata[p.keys.name] ~= nil) then properties[&#039;Display title of&#039;] = jsondata[p.keys.name] &lt;br /&gt;
			elseif (jsondata[p.keys.label] ~= nil and jsondata[p.keys.label][1] ~= nil) then properties[&#039;Display title of&#039;] = p.splitString(jsondata[p.keys.label][1], &#039;@&#039;)[1] &lt;br /&gt;
			else properties[&#039;Display title of&#039;] = p.defaultArg(parent_schema_property.schema_data[&#039;title&#039;], &amp;quot;&amp;quot;) end&lt;br /&gt;
			if (p.tableLength(properties) &amp;gt; 0) then&lt;br /&gt;
				store_res = mw.smw.subobject( properties, subobjectId )	--store as subobject&lt;br /&gt;
				if (debug) then mw.logObject(&amp;quot;Store subobject with id &amp;quot; .. (subobjectId or &amp;quot;&amp;lt;random&amp;gt;&amp;quot;)) end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if (debug) then mw.logObject(properties) end&lt;br /&gt;
	if (store_res ~= nil) then &lt;br /&gt;
		if (not store_res and store_res.error ~= nil) then error = error .. store_res.error end&lt;br /&gt;
	end&lt;br /&gt;
	if (debug) then mw.logObject(error) end&lt;br /&gt;
	return {properties=properties, definitions=property_data, id=subobjectId, context=context, error=error}&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.processStatement(args)&lt;br /&gt;
	local statement = p.defaultArg(args.statement)&lt;br /&gt;
	local subject = p.defaultArg(args.subject)&lt;br /&gt;
	local debug = p.defaultArg(args.debug, false)&lt;br /&gt;
&lt;br /&gt;
	-- handle &amp;quot;approved&amp;quot; statements&lt;br /&gt;
	if (statement[&amp;quot;HasSubject&amp;quot;] == nil or statement[&amp;quot;HasSubject&amp;quot;][1] == nil or statement[&amp;quot;HasSubject&amp;quot;][1] == &amp;quot;&amp;quot;) then --implicit subject&lt;br /&gt;
		if (statement[&amp;quot;HasProperty&amp;quot;] ~= nil and statement[&amp;quot;HasProperty&amp;quot;][1] ~= nil and statement[&amp;quot;HasProperty&amp;quot;][1] ~= &amp;quot;&amp;quot; and statement[&amp;quot;HasObject&amp;quot;] ~= nil) then&lt;br /&gt;
			local property = p.splitString(statement[&amp;quot;HasProperty&amp;quot;][1], &amp;quot;:&amp;quot;)[2]&lt;br /&gt;
			if (debug) then&lt;br /&gt;
				mw.log(&amp;quot;Set property &amp;quot; .. property .. &amp;quot; from statement to &amp;quot;)&lt;br /&gt;
				mw.logObject(statement[&amp;quot;HasObject&amp;quot;])&lt;br /&gt;
			end&lt;br /&gt;
			if (subject[property] == nil) then subject[property] = {} end&lt;br /&gt;
			for k, v in pairs(statement[&amp;quot;HasObject&amp;quot;]) do table.insert(subject[property], v) end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return {subject=subject}&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- build a semantic query based on provided properties and their schema definition&lt;br /&gt;
--[[ test: &lt;br /&gt;
mw.logObject(p.getSemanticQuery({&lt;br /&gt;
	jsonschema={&lt;br /&gt;
		[&amp;quot;@context&amp;quot;]={&lt;br /&gt;
			test=&amp;quot;Property:TestProperty&amp;quot;,&lt;br /&gt;
			number_max=&amp;quot;Property:HasNumber&amp;quot;,&lt;br /&gt;
			date_min=&amp;quot;Property:HasDate&amp;quot;&lt;br /&gt;
		}, &lt;br /&gt;
		properties={&lt;br /&gt;
			test={title=&amp;quot;Test&amp;quot;, type=&amp;quot;string&amp;quot;},&lt;br /&gt;
			number_max={title=&amp;quot;Number&amp;quot;, type=&amp;quot;string&amp;quot;, format=&amp;quot;number&amp;quot;, options={role={query={filter=&amp;quot;max&amp;quot;}}}},&lt;br /&gt;
			date_min={title=&amp;quot;Date&amp;quot;, type=&amp;quot;string&amp;quot;, format=&amp;quot;date&amp;quot;, options={role={query={filter=&amp;quot;min&amp;quot;}}}},&lt;br /&gt;
		}&lt;br /&gt;
	}, &lt;br /&gt;
	jsondata={test=&amp;quot;TestValue&amp;quot;, number_max=5, date_min=&amp;quot;01.01.2023&amp;quot;}&lt;br /&gt;
}))&lt;br /&gt;
--]]&lt;br /&gt;
function p.getSemanticQuery(args)&lt;br /&gt;
	--local jsondata = p.defaultArg(args.jsondata, {})&lt;br /&gt;
	--local schema = p.defaultArg(args.jsonschema, {})&lt;br /&gt;
	local res = &amp;quot;&amp;quot;&lt;br /&gt;
	local where = &amp;quot;&amp;quot;&lt;br /&gt;
	local select = &amp;quot;&amp;quot;&lt;br /&gt;
	local semantic_properties = p.getSemanticProperties(args)&lt;br /&gt;
	--mw.logObject(semantic_properties)&lt;br /&gt;
	for k,def in pairs(semantic_properties.definitions) do&lt;br /&gt;
		-- see also: https://www.semantic-mediawiki.org/wiki/Help:Search_operators&lt;br /&gt;
		local filter = p.defaultArgPath(def.schema_data, {&#039;options&#039;, &#039;role&#039;, &#039;query&#039;, &#039;filter&#039;}, &#039;eq&#039;)&lt;br /&gt;
		local value = def.value&lt;br /&gt;
		if def.schema_data.type == &#039;string&#039; and (def.schema_data.format == &#039;number&#039; or def.schema_data.format == &#039;date&#039;) then &lt;br /&gt;
			if (filter == &#039;min&#039;) then value = &amp;quot;&amp;lt;&amp;quot; .. value&lt;br /&gt;
			elseif (filter == &#039;max&#039;) then value = &amp;quot;&amp;gt;&amp;quot; .. value&lt;br /&gt;
			else value = value end --exact match&lt;br /&gt;
		elseif def.schema_data.type == &#039;string&#039; then&lt;br /&gt;
			value = &amp;quot;~*&amp;quot; .. value .. &amp;quot;*&amp;quot;&lt;br /&gt;
		end&lt;br /&gt;
		where = where .. &amp;quot;\n[[&amp;quot;.. def.property .. &amp;quot;::&amp;quot; .. value .. &amp;quot;]]&amp;quot;&lt;br /&gt;
		select = select .. &amp;quot;\n|?&amp;quot; .. def.property&lt;br /&gt;
		if (def.schema_data.title ~= nil) then select = select .. &amp;quot;=&amp;quot; .. def.schema_data.title end&lt;br /&gt;
	end&lt;br /&gt;
	if (where ~= &amp;quot;&amp;quot;) then res = &amp;quot;{{#ask:&amp;quot; .. res .. where .. select .. &amp;quot;}}&amp;quot; end&lt;br /&gt;
	return {wikitext=res}&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- HELPERS&lt;br /&gt;
&lt;br /&gt;
-- expands all $ref&lt;br /&gt;
--test: mw.logObject(p.expandJsonRef({json={items={test=&amp;quot;value&amp;quot;, [&amp;quot;$ref&amp;quot;]=&amp;quot;/wiki/JsonSchema:Label?action=raw&amp;quot;}}}).json)&lt;br /&gt;
--test: mw.logObject(p.expandJsonRef({json={[&amp;quot;$ref&amp;quot;]=&amp;quot;/wiki/Category:Item?action=raw&amp;amp;slot=jsonschema&amp;quot;}}).json)&lt;br /&gt;
--test: mw.logObject(p.expandJsonRef({json={[&amp;quot;$ref&amp;quot;]=&amp;quot;/wiki/JsonSchema:Statement?action=raw&amp;quot;}}).json)&lt;br /&gt;
function p.expandJsonRef(args)&lt;br /&gt;
	local json = p.defaultArg(args.json, {})&lt;br /&gt;
	local debug = p.defaultArg(args.debug, false)&lt;br /&gt;
	local refs = {}&lt;br /&gt;
    for k,v in pairs(json) do&lt;br /&gt;
    	if (k == &amp;quot;$ref&amp;quot;) then&lt;br /&gt;
    		-- e. g. &amp;quot;/wiki/JsonSchema:Label?action=raw&amp;quot; or &amp;quot;/wiki/Category:Entity?action=raw&amp;amp;slot=jsonschema&amp;quot;&lt;br /&gt;
    		if string.find(v, &amp;quot;#&amp;quot;) then&lt;br /&gt;
    			if (debug) then mw.logObject(&amp;quot;Skip relative reference&amp;quot;) end&lt;br /&gt;
    		else&lt;br /&gt;
	    		local uri = mw.uri.new(v)&lt;br /&gt;
	    		local ref_title = mw.text.split(uri.path, &amp;quot;wiki/&amp;quot;, true)[2]&lt;br /&gt;
	    		local ref_slot = uri.query[&amp;quot;slot&amp;quot;]&lt;br /&gt;
	    		if (debug) then &lt;br /&gt;
		    		if (ref_slot ~= nil) then mw.logObject(&amp;quot;Ref found with title &amp;quot; .. ref_title .. &amp;quot; and slot &amp;quot; .. ref_slot)&lt;br /&gt;
		    		else mw.logObject(&amp;quot;Ref found with title &amp;quot; .. ref_title) end&lt;br /&gt;
	    		end&lt;br /&gt;
	    		local ref_json = p.loadJson({title=ref_title, slot=ref_slot}).json&lt;br /&gt;
	    		refs[v] = ref_json&lt;br /&gt;
	    		json[k] = nil&lt;br /&gt;
    		end&lt;br /&gt;
    	end&lt;br /&gt;
    end&lt;br /&gt;
	--mw.logObject(refs)&lt;br /&gt;
	for k,v in pairs(refs) do&lt;br /&gt;
		json = p.tableMerge(v, json)&lt;br /&gt;
	end&lt;br /&gt;
    for k,v in pairs(json) do&lt;br /&gt;
    	if type(v) == &amp;quot;table&amp;quot; then&lt;br /&gt;
            json[k] = p.expandJsonRef({json=v}).json&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    return {json=json}&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.defaultArg(arg, default)&lt;br /&gt;
	if (arg == nil) then &lt;br /&gt;
		return default&lt;br /&gt;
	else&lt;br /&gt;
		return arg&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- returns the value of a table (dict) path or default, if the path is not defined&lt;br /&gt;
-- test: mw.logObject(p.defaultArgPath({some={defined={path=&amp;quot;value&amp;quot;}}}, {&amp;quot;some&amp;quot;, &amp;quot;defined&amp;quot;, &amp;quot;path&amp;quot;}, &amp;quot;default_value&amp;quot;))&lt;br /&gt;
-- test: mw.logObject(p.defaultArgPath({some={defined={path=&amp;quot;value&amp;quot;}}}, {&amp;quot;some&amp;quot;, &amp;quot;undefined&amp;quot;, &amp;quot;path&amp;quot;}, &amp;quot;default_value&amp;quot;))&lt;br /&gt;
function p.defaultArgPath(arg, path, default)&lt;br /&gt;
	if (arg == nil) then &lt;br /&gt;
		return default&lt;br /&gt;
	elseif (path == nil) then&lt;br /&gt;
		return arg&lt;br /&gt;
	else&lt;br /&gt;
		key = table.remove(path,1)&lt;br /&gt;
		if (key == nil) then return arg end  --end of path&lt;br /&gt;
		return p.defaultArgPath(arg[key], path, default)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.splitString(inputstr, sep)&lt;br /&gt;
	&lt;br /&gt;
        if sep == nil then&lt;br /&gt;
                sep = &amp;quot;;&amp;quot;&lt;br /&gt;
        end&lt;br /&gt;
        local t={}&lt;br /&gt;
        for str in string.gmatch(inputstr, &amp;quot;([^&amp;quot;..sep..&amp;quot;]+)&amp;quot;) do&lt;br /&gt;
                table.insert(t, str)&lt;br /&gt;
        end&lt;br /&gt;
        return t&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--dumps a table to a string (replaced by mw.dumpObject())&lt;br /&gt;
function p.dump(o)&lt;br /&gt;
   return mw.dumpObject(o)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--converts a literal to an table&lt;br /&gt;
function p.tablefy(o)&lt;br /&gt;
	if (o == nil) then o = {} end&lt;br /&gt;
	if (type(o) ~= &#039;table&#039;) then o = {o} end&lt;br /&gt;
	return o&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--true if the value is contained in the array (flat arrays only)&lt;br /&gt;
function p.tableContains (tab, val)&lt;br /&gt;
    for index, value in ipairs(tab) do&lt;br /&gt;
        if value == val then&lt;br /&gt;
            return true&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return false&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--get the size of a table&lt;br /&gt;
function p.tableLength(t)&lt;br /&gt;
  local count = 0&lt;br /&gt;
  for _ in pairs(t) do count = count + 1 end&lt;br /&gt;
  return count&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--check if a variable is nil or an empty string or table&lt;br /&gt;
function p.nilOrEmpty(o)&lt;br /&gt;
	if (o == nil) then return true&lt;br /&gt;
	elseif (type(o) == &#039;string&#039; and o == &amp;quot;&amp;quot;) then return true&lt;br /&gt;
	elseif (type(o) == &#039;table&#039; and p.tableLength(o) == 0) then return true&lt;br /&gt;
	else return false &lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- merges t2 to t1&lt;br /&gt;
--test: mw.logObject(p.tableMerge({&amp;quot;string&amp;quot;, test1=&amp;quot;test1&amp;quot;, subtable1={&amp;quot;test&amp;quot;}}, {&amp;quot;string2&amp;quot;, test1=&amp;quot;test2&amp;quot;, test3=&amp;quot;test4&amp;quot;}))&lt;br /&gt;
function p.tableMerge(t1, t2)&lt;br /&gt;
    for k,v in pairs(t2) do&lt;br /&gt;
        if type(v) == &amp;quot;table&amp;quot; then&lt;br /&gt;
            if type(t1[k] or false) == &amp;quot;table&amp;quot; then&lt;br /&gt;
                p.tableMerge(t1[k] or {}, t2[k] or {})&lt;br /&gt;
            else&lt;br /&gt;
                if type(k) == &#039;number&#039; then table.insert(t1, v)&lt;br /&gt;
            	else t1[k] = v end&lt;br /&gt;
            end&lt;br /&gt;
        else&lt;br /&gt;
        	if type(k) == &#039;number&#039; then table.insert(t1, v)&lt;br /&gt;
            else t1[k] = v end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    return t1&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- from https://stackoverflow.com/questions/640642/how-do-you-copy-a-lua-table-by-value&lt;br /&gt;
function p.copy(obj, seen)&lt;br /&gt;
  if type(obj) ~= &#039;table&#039; then return obj end&lt;br /&gt;
  if seen and seen[obj] then return seen[obj] end&lt;br /&gt;
  local s = seen or {}&lt;br /&gt;
  local res = setmetatable({}, getmetatable(obj))&lt;br /&gt;
  s[obj] = res&lt;br /&gt;
  for k, v in pairs(obj) do res[p.copy(k, s)] = p.copy(v, s) end&lt;br /&gt;
  return res&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Maintenance script</name></author>
	</entry>
	<entry>
		<id>https://onto-wiki.eu/w/index.php?title=Template:Editor/Wellplate&amp;diff=40</id>
		<title>Template:Editor/Wellplate</title>
		<link rel="alternate" type="text/html" href="https://onto-wiki.eu/w/index.php?title=Template:Editor/Wellplate&amp;diff=40"/>
		<updated>2023-03-25T05:55:36Z</updated>

		<summary type="html">&lt;p&gt;Maintenance script: Install package: OSW Core&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;includeonly&amp;gt;{{Template:Helper/UI/VE/Visible&lt;br /&gt;
|icon=die&lt;br /&gt;
|content=Wellplate &#039;&#039;{{{file_name}}}&#039;&#039;&lt;br /&gt;
}}&lt;br /&gt;
{{Template:Helper/UI/VE/Hidden &lt;br /&gt;
|content=&amp;lt;div class=&amp;quot;WellplateEditor&amp;quot; style=&amp;quot;display:hide;&amp;quot;&amp;gt;{{#replace:{{#replace: {{{page_name}}}|/|-}}|:|-}}-{{{file_name}}}.wellplate.svg&amp;lt;/div&amp;gt;&lt;br /&gt;
}}&amp;lt;/includeonly&amp;gt;&lt;br /&gt;
&amp;lt;noinclude&amp;gt;[[Category:OSL/Infrastructure/Template/User]]&lt;br /&gt;
&amp;lt;templatedata&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	&amp;quot;params&amp;quot;: {&lt;br /&gt;
		&amp;quot;file_name&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: {&lt;br /&gt;
				&amp;quot;en&amp;quot;: &amp;quot;Name&amp;quot;,&lt;br /&gt;
				&amp;quot;de&amp;quot;: &amp;quot;Name&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;quot;description&amp;quot;: {&lt;br /&gt;
				&amp;quot;en&amp;quot;: &amp;quot;Wellplate name&amp;quot;,&lt;br /&gt;
				&amp;quot;de&amp;quot;: &amp;quot;Name der Wellplatte, muss eindeutig auf dieser Seite sein&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
			&amp;quot;required&amp;quot;: true,&lt;br /&gt;
			&amp;quot;autovalue&amp;quot;: &amp;quot;wellplate-01&amp;quot;,&lt;br /&gt;
			&amp;quot;suggested&amp;quot;: true&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;page_name&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: {&lt;br /&gt;
				&amp;quot;en&amp;quot;: &amp;quot;Page name&amp;quot;,&lt;br /&gt;
				&amp;quot;de&amp;quot;: &amp;quot;Seitename&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;quot;description&amp;quot;: {&lt;br /&gt;
				&amp;quot;en&amp;quot;: &amp;quot;is filled in automatically&amp;quot;,&lt;br /&gt;
				&amp;quot;de&amp;quot;: &amp;quot;wird automatisch ausgefüllt&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;wiki-page-name&amp;quot;,&lt;br /&gt;
			&amp;quot;autovalue&amp;quot;: &amp;quot;{{subst:FULLPAGENAME}}&amp;quot;&lt;br /&gt;
		}&lt;br /&gt;
	},&lt;br /&gt;
	&amp;quot;description&amp;quot;: {&lt;br /&gt;
		&amp;quot;en&amp;quot;: &amp;quot;Adds a wellplate editor&amp;quot;,&lt;br /&gt;
		&amp;quot;de&amp;quot;: &amp;quot;Fügt einen Wellplatten-Editor hinzu &amp;quot;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/templatedata&amp;gt;&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Maintenance script</name></author>
	</entry>
	<entry>
		<id>https://onto-wiki.eu/w/index.php?title=Category:ObjectProperty&amp;diff=39</id>
		<title>Category:ObjectProperty</title>
		<link rel="alternate" type="text/html" href="https://onto-wiki.eu/w/index.php?title=Category:ObjectProperty&amp;diff=39"/>
		<updated>2023-03-25T05:55:36Z</updated>

		<summary type="html">&lt;p&gt;Maintenance script: Install package: OSW Core&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Maintenance script</name></author>
	</entry>
	<entry>
		<id>https://onto-wiki.eu/w/index.php?title=Template:Helper/UI/VE/Hidden&amp;diff=38</id>
		<title>Template:Helper/UI/VE/Hidden</title>
		<link rel="alternate" type="text/html" href="https://onto-wiki.eu/w/index.php?title=Template:Helper/UI/VE/Hidden&amp;diff=38"/>
		<updated>2023-03-25T05:55:34Z</updated>

		<summary type="html">&lt;p&gt;Maintenance script: Install package: OSW Core&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;Provides a div wrapper:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;ve-hidden&amp;quot;&amp;gt;&lt;br /&gt;
{{{content|}}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Default style visible gets overwritten by css selector:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
div.ve-hidden.ve-ce-leafNode.ve-ce-mwTransclusionNode { display:none!important; }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
&amp;lt;includeonly&amp;gt;&amp;lt;div class=&amp;quot;ve-hidden&amp;quot;&amp;gt;{{{content|}}}&amp;lt;/div&amp;gt;&amp;lt;/includeonly&amp;gt;&lt;/div&gt;</summary>
		<author><name>Maintenance script</name></author>
	</entry>
	<entry>
		<id>https://onto-wiki.eu/w/index.php?title=Template:Helper/UI/Tiles/Tile&amp;diff=37</id>
		<title>Template:Helper/UI/Tiles/Tile</title>
		<link rel="alternate" type="text/html" href="https://onto-wiki.eu/w/index.php?title=Template:Helper/UI/Tiles/Tile&amp;diff=37"/>
		<updated>2023-03-25T05:55:34Z</updated>

		<summary type="html">&lt;p&gt;Maintenance script: Install package: OSW Core&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;includeonly&amp;gt;&amp;lt;!-- &amp;lt;div class=&amp;quot;custom-link-tile title-font-size-24px text-font-size-12px&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;custom-link-tile-url&amp;quot;&amp;gt;{{{link|}}}&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;custom-link-tile-title&amp;quot;&amp;gt;{{{title|}}}&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;custom-link-tile-image&amp;quot;&amp;gt;{{{image|}}}&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;custom-link-tile-text&amp;quot;&amp;gt;{{{description|}}}&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;custom-link-tile-tooltip&amp;quot;&amp;gt;{{{tooltip|}}}&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt; --&amp;gt;&lt;br /&gt;
 &amp;lt;li class=&amp;quot;custom-link-tile2_item {{#if: {{{category|}}}|linear-background|}}&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;div class=&amp;quot;custom-link-tile2 {{#if: {{{category|}}}|pagebot-tile|}}&amp;quot; {{#if: {{{category|}}}|style=&amp;quot;visibility:hidden&amp;quot; data-config=&#039;{&amp;quot;action&amp;quot;: &amp;quot;{{{action|create-instance}}}&amp;quot;, &amp;quot;categories&amp;quot;: [&amp;quot;{{{category|}}}&amp;quot;]}&#039;|}}&amp;gt;&lt;br /&gt;
        &amp;lt;!-- &amp;lt;div class=&amp;quot;custom-link-tile2_image-section&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;div class=&amp;quot;custom-link-tile2_image-section-left&amp;quot;&amp;gt;{{{icon_ltext|}}}&amp;lt;/div&amp;gt; --&amp;gt;&lt;br /&gt;
          &amp;lt;div class=&amp;quot;custom-link-tile2_image&amp;quot; data-icon-ltext=&amp;quot;&amp;quot; data-icon-1=&amp;quot;{{{icon1|}}}&amp;quot; data-icon-2=&amp;quot;{{{icon2|}}}&amp;quot;&amp;gt;{{{image|}}}&amp;lt;/div&amp;gt;&lt;br /&gt;
          &amp;lt;!-- &amp;lt;div class=&amp;quot;custom-link-tile2_image-section-right&amp;quot;&amp;gt;{{{icon_rtext|}}}&amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;/div&amp;gt; --&amp;gt;&lt;br /&gt;
        &amp;lt;div class=&amp;quot;custom-link-tile2_image-caption&amp;quot;&amp;gt;{{{caption|}}}&amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;div class=&amp;quot;custom-link-tile2_content&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;p class=&amp;quot;custom-link-tile2_title&amp;quot;&amp;gt;{{{title|}}}&amp;lt;/p&amp;gt;&lt;br /&gt;
          &amp;lt;p class=&amp;quot;custom-link-tile2_text&amp;quot;&amp;gt;{{{description|}}}&amp;lt;/p&amp;gt;&lt;br /&gt;
          &amp;lt;div class=&amp;quot;custom-link-tile2_btn&amp;quot;&amp;gt;{{#if:{{{url|}}}|[{{#ifeq:{{#sub:{{{url|}}}|0|2}}|/w|{{SERVER}}|}}{{{url|}}} {{{link_label|{{{title|}}}}}}]|}}{{{link|}}}&amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
      &amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/li&amp;gt;&amp;lt;/includeonly&amp;gt;&lt;/div&gt;</summary>
		<author><name>Maintenance script</name></author>
	</entry>
	<entry>
		<id>https://onto-wiki.eu/w/index.php?title=Module:Lustache&amp;diff=36</id>
		<title>Module:Lustache</title>
		<link rel="alternate" type="text/html" href="https://onto-wiki.eu/w/index.php?title=Module:Lustache&amp;diff=36"/>
		<updated>2023-03-25T05:55:33Z</updated>

		<summary type="html">&lt;p&gt;Maintenance script: Install package: OSW Core&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;-- lustache: Lua mustache template parsing.&lt;br /&gt;
-- Copyright 2013 Olivine Labs, LLC &amp;lt;projects@olivinelabs.com&amp;gt;&lt;br /&gt;
-- MIT Licensed.&lt;br /&gt;
&lt;br /&gt;
local string_gmatch = string.gmatch&lt;br /&gt;
&lt;br /&gt;
function string.split(str, sep)&lt;br /&gt;
  local out = {}&lt;br /&gt;
  for m in string_gmatch(str, &amp;quot;[^&amp;quot;..sep..&amp;quot;]+&amp;quot;) do out[#out+1] = m end&lt;br /&gt;
  return out&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local lustache = {&lt;br /&gt;
  name     = &amp;quot;lustache&amp;quot;,&lt;br /&gt;
  version  = &amp;quot;1.3.1-0&amp;quot;,&lt;br /&gt;
  renderer = require(&amp;quot;Module:Lustache/Renderer&amp;quot;):new(),&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
return setmetatable(lustache, {&lt;br /&gt;
  __index = function(self, idx)&lt;br /&gt;
    if self.renderer[idx] then return self.renderer[idx] end&lt;br /&gt;
  end,&lt;br /&gt;
  __newindex = function(self, idx, val)&lt;br /&gt;
    if idx == &amp;quot;partials&amp;quot; then self.renderer.partials = val end&lt;br /&gt;
    if idx == &amp;quot;tags&amp;quot; then self.renderer.tags = val end&lt;br /&gt;
  end&lt;br /&gt;
})&lt;/div&gt;</summary>
		<author><name>Maintenance script</name></author>
	</entry>
	<entry>
		<id>https://onto-wiki.eu/w/index.php?title=Category:Item&amp;diff=35</id>
		<title>Category:Item</title>
		<link rel="alternate" type="text/html" href="https://onto-wiki.eu/w/index.php?title=Category:Item&amp;diff=35"/>
		<updated>2023-03-25T05:55:28Z</updated>

		<summary type="html">&lt;p&gt;Maintenance script: Install package: OSW Core&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Maintenance script</name></author>
	</entry>
	<entry>
		<id>https://onto-wiki.eu/w/index.php?title=Module:Lustache/Renderer&amp;diff=34</id>
		<title>Module:Lustache/Renderer</title>
		<link rel="alternate" type="text/html" href="https://onto-wiki.eu/w/index.php?title=Module:Lustache/Renderer&amp;diff=34"/>
		<updated>2023-03-25T05:55:27Z</updated>

		<summary type="html">&lt;p&gt;Maintenance script: Install package: OSW Core&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local Scanner  = require(&amp;quot;Module:Lustache/Scanner&amp;quot;)&lt;br /&gt;
local Context  = require(&amp;quot;Module:Lustache/Context&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
local error, ipairs, pairs, setmetatable, tostring, type = &lt;br /&gt;
      error, ipairs, pairs, setmetatable, tostring, type &lt;br /&gt;
local math_floor, math_max, string_find, string_gsub, string_split, string_sub, table_concat, table_insert, table_remove =&lt;br /&gt;
      math.floor, math.max, string.find, string.gsub, string.split, string.sub, table.concat, table.insert, table.remove&lt;br /&gt;
&lt;br /&gt;
local patterns = {&lt;br /&gt;
  white = &amp;quot;%s*&amp;quot;,&lt;br /&gt;
  space = &amp;quot;%s+&amp;quot;,&lt;br /&gt;
  nonSpace = &amp;quot;%S&amp;quot;,&lt;br /&gt;
  eq = &amp;quot;%s*=&amp;quot;,&lt;br /&gt;
  curly = &amp;quot;%s*}&amp;quot;,&lt;br /&gt;
  tag = &amp;quot;[#\\^/&amp;gt;{&amp;amp;=!?]&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local html_escape_characters = {&lt;br /&gt;
  [&amp;quot;&amp;amp;&amp;quot;] = &amp;quot;&amp;amp;amp;&amp;quot;,&lt;br /&gt;
  [&amp;quot;&amp;lt;&amp;quot;] = &amp;quot;&amp;amp;lt;&amp;quot;,&lt;br /&gt;
  [&amp;quot;&amp;gt;&amp;quot;] = &amp;quot;&amp;amp;gt;&amp;quot;,&lt;br /&gt;
  [&#039;&amp;quot;&#039;] = &amp;quot;&amp;amp;quot;&amp;quot;,&lt;br /&gt;
  [&amp;quot;&#039;&amp;quot;] = &amp;quot;&amp;amp;#39;&amp;quot;,&lt;br /&gt;
  [&amp;quot;/&amp;quot;] = &amp;quot;&amp;amp;#x2F;&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local block_tags = {&lt;br /&gt;
  [&amp;quot;#&amp;quot;] = true,&lt;br /&gt;
  [&amp;quot;^&amp;quot;] = true,&lt;br /&gt;
  [&amp;quot;?&amp;quot;] = true,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local function is_array(array)&lt;br /&gt;
  if type(array) ~= &amp;quot;table&amp;quot; then return false end&lt;br /&gt;
  local max, n = 0, 0&lt;br /&gt;
  for k, _ in pairs(array) do&lt;br /&gt;
    if not (type(k) == &amp;quot;number&amp;quot; and k &amp;gt; 0 and math_floor(k) == k) then&lt;br /&gt;
      return false &lt;br /&gt;
    end&lt;br /&gt;
    max = math_max(max, k)&lt;br /&gt;
    n = n + 1&lt;br /&gt;
  end&lt;br /&gt;
  return n == max&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Low-level function that compiles the given `tokens` into a&lt;br /&gt;
-- function that accepts two arguments: a Context and a&lt;br /&gt;
-- Renderer.&lt;br /&gt;
&lt;br /&gt;
local function compile_tokens(tokens, originalTemplate)&lt;br /&gt;
  local subs = {}&lt;br /&gt;
&lt;br /&gt;
  local function subrender(i, tokens)&lt;br /&gt;
    if not subs[i] then&lt;br /&gt;
      local fn = compile_tokens(tokens, originalTemplate)&lt;br /&gt;
      subs[i] = function(ctx, rnd) return fn(ctx, rnd) end&lt;br /&gt;
    end&lt;br /&gt;
    return subs[i]&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  local function render(ctx, rnd)&lt;br /&gt;
    local buf = {}&lt;br /&gt;
    local token, section&lt;br /&gt;
    for i, token in ipairs(tokens) do&lt;br /&gt;
      local t = token.type&lt;br /&gt;
      buf[#buf+1] = &lt;br /&gt;
        t == &amp;quot;?&amp;quot; and rnd:_conditional(&lt;br /&gt;
          token, ctx, subrender(i, token.tokens)&lt;br /&gt;
        ) or&lt;br /&gt;
        t == &amp;quot;#&amp;quot; and rnd:_section(&lt;br /&gt;
          token, ctx, subrender(i, token.tokens), originalTemplate&lt;br /&gt;
        ) or&lt;br /&gt;
        t == &amp;quot;^&amp;quot; and rnd:_inverted(&lt;br /&gt;
          token.value, ctx, subrender(i, token.tokens)&lt;br /&gt;
        ) or&lt;br /&gt;
        t == &amp;quot;&amp;gt;&amp;quot; and rnd:_partial(token.value, ctx, originalTemplate) or&lt;br /&gt;
        (t == &amp;quot;{&amp;quot; or t == &amp;quot;&amp;amp;&amp;quot;) and rnd:_name(token.value, ctx, false) or&lt;br /&gt;
        t == &amp;quot;name&amp;quot; and rnd:_name(token.value, ctx, true) or&lt;br /&gt;
        t == &amp;quot;text&amp;quot; and token.value or &amp;quot;&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    return table_concat(buf)&lt;br /&gt;
  end&lt;br /&gt;
  return render&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function escape_tags(tags)&lt;br /&gt;
&lt;br /&gt;
  return {&lt;br /&gt;
    string_gsub(tags[1], &amp;quot;%%&amp;quot;, &amp;quot;%%%%&amp;quot;)..&amp;quot;%s*&amp;quot;,&lt;br /&gt;
    &amp;quot;%s*&amp;quot;..string_gsub(tags[2], &amp;quot;%%&amp;quot;, &amp;quot;%%%%&amp;quot;),&lt;br /&gt;
  }&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function nest_tokens(tokens)&lt;br /&gt;
  local tree = {}&lt;br /&gt;
  local collector = tree &lt;br /&gt;
  local sections = {}&lt;br /&gt;
  local token, section&lt;br /&gt;
&lt;br /&gt;
  for i,token in ipairs(tokens) do&lt;br /&gt;
    if block_tags[token.type] then&lt;br /&gt;
      token.tokens = {}&lt;br /&gt;
      sections[#sections+1] = token&lt;br /&gt;
      collector[#collector+1] = token&lt;br /&gt;
      collector = token.tokens&lt;br /&gt;
    elseif token.type == &amp;quot;/&amp;quot; then&lt;br /&gt;
      if #sections == 0 then&lt;br /&gt;
        error(&amp;quot;Unopened section: &amp;quot;..token.value)&lt;br /&gt;
      end&lt;br /&gt;
&lt;br /&gt;
      -- Make sure there are no open sections when we&#039;re done&lt;br /&gt;
      section = table_remove(sections, #sections)&lt;br /&gt;
&lt;br /&gt;
      if not section.value == token.value then&lt;br /&gt;
        error(&amp;quot;Unclosed section: &amp;quot;..section.value)&lt;br /&gt;
      end&lt;br /&gt;
&lt;br /&gt;
      section.closingTagIndex = token.startIndex&lt;br /&gt;
&lt;br /&gt;
      if #sections &amp;gt; 0 then&lt;br /&gt;
        collector = sections[#sections].tokens&lt;br /&gt;
      else&lt;br /&gt;
        collector = tree&lt;br /&gt;
      end&lt;br /&gt;
    else&lt;br /&gt;
      collector[#collector+1] = token&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  section = table_remove(sections, #sections)&lt;br /&gt;
&lt;br /&gt;
  if section then&lt;br /&gt;
    error(&amp;quot;Unclosed section: &amp;quot;..section.value)&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  return tree&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Combines the values of consecutive text tokens in the given `tokens` array&lt;br /&gt;
-- to a single token.&lt;br /&gt;
local function squash_tokens(tokens)&lt;br /&gt;
  local out, txt = {}, {}&lt;br /&gt;
  local txtStartIndex, txtEndIndex&lt;br /&gt;
  for _, v in ipairs(tokens) do&lt;br /&gt;
    if v.type == &amp;quot;text&amp;quot; then&lt;br /&gt;
      if #txt == 0 then&lt;br /&gt;
        txtStartIndex = v.startIndex&lt;br /&gt;
      end&lt;br /&gt;
      txt[#txt+1] = v.value&lt;br /&gt;
      txtEndIndex = v.endIndex&lt;br /&gt;
    else&lt;br /&gt;
      if #txt &amp;gt; 0 then&lt;br /&gt;
        out[#out+1] = { type = &amp;quot;text&amp;quot;, value = table_concat(txt), startIndex = txtStartIndex, endIndex = txtEndIndex }&lt;br /&gt;
        txt = {}&lt;br /&gt;
      end&lt;br /&gt;
      out[#out+1] = v&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
  if #txt &amp;gt; 0 then&lt;br /&gt;
    out[#out+1] = { type = &amp;quot;text&amp;quot;, value = table_concat(txt), startIndex = txtStartIndex, endIndex = txtEndIndex  }&lt;br /&gt;
  end&lt;br /&gt;
  return out&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function make_context(view)&lt;br /&gt;
  if not view then return view end&lt;br /&gt;
  return getmetatable(view) == Context and view or Context:new(view)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local renderer = { }&lt;br /&gt;
&lt;br /&gt;
function renderer:clear_cache()&lt;br /&gt;
  self.cache = {}&lt;br /&gt;
  self.partial_cache = {}&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function renderer:compile(tokens, tags, originalTemplate)&lt;br /&gt;
  tags = tags or self.tags&lt;br /&gt;
  if type(tokens) == &amp;quot;string&amp;quot; then&lt;br /&gt;
    tokens = self:parse(tokens, tags)&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  local fn = compile_tokens(tokens, originalTemplate)&lt;br /&gt;
&lt;br /&gt;
  return function(view)&lt;br /&gt;
    return fn(make_context(view), self)&lt;br /&gt;
  end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function renderer:render(template, view, partials)&lt;br /&gt;
  if type(self) == &amp;quot;string&amp;quot; then&lt;br /&gt;
    error(&amp;quot;Call mustache:render, not mustache.render!&amp;quot;)&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  if partials then&lt;br /&gt;
    -- remember partial table&lt;br /&gt;
    -- used for runtime lookup &amp;amp; compile later on&lt;br /&gt;
    self.partials = partials&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  if not template then&lt;br /&gt;
    return &amp;quot;&amp;quot;&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  local fn = self.cache[template]&lt;br /&gt;
&lt;br /&gt;
  if not fn then&lt;br /&gt;
    fn = self:compile(template, self.tags, template)&lt;br /&gt;
    self.cache[template] = fn&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  return fn(view)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function renderer:_conditional(token, context, callback)&lt;br /&gt;
  local value = context:lookup(token.value)&lt;br /&gt;
&lt;br /&gt;
  if value then&lt;br /&gt;
    return callback(context, self)&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  return &amp;quot;&amp;quot;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function renderer:_section(token, context, callback, originalTemplate)&lt;br /&gt;
  local value = context:lookup(token.value)&lt;br /&gt;
&lt;br /&gt;
  if type(value) == &amp;quot;table&amp;quot; then&lt;br /&gt;
    if is_array(value) then&lt;br /&gt;
      local buffer = &amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
      for i,v in ipairs(value) do&lt;br /&gt;
        buffer = buffer .. callback(context:push(v), self)&lt;br /&gt;
      end&lt;br /&gt;
&lt;br /&gt;
      return buffer&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return callback(context:push(value), self)&lt;br /&gt;
  elseif type(value) == &amp;quot;function&amp;quot; then&lt;br /&gt;
    local section_text = string_sub(originalTemplate, token.endIndex+1, token.closingTagIndex - 1)&lt;br /&gt;
&lt;br /&gt;
    local scoped_render = function(template)&lt;br /&gt;
      return self:render(template, context)&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return value(section_text, scoped_render) or &amp;quot;&amp;quot;&lt;br /&gt;
  else&lt;br /&gt;
    if value then&lt;br /&gt;
      return callback(context, self)&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  return &amp;quot;&amp;quot;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function renderer:_inverted(name, context, callback)&lt;br /&gt;
  local value = context:lookup(name)&lt;br /&gt;
&lt;br /&gt;
  -- From the spec: inverted sections may render text once based on the&lt;br /&gt;
  -- inverse value of the key. That is, they will be rendered if the key&lt;br /&gt;
  -- doesn&#039;t exist, is false, or is an empty list.&lt;br /&gt;
&lt;br /&gt;
  if value == nil or value == false or (type(value) == &amp;quot;table&amp;quot; and is_array(value) and #value == 0) then&lt;br /&gt;
    return callback(context, self)&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  return &amp;quot;&amp;quot;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function renderer:_partial(name, context, originalTemplate)&lt;br /&gt;
  local fn = self.partial_cache[name]&lt;br /&gt;
&lt;br /&gt;
  -- check if partial cache exists&lt;br /&gt;
  if (not fn and self.partials) then&lt;br /&gt;
&lt;br /&gt;
    local partial = self.partials[name]&lt;br /&gt;
    if (not partial) then&lt;br /&gt;
      return &amp;quot;&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    -- compile partial and store result in cache&lt;br /&gt;
    fn = self:compile(partial, nil, partial)&lt;br /&gt;
    self.partial_cache[name] = fn&lt;br /&gt;
  end&lt;br /&gt;
  return fn and fn(context, self) or &amp;quot;&amp;quot;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function renderer:_name(name, context, escape)&lt;br /&gt;
  local value = context:lookup(name)&lt;br /&gt;
&lt;br /&gt;
  if type(value) == &amp;quot;function&amp;quot; then&lt;br /&gt;
    value = value(context.view)&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  local str = value == nil and &amp;quot;&amp;quot; or value&lt;br /&gt;
  str = tostring(str)&lt;br /&gt;
&lt;br /&gt;
  if escape then&lt;br /&gt;
    return string_gsub(str, &#039;[&amp;amp;&amp;lt;&amp;gt;&amp;quot;\&#039;/]&#039;, function(s) return html_escape_characters[s] end)&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  return str&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Breaks up the given `template` string into a tree of token objects. If&lt;br /&gt;
-- `tags` is given here it must be an array with two string values: the&lt;br /&gt;
-- opening and closing tags used in the template (e.g. [&amp;quot;&amp;lt;%&amp;quot;, &amp;quot;%&amp;gt;&amp;quot;]). Of&lt;br /&gt;
-- course, the default is to use mustaches (i.e. Mustache.tags).&lt;br /&gt;
function renderer:parse(template, tags)&lt;br /&gt;
  tags = tags or self.tags&lt;br /&gt;
  local tag_patterns = escape_tags(tags)&lt;br /&gt;
  local scanner = Scanner:new(template)&lt;br /&gt;
  local tokens = {} -- token buffer&lt;br /&gt;
  local spaces = {} -- indices of whitespace tokens on the current line&lt;br /&gt;
  local has_tag = false -- is there a {{tag} on the current line?&lt;br /&gt;
  local non_space = false -- is there a non-space char on the current line?&lt;br /&gt;
&lt;br /&gt;
  -- Strips all whitespace tokens array for the current line if there was&lt;br /&gt;
  -- a {{#tag}} on it and otherwise only space&lt;br /&gt;
  local function strip_space()&lt;br /&gt;
    if has_tag and not non_space then&lt;br /&gt;
      while #spaces &amp;gt; 0 do&lt;br /&gt;
        table_remove(tokens, table_remove(spaces))&lt;br /&gt;
      end&lt;br /&gt;
    else&lt;br /&gt;
      spaces = {}&lt;br /&gt;
    end&lt;br /&gt;
    has_tag = false&lt;br /&gt;
    non_space = false&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  local type, value, chr&lt;br /&gt;
&lt;br /&gt;
  while not scanner:eos() do&lt;br /&gt;
    local start = scanner.pos&lt;br /&gt;
&lt;br /&gt;
    value = scanner:scan_until(tag_patterns[1])&lt;br /&gt;
&lt;br /&gt;
    if value then&lt;br /&gt;
      for i = 1, #value do&lt;br /&gt;
        chr = string_sub(value,i,i)&lt;br /&gt;
&lt;br /&gt;
        if string_find(chr, &amp;quot;%s+&amp;quot;) then&lt;br /&gt;
          spaces[#spaces+1] = #tokens + 1&lt;br /&gt;
        else&lt;br /&gt;
          non_space = true&lt;br /&gt;
        end&lt;br /&gt;
&lt;br /&gt;
        tokens[#tokens+1] = { type = &amp;quot;text&amp;quot;, value = chr, startIndex = start, endIndex = start }&lt;br /&gt;
        start = start + 1&lt;br /&gt;
        if chr == &amp;quot;\n&amp;quot; then&lt;br /&gt;
          strip_space()&lt;br /&gt;
        end&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    if not scanner:scan(tag_patterns[1]) then&lt;br /&gt;
      break&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    has_tag = true&lt;br /&gt;
    type = scanner:scan(patterns.tag) or &amp;quot;name&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    scanner:scan(patterns.white)&lt;br /&gt;
&lt;br /&gt;
    if type == &amp;quot;=&amp;quot; then&lt;br /&gt;
      value = scanner:scan_until(patterns.eq)&lt;br /&gt;
      scanner:scan(patterns.eq)&lt;br /&gt;
      scanner:scan_until(tag_patterns[2])&lt;br /&gt;
    elseif type == &amp;quot;{&amp;quot; then&lt;br /&gt;
      local close_pattern = &amp;quot;%s*}&amp;quot;..tags[2]&lt;br /&gt;
      value = scanner:scan_until(close_pattern)&lt;br /&gt;
      scanner:scan(patterns.curly)&lt;br /&gt;
      scanner:scan_until(tag_patterns[2])&lt;br /&gt;
    else&lt;br /&gt;
      value = scanner:scan_until(tag_patterns[2])&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    if not scanner:scan(tag_patterns[2]) then&lt;br /&gt;
      error(&amp;quot;Unclosed tag &amp;quot; .. value .. &amp;quot; of type &amp;quot; .. type .. &amp;quot; at position &amp;quot; .. scanner.pos)&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    tokens[#tokens+1] = { type = type, value = value, startIndex = start, endIndex = scanner.pos - 1 }&lt;br /&gt;
    if type == &amp;quot;name&amp;quot; or type == &amp;quot;{&amp;quot; or type == &amp;quot;&amp;amp;&amp;quot; then&lt;br /&gt;
      non_space = true --&amp;gt; what does this do?&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    if type == &amp;quot;=&amp;quot; then&lt;br /&gt;
      tags = string_split(value, patterns.space)&lt;br /&gt;
      tag_patterns = escape_tags(tags)&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  return nest_tokens(squash_tokens(tokens))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function renderer:new()&lt;br /&gt;
  local out = { &lt;br /&gt;
    cache         = {},&lt;br /&gt;
    partial_cache = {},&lt;br /&gt;
    tags          = {&amp;quot;{{&amp;quot;, &amp;quot;}}&amp;quot;}&lt;br /&gt;
  }&lt;br /&gt;
  return setmetatable(out, { __index = self })&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return renderer&lt;/div&gt;</summary>
		<author><name>Maintenance script</name></author>
	</entry>
	<entry>
		<id>https://onto-wiki.eu/w/index.php?title=JsonSchema:Statement&amp;diff=33</id>
		<title>JsonSchema:Statement</title>
		<link rel="alternate" type="text/html" href="https://onto-wiki.eu/w/index.php?title=JsonSchema:Statement&amp;diff=33"/>
		<updated>2023-03-25T05:55:26Z</updated>

		<summary type="html">&lt;p&gt;Maintenance script: Install package: OSW Core&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{&lt;br /&gt;
    &amp;quot;@context&amp;quot;: {&lt;br /&gt;
        &amp;quot;Property&amp;quot;: &amp;quot;https://wiki-dev.open-semantic-lab.org/id/Property-3A&amp;quot;,&lt;br /&gt;
        &amp;quot;subject&amp;quot;: &amp;quot;Property:HasSubject&amp;quot;,&lt;br /&gt;
        &amp;quot;predicate&amp;quot;: &amp;quot;Property:HasProperty&amp;quot;,&lt;br /&gt;
        &amp;quot;property&amp;quot;: &amp;quot;Property:HasProperty&amp;quot;,&lt;br /&gt;
        &amp;quot;quantity&amp;quot;: &amp;quot;Property:HasProperty&amp;quot;,&lt;br /&gt;
        &amp;quot;object&amp;quot;: &amp;quot;Property:HasObject&amp;quot;,&lt;br /&gt;
        &amp;quot;value&amp;quot;: &amp;quot;Property:HasObject&amp;quot;,&lt;br /&gt;
        &amp;quot;unit&amp;quot;: &amp;quot;Property:HasUnit&amp;quot;,&lt;br /&gt;
        &amp;quot;substatements&amp;quot;: &amp;quot;Property:HasStatement&amp;quot;,&lt;br /&gt;
        &amp;quot;label&amp;quot;: &amp;quot;Property:HasLabel&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;common_definitions&amp;quot;: {},&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;,&lt;br /&gt;
    &amp;quot;id&amp;quot;: &amp;quot;statement&amp;quot;,&lt;br /&gt;
    &amp;quot;required&amp;quot;: [&lt;br /&gt;
        &amp;quot;uuid&amp;quot;&lt;br /&gt;
    ],&lt;br /&gt;
    &amp;quot;properties&amp;quot;: {&lt;br /&gt;
        &amp;quot;uuid&amp;quot;: {&lt;br /&gt;
            &amp;quot;title&amp;quot;: &amp;quot;UUID&amp;quot;,&lt;br /&gt;
            &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
            &amp;quot;format&amp;quot;: &amp;quot;uuid&amp;quot;,&lt;br /&gt;
            &amp;quot;options&amp;quot;: {&lt;br /&gt;
                &amp;quot;hidden&amp;quot;: true&lt;br /&gt;
            }&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;label&amp;quot;: {&lt;br /&gt;
            &amp;quot;title&amp;quot;: &amp;quot;Label&amp;quot;,&lt;br /&gt;
            &amp;quot;description&amp;quot;: &amp;quot;Human readable name&amp;quot;,&lt;br /&gt;
            &amp;quot;type&amp;quot;: &amp;quot;array&amp;quot;,&lt;br /&gt;
            &amp;quot;items&amp;quot;: {&lt;br /&gt;
                &amp;quot;title&amp;quot;: &amp;quot;Label&amp;quot;,&lt;br /&gt;
                &amp;quot;title*&amp;quot;: {&lt;br /&gt;
                    &amp;quot;de&amp;quot;: &amp;quot;Name&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                &amp;quot;eval_template&amp;quot;: [&lt;br /&gt;
                    {&lt;br /&gt;
                        &amp;quot;type&amp;quot;: &amp;quot;wikitext&amp;quot;,&lt;br /&gt;
                        &amp;quot;mode&amp;quot;: &amp;quot;store&amp;quot;,&lt;br /&gt;
                        &amp;quot;value&amp;quot;: &amp;quot;{{{text}}}@{{{lang}}}&amp;quot;&lt;br /&gt;
                    }&lt;br /&gt;
                ],&lt;br /&gt;
                &amp;quot;$ref&amp;quot;: &amp;quot;/wiki/JsonSchema:Label?action=raw&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;subject&amp;quot;: {&lt;br /&gt;
            &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
            &amp;quot;format&amp;quot;: &amp;quot;autocomplete&amp;quot;,&lt;br /&gt;
            &amp;quot;title&amp;quot;: &amp;quot;Subject&amp;quot;,&lt;br /&gt;
            &amp;quot;title*&amp;quot;: {&lt;br /&gt;
                &amp;quot;de&amp;quot;: &amp;quot;Subjekt&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;options&amp;quot;: {&lt;br /&gt;
                &amp;quot;autocomplete&amp;quot;: {&lt;br /&gt;
                    &amp;quot;category&amp;quot;: &amp;quot;Category:Entity&amp;quot;,&lt;br /&gt;
                    &amp;quot;query_filter_property&amp;quot;: &amp;quot;HasName&amp;quot;&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;substatements&amp;quot;: {&lt;br /&gt;
            &amp;quot;title&amp;quot;: &amp;quot;Substatements&amp;quot;,&lt;br /&gt;
            &amp;quot;type&amp;quot;: &amp;quot;array&amp;quot;,&lt;br /&gt;
            &amp;quot;format&amp;quot;: &amp;quot;tabs&amp;quot;,&lt;br /&gt;
            &amp;quot;items&amp;quot;: {&lt;br /&gt;
                &amp;quot;$ref&amp;quot;: &amp;quot;#&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;oneOf&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;$ref&amp;quot;: &amp;quot;#/common_definitions&amp;quot;,&lt;br /&gt;
            &amp;quot;title&amp;quot;: &amp;quot;Object Statement&amp;quot;,&lt;br /&gt;
            &amp;quot;headerTemplate&amp;quot;: &amp;quot;... {{self.predicate}} ...&amp;quot;,&lt;br /&gt;
            &amp;quot;required&amp;quot;: [&lt;br /&gt;
                &amp;quot;uuid&amp;quot;,&lt;br /&gt;
                &amp;quot;predicate&amp;quot;,&lt;br /&gt;
                &amp;quot;object&amp;quot;&lt;br /&gt;
            ],&lt;br /&gt;
            &amp;quot;properties&amp;quot;: {&lt;br /&gt;
                &amp;quot;predicate&amp;quot;: {&lt;br /&gt;
                    &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
                    &amp;quot;format&amp;quot;: &amp;quot;autocomplete&amp;quot;,&lt;br /&gt;
                    &amp;quot;title&amp;quot;: &amp;quot;Predicate&amp;quot;,&lt;br /&gt;
                    &amp;quot;title*&amp;quot;: {&lt;br /&gt;
                        &amp;quot;de&amp;quot;: &amp;quot;Prädikat&amp;quot;&lt;br /&gt;
                    },&lt;br /&gt;
                    &amp;quot;options&amp;quot;: {&lt;br /&gt;
                        &amp;quot;autocomplete&amp;quot;: {&lt;br /&gt;
                            &amp;quot;category&amp;quot;: &amp;quot;Category:Property&amp;quot;&lt;br /&gt;
                        }&lt;br /&gt;
                    }&lt;br /&gt;
                },&lt;br /&gt;
                &amp;quot;object&amp;quot;: {&lt;br /&gt;
                    &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
                    &amp;quot;format&amp;quot;: &amp;quot;autocomplete&amp;quot;,&lt;br /&gt;
                    &amp;quot;title&amp;quot;: &amp;quot;Object&amp;quot;,&lt;br /&gt;
                    &amp;quot;title*&amp;quot;: {&lt;br /&gt;
                        &amp;quot;de&amp;quot;: &amp;quot;Objekt&amp;quot;&lt;br /&gt;
                    },&lt;br /&gt;
                    &amp;quot;options&amp;quot;: {&lt;br /&gt;
                        &amp;quot;autocomplete&amp;quot;: {&lt;br /&gt;
                            &amp;quot;category&amp;quot;: &amp;quot;Category:Entity&amp;quot;,&lt;br /&gt;
                            &amp;quot;query_filter_property&amp;quot;: &amp;quot;HasName&amp;quot;&lt;br /&gt;
                        }&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;$ref&amp;quot;: &amp;quot;#/common_definitions&amp;quot;,&lt;br /&gt;
            &amp;quot;title&amp;quot;: &amp;quot;Data Statement&amp;quot;,&lt;br /&gt;
            &amp;quot;title*&amp;quot;: {&lt;br /&gt;
                &amp;quot;de&amp;quot;: &amp;quot;Datenangabe&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;headerTemplate&amp;quot;: &amp;quot;... {{self.property}} ...&amp;quot;,&lt;br /&gt;
            &amp;quot;required&amp;quot;: [&lt;br /&gt;
                &amp;quot;uuid&amp;quot;,&lt;br /&gt;
                &amp;quot;property&amp;quot;,&lt;br /&gt;
                &amp;quot;value&amp;quot;&lt;br /&gt;
            ],&lt;br /&gt;
            &amp;quot;properties&amp;quot;: {&lt;br /&gt;
                &amp;quot;property&amp;quot;: {&lt;br /&gt;
                    &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
                    &amp;quot;format&amp;quot;: &amp;quot;autocomplete&amp;quot;,&lt;br /&gt;
                    &amp;quot;title&amp;quot;: &amp;quot;Property&amp;quot;,&lt;br /&gt;
                    &amp;quot;title*&amp;quot;: {&lt;br /&gt;
                        &amp;quot;de&amp;quot;: &amp;quot;Attribut&amp;quot;&lt;br /&gt;
                    },&lt;br /&gt;
                    &amp;quot;options&amp;quot;: {&lt;br /&gt;
                        &amp;quot;autocomplete&amp;quot;: {&lt;br /&gt;
                            &amp;quot;category&amp;quot;: &amp;quot;Category:DataProperty&amp;quot;&lt;br /&gt;
                        }&lt;br /&gt;
                    }&lt;br /&gt;
                },&lt;br /&gt;
                &amp;quot;value&amp;quot;: {&lt;br /&gt;
                    &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
                    &amp;quot;title&amp;quot;: &amp;quot;Value&amp;quot;,&lt;br /&gt;
                    &amp;quot;title*&amp;quot;: {&lt;br /&gt;
                        &amp;quot;de&amp;quot;: &amp;quot;Wert&amp;quot;&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;$ref&amp;quot;: &amp;quot;#/common_definitions&amp;quot;,&lt;br /&gt;
            &amp;quot;title&amp;quot;: &amp;quot;Quantity Statement&amp;quot;,&lt;br /&gt;
            &amp;quot;title*&amp;quot;: {&lt;br /&gt;
                &amp;quot;de&amp;quot;: &amp;quot;Größenangabe&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;headerTemplate&amp;quot;: &amp;quot;... {{self.quantity}} ...&amp;quot;,&lt;br /&gt;
            &amp;quot;required&amp;quot;: [&lt;br /&gt;
                &amp;quot;uuid&amp;quot;,&lt;br /&gt;
                &amp;quot;quantity&amp;quot;,&lt;br /&gt;
                &amp;quot;value&amp;quot;,&lt;br /&gt;
                &amp;quot;unit&amp;quot;,&lt;br /&gt;
                &amp;quot;unit_symbol&amp;quot;,&lt;br /&gt;
                &amp;quot;numerical_value&amp;quot;&lt;br /&gt;
            ],&lt;br /&gt;
            &amp;quot;properties&amp;quot;: {&lt;br /&gt;
                &amp;quot;quantity&amp;quot;: {&lt;br /&gt;
                    &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
                    &amp;quot;format&amp;quot;: &amp;quot;autocomplete&amp;quot;,&lt;br /&gt;
                    &amp;quot;title&amp;quot;: &amp;quot;Property&amp;quot;,&lt;br /&gt;
                    &amp;quot;title*&amp;quot;: {&lt;br /&gt;
                        &amp;quot;de&amp;quot;: &amp;quot;Attribut&amp;quot;&lt;br /&gt;
                    },&lt;br /&gt;
                    &amp;quot;options&amp;quot;: {&lt;br /&gt;
                        &amp;quot;autocomplete&amp;quot;: {&lt;br /&gt;
                            &amp;quot;category&amp;quot;: &amp;quot;Category:QuantityProperty&amp;quot;&lt;br /&gt;
                        }&lt;br /&gt;
                    }&lt;br /&gt;
                },&lt;br /&gt;
                &amp;quot;numerical_value&amp;quot;: {&lt;br /&gt;
                    &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
                    &amp;quot;format&amp;quot;: &amp;quot;number&amp;quot;,&lt;br /&gt;
                    &amp;quot;title&amp;quot;: &amp;quot;Numerical value&amp;quot;,&lt;br /&gt;
                    &amp;quot;title*&amp;quot;: {&lt;br /&gt;
                        &amp;quot;de&amp;quot;: &amp;quot;Zahlenwert&amp;quot;&lt;br /&gt;
                    }&lt;br /&gt;
                },&lt;br /&gt;
                &amp;quot;unit&amp;quot;: {&lt;br /&gt;
                    &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
                    &amp;quot;format&amp;quot;: &amp;quot;autocomplete&amp;quot;,&lt;br /&gt;
                    &amp;quot;title&amp;quot;: &amp;quot;Unit&amp;quot;,&lt;br /&gt;
                    &amp;quot;title*&amp;quot;: {&lt;br /&gt;
                        &amp;quot;de&amp;quot;: &amp;quot;Einheit&amp;quot;&lt;br /&gt;
                    },&lt;br /&gt;
                    &amp;quot;watch&amp;quot;: {&lt;br /&gt;
                        &amp;quot;quantity&amp;quot;: &amp;quot;statement.quantity&amp;quot;,&lt;br /&gt;
                        &amp;quot;unit_symbol&amp;quot;: &amp;quot;statement.unit_symbol&amp;quot;&lt;br /&gt;
                    },&lt;br /&gt;
                    &amp;quot;options&amp;quot;: {&lt;br /&gt;
                        &amp;quot;autocomplete&amp;quot;: {&lt;br /&gt;
                            &amp;quot;query&amp;quot;: &amp;quot;[[-HasInputUnit::{{$(quantity)}}]]|?Display_title_of=label&amp;quot;,&lt;br /&gt;
                            &amp;quot;render_template&amp;quot;: {&lt;br /&gt;
                                &amp;quot;type&amp;quot;: [&lt;br /&gt;
                                    &amp;quot;handlebars&amp;quot;&lt;br /&gt;
                                ],&lt;br /&gt;
                                &amp;quot;value&amp;quot;: &amp;quot;{{result.printouts.label.[0]}}&amp;quot;&lt;br /&gt;
                            },&lt;br /&gt;
                            &amp;quot;field_maps&amp;quot;: [&lt;br /&gt;
                                {&lt;br /&gt;
                                    &amp;quot;source_path&amp;quot;: &amp;quot;$&amp;quot;,&lt;br /&gt;
                                    &amp;quot;template&amp;quot;: &amp;quot;{{{result.printouts.label.[0]}}}&amp;quot;,&lt;br /&gt;
                                    &amp;quot;target_path&amp;quot;: &amp;quot;$(unit_symbol)&amp;quot;&lt;br /&gt;
                                }&lt;br /&gt;
                            ]&lt;br /&gt;
                        }&lt;br /&gt;
                    }&lt;br /&gt;
                },&lt;br /&gt;
                &amp;quot;unit_symbol&amp;quot;: {&lt;br /&gt;
                    &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
                    &amp;quot;options&amp;quot;: {&lt;br /&gt;
                        &amp;quot;hidden&amp;quot;: true&lt;br /&gt;
                    }&lt;br /&gt;
                },&lt;br /&gt;
                &amp;quot;value&amp;quot;: {&lt;br /&gt;
                    &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
                    &amp;quot;title&amp;quot;: &amp;quot;Value&amp;quot;,&lt;br /&gt;
                    &amp;quot;title*&amp;quot;: {&lt;br /&gt;
                        &amp;quot;de&amp;quot;: &amp;quot;Wert&amp;quot;&lt;br /&gt;
                    },&lt;br /&gt;
                    &amp;quot;watch&amp;quot;: {&lt;br /&gt;
                        &amp;quot;numerical_value&amp;quot;: &amp;quot;statement.numerical_value&amp;quot;,&lt;br /&gt;
                        &amp;quot;unit_symbol&amp;quot;: &amp;quot;statement.unit_symbol&amp;quot;&lt;br /&gt;
                    },&lt;br /&gt;
                    &amp;quot;template&amp;quot;: &amp;quot;{{{numerical_value}}} {{{unit_symbol}}}&amp;quot;,&lt;br /&gt;
                    &amp;quot;options&amp;quot;: {&lt;br /&gt;
                        &amp;quot;hidden&amp;quot;: true&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Maintenance script</name></author>
	</entry>
	<entry>
		<id>https://onto-wiki.eu/w/index.php?title=Template:Helper/UI/VE/Visible&amp;diff=32</id>
		<title>Template:Helper/UI/VE/Visible</title>
		<link rel="alternate" type="text/html" href="https://onto-wiki.eu/w/index.php?title=Template:Helper/UI/VE/Visible&amp;diff=32"/>
		<updated>2023-03-25T05:55:25Z</updated>

		<summary type="html">&lt;p&gt;Maintenance script: Install package: OSW Core&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;Provides a div wrapper:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;ve-visible&amp;quot; style=&amp;quot;display:none&amp;quot;&amp;gt;&lt;br /&gt;
{{{content|}}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Default style hidden gets overwritten by css selector:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
div.ve-visible.ve-ce-leafNode.ve-ce-mwTransclusionNode { display:block!important; }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Icons see: [https://doc.wikimedia.org/oojs-ui/master/demos/?page=icons&amp;amp;theme=wikimediaui&amp;amp;direction=ltr&amp;amp;platform=desktop]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
&amp;lt;includeonly&amp;gt;&amp;lt;div class=&amp;quot;ve-visible&amp;quot; style=&amp;quot;display:none&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;oo-ui-widget oo-ui-widget-disabled oo-ui-buttonElement oo-ui-buttonElement-framed oo-ui-iconElement oo-ui-labelElement oo-ui-buttonWidget&amp;quot; aria-disabled=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;oo-ui-buttonElement-button&amp;quot; role=&amp;quot;button&amp;quot; title=&amp;quot;Remove&amp;quot; rel=&amp;quot;nofollow&amp;quot; tabindex=&amp;quot;0&amp;quot; aria-disabled=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;oo-ui-iconElement-icon oo-ui-image-invert oo-ui-icon-{{{icon|puzzle}}}&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;oo-ui-labelElement-label&amp;quot;&amp;gt;{{{content|}}}&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;oo-ui-indicatorElement-indicator oo-ui-indicatorElement-noIndicator&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/includeonly&amp;gt;&lt;/div&gt;</summary>
		<author><name>Maintenance script</name></author>
	</entry>
	<entry>
		<id>https://onto-wiki.eu/w/index.php?title=Template:Editor/Kekule&amp;diff=31</id>
		<title>Template:Editor/Kekule</title>
		<link rel="alternate" type="text/html" href="https://onto-wiki.eu/w/index.php?title=Template:Editor/Kekule&amp;diff=31"/>
		<updated>2023-03-25T05:55:25Z</updated>

		<summary type="html">&lt;p&gt;Maintenance script: Install package: OSW Core&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;includeonly&amp;gt;{{Template:Helper/UI/VE/Visible&lt;br /&gt;
|icon=labFlask&lt;br /&gt;
|content=ChemEditor &#039;&#039;{{{file_name}}}&#039;&#039;&lt;br /&gt;
}}&lt;br /&gt;
{{Template:Helper/UI/VE/Hidden &lt;br /&gt;
|content=&amp;lt;div class=&amp;quot;div_kekule_view_edit&amp;quot; id=&amp;quot;chemViewEdit_{{{file_name}}}&amp;quot; style=&amp;quot;width:{{{width|600px}}};height:{{{height|500px}}};border:1px solid black;&amp;quot;&amp;gt;{{#replace:{{#replace: {{{page_name}}}|/|-}}|:|-}}-{{{file_name}}}.kekule.{{{format|json}}}&amp;lt;/div&amp;gt;&lt;br /&gt;
}}&amp;lt;/includeonly&amp;gt;&lt;br /&gt;
&amp;lt;noinclude&amp;gt;[[Category:OSL/Infrastructure/Template/User]]&lt;br /&gt;
&amp;lt;templatedata&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	&amp;quot;params&amp;quot;: {&lt;br /&gt;
		&amp;quot;file_name&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: {&lt;br /&gt;
				&amp;quot;en&amp;quot;: &amp;quot;Name&amp;quot;,&lt;br /&gt;
				&amp;quot;de&amp;quot;: &amp;quot;Name&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;quot;description&amp;quot;: {&lt;br /&gt;
				&amp;quot;en&amp;quot;: &amp;quot;ChemDoc name&amp;quot;,&lt;br /&gt;
				&amp;quot;de&amp;quot;: &amp;quot;Name des Dokuments, muss eindeutig auf dieser Seite sein&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
			&amp;quot;required&amp;quot;: true,&lt;br /&gt;
			&amp;quot;autovalue&amp;quot;: &amp;quot;chemdoc-01&amp;quot;,&lt;br /&gt;
			&amp;quot;suggested&amp;quot;: true&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;format&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: {&lt;br /&gt;
				&amp;quot;en&amp;quot;: &amp;quot;File format&amp;quot;,&lt;br /&gt;
				&amp;quot;de&amp;quot;: &amp;quot;Dateiformat&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;quot;description&amp;quot;: {&lt;br /&gt;
				&amp;quot;en&amp;quot;: &amp;quot;Storage format for the document (currently only json available)&amp;quot;,&lt;br /&gt;
				&amp;quot;de&amp;quot;: &amp;quot;Format in dem das Dokument gespeichert wird (aktuell nur json möglich)&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
			&amp;quot;required&amp;quot;: false,&lt;br /&gt;
			&amp;quot;autovalue&amp;quot;: &amp;quot;json&amp;quot;,&lt;br /&gt;
			&amp;quot;suggested&amp;quot;: false&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;width&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Breite&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Breite des Dokuments in Pixeln oder Prozent&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
			&amp;quot;autovalue&amp;quot;: &amp;quot;600px&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;height&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Höhe&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Breite der Dokuments oder Prozent&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
			&amp;quot;autovalue&amp;quot;: &amp;quot;500px&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;page_name&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: {&lt;br /&gt;
				&amp;quot;en&amp;quot;: &amp;quot;Page name&amp;quot;,&lt;br /&gt;
				&amp;quot;de&amp;quot;: &amp;quot;Seitename&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;quot;description&amp;quot;: {&lt;br /&gt;
				&amp;quot;en&amp;quot;: &amp;quot;is filled in automatically&amp;quot;,&lt;br /&gt;
				&amp;quot;de&amp;quot;: &amp;quot;wird automatisch ausgefüllt&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;wiki-page-name&amp;quot;,&lt;br /&gt;
			&amp;quot;autovalue&amp;quot;: &amp;quot;{{subst:FULLPAGENAME}}&amp;quot;&lt;br /&gt;
		}&lt;br /&gt;
	},&lt;br /&gt;
	&amp;quot;description&amp;quot;: {&lt;br /&gt;
		&amp;quot;en&amp;quot;: &amp;quot;Adds a ChemEditor&amp;quot;,&lt;br /&gt;
		&amp;quot;de&amp;quot;: &amp;quot;Erstellt ein Chemie-Editor (Kekule Composer Widget) zum bearbeiten der angegebenen Unterseite&amp;quot;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/templatedata&amp;gt;&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Maintenance script</name></author>
	</entry>
	<entry>
		<id>https://onto-wiki.eu/w/index.php?title=Template:Editor/DrawIO&amp;diff=30</id>
		<title>Template:Editor/DrawIO</title>
		<link rel="alternate" type="text/html" href="https://onto-wiki.eu/w/index.php?title=Template:Editor/DrawIO&amp;diff=30"/>
		<updated>2023-03-25T05:55:24Z</updated>

		<summary type="html">&lt;p&gt;Maintenance script: Install package: OSW Core&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;includeonly&amp;gt;{{Template:Helper/UI/VE/Visible&lt;br /&gt;
|icon=browser&lt;br /&gt;
|content=Diagram &#039;&#039;{{{file_name}}}&#039;&#039;&lt;br /&gt;
}}&lt;br /&gt;
{{Template:Helper/UI/VE/Hidden &lt;br /&gt;
|content={{#drawio:{{#if: {{{page_name|}}}|{{#replace:{{#replace: {{{page_name}}}|/|-}}|:|-}}-|}}{{{file_name}}}|type={{{type|svg}}}|max-width={{#ifeq: {{{full_width|0}}}|1|100%| {{{width|500px}}} }}}}&lt;br /&gt;
}}&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;[[Category:OSL/Infrastructure/Template/User]]&lt;br /&gt;
&amp;lt;templatedata&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	&amp;quot;params&amp;quot;: {&lt;br /&gt;
		&amp;quot;file_name&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Name&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Name der Zeichnung&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;wiki-file-name&amp;quot;,&lt;br /&gt;
			&amp;quot;required&amp;quot;: true&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;type&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Dateiformat&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Die Zeichnung kann als Vektor- oder Rastergraphik gespeichert werden&amp;quot;,&lt;br /&gt;
			&amp;quot;example&amp;quot;: &amp;quot;svg oder png&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
			&amp;quot;autovalue&amp;quot;: &amp;quot;svg&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;width&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Breite&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Breite der Graphik in Pixeln&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
			&amp;quot;autovalue&amp;quot;: &amp;quot;600px&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;page_name&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: {&lt;br /&gt;
				&amp;quot;en&amp;quot;: &amp;quot;Page name&amp;quot;,&lt;br /&gt;
				&amp;quot;de&amp;quot;: &amp;quot;Seitename&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;quot;description&amp;quot;: {&lt;br /&gt;
				&amp;quot;en&amp;quot;: &amp;quot;is filled in automatically&amp;quot;,&lt;br /&gt;
				&amp;quot;de&amp;quot;: &amp;quot;wird automatisch ausgefüllt&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;wiki-page-name&amp;quot;,&lt;br /&gt;
			&amp;quot;autovalue&amp;quot;: &amp;quot;{{subst:FULLPAGENAME}}&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;full_width&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: {&lt;br /&gt;
				&amp;quot;en&amp;quot;: &amp;quot;Full width&amp;quot;,&lt;br /&gt;
				&amp;quot;de&amp;quot;: &amp;quot;Gesamte Seitenbreite&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;quot;description&amp;quot;: {&lt;br /&gt;
				&amp;quot;en&amp;quot;: &amp;quot;Used the full page width to display the diagram&amp;quot;,&lt;br /&gt;
				&amp;quot;de&amp;quot;: &amp;quot;Nutzt die gesamte Seitenbreite zur Darstellung des Diagramms&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;boolean&amp;quot;,&lt;br /&gt;
			&amp;quot;autovalue&amp;quot;: &amp;quot;0&amp;quot;,&lt;br /&gt;
			&amp;quot;suggested&amp;quot;: true&lt;br /&gt;
		}&lt;br /&gt;
	},&lt;br /&gt;
	&amp;quot;description&amp;quot;: {&lt;br /&gt;
		&amp;quot;en&amp;quot;: &amp;quot;Adds a MS-Visio-like diagram editor&amp;quot;,&lt;br /&gt;
		&amp;quot;de&amp;quot;: &amp;quot;Fügt einen MS Visio ähnlichen Graphikeditor ein&amp;quot;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/templatedata&amp;gt;&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Maintenance script</name></author>
	</entry>
	<entry>
		<id>https://onto-wiki.eu/w/index.php?title=Template:Editor/Spreadsheet&amp;diff=29</id>
		<title>Template:Editor/Spreadsheet</title>
		<link rel="alternate" type="text/html" href="https://onto-wiki.eu/w/index.php?title=Template:Editor/Spreadsheet&amp;diff=29"/>
		<updated>2023-03-25T05:55:19Z</updated>

		<summary type="html">&lt;p&gt;Maintenance script: Install package: OSW Core&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;includeonly&amp;gt;{{Template:Helper/UI/VE/Visible&lt;br /&gt;
|icon=table&lt;br /&gt;
|content=Spreadsheet &#039;&#039;{{{file_name}}}&#039;&#039;&lt;br /&gt;
}}&lt;br /&gt;
{{Template:Helper/UI/VE/Hidden &lt;br /&gt;
|content=&amp;lt;div class=&amp;quot;SpreadsheetEditor&amp;quot; style=&amp;quot;width:{{{width|100%}}};height:{{{height|500px}}}; max-width:100%;&amp;quot; data-filename=&amp;quot;{{#replace:{{#replace: {{{page_name}}}|/|-}}|:|-}}-{{{file_name}}}.luckysheet.{{{format|json}}}&amp;quot;&amp;gt;{{#replace:{{#replace: {{{page_name}}}|/|-}}|:|-}}-{{{file_name}}}.luckysheet.{{{format|json}}}&amp;lt;/div&amp;gt;&lt;br /&gt;
}}&amp;lt;/includeonly&amp;gt;&lt;br /&gt;
&amp;lt;noinclude&amp;gt;[[Category:OSL/Infrastructure/Template/User]]&lt;br /&gt;
&amp;lt;templatedata&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	&amp;quot;params&amp;quot;: {&lt;br /&gt;
		&amp;quot;file_name&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: {&lt;br /&gt;
				&amp;quot;en&amp;quot;: &amp;quot;Name&amp;quot;,&lt;br /&gt;
				&amp;quot;de&amp;quot;: &amp;quot;Name&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;quot;description&amp;quot;: {&lt;br /&gt;
				&amp;quot;en&amp;quot;: &amp;quot;Spreadsheet name&amp;quot;,&lt;br /&gt;
				&amp;quot;de&amp;quot;: &amp;quot;Name des Dokuments, muss eindeutig auf dieser Seite sein&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
			&amp;quot;required&amp;quot;: true,&lt;br /&gt;
			&amp;quot;autovalue&amp;quot;: &amp;quot;spreadsheet-01&amp;quot;,&lt;br /&gt;
			&amp;quot;suggested&amp;quot;: true&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;format&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: {&lt;br /&gt;
				&amp;quot;en&amp;quot;: &amp;quot;File format&amp;quot;,&lt;br /&gt;
				&amp;quot;de&amp;quot;: &amp;quot;Dateiformat&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;quot;description&amp;quot;: {&lt;br /&gt;
				&amp;quot;en&amp;quot;: &amp;quot;Storage format for the document (currently only json available)&amp;quot;,&lt;br /&gt;
				&amp;quot;de&amp;quot;: &amp;quot;Format in dem das Dokument gespeichert wird (aktuell nur json möglich)&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
			&amp;quot;required&amp;quot;: false,&lt;br /&gt;
			&amp;quot;autovalue&amp;quot;: &amp;quot;json&amp;quot;,&lt;br /&gt;
			&amp;quot;suggested&amp;quot;: false&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;width&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Breite&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Breite des Dokuments in Pixeln oder Prozent&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
			&amp;quot;autovalue&amp;quot;: &amp;quot;100%&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;height&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Höhe&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Höhe des Dokuments oder Prozent&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
			&amp;quot;autovalue&amp;quot;: &amp;quot;500px&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;page_name&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: {&lt;br /&gt;
				&amp;quot;en&amp;quot;: &amp;quot;Page name&amp;quot;,&lt;br /&gt;
				&amp;quot;de&amp;quot;: &amp;quot;Seitename&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;quot;description&amp;quot;: {&lt;br /&gt;
				&amp;quot;en&amp;quot;: &amp;quot;is filled in automatically&amp;quot;,&lt;br /&gt;
				&amp;quot;de&amp;quot;: &amp;quot;wird automatisch ausgefüllt&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;wiki-page-name&amp;quot;,&lt;br /&gt;
			&amp;quot;autovalue&amp;quot;: &amp;quot;{{subst:FULLPAGENAME}}&amp;quot;&lt;br /&gt;
		}&lt;br /&gt;
	},&lt;br /&gt;
	&amp;quot;description&amp;quot;: {&lt;br /&gt;
		&amp;quot;en&amp;quot;: &amp;quot;Adds a SpreadsheetEditor&amp;quot;,&lt;br /&gt;
		&amp;quot;de&amp;quot;: &amp;quot;Erstellt ein MS-Excel-ähnlichen Editor&amp;quot;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/templatedata&amp;gt;&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Maintenance script</name></author>
	</entry>
	<entry>
		<id>https://onto-wiki.eu/w/index.php?title=Category:Entity&amp;diff=28</id>
		<title>Category:Entity</title>
		<link rel="alternate" type="text/html" href="https://onto-wiki.eu/w/index.php?title=Category:Entity&amp;diff=28"/>
		<updated>2023-03-25T05:55:18Z</updated>

		<summary type="html">&lt;p&gt;Maintenance script: Install package: OSW Core&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Maintenance script</name></author>
	</entry>
	<entry>
		<id>https://onto-wiki.eu/w/index.php?title=JsonSchema:Description&amp;diff=27</id>
		<title>JsonSchema:Description</title>
		<link rel="alternate" type="text/html" href="https://onto-wiki.eu/w/index.php?title=JsonSchema:Description&amp;diff=27"/>
		<updated>2023-03-25T05:55:16Z</updated>

		<summary type="html">&lt;p&gt;Maintenance script: Install package: OSW Core&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{&lt;br /&gt;
    &amp;quot;@context&amp;quot;: {&lt;br /&gt;
        &amp;quot;rdf&amp;quot;: &amp;quot;http://www.w3.org/2000/01/rdf-schema#&amp;quot;,&lt;br /&gt;
        &amp;quot;label_&amp;quot;: &amp;quot;rdfs:comment&amp;quot;,&lt;br /&gt;
        &amp;quot;wiki&amp;quot;: &amp;quot;https://wiki-dev.open-semantic-lab.org/id/&amp;quot;,&lt;br /&gt;
        &amp;quot;property&amp;quot;: {&lt;br /&gt;
            &amp;quot;@id&amp;quot;: &amp;quot;wiki:Property-3A&amp;quot;,&lt;br /&gt;
            &amp;quot;@prefix&amp;quot;: true&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;label&amp;quot;: &amp;quot;property:HasDescription&amp;quot;,&lt;br /&gt;
        &amp;quot;text&amp;quot;: {&lt;br /&gt;
            &amp;quot;@id&amp;quot;: &amp;quot;@value&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;lang&amp;quot;: {&lt;br /&gt;
            &amp;quot;@id&amp;quot;: &amp;quot;@language&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;title&amp;quot;: &amp;quot;Description&amp;quot;,&lt;br /&gt;
    &amp;quot;id&amp;quot;: &amp;quot;description&amp;quot;,&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;,&lt;br /&gt;
    &amp;quot;required&amp;quot;: [&lt;br /&gt;
        &amp;quot;text&amp;quot;,&lt;br /&gt;
        &amp;quot;lang&amp;quot;&lt;br /&gt;
    ],&lt;br /&gt;
    &amp;quot;properties&amp;quot;: {&lt;br /&gt;
        &amp;quot;text&amp;quot;: {&lt;br /&gt;
            &amp;quot;title&amp;quot;: &amp;quot;Text&amp;quot;,&lt;br /&gt;
            &amp;quot;title*&amp;quot;: {&lt;br /&gt;
                &amp;quot;de&amp;quot;: &amp;quot;Text&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;lang&amp;quot;: {&lt;br /&gt;
            &amp;quot;title&amp;quot;: &amp;quot;Lang code&amp;quot;,&lt;br /&gt;
            &amp;quot;title*&amp;quot;: {&lt;br /&gt;
                &amp;quot;de&amp;quot;: &amp;quot;Sprache&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
            &amp;quot;enum&amp;quot;: [&lt;br /&gt;
                &amp;quot;en&amp;quot;,&lt;br /&gt;
                &amp;quot;de&amp;quot;&lt;br /&gt;
            ],&lt;br /&gt;
            &amp;quot;default&amp;quot;: &amp;quot;en&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Maintenance script</name></author>
	</entry>
	<entry>
		<id>https://onto-wiki.eu/w/index.php?title=Template:Decoration/ColoredText&amp;diff=26</id>
		<title>Template:Decoration/ColoredText</title>
		<link rel="alternate" type="text/html" href="https://onto-wiki.eu/w/index.php?title=Template:Decoration/ColoredText&amp;diff=26"/>
		<updated>2023-03-25T05:55:15Z</updated>

		<summary type="html">&lt;p&gt;Maintenance script: Install package: OSW Core&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;includeonly&amp;gt;&amp;lt;span style=&amp;quot;color:{{{color| {{#ifeq: {{{black|}}}|1|black| {{#ifeq: {{{blue|}}}|1|blue| {{#ifeq: {{{green|}}}|1|green| {{#ifeq: {{{red|}}}|1|red|red&amp;lt;!-- default value --&amp;gt;}} }} }} }} }}}&amp;quot;&amp;gt;{{{text|}}}&amp;lt;/span&amp;gt;&amp;lt;/includeonly&amp;gt;&lt;br /&gt;
&amp;lt;noinclude&amp;gt;[[Category:OSL/Infrastructure/Template/User]]&lt;br /&gt;
&amp;lt;templatedata&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	&amp;quot;params&amp;quot;: {&lt;br /&gt;
		&amp;quot;text&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: {&lt;br /&gt;
				&amp;quot;de&amp;quot;: &amp;quot;Text der Anmerkung&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
			&amp;quot;required&amp;quot;: true,&lt;br /&gt;
			&amp;quot;suggested&amp;quot;: true&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;black&amp;quot;: {&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;boolean&amp;quot;,&lt;br /&gt;
			&amp;quot;autovalue&amp;quot;: &amp;quot;0&amp;quot;,&lt;br /&gt;
			&amp;quot;suggested&amp;quot;: true,&lt;br /&gt;
			&amp;quot;label&amp;quot;: {&lt;br /&gt;
				&amp;quot;de&amp;quot;: &amp;quot;schwarz&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;quot;description&amp;quot;: {&lt;br /&gt;
				&amp;quot;de&amp;quot;: &amp;quot;Textfarbe Schwarz&amp;quot;&lt;br /&gt;
			}&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;blue&amp;quot;: {&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;boolean&amp;quot;,&lt;br /&gt;
			&amp;quot;suggested&amp;quot;: true,&lt;br /&gt;
			&amp;quot;label&amp;quot;: {&lt;br /&gt;
				&amp;quot;de&amp;quot;: &amp;quot;blau&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;quot;description&amp;quot;: {&lt;br /&gt;
				&amp;quot;de&amp;quot;: &amp;quot;Textfarbe Blau&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;quot;autovalue&amp;quot;: &amp;quot;0&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;green&amp;quot;: {&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;boolean&amp;quot;,&lt;br /&gt;
			&amp;quot;suggested&amp;quot;: true,&lt;br /&gt;
			&amp;quot;label&amp;quot;: {&lt;br /&gt;
				&amp;quot;de&amp;quot;: &amp;quot;Grün&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;quot;description&amp;quot;: {&lt;br /&gt;
				&amp;quot;de&amp;quot;: &amp;quot;Textfarbe Grün&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;quot;autovalue&amp;quot;: &amp;quot;0&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;red&amp;quot;: {&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;boolean&amp;quot;,&lt;br /&gt;
			&amp;quot;autovalue&amp;quot;: &amp;quot;1&amp;quot;,&lt;br /&gt;
			&amp;quot;suggested&amp;quot;: true,&lt;br /&gt;
			&amp;quot;label&amp;quot;: {&lt;br /&gt;
				&amp;quot;de&amp;quot;: &amp;quot;Rot&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;quot;description&amp;quot;: {&lt;br /&gt;
				&amp;quot;de&amp;quot;: &amp;quot;Textfarbe Rot&amp;quot;&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
	},&lt;br /&gt;
	&amp;quot;description&amp;quot;: {&lt;br /&gt;
		&amp;quot;de&amp;quot;: &amp;quot;Fügt einen farbigen Text ein&amp;quot;,&lt;br /&gt;
		&amp;quot;en&amp;quot;: &amp;quot;Adds a colored text&amp;quot;&lt;br /&gt;
	},&lt;br /&gt;
	&amp;quot;format&amp;quot;: &amp;quot;inline&amp;quot;,&lt;br /&gt;
	&amp;quot;paramOrder&amp;quot;: [&lt;br /&gt;
		&amp;quot;text&amp;quot;,&lt;br /&gt;
		&amp;quot;red&amp;quot;,&lt;br /&gt;
		&amp;quot;blue&amp;quot;,&lt;br /&gt;
		&amp;quot;green&amp;quot;,&lt;br /&gt;
		&amp;quot;black&amp;quot;&lt;br /&gt;
	]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/templatedata&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Test ==&lt;br /&gt;
*{{Template:Decoration/ColoredText|text=Default red}} &lt;br /&gt;
*{{Template:Decoration/ColoredText|text=black|black=1}}&lt;br /&gt;
*{{Template:Decoration/ColoredText|text=blue|blue=1}}&lt;br /&gt;
*{{Template:Decoration/ColoredText|text=green|green=1}}&lt;br /&gt;
*{{Template:Decoration/ColoredText|text=red|red=1}}&lt;br /&gt;
*{{Template:Decoration/ColoredText|text=Explicit blue|color=blue}}&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Maintenance script</name></author>
	</entry>
	<entry>
		<id>https://onto-wiki.eu/w/index.php?title=Template:Helper/UI/Query/ReverseListFormat&amp;diff=25</id>
		<title>Template:Helper/UI/Query/ReverseListFormat</title>
		<link rel="alternate" type="text/html" href="https://onto-wiki.eu/w/index.php?title=Template:Helper/UI/Query/ReverseListFormat&amp;diff=25"/>
		<updated>2023-03-25T05:55:15Z</updated>

		<summary type="html">&lt;p&gt;Maintenance script: Install package: OSW Core&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;includeonly&amp;gt;* {{#if: {{{subject|}}}|{{{subject|}}}|{{{default_subject|}}}}}  {{{property}}}  ..&amp;lt;br&amp;gt;&amp;lt;/includeonly&amp;gt;&lt;/div&gt;</summary>
		<author><name>Maintenance script</name></author>
	</entry>
	<entry>
		<id>https://onto-wiki.eu/w/index.php?title=Template:Editor/SvgEdit&amp;diff=24</id>
		<title>Template:Editor/SvgEdit</title>
		<link rel="alternate" type="text/html" href="https://onto-wiki.eu/w/index.php?title=Template:Editor/SvgEdit&amp;diff=24"/>
		<updated>2023-03-25T05:55:14Z</updated>

		<summary type="html">&lt;p&gt;Maintenance script: Install package: OSW Core&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;includeonly&amp;gt;{{Template:Helper/UI/VE/Visible&lt;br /&gt;
|icon=highlight&lt;br /&gt;
|content=Sketch &#039;&#039;{{{file_name}}}&#039;&#039;&lt;br /&gt;
}}&lt;br /&gt;
{{Template:Helper/UI/VE/Hidden &lt;br /&gt;
|content=&amp;lt;div class=&amp;quot;SvgEdit&amp;quot; style=&amp;quot;width: {{{width|100%}}}; height: 500px;&amp;quot;&amp;gt;{{#replace:{{#replace: {{{page_name}}}|/|-}}|:|-}}-{{{file_name}}}.svg&amp;lt;/div&amp;gt;&lt;br /&gt;
}}&amp;lt;div style=&amp;quot;display:none&amp;quot;&amp;gt;[[Media:{{#replace:{{#replace: {{{page_name}}}|/|-}}|:|-}}-{{{file_name}}}.svg]]&amp;lt;/div&amp;gt;&amp;lt;/includeonly&amp;gt;&amp;lt;!-- Hidden link to file to include file in page images--&amp;gt;&lt;br /&gt;
&amp;lt;noinclude&amp;gt;[[Category:OSL/Infrastructure/Template/User]]&lt;br /&gt;
&amp;lt;templatedata&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	&amp;quot;params&amp;quot;: {&lt;br /&gt;
		&amp;quot;file_name&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: {&lt;br /&gt;
				&amp;quot;en&amp;quot;: &amp;quot;Name&amp;quot;,&lt;br /&gt;
				&amp;quot;de&amp;quot;: &amp;quot;Name&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;quot;description&amp;quot;: {&lt;br /&gt;
				&amp;quot;en&amp;quot;: &amp;quot;Sketch name&amp;quot;,&lt;br /&gt;
				&amp;quot;de&amp;quot;: &amp;quot;Name der Zeichnung&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
			&amp;quot;required&amp;quot;: true,&lt;br /&gt;
			&amp;quot;autovalue&amp;quot;: &amp;quot;sketch-01&amp;quot;,&lt;br /&gt;
			&amp;quot;suggested&amp;quot;: true&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;width&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: {&lt;br /&gt;
				&amp;quot;en&amp;quot;: &amp;quot;Breite&amp;quot;,&lt;br /&gt;
				&amp;quot;de&amp;quot;: &amp;quot;Breite&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;quot;description&amp;quot;: {&lt;br /&gt;
				&amp;quot;en&amp;quot;: &amp;quot;Width of the graphic&amp;quot;,&lt;br /&gt;
				&amp;quot;de&amp;quot;: &amp;quot;Breite der Graphik&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
			&amp;quot;autovalue&amp;quot;: &amp;quot;100%&amp;quot;,&lt;br /&gt;
			&amp;quot;example&amp;quot;: {&lt;br /&gt;
				&amp;quot;en&amp;quot;: &amp;quot;600px or 100%&amp;quot;,&lt;br /&gt;
				&amp;quot;de&amp;quot;: &amp;quot;600px oder 100%&amp;quot;&lt;br /&gt;
			}&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;page_name&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: {&lt;br /&gt;
				&amp;quot;en&amp;quot;: &amp;quot;Page name&amp;quot;,&lt;br /&gt;
				&amp;quot;de&amp;quot;: &amp;quot;Seitename&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;quot;description&amp;quot;: {&lt;br /&gt;
				&amp;quot;en&amp;quot;: &amp;quot;is filled in automatically&amp;quot;,&lt;br /&gt;
				&amp;quot;de&amp;quot;: &amp;quot;wird automatisch ausgefüllt&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;wiki-page-name&amp;quot;,&lt;br /&gt;
			&amp;quot;autovalue&amp;quot;: &amp;quot;{{subst:FULLPAGENAME}}&amp;quot;&lt;br /&gt;
		}&lt;br /&gt;
	},&lt;br /&gt;
	&amp;quot;description&amp;quot;: {&lt;br /&gt;
		&amp;quot;en&amp;quot;: &amp;quot;Adds a freehand graphic editor&amp;quot;,&lt;br /&gt;
		&amp;quot;de&amp;quot;: &amp;quot;Fügt einen Freihand-Grafik-Editor hinzu&amp;quot;&lt;br /&gt;
	},&lt;br /&gt;
	&amp;quot;format&amp;quot;: &amp;quot;\n{{_\n| _ = _\n}}\n&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/templatedata&amp;gt;&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Maintenance script</name></author>
	</entry>
</feed>