<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://neowiki.dev/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=NeoWiki</id>
	<title>NeoWiki Demo - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://neowiki.dev/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=NeoWiki"/>
	<link rel="alternate" type="text/html" href="https://neowiki.dev/wiki/Special:Contributions/NeoWiki"/>
	<updated>2026-06-16T17:00:31Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://neowiki.dev/w/index.php?title=Validation_Demo&amp;diff=284</id>
		<title>Validation Demo</title>
		<link rel="alternate" type="text/html" href="https://neowiki.dev/w/index.php?title=Validation_Demo&amp;diff=284"/>
		<updated>2026-06-11T11:31:15Z</updated>

		<summary type="html">&lt;p&gt;NeoWiki: Importing NeoWiki demo data&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A live testbed for trying out NeoWiki&#039;s backend validation and seeing how the editor surfaces server-side errors next to each field.&lt;br /&gt;
&lt;br /&gt;
== Setup ==&lt;br /&gt;
&lt;br /&gt;
Turn enforcement on in &amp;lt;code&amp;gt;LocalSettings.php&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$wgNeoWikiEnforceValidation = true;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
With this flag on, writes that introduce new violations are rejected with HTTP 422 and the editor renders the violations inline. With it off, writes always go through and the violations come back in the 200 response for informational purposes only.&lt;br /&gt;
&lt;br /&gt;
== Demo subjects ==&lt;br /&gt;
&lt;br /&gt;
* [[Validation Clean]] — a Subject with every property filled in correctly. Use it as the starting point for the recipes below.&lt;br /&gt;
&lt;br /&gt;
The [[Schema:Validation Demo|Validation Demo]] schema has four properties spanning the validation surface:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Property !! Type !! Notes&lt;br /&gt;
|-&lt;br /&gt;
| Title || text, required || A simple required text field.&lt;br /&gt;
|-&lt;br /&gt;
| Homepage || url, required || A single required URL. Empty triggers a &amp;quot;required&amp;quot; error inline.&lt;br /&gt;
|-&lt;br /&gt;
| Tags || url, multi || Optional list of URLs. Changing one entry to a non-http(s) URL triggers a per-entry &amp;lt;code&amp;gt;invalid-url&amp;lt;/code&amp;gt; violation under enforcement; only the offending sub-input is decorated.&lt;br /&gt;
|-&lt;br /&gt;
| Status || select, required || A required choice between three options.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Recipes ==&lt;br /&gt;
&lt;br /&gt;
;&#039;&#039;&#039;See an inline error.&#039;&#039;&#039;&lt;br /&gt;
Open [[Validation Clean]], switch to the Subjects tab, and click &#039;&#039;&#039;Edit&#039;&#039;&#039; on the main subject. Backspace the value in &#039;&#039;&#039;Title&#039;&#039;&#039; and click &#039;&#039;&#039;Save changes&#039;&#039;&#039;. The dialog stays open, the Title field gets a red border with &amp;quot;Please provide a value.&amp;quot;, and a toast appears: &#039;&#039;Validation failed for &amp;quot;Validation Clean&amp;quot;. Please fix the highlighted fields.&#039;&#039; The PUT in the network panel returns &amp;lt;code&amp;gt;422&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
;&#039;&#039;&#039;See the error clear as you type.&#039;&#039;&#039;&lt;br /&gt;
Trigger the inline error above, then type any character into the Title field. The red border disappears immediately, before you click Save again. The dialog wires the input back up to drop the matching server-side violation as soon as you edit.&lt;br /&gt;
&lt;br /&gt;
;&#039;&#039;&#039;See the success path still work.&#039;&#039;&#039;&lt;br /&gt;
Set &amp;lt;code&amp;gt;$wgNeoWikiEnforceValidation = false&amp;lt;/code&amp;gt; and repeat the empty-Title save. The PUT now returns &amp;lt;code&amp;gt;200&amp;lt;/code&amp;gt;, the dialog closes, and the success toast fires. The 200 body still mentions the violation but it&#039;s advisory only — no inline marking, no rejection. This proves the step-1 contract from PR #855 still holds.&lt;br /&gt;
&lt;br /&gt;
;&#039;&#039;&#039;See a create-side error.&#039;&#039;&#039;&lt;br /&gt;
With enforcement on, click &#039;&#039;&#039;Add subject&#039;&#039;&#039; under &amp;quot;Other Subjects on this Page&amp;quot;, choose &#039;&#039;&#039;Validation Demo&#039;&#039;&#039;, leave Title empty, and click &#039;&#039;&#039;Create subject&#039;&#039;&#039;. The create dialog behaves the same as the edit dialog: 422, dialog stays open, Title decorated, validation-failed toast.&lt;br /&gt;
&lt;br /&gt;
;&#039;&#039;&#039;See a per-entry error on a multi-value field.&#039;&#039;&#039;&lt;br /&gt;
With enforcement on, open [[Validation Clean]] → edit the main subject. Change the second &#039;&#039;&#039;Tags&#039;&#039;&#039; entry from &amp;lt;code&amp;gt;https://example.com/b&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;ftp://example.com/b&amp;lt;/code&amp;gt; and click &#039;&#039;&#039;Save changes&#039;&#039;&#039;. Confirm: only the second sub-input gets the red border, the first stays clean. The 422 body carries &amp;lt;code&amp;gt;valuePartIndex: 1&amp;lt;/code&amp;gt;, which the editor uses to target just that input.&lt;br /&gt;
&lt;br /&gt;
;&#039;&#039;&#039;Form-level banner.&#039;&#039;&#039;&lt;br /&gt;
This one is reachable only when a violation has no field anchor (e.g. &amp;lt;code&amp;gt;schema-not-found&amp;lt;/code&amp;gt;, or a property removed from the schema after a Subject was saved). The component tests cover it; there&#039;s no clean UI reproduction against this schema. Verify in the test suite.&lt;br /&gt;
&lt;br /&gt;
== Backend wire shape ==&lt;br /&gt;
&lt;br /&gt;
A 422 body from the persistence layer looks like:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;status&amp;quot;: &amp;quot;error&amp;quot;,&lt;br /&gt;
  &amp;quot;message&amp;quot;: &amp;quot;Validation failed&amp;quot;,&lt;br /&gt;
  &amp;quot;violations&amp;quot;: [&lt;br /&gt;
    { &amp;quot;propertyName&amp;quot;: &amp;quot;Title&amp;quot;, &amp;quot;code&amp;quot;: &amp;quot;required&amp;quot;, &amp;quot;args&amp;quot;: [], &amp;quot;valuePartIndex&amp;quot;: null }&lt;br /&gt;
  ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The frontend parses this in &amp;lt;code&amp;gt;RestSubjectRepository&amp;lt;/code&amp;gt; and throws a typed &amp;lt;code&amp;gt;ValidationFailedError&amp;lt;/code&amp;gt;. Both &amp;lt;code&amp;gt;SubjectEditorDialog&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;SubjectCreatorDialog&amp;lt;/code&amp;gt; catch it and feed the violations into the editor&#039;s reactive state. Each violation routes by &amp;lt;code&amp;gt;propertyName&amp;lt;/code&amp;gt; (and &amp;lt;code&amp;gt;valuePartIndex&amp;lt;/code&amp;gt; for multi-value inputs) to the matching field. Violations without an anchor fall into a form-level banner above the editor.&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
* [[Schema:Validation Demo]] — the schema source&lt;br /&gt;
* [[Special:Schemas]] — all schemas in the wiki&lt;/div&gt;</summary>
		<author><name>NeoWiki</name></author>
	</entry>
	<entry>
		<id>https://neowiki.dev/w/index.php?title=Validation_Clean&amp;diff=283</id>
		<title>Validation Clean</title>
		<link rel="alternate" type="text/html" href="https://neowiki.dev/w/index.php?title=Validation_Clean&amp;diff=283"/>
		<updated>2026-06-11T11:31:08Z</updated>

		<summary type="html">&lt;p&gt;NeoWiki: Importing NeoWiki demo data&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A demo Subject with every property of the [[Schema:Validation Demo|Validation Demo]] schema filled in correctly. The starting point for the recipes on the [[Validation Demo]] hub page.&lt;/div&gt;</summary>
		<author><name>NeoWiki</name></author>
	</entry>
	<entry>
		<id>https://neowiki.dev/w/index.php?title=Schema:Validation_Demo&amp;diff=281</id>
		<title>Schema:Validation Demo</title>
		<link rel="alternate" type="text/html" href="https://neowiki.dev/w/index.php?title=Schema:Validation_Demo&amp;diff=281"/>
		<updated>2026-06-11T11:29:57Z</updated>

		<summary type="html">&lt;p&gt;NeoWiki: Importing NeoWiki demo data&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{&lt;br /&gt;
	&amp;quot;description&amp;quot;: &amp;quot;A demo schema for trying out backend validation. Use it together with the Validation Demo hub page to see how the editor surfaces server-side errors next to each field.&amp;quot;,&lt;br /&gt;
	&amp;quot;propertyDefinitions&amp;quot;: {&lt;br /&gt;
		&amp;quot;Title&amp;quot;: {&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;text&amp;quot;,&lt;br /&gt;
			&amp;quot;required&amp;quot;: true,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Required. Save with this empty to see an inline error.&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;Homepage&amp;quot;: {&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;url&amp;quot;,&lt;br /&gt;
			&amp;quot;required&amp;quot;: true,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Required. Must be a valid http or https URL.&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;Tags&amp;quot;: {&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;url&amp;quot;,&lt;br /&gt;
			&amp;quot;multiple&amp;quot;: true,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Optional list of URLs. Each entry must be a valid http or https URL.&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;Status&amp;quot;: {&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;select&amp;quot;,&lt;br /&gt;
			&amp;quot;required&amp;quot;: true,&lt;br /&gt;
			&amp;quot;options&amp;quot;: [&lt;br /&gt;
				{&lt;br /&gt;
					&amp;quot;id&amp;quot;: &amp;quot;o1valida1aaaaaa&amp;quot;,&lt;br /&gt;
					&amp;quot;label&amp;quot;: &amp;quot;Draft&amp;quot;&lt;br /&gt;
				},&lt;br /&gt;
				{&lt;br /&gt;
					&amp;quot;id&amp;quot;: &amp;quot;o1valida2aaaaaa&amp;quot;,&lt;br /&gt;
					&amp;quot;label&amp;quot;: &amp;quot;Approved&amp;quot;&lt;br /&gt;
				},&lt;br /&gt;
				{&lt;br /&gt;
					&amp;quot;id&amp;quot;: &amp;quot;o1valida3aaaaaa&amp;quot;,&lt;br /&gt;
					&amp;quot;label&amp;quot;: &amp;quot;Archived&amp;quot;&lt;br /&gt;
				}&lt;br /&gt;
			],&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Required. Pick one of the three statuses.&amp;quot;&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>NeoWiki</name></author>
	</entry>
	<entry>
		<id>https://neowiki.dev/w/index.php?title=Module:SubjectRow&amp;diff=280</id>
		<title>Module:SubjectRow</title>
		<link rel="alternate" type="text/html" href="https://neowiki.dev/w/index.php?title=Module:SubjectRow&amp;diff=280"/>
		<updated>2026-06-10T10:18:46Z</updated>

		<summary type="html">&lt;p&gt;NeoWiki: Importing NeoWiki demo data&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local p = {}&lt;br /&gt;
&lt;br /&gt;
-- Inline styles use Codex CSS custom properties so the row picks up the&lt;br /&gt;
-- current theme (light / dark) where Codex CSS is loaded; hex fallbacks&lt;br /&gt;
-- reproduce the light-mode values otherwise.&lt;br /&gt;
local style = table.concat( {&lt;br /&gt;
	&#039;display:flex&#039;,&lt;br /&gt;
	&#039;gap:8px&#039;,&lt;br /&gt;
	&#039;padding:16px&#039;,&lt;br /&gt;
	&#039;justify-content:safe center&#039;,&lt;br /&gt;
	&#039;overflow-x:auto&#039;,&lt;br /&gt;
	&#039;align-items:flex-start&#039;,&lt;br /&gt;
	&#039;background:var(--background-color-interactive-subtle, #eaecf0)&#039;,&lt;br /&gt;
	&#039;border:1px solid var(--border-color-subtle, #c8ccd1)&#039;,&lt;br /&gt;
	&#039;border-radius:2px&#039;,&lt;br /&gt;
	&#039;margin-block:1em&#039;,&lt;br /&gt;
}, &#039;;&#039; )&lt;br /&gt;
&lt;br /&gt;
-- Each positional argument is a subject ID, optionally followed by @LayoutName&lt;br /&gt;
-- for a per-view layout override. The named layout= argument is the row&#039;s&lt;br /&gt;
-- default layout when no override is present.&lt;br /&gt;
function p.render( frame )&lt;br /&gt;
	local rowLayout = frame.args.layout&lt;br /&gt;
	local out = { &#039;&amp;lt;div style=&amp;quot;&#039; .. style .. &#039;&amp;quot;&amp;gt;&#039; }&lt;br /&gt;
&lt;br /&gt;
	for _, arg in ipairs( frame.args ) do&lt;br /&gt;
		local id, viewLayout = arg, rowLayout&lt;br /&gt;
		local at = string.find( arg, &#039;@&#039;, 1, true )&lt;br /&gt;
		if at then&lt;br /&gt;
			id = string.sub( arg, 1, at - 1 )&lt;br /&gt;
			viewLayout = string.sub( arg, at + 1 )&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		local view&lt;br /&gt;
		if viewLayout and viewLayout ~= &#039;&#039; then&lt;br /&gt;
			view = frame:preprocess( &#039;{{#view:&#039; .. id .. &#039;|layout=&#039; .. viewLayout .. &#039;}}&#039; )&lt;br /&gt;
		else&lt;br /&gt;
			view = frame:preprocess( &#039;{{#view:&#039; .. id .. &#039;}}&#039; )&lt;br /&gt;
		end&lt;br /&gt;
		-- flex-shrink:0 keeps each infobox at its natural width so the row&lt;br /&gt;
		-- scrolls horizontally on narrow viewports instead of squishing.&lt;br /&gt;
		out[#out + 1] = &#039;&amp;lt;div style=&amp;quot;flex-shrink:0&amp;quot;&amp;gt;&#039; .. view .. &#039;&amp;lt;/div&amp;gt;&#039;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	out[#out + 1] = &#039;&amp;lt;/div&amp;gt;&#039;&lt;br /&gt;
	return table.concat( out )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>NeoWiki</name></author>
	</entry>
	<entry>
		<id>https://neowiki.dev/w/index.php?title=ACME_Inc&amp;diff=279</id>
		<title>ACME Inc</title>
		<link rel="alternate" type="text/html" href="https://neowiki.dev/w/index.php?title=ACME_Inc&amp;diff=279"/>
		<updated>2026-06-10T10:18:42Z</updated>

		<summary type="html">&lt;p&gt;NeoWiki: Importing NeoWiki demo data&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A fictional company that demonstrates NeoWiki&#039;s structured-data features in a corporate knowledge-base scenario: departments, offices, products, and the relations between them. &#039;&#039;&#039;ACME Inc&#039;&#039;&#039; is the Main Subject of this page. Each related entity has its own page, linked through the relations shown in the infobox above.&lt;br /&gt;
&lt;br /&gt;
== Which departments are largest by headcount? ==&lt;br /&gt;
&lt;br /&gt;
{{#invoke:NeoWikiDemo|query|MATCH (d:Department) RETURN d.name AS Department, d.Headcount AS Headcount ORDER BY Headcount DESC|columns=Department, Headcount|linkColumns=Department}}&lt;br /&gt;
&lt;br /&gt;
== Browse ==&lt;br /&gt;
&lt;br /&gt;
{{#invoke:NeoWikiDemo|query|MATCH (d:Department) RETURN d.name AS Subject, &#039;Department&#039; AS Type UNION MATCH (o:Office) RETURN o.name AS Subject, &#039;Office&#039; AS Type UNION MATCH (p:Product) RETURN p.name AS Subject, &#039;Product&#039; AS Type|columns=Subject, Type|linkColumns=Subject}}&lt;br /&gt;
&lt;br /&gt;
== How this is built ==&lt;br /&gt;
&lt;br /&gt;
* Schemas: [[Schema:Company]], [[Schema:Department]], [[Schema:Office]], [[Schema:Product]], [[Schema:Employee]]&lt;br /&gt;
* Layout: [[Layout:CompanyOverview]]&lt;br /&gt;
* See the source of this page: [{{fullurl:{{FULLPAGENAME}}|action=edit}} Edit this page]&lt;br /&gt;
* The infobox renders automatically from the Main Subject. The tables come from Cypher queries via [[Module:NeoWikiDemo]].&lt;/div&gt;</summary>
		<author><name>NeoWiki</name></author>
	</entry>
	<entry>
		<id>https://neowiki.dev/w/index.php?title=Rijksmuseum&amp;diff=278</id>
		<title>Rijksmuseum</title>
		<link rel="alternate" type="text/html" href="https://neowiki.dev/w/index.php?title=Rijksmuseum&amp;diff=278"/>
		<updated>2026-06-10T10:18:37Z</updated>

		<summary type="html">&lt;p&gt;NeoWiki: Importing NeoWiki demo data&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The &#039;&#039;&#039;Rijksmuseum&#039;&#039;&#039; is the Dutch national museum of arts and history, in [[Amsterdam]]. Founded in 1800 in The Hague and moved to Amsterdam in 1808, it has occupied its Pierre Cuypers-designed building since 1885.&lt;br /&gt;
&lt;br /&gt;
The museum holds around one million objects from 1200 to 2000, including masterpieces by Rembrandt, [[Johannes Vermeer|Vermeer]], and Frans Hals. It is best known for &amp;quot;The Night Watch&amp;quot; and a comprehensive survey of Dutch Golden Age painting.&lt;br /&gt;
&lt;br /&gt;
== Annual attendance ==&lt;br /&gt;
&lt;br /&gt;
Yearly attendance for the Rijksmuseum, stored as individual [[Schema:Attendance|Attendance]] Subjects on this page.&lt;br /&gt;
&lt;br /&gt;
{{#invoke:NeoWikiDemo|childTable|schema=Attendance|columns=Year, Visitors|sortBy=Year|numberColumns=Visitors}}&lt;/div&gt;</summary>
		<author><name>NeoWiki</name></author>
	</entry>
	<entry>
		<id>https://neowiki.dev/w/index.php?title=Schema:Company&amp;diff=276</id>
		<title>Schema:Company</title>
		<link rel="alternate" type="text/html" href="https://neowiki.dev/w/index.php?title=Schema:Company&amp;diff=276"/>
		<updated>2026-06-10T10:18:25Z</updated>

		<summary type="html">&lt;p&gt;NeoWiki: Importing NeoWiki demo data&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{&lt;br /&gt;
	&amp;quot;propertyDefinitions&amp;quot;: {&lt;br /&gt;
		&amp;quot;Founded at&amp;quot;: {&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;number&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;Websites&amp;quot;: {&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;url&amp;quot;,&lt;br /&gt;
			&amp;quot;multiple&amp;quot;: true&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;Main product&amp;quot;: {&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;relation&amp;quot;,&lt;br /&gt;
			&amp;quot;relation&amp;quot;: &amp;quot;Has main product&amp;quot;,&lt;br /&gt;
			&amp;quot;targetSchema&amp;quot;: &amp;quot;Product&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;Products&amp;quot;: {&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;relation&amp;quot;,&lt;br /&gt;
			&amp;quot;relation&amp;quot;: &amp;quot;Has product&amp;quot;,&lt;br /&gt;
			&amp;quot;targetSchema&amp;quot;: &amp;quot;Product&amp;quot;,&lt;br /&gt;
			&amp;quot;multiple&amp;quot;: true&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;Departments&amp;quot;: {&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;relation&amp;quot;,&lt;br /&gt;
			&amp;quot;relation&amp;quot;: &amp;quot;Has department&amp;quot;,&lt;br /&gt;
			&amp;quot;targetSchema&amp;quot;: &amp;quot;Department&amp;quot;,&lt;br /&gt;
			&amp;quot;multiple&amp;quot;: true&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;Offices&amp;quot;: {&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;relation&amp;quot;,&lt;br /&gt;
			&amp;quot;relation&amp;quot;: &amp;quot;Has office&amp;quot;,&lt;br /&gt;
			&amp;quot;targetSchema&amp;quot;: &amp;quot;Office&amp;quot;,&lt;br /&gt;
			&amp;quot;multiple&amp;quot;: true&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;Headquarters&amp;quot;: {&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;relation&amp;quot;,&lt;br /&gt;
			&amp;quot;relation&amp;quot;: &amp;quot;Has headquarters&amp;quot;,&lt;br /&gt;
			&amp;quot;targetSchema&amp;quot;: &amp;quot;Office&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;Status&amp;quot;: {&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;select&amp;quot;,&lt;br /&gt;
			&amp;quot;options&amp;quot;: [&lt;br /&gt;
				{&lt;br /&gt;
					&amp;quot;id&amp;quot;: &amp;quot;o1demo1aaaaaaa1&amp;quot;,&lt;br /&gt;
					&amp;quot;label&amp;quot;: &amp;quot;Active&amp;quot;&lt;br /&gt;
				},&lt;br /&gt;
				{&lt;br /&gt;
					&amp;quot;id&amp;quot;: &amp;quot;o1demo1aaaaaaa2&amp;quot;,&lt;br /&gt;
					&amp;quot;label&amp;quot;: &amp;quot;Inactive&amp;quot;&lt;br /&gt;
				},&lt;br /&gt;
				{&lt;br /&gt;
					&amp;quot;id&amp;quot;: &amp;quot;o1demo1aaaaaaa3&amp;quot;,&lt;br /&gt;
					&amp;quot;label&amp;quot;: &amp;quot;Acquired&amp;quot;&lt;br /&gt;
				},&lt;br /&gt;
				{&lt;br /&gt;
					&amp;quot;id&amp;quot;: &amp;quot;o1demo1aaaaaaa4&amp;quot;,&lt;br /&gt;
					&amp;quot;label&amp;quot;: &amp;quot;Dissolved&amp;quot;&lt;br /&gt;
				}&lt;br /&gt;
			],&lt;br /&gt;
			&amp;quot;required&amp;quot;: true&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;World domination progress&amp;quot;: {&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;number&amp;quot;,&lt;br /&gt;
			&amp;quot;default&amp;quot;: 0&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;Is public&amp;quot;: {&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;boolean&amp;quot;&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>NeoWiki</name></author>
	</entry>
	<entry>
		<id>https://neowiki.dev/w/index.php?title=Schema:Everything&amp;diff=275</id>
		<title>Schema:Everything</title>
		<link rel="alternate" type="text/html" href="https://neowiki.dev/w/index.php?title=Schema:Everything&amp;diff=275"/>
		<updated>2026-06-10T10:18:25Z</updated>

		<summary type="html">&lt;p&gt;NeoWiki: Importing NeoWiki demo data&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{&lt;br /&gt;
	&amp;quot;description&amp;quot;: &amp;quot;Everything currently almost supported, maybe.&amp;quot;,&lt;br /&gt;
	&amp;quot;propertyDefinitions&amp;quot;: {&lt;br /&gt;
		&amp;quot;string/text&amp;quot;: {&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;text&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;string/text (required)&amp;quot;: {&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;text&amp;quot;,&lt;br /&gt;
			&amp;quot;required&amp;quot;: true&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;string/text (many)&amp;quot;: {&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;text&amp;quot;,&lt;br /&gt;
			&amp;quot;multiple&amp;quot;: true&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;string/text (duplicates)&amp;quot;: {&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;text&amp;quot;,&lt;br /&gt;
			&amp;quot;multiple&amp;quot;: true,&lt;br /&gt;
			&amp;quot;uniqueItems&amp;quot;: false&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;string/text (default)&amp;quot;: {&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;text&amp;quot;,&lt;br /&gt;
			&amp;quot;default&amp;quot;: &amp;quot;Default value&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;string/url&amp;quot;: {&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;url&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;string/url (many)&amp;quot;: {&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;url&amp;quot;,&lt;br /&gt;
			&amp;quot;multiple&amp;quot;: true&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;number/number&amp;quot;: {&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;number&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;number/number (w precision)&amp;quot;: {&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;number&amp;quot;,&lt;br /&gt;
			&amp;quot;precision&amp;quot;: 2&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;number/number (w bounds)&amp;quot;: {&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;number&amp;quot;,&lt;br /&gt;
			&amp;quot;minimum&amp;quot;: 42,&lt;br /&gt;
			&amp;quot;maximum&amp;quot;: 100&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;date/date&amp;quot;: {&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;date&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;date/date (required)&amp;quot;: {&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;date&amp;quot;,&lt;br /&gt;
			&amp;quot;required&amp;quot;: true&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;date/date (w bounds)&amp;quot;: {&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;date&amp;quot;,&lt;br /&gt;
			&amp;quot;minimum&amp;quot;: &amp;quot;2020-01-01&amp;quot;,&lt;br /&gt;
			&amp;quot;maximum&amp;quot;: &amp;quot;2030-12-31&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;select/select&amp;quot;: {&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;select&amp;quot;,&lt;br /&gt;
			&amp;quot;options&amp;quot;: [&lt;br /&gt;
				{&lt;br /&gt;
					&amp;quot;id&amp;quot;: &amp;quot;o1demo1aaaaaab1&amp;quot;,&lt;br /&gt;
					&amp;quot;label&amp;quot;: &amp;quot;Draft&amp;quot;&lt;br /&gt;
				},&lt;br /&gt;
				{&lt;br /&gt;
					&amp;quot;id&amp;quot;: &amp;quot;o1demo1aaaaaab2&amp;quot;,&lt;br /&gt;
					&amp;quot;label&amp;quot;: &amp;quot;Review&amp;quot;&lt;br /&gt;
				},&lt;br /&gt;
				{&lt;br /&gt;
					&amp;quot;id&amp;quot;: &amp;quot;o1demo1aaaaaab3&amp;quot;,&lt;br /&gt;
					&amp;quot;label&amp;quot;: &amp;quot;Approved&amp;quot;&lt;br /&gt;
				},&lt;br /&gt;
				{&lt;br /&gt;
					&amp;quot;id&amp;quot;: &amp;quot;o1demo1aaaaaab4&amp;quot;,&lt;br /&gt;
					&amp;quot;label&amp;quot;: &amp;quot;Archived&amp;quot;&lt;br /&gt;
				}&lt;br /&gt;
			]&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;select/select (required)&amp;quot;: {&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;select&amp;quot;,&lt;br /&gt;
			&amp;quot;options&amp;quot;: [&lt;br /&gt;
				{&lt;br /&gt;
					&amp;quot;id&amp;quot;: &amp;quot;o1demo1aaaaaac1&amp;quot;,&lt;br /&gt;
					&amp;quot;label&amp;quot;: &amp;quot;Low&amp;quot;&lt;br /&gt;
				},&lt;br /&gt;
				{&lt;br /&gt;
					&amp;quot;id&amp;quot;: &amp;quot;o1demo1aaaaaac2&amp;quot;,&lt;br /&gt;
					&amp;quot;label&amp;quot;: &amp;quot;Medium&amp;quot;&lt;br /&gt;
				},&lt;br /&gt;
				{&lt;br /&gt;
					&amp;quot;id&amp;quot;: &amp;quot;o1demo1aaaaaac3&amp;quot;,&lt;br /&gt;
					&amp;quot;label&amp;quot;: &amp;quot;High&amp;quot;&lt;br /&gt;
				},&lt;br /&gt;
				{&lt;br /&gt;
					&amp;quot;id&amp;quot;: &amp;quot;o1demo1aaaaaac4&amp;quot;,&lt;br /&gt;
					&amp;quot;label&amp;quot;: &amp;quot;Critical&amp;quot;&lt;br /&gt;
				}&lt;br /&gt;
			],&lt;br /&gt;
			&amp;quot;required&amp;quot;: true&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;select/select (many)&amp;quot;: {&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;select&amp;quot;,&lt;br /&gt;
			&amp;quot;options&amp;quot;: [&lt;br /&gt;
				{&lt;br /&gt;
					&amp;quot;id&amp;quot;: &amp;quot;o1demo1aaaaaad1&amp;quot;,&lt;br /&gt;
					&amp;quot;label&amp;quot;: &amp;quot;Red&amp;quot;&lt;br /&gt;
				},&lt;br /&gt;
				{&lt;br /&gt;
					&amp;quot;id&amp;quot;: &amp;quot;o1demo1aaaaaad2&amp;quot;,&lt;br /&gt;
					&amp;quot;label&amp;quot;: &amp;quot;Green&amp;quot;&lt;br /&gt;
				},&lt;br /&gt;
				{&lt;br /&gt;
					&amp;quot;id&amp;quot;: &amp;quot;o1demo1aaaaaad3&amp;quot;,&lt;br /&gt;
					&amp;quot;label&amp;quot;: &amp;quot;Blue&amp;quot;&lt;br /&gt;
				},&lt;br /&gt;
				{&lt;br /&gt;
					&amp;quot;id&amp;quot;: &amp;quot;o1demo1aaaaaad4&amp;quot;,&lt;br /&gt;
					&amp;quot;label&amp;quot;: &amp;quot;Yellow&amp;quot;&lt;br /&gt;
				}&lt;br /&gt;
			],&lt;br /&gt;
			&amp;quot;multiple&amp;quot;: true&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;boolean/boolean&amp;quot;: {&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;boolean&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;boolean/boolean (default true)&amp;quot;: {&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;boolean&amp;quot;,&lt;br /&gt;
			&amp;quot;default&amp;quot;: true&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;boolean/boolean (default false)&amp;quot;: {&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;boolean&amp;quot;,&lt;br /&gt;
			&amp;quot;default&amp;quot;: false&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;relation/relation&amp;quot;: {&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;relation&amp;quot;,&lt;br /&gt;
			&amp;quot;relation&amp;quot;: &amp;quot;Has product&amp;quot;,&lt;br /&gt;
			&amp;quot;targetSchema&amp;quot;: &amp;quot;Product&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;relation/relation (many)&amp;quot;: {&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;relation&amp;quot;,&lt;br /&gt;
			&amp;quot;relation&amp;quot;: &amp;quot;Has product&amp;quot;,&lt;br /&gt;
			&amp;quot;targetSchema&amp;quot;: &amp;quot;Product&amp;quot;,&lt;br /&gt;
			&amp;quot;multiple&amp;quot;: true&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>NeoWiki</name></author>
	</entry>
	<entry>
		<id>https://neowiki.dev/w/index.php?title=Developers&amp;diff=263</id>
		<title>Developers</title>
		<link rel="alternate" type="text/html" href="https://neowiki.dev/w/index.php?title=Developers&amp;diff=263"/>
		<updated>2026-05-18T00:09:08Z</updated>

		<summary type="html">&lt;p&gt;NeoWiki: Importing NeoWiki demo data&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;NeoWiki exposes a programmable surface: a graph database, parser functions, a Lua library, special pages, and a REST API. This page demonstrates each, showing the wikitext source alongside the rendered result.&lt;br /&gt;
&lt;br /&gt;
== Browse ==&lt;br /&gt;
&lt;br /&gt;
* [[Special:Schemas]]: all schemas&lt;br /&gt;
* [[Special:Layouts]]: all layouts&lt;br /&gt;
* [[Special:NeoJson|Special:NeoJson/&amp;amp;lt;subject id&amp;amp;gt;]]: view any subject as JSON&lt;br /&gt;
&lt;br /&gt;
== Query the graph ==&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{#cypher_raw}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; parser function runs a Cypher query and returns the raw JSON.&lt;br /&gt;
&lt;br /&gt;
Source:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;mediawiki&amp;quot;&amp;gt;&lt;br /&gt;
{{#cypher_raw:MATCH (m:Museum) RETURN m.name AS name, m.`Annual visitors` AS visitors ORDER BY visitors DESC LIMIT 5}}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Result:&lt;br /&gt;
&lt;br /&gt;
{{#cypher_raw:MATCH (m:Museum) RETURN m.name AS name, m.`Annual visitors` AS visitors ORDER BY visitors DESC LIMIT 5}}&lt;br /&gt;
&lt;br /&gt;
== Read values in wikitext ==&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{#neowiki_value}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; parser function reads a single property from a subject on a page.&lt;br /&gt;
&lt;br /&gt;
Source:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;mediawiki&amp;quot;&amp;gt;&lt;br /&gt;
{{#neowiki_value:Annual visitors|page=Rijksmuseum}}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Result: {{#neowiki_value:Annual visitors|page=Rijksmuseum}}&lt;br /&gt;
&lt;br /&gt;
Source:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;mediawiki&amp;quot;&amp;gt;&lt;br /&gt;
{{#neowiki_value:Founded at|page=ACME Inc}}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Result: {{#neowiki_value:Founded at|page=ACME Inc}}&lt;br /&gt;
&lt;br /&gt;
== Read values in Lua ==&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;mw.neowiki&amp;lt;/code&amp;gt; Lua library exposes structured data to your Scribunto modules. The example below reads a single property and runs a Cypher query.&lt;br /&gt;
&lt;br /&gt;
[[Module:LuaExample]]:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
local p = {}&lt;br /&gt;
local nw = require( &#039;mw.neowiki&#039; )&lt;br /&gt;
&lt;br /&gt;
function p.foundedYear( frame )&lt;br /&gt;
	local year = nw.getValue( &#039;Founded&#039;, { page = frame.args[1] } )&lt;br /&gt;
	return tostring( year or &#039;&#039; )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.oldestMuseums( frame )&lt;br /&gt;
	local rows = nw.query(&lt;br /&gt;
		&#039;MATCH (m:Museum) RETURN m.name AS name, m.Founded AS year ORDER BY year LIMIT 3&#039;&lt;br /&gt;
	)&lt;br /&gt;
&lt;br /&gt;
	local list = {}&lt;br /&gt;
	for _, row in ipairs( rows ) do&lt;br /&gt;
		list[#list + 1] = &#039;* &#039; .. row.name .. &#039; (&#039; .. row.year .. &#039;)&#039;&lt;br /&gt;
	end&lt;br /&gt;
	return table.concat( list, &#039;\n&#039; )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Invoke it from wikitext:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;mediawiki&amp;quot;&amp;gt;&lt;br /&gt;
{{#invoke:LuaExample|foundedYear|Rijksmuseum}}&lt;br /&gt;
&lt;br /&gt;
{{#invoke:LuaExample|oldestMuseums}}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Result:&lt;br /&gt;
&lt;br /&gt;
Rijksmuseum was founded in {{#invoke:LuaExample|foundedYear|Rijksmuseum}}.&lt;br /&gt;
&lt;br /&gt;
Oldest museums in this demo:&lt;br /&gt;
&lt;br /&gt;
{{#invoke:LuaExample|oldestMuseums}}&lt;br /&gt;
&lt;br /&gt;
For the full library reference, see the [https://github.com/ProfessionalWiki/NeoWiki/blob/master/docs/reference/lua-api.md Lua API documentation].&lt;br /&gt;
&lt;br /&gt;
== Reactive UI ==&lt;br /&gt;
&lt;br /&gt;
NeoWiki components embed in pages as reactive UIs that update without a page reload. See [[Subject views]] for the same Sandbox subject in three layouts, with edits propagating between them.&lt;br /&gt;
&lt;br /&gt;
== REST API ==&lt;br /&gt;
&lt;br /&gt;
NeoWiki exposes a REST API for reading and writing structured data. The OpenAPI 3.0 spec is auto-generated:&lt;br /&gt;
&lt;br /&gt;
* OpenAPI spec: &amp;lt;code&amp;gt;[{{SERVER}}{{SCRIPTPATH}}/rest.php/specs/v0/module/- /rest.php/specs/v0/module/-]&amp;lt;/code&amp;gt;&lt;br /&gt;
* Module discovery: &amp;lt;code&amp;gt;[{{SERVER}}{{SCRIPTPATH}}/rest.php/specs/v0/discovery /rest.php/specs/v0/discovery]&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Representative read endpoints:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;GET /neowiki/v0/subject/{subjectId}&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;GET /neowiki/v0/schema/{schemaName}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For full endpoint documentation, see the OpenAPI spec above.&lt;/div&gt;</summary>
		<author><name>NeoWiki</name></author>
	</entry>
	<entry>
		<id>https://neowiki.dev/w/index.php?title=Module:NeoWikiDemo&amp;diff=262</id>
		<title>Module:NeoWikiDemo</title>
		<link rel="alternate" type="text/html" href="https://neowiki.dev/w/index.php?title=Module:NeoWikiDemo&amp;diff=262"/>
		<updated>2026-05-11T14:24:50Z</updated>

		<summary type="html">&lt;p&gt;NeoWiki: Importing NeoWiki demo data&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local p = {}&lt;br /&gt;
local nw = require( &#039;mw.neowiki&#039; )&lt;br /&gt;
&lt;br /&gt;
function p.value( frame )&lt;br /&gt;
	local property = frame.args[1]&lt;br /&gt;
	local page = frame.args[&#039;page&#039;]&lt;br /&gt;
&lt;br /&gt;
	local options = nil&lt;br /&gt;
	if page then&lt;br /&gt;
		options = { page = page }&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local v = nw.getValue( property, options )&lt;br /&gt;
&lt;br /&gt;
	return tostring( v or &#039;&#039; )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.values( frame )&lt;br /&gt;
	local property = frame.args[1]&lt;br /&gt;
	local page = frame.args[&#039;page&#039;]&lt;br /&gt;
	local separator = frame.args[&#039;separator&#039;] or &#039;, &#039;&lt;br /&gt;
&lt;br /&gt;
	local options = nil&lt;br /&gt;
	if page then&lt;br /&gt;
		options = { page = page }&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local all = nw.getAll( property, options )&lt;br /&gt;
&lt;br /&gt;
	if not all then&lt;br /&gt;
		return &#039;&#039;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local parts = {}&lt;br /&gt;
	for _, item in ipairs( all ) do&lt;br /&gt;
		parts[#parts + 1] = tostring( item )&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return table.concat( parts, separator )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.subject( frame )&lt;br /&gt;
	local page = frame.args[1]&lt;br /&gt;
	local s = nw.getMainSubject( page )&lt;br /&gt;
&lt;br /&gt;
	if not s then&lt;br /&gt;
		return &#039;No subject found&#039;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local rows = {}&lt;br /&gt;
	rows[#rows + 1] = &#039;{| class=&amp;quot;wikitable&amp;quot;&#039;&lt;br /&gt;
	rows[#rows + 1] = &#039;! Property !! Type !! Value(s)&#039;&lt;br /&gt;
&lt;br /&gt;
	for name, stmt in pairs( s.statements ) do&lt;br /&gt;
		local vals = {}&lt;br /&gt;
		for _, v in ipairs( stmt.values ) do&lt;br /&gt;
			if type( v ) == &#039;table&#039; then&lt;br /&gt;
				vals[#vals + 1] = v.label or v.target or tostring( v )&lt;br /&gt;
			else&lt;br /&gt;
				vals[#vals + 1] = tostring( v )&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		rows[#rows + 1] = &#039;|-&#039;&lt;br /&gt;
		rows[#rows + 1] = &#039;| &#039; .. name .. &#039; || &#039; .. stmt.type .. &#039; || &#039; .. table.concat( vals, &#039;, &#039; )&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	rows[#rows + 1] = &#039;|}&#039;&lt;br /&gt;
	return table.concat( rows, &#039;\n&#039; )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.children( frame )&lt;br /&gt;
	local page = frame.args[1]&lt;br /&gt;
	local children = nw.getChildSubjects( page )&lt;br /&gt;
&lt;br /&gt;
	if not children or #children == 0 then&lt;br /&gt;
		return &#039;No child subjects&#039;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local parts = {}&lt;br /&gt;
	for _, child in ipairs( children ) do&lt;br /&gt;
		parts[#parts + 1] = &amp;quot;&#039;&#039;&#039;&amp;quot; .. child.label .. &amp;quot;&#039;&#039;&#039; (&amp;quot; .. child.schema .. &amp;quot;)&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return table.concat( parts, &#039;, &#039; )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function renderRowsAsTable( rows, columns, linkColumns )&lt;br /&gt;
	if #rows == 0 then&lt;br /&gt;
		return &#039;No results&#039;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if not columns then&lt;br /&gt;
		columns = {}&lt;br /&gt;
		for k in pairs( rows[1] ) do&lt;br /&gt;
			columns[#columns + 1] = k&lt;br /&gt;
		end&lt;br /&gt;
		table.sort( columns )&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local linkSet = {}&lt;br /&gt;
	if linkColumns then&lt;br /&gt;
		for _, col in ipairs( linkColumns ) do&lt;br /&gt;
			linkSet[col] = true&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local out = { &#039;{| class=&amp;quot;wikitable&amp;quot;&#039;, &#039;! &#039; .. table.concat( columns, &#039; !! &#039; ) }&lt;br /&gt;
&lt;br /&gt;
	for _, row in ipairs( rows ) do&lt;br /&gt;
		local cells = {}&lt;br /&gt;
		for _, col in ipairs( columns ) do&lt;br /&gt;
			local v = row[col]&lt;br /&gt;
			local cell = v == nil and &#039;&#039; or tostring( v )&lt;br /&gt;
			if linkSet[col] and cell ~= &#039;&#039; then&lt;br /&gt;
				cell = &#039;[[&#039; .. cell .. &#039;]]&#039;&lt;br /&gt;
			end&lt;br /&gt;
			cells[#cells + 1] = cell&lt;br /&gt;
		end&lt;br /&gt;
		out[#out + 1] = &#039;|-&#039;&lt;br /&gt;
		out[#out + 1] = &#039;| &#039; .. table.concat( cells, &#039; || &#039; )&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	out[#out + 1] = &#039;|}&#039;&lt;br /&gt;
	return table.concat( out, &#039;\n&#039; )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.query( frame )&lt;br /&gt;
	local columns = nil&lt;br /&gt;
	if frame.args.columns then&lt;br /&gt;
		columns = mw.text.split( frame.args.columns, &#039;,%s*&#039; )&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local linkColumns = nil&lt;br /&gt;
	if frame.args.linkColumns then&lt;br /&gt;
		linkColumns = mw.text.split( frame.args.linkColumns, &#039;,%s*&#039; )&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return renderRowsAsTable( nw.query( frame.args[1] ), columns, linkColumns )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function statementValue( stmt )&lt;br /&gt;
	if not stmt or not stmt.values or stmt.values[1] == nil then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	local v = stmt.values[1]&lt;br /&gt;
	if type( v ) == &#039;table&#039; then&lt;br /&gt;
		return v.label or v.target&lt;br /&gt;
	end&lt;br /&gt;
	return v&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Renders a wikitable from the current page&#039;s child Subjects.&lt;br /&gt;
-- Args: columns=Col1, Col2 (required, in order)&lt;br /&gt;
--       schema=SchemaName (optional, filters children to one schema)&lt;br /&gt;
--       sortBy=ColName (optional)&lt;br /&gt;
--       sortDir=asc|desc (optional, default desc)&lt;br /&gt;
--       numberColumns=Col1, Col2 (optional, formatted with thousand separators)&lt;br /&gt;
function p.childTable( frame )&lt;br /&gt;
	local columns = mw.text.split( frame.args.columns or &#039;&#039;, &#039;,%s*&#039; )&lt;br /&gt;
	local schemaFilter = frame.args.schema&lt;br /&gt;
	local sortBy = frame.args.sortBy&lt;br /&gt;
	local sortDir = frame.args.sortDir or &#039;desc&#039;&lt;br /&gt;
&lt;br /&gt;
	local numberSet = {}&lt;br /&gt;
	if frame.args.numberColumns then&lt;br /&gt;
		for _, col in ipairs( mw.text.split( frame.args.numberColumns, &#039;,%s*&#039; ) ) do&lt;br /&gt;
			numberSet[col] = true&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local children = nw.getChildSubjects()&lt;br /&gt;
	if not children then&lt;br /&gt;
		return &#039;&#039;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local lang = mw.getContentLanguage()&lt;br /&gt;
	local rows = {}&lt;br /&gt;
&lt;br /&gt;
	for _, child in ipairs( children ) do&lt;br /&gt;
		if not schemaFilter or child.schema == schemaFilter then&lt;br /&gt;
			local row = {}&lt;br /&gt;
			for _, col in ipairs( columns ) do&lt;br /&gt;
				local v = statementValue( child.statements[col] )&lt;br /&gt;
				if v == nil then&lt;br /&gt;
					row[col] = &#039;&#039;&lt;br /&gt;
				elseif numberSet[col] and tonumber( v ) then&lt;br /&gt;
					row[col] = lang:formatNum( tonumber( v ) )&lt;br /&gt;
				else&lt;br /&gt;
					row[col] = tostring( v )&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			-- Stash the raw sort value so number columns sort numerically&lt;br /&gt;
			-- even after thousand-separator formatting has stringified them.&lt;br /&gt;
			if sortBy then&lt;br /&gt;
				row.__sortValue = statementValue( child.statements[sortBy] )&lt;br /&gt;
			end&lt;br /&gt;
			rows[#rows + 1] = row&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if sortBy then&lt;br /&gt;
		table.sort( rows, function( a, b )&lt;br /&gt;
			local av, bv = a.__sortValue, b.__sortValue&lt;br /&gt;
			local an, bn = tonumber( av ), tonumber( bv )&lt;br /&gt;
			if an and bn then&lt;br /&gt;
				if sortDir == &#039;asc&#039; then return an &amp;lt; bn end&lt;br /&gt;
				return an &amp;gt; bn&lt;br /&gt;
			end&lt;br /&gt;
			if sortDir == &#039;asc&#039; then return tostring( av ) &amp;lt; tostring( bv ) end&lt;br /&gt;
			return tostring( av ) &amp;gt; tostring( bv )&lt;br /&gt;
		end )&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return renderRowsAsTable( rows, columns, nil )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.productsFoundedSince( frame )&lt;br /&gt;
	local year = tonumber( frame.args[1] ) or 2000&lt;br /&gt;
&lt;br /&gt;
	return renderRowsAsTable( nw.query(&lt;br /&gt;
		&#039;MATCH (n:Product) WHERE n.`Available since` &amp;gt;= $year &#039; ..&lt;br /&gt;
			&#039;RETURN n.name AS name, n.`Available since` AS year ORDER BY year&#039;,&lt;br /&gt;
		{ year = year }&lt;br /&gt;
	) )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function propertyDetails( prop )&lt;br /&gt;
	local details = {}&lt;br /&gt;
&lt;br /&gt;
	if prop.type == &#039;select&#039; then&lt;br /&gt;
		local labels = {}&lt;br /&gt;
		for _, option in ipairs( prop.options ) do&lt;br /&gt;
			labels[#labels + 1] = option.label&lt;br /&gt;
		end&lt;br /&gt;
		details[#details + 1] = &#039;options: &#039; .. table.concat( labels, &#039;, &#039; )&lt;br /&gt;
	elseif prop.type == &#039;number&#039; then&lt;br /&gt;
		if prop.minimum ~= nil then&lt;br /&gt;
			details[#details + 1] = &#039;min: &#039; .. tostring( prop.minimum )&lt;br /&gt;
		end&lt;br /&gt;
		if prop.maximum ~= nil then&lt;br /&gt;
			details[#details + 1] = &#039;max: &#039; .. tostring( prop.maximum )&lt;br /&gt;
		end&lt;br /&gt;
		if prop.precision ~= nil then&lt;br /&gt;
			details[#details + 1] = &#039;precision: &#039; .. tostring( prop.precision )&lt;br /&gt;
		end&lt;br /&gt;
	elseif prop.type == &#039;relation&#039; then&lt;br /&gt;
		details[#details + 1] = &#039;targetSchema: &#039; .. prop.targetSchema&lt;br /&gt;
		details[#details + 1] = &#039;relation: &#039; .. prop.relation&lt;br /&gt;
	elseif prop.type == &#039;text&#039; or prop.type == &#039;url&#039; then&lt;br /&gt;
		if prop.multiple then&lt;br /&gt;
			details[#details + 1] = &#039;multiple: true&#039;&lt;br /&gt;
		end&lt;br /&gt;
		if prop.uniqueItems then&lt;br /&gt;
			details[#details + 1] = &#039;uniqueItems: true&#039;&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return table.concat( details, &#039;, &#039; )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.schema( frame )&lt;br /&gt;
	local schema = nw.getSchema( frame.args[1] )&lt;br /&gt;
&lt;br /&gt;
	if not schema then&lt;br /&gt;
		return &#039;Schema not found&#039;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local rows = {}&lt;br /&gt;
	for _, prop in ipairs( schema.properties ) do&lt;br /&gt;
		rows[#rows + 1] = {&lt;br /&gt;
			Name = prop.name,&lt;br /&gt;
			Type = prop.type,&lt;br /&gt;
			Required = prop.required and &#039;Yes&#039; or &#039;No&#039;,&lt;br /&gt;
			Details = propertyDetails( prop ),&lt;br /&gt;
		}&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return renderRowsAsTable( rows, { &#039;Name&#039;, &#039;Type&#039;, &#039;Required&#039;, &#039;Details&#039; } )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>NeoWiki</name></author>
	</entry>
	<entry>
		<id>https://neowiki.dev/w/index.php?title=Module:SubjectRow&amp;diff=261</id>
		<title>Module:SubjectRow</title>
		<link rel="alternate" type="text/html" href="https://neowiki.dev/w/index.php?title=Module:SubjectRow&amp;diff=261"/>
		<updated>2026-05-11T14:24:50Z</updated>

		<summary type="html">&lt;p&gt;NeoWiki: Importing NeoWiki demo data&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local p = {}&lt;br /&gt;
&lt;br /&gt;
-- Inline styles use Codex CSS custom properties so the row picks up the&lt;br /&gt;
-- current theme (light / dark) where Codex CSS is loaded; hex fallbacks&lt;br /&gt;
-- reproduce the light-mode values otherwise.&lt;br /&gt;
local style = table.concat( {&lt;br /&gt;
	&#039;display:flex&#039;,&lt;br /&gt;
	&#039;gap:8px&#039;,&lt;br /&gt;
	&#039;padding:16px&#039;,&lt;br /&gt;
	&#039;justify-content:safe center&#039;,&lt;br /&gt;
	&#039;overflow-x:auto&#039;,&lt;br /&gt;
	&#039;align-items:flex-start&#039;,&lt;br /&gt;
	&#039;background:var(--background-color-interactive-subtle, #eaecf0)&#039;,&lt;br /&gt;
	&#039;border:1px solid var(--border-color-subtle, #c8ccd1)&#039;,&lt;br /&gt;
	&#039;border-radius:2px&#039;,&lt;br /&gt;
	&#039;margin-block:1em&#039;,&lt;br /&gt;
}, &#039;;&#039; )&lt;br /&gt;
&lt;br /&gt;
-- Each positional argument is a subject ID, optionally followed by @LayoutName&lt;br /&gt;
-- for a per-view layout override. The named layout= argument is the row&#039;s&lt;br /&gt;
-- default layout when no override is present.&lt;br /&gt;
function p.render( frame )&lt;br /&gt;
	local rowLayout = frame.args.layout&lt;br /&gt;
	local out = { &#039;&amp;lt;div style=&amp;quot;&#039; .. style .. &#039;&amp;quot;&amp;gt;&#039; }&lt;br /&gt;
&lt;br /&gt;
	for _, arg in ipairs( frame.args ) do&lt;br /&gt;
		local id, viewLayout = arg, rowLayout&lt;br /&gt;
		local at = string.find( arg, &#039;@&#039;, 1, true )&lt;br /&gt;
		if at then&lt;br /&gt;
			id = string.sub( arg, 1, at - 1 )&lt;br /&gt;
			viewLayout = string.sub( arg, at + 1 )&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		local view&lt;br /&gt;
		if viewLayout and viewLayout ~= &#039;&#039; then&lt;br /&gt;
			view = frame:preprocess( &#039;{{#view:&#039; .. id .. &#039;|&#039; .. viewLayout .. &#039;}}&#039; )&lt;br /&gt;
		else&lt;br /&gt;
			view = frame:preprocess( &#039;{{#view:&#039; .. id .. &#039;}}&#039; )&lt;br /&gt;
		end&lt;br /&gt;
		-- flex-shrink:0 keeps each infobox at its natural width so the row&lt;br /&gt;
		-- scrolls horizontally on narrow viewports instead of squishing.&lt;br /&gt;
		out[#out + 1] = &#039;&amp;lt;div style=&amp;quot;flex-shrink:0&amp;quot;&amp;gt;&#039; .. view .. &#039;&amp;lt;/div&amp;gt;&#039;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	out[#out + 1] = &#039;&amp;lt;/div&amp;gt;&#039;&lt;br /&gt;
	return table.concat( out )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>NeoWiki</name></author>
	</entry>
	<entry>
		<id>https://neowiki.dev/w/index.php?title=Module:Card&amp;diff=260</id>
		<title>Module:Card</title>
		<link rel="alternate" type="text/html" href="https://neowiki.dev/w/index.php?title=Module:Card&amp;diff=260"/>
		<updated>2026-05-11T14:24:50Z</updated>

		<summary type="html">&lt;p&gt;NeoWiki: Importing NeoWiki demo data&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local p = {}&lt;br /&gt;
&lt;br /&gt;
-- Codex tokens read live via CSS custom properties so cards adapt to dark mode&lt;br /&gt;
-- where Codex CSS is loaded. Hex/px fallbacks reproduce the light-mode values&lt;br /&gt;
-- on pages that don&#039;t load Codex (and for tokens not yet exposed by Vector,&lt;br /&gt;
-- e.g. --spacing-* and --border-radius-*).&lt;br /&gt;
local C = {&lt;br /&gt;
	background = &#039;var(--background-color-base, #ffffff)&#039;,&lt;br /&gt;
	border = &#039;var(--border-color-base, #a2a9b1)&#039;,&lt;br /&gt;
	borderRadius = &#039;var(--border-radius-base, 2px)&#039;,&lt;br /&gt;
	paddingLg = &#039;var(--spacing-100, 16px)&#039;,&lt;br /&gt;
	titleColor = &#039;var(--color-base, #202122)&#039;,&lt;br /&gt;
	descColor = &#039;var(--color-subtle, #54595d)&#039;,&lt;br /&gt;
	titleSize = &#039;1.125rem&#039;,&lt;br /&gt;
	descSize = &#039;0.875rem&#039;,&lt;br /&gt;
	gap = &#039;var(--spacing-75, 12px)&#039;,&lt;br /&gt;
	flexBasis = &#039;240px&#039;,&lt;br /&gt;
	minWidth = &#039;200px&#039;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-- Inline-level spans (with display:block) let MediaWiki&#039;s wikitext link&lt;br /&gt;
-- syntax wrap the whole card body in a single sanitizer-approved &amp;lt;a&amp;gt;.&lt;br /&gt;
local function cardBody( title, description )&lt;br /&gt;
	local bodyStyle = table.concat( {&lt;br /&gt;
		&#039;display:block&#039;,&lt;br /&gt;
		&#039;background:&#039; .. C.background,&lt;br /&gt;
		&#039;border:1px solid &#039; .. C.border,&lt;br /&gt;
		&#039;border-radius:&#039; .. C.borderRadius,&lt;br /&gt;
		&#039;padding:&#039; .. C.paddingLg,&lt;br /&gt;
		&#039;color:inherit&#039;,&lt;br /&gt;
		&#039;text-decoration:none&#039;,&lt;br /&gt;
		&#039;height:100%&#039;,&lt;br /&gt;
		&#039;box-sizing:border-box&#039;,&lt;br /&gt;
	}, &#039;;&#039; )&lt;br /&gt;
&lt;br /&gt;
	local titleStyle = table.concat( {&lt;br /&gt;
		&#039;display:block&#039;,&lt;br /&gt;
		&#039;font-size:&#039; .. C.titleSize,&lt;br /&gt;
		&#039;font-weight:600&#039;,&lt;br /&gt;
		&#039;color:&#039; .. C.titleColor,&lt;br /&gt;
		&#039;margin-bottom:4px&#039;,&lt;br /&gt;
	}, &#039;;&#039; )&lt;br /&gt;
&lt;br /&gt;
	local descStyle = table.concat( {&lt;br /&gt;
		&#039;display:block&#039;,&lt;br /&gt;
		&#039;font-size:&#039; .. C.descSize,&lt;br /&gt;
		&#039;color:&#039; .. C.descColor,&lt;br /&gt;
		&#039;line-height:1.4&#039;,&lt;br /&gt;
	}, &#039;;&#039; )&lt;br /&gt;
&lt;br /&gt;
	return string.format(&lt;br /&gt;
		&#039;&amp;lt;span style=&amp;quot;%s&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;%s&amp;quot;&amp;gt;%s&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;%s&amp;quot;&amp;gt;%s&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&#039;,&lt;br /&gt;
		bodyStyle,&lt;br /&gt;
		titleStyle,&lt;br /&gt;
		mw.text.encode( title ),&lt;br /&gt;
		descStyle,&lt;br /&gt;
		mw.text.encode( description )&lt;br /&gt;
	)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function cardHtml( args )&lt;br /&gt;
	local title = args.title or &#039;&#039;&lt;br /&gt;
	local description = args.description or &#039;&#039;&lt;br /&gt;
	local link = args.link or &#039;&#039;&lt;br /&gt;
	local body = cardBody( title, description )&lt;br /&gt;
&lt;br /&gt;
	-- Flex sizing lives on an outer wrapper so it applies to the link itself,&lt;br /&gt;
	-- not to a child of the link (since wikitext link syntax forbids attributes&lt;br /&gt;
	-- on the produced &amp;lt;a&amp;gt;).&lt;br /&gt;
	local wrapperStyle = table.concat( {&lt;br /&gt;
		&#039;display:block&#039;,&lt;br /&gt;
		&#039;flex:1 1 &#039; .. C.flexBasis,&lt;br /&gt;
		&#039;min-width:&#039; .. C.minWidth,&lt;br /&gt;
	}, &#039;;&#039; )&lt;br /&gt;
&lt;br /&gt;
	if link == &#039;&#039; then&lt;br /&gt;
		return string.format( &#039;&amp;lt;span style=&amp;quot;%s&amp;quot;&amp;gt;%s&amp;lt;/span&amp;gt;&#039;, wrapperStyle, body )&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return string.format( &#039;&amp;lt;span style=&amp;quot;%s&amp;quot;&amp;gt;[[%s|%s]]&amp;lt;/span&amp;gt;&#039;, wrapperStyle, link, body )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.card( frame )&lt;br /&gt;
	return cardHtml( frame.args )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.cards( frame )&lt;br /&gt;
	-- Reads card1_title, card1_description, card1_link, card2_*, card3_*. Up to 9.&lt;br /&gt;
	local out = { &#039;&amp;lt;div style=&amp;quot;display:flex;gap:&#039; .. C.gap .. &#039;;flex-wrap:wrap;margin:1em 0&amp;quot;&amp;gt;&#039; }&lt;br /&gt;
&lt;br /&gt;
	for i = 1, 9 do&lt;br /&gt;
		local title = frame.args[&#039;card&#039; .. i .. &#039;_title&#039;]&lt;br /&gt;
		if title then&lt;br /&gt;
			out[#out + 1] = cardHtml( {&lt;br /&gt;
				title = title,&lt;br /&gt;
				description = frame.args[&#039;card&#039; .. i .. &#039;_description&#039;],&lt;br /&gt;
				link = frame.args[&#039;card&#039; .. i .. &#039;_link&#039;],&lt;br /&gt;
			} )&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	out[#out + 1] = &#039;&amp;lt;/div&amp;gt;&#039;&lt;br /&gt;
	return table.concat( out )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>NeoWiki</name></author>
	</entry>
	<entry>
		<id>https://neowiki.dev/w/index.php?title=Module:LuaExample&amp;diff=259</id>
		<title>Module:LuaExample</title>
		<link rel="alternate" type="text/html" href="https://neowiki.dev/w/index.php?title=Module:LuaExample&amp;diff=259"/>
		<updated>2026-05-11T14:24:50Z</updated>

		<summary type="html">&lt;p&gt;NeoWiki: Importing NeoWiki demo data&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local p = {}&lt;br /&gt;
local nw = require( &#039;mw.neowiki&#039; )&lt;br /&gt;
&lt;br /&gt;
function p.foundedYear( frame )&lt;br /&gt;
	local year = nw.getValue( &#039;Founded&#039;, { page = frame.args[1] } )&lt;br /&gt;
	return tostring( year or &#039;&#039; )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.oldestMuseums( frame )&lt;br /&gt;
	local rows = nw.query(&lt;br /&gt;
		&#039;MATCH (m:Museum) RETURN m.name AS name, m.Founded AS year ORDER BY year LIMIT 3&#039;&lt;br /&gt;
	)&lt;br /&gt;
&lt;br /&gt;
	local list = {}&lt;br /&gt;
	for _, row in ipairs( rows ) do&lt;br /&gt;
		list[#list + 1] = &#039;* &#039; .. row.name .. &#039; (&#039; .. row.year .. &#039;)&#039;&lt;br /&gt;
	end&lt;br /&gt;
	return table.concat( list, &#039;\n&#039; )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>NeoWiki</name></author>
	</entry>
	<entry>
		<id>https://neowiki.dev/w/index.php?title=Developers&amp;diff=258</id>
		<title>Developers</title>
		<link rel="alternate" type="text/html" href="https://neowiki.dev/w/index.php?title=Developers&amp;diff=258"/>
		<updated>2026-05-11T14:24:48Z</updated>

		<summary type="html">&lt;p&gt;NeoWiki: Importing NeoWiki demo data&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;NeoWiki exposes a programmable surface: a graph database, parser functions, a Lua library, special pages, and a REST API. This page demonstrates each, showing the wikitext source alongside the rendered result.&lt;br /&gt;
&lt;br /&gt;
== Browse ==&lt;br /&gt;
&lt;br /&gt;
* [[Special:Schemas]]: all schemas&lt;br /&gt;
* [[Special:Layouts]]: all layouts&lt;br /&gt;
* [[Special:NeoJson|Special:NeoJson/&amp;amp;lt;subject id&amp;amp;gt;]]: view any subject as JSON&lt;br /&gt;
&lt;br /&gt;
== Query the graph ==&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{#cypher_raw}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; parser function runs a Cypher query and returns the raw JSON.&lt;br /&gt;
&lt;br /&gt;
Source:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;mediawiki&amp;quot;&amp;gt;&lt;br /&gt;
{{#cypher_raw:MATCH (m:Museum) RETURN m.name AS name, m.`Annual visitors` AS visitors ORDER BY visitors DESC LIMIT 5}}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Result:&lt;br /&gt;
&lt;br /&gt;
{{#cypher_raw:MATCH (m:Museum) RETURN m.name AS name, m.`Annual visitors` AS visitors ORDER BY visitors DESC LIMIT 5}}&lt;br /&gt;
&lt;br /&gt;
== Read values in wikitext ==&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{#neowiki_value}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; parser function reads a single property from a subject on a page.&lt;br /&gt;
&lt;br /&gt;
Source:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;mediawiki&amp;quot;&amp;gt;&lt;br /&gt;
{{#neowiki_value:Annual visitors|page=Rijksmuseum}}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Result: {{#neowiki_value:Annual visitors|page=Rijksmuseum}}&lt;br /&gt;
&lt;br /&gt;
Source:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;mediawiki&amp;quot;&amp;gt;&lt;br /&gt;
{{#neowiki_value:Founded at|page=ACME Inc}}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Result: {{#neowiki_value:Founded at|page=ACME Inc}}&lt;br /&gt;
&lt;br /&gt;
== Read values in Lua ==&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;mw.neowiki&amp;lt;/code&amp;gt; Lua library exposes structured data to your Scribunto modules. The example below reads a single property and runs a Cypher query.&lt;br /&gt;
&lt;br /&gt;
[[Module:LuaExample]]:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
local p = {}&lt;br /&gt;
local nw = require( &#039;mw.neowiki&#039; )&lt;br /&gt;
&lt;br /&gt;
function p.foundedYear( frame )&lt;br /&gt;
	local year = nw.getValue( &#039;Founded&#039;, { page = frame.args[1] } )&lt;br /&gt;
	return tostring( year or &#039;&#039; )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.oldestMuseums( frame )&lt;br /&gt;
	local rows = nw.query(&lt;br /&gt;
		&#039;MATCH (m:Museum) RETURN m.name AS name, m.Founded AS year ORDER BY year LIMIT 3&#039;&lt;br /&gt;
	)&lt;br /&gt;
&lt;br /&gt;
	local list = {}&lt;br /&gt;
	for _, row in ipairs( rows ) do&lt;br /&gt;
		list[#list + 1] = &#039;* &#039; .. row.name .. &#039; (&#039; .. row.year .. &#039;)&#039;&lt;br /&gt;
	end&lt;br /&gt;
	return table.concat( list, &#039;\n&#039; )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Invoke it from wikitext:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;mediawiki&amp;quot;&amp;gt;&lt;br /&gt;
{{#invoke:LuaExample|foundedYear|Rijksmuseum}}&lt;br /&gt;
&lt;br /&gt;
{{#invoke:LuaExample|oldestMuseums}}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Result:&lt;br /&gt;
&lt;br /&gt;
Rijksmuseum was founded in {{#invoke:LuaExample|foundedYear|Rijksmuseum}}.&lt;br /&gt;
&lt;br /&gt;
Oldest museums in this demo:&lt;br /&gt;
&lt;br /&gt;
{{#invoke:LuaExample|oldestMuseums}}&lt;br /&gt;
&lt;br /&gt;
For the full library reference, see the [https://github.com/ProfessionalWiki/NeoWiki/blob/master/docs/LuaAPI.md Lua API documentation].&lt;br /&gt;
&lt;br /&gt;
== Reactive UI ==&lt;br /&gt;
&lt;br /&gt;
NeoWiki components embed in pages as reactive UIs that update without a page reload. See [[Subject views]] for the same Sandbox subject in three layouts, with edits propagating between them.&lt;br /&gt;
&lt;br /&gt;
== REST API ==&lt;br /&gt;
&lt;br /&gt;
NeoWiki exposes a REST API for reading and writing structured data. The OpenAPI 3.0 spec is auto-generated:&lt;br /&gt;
&lt;br /&gt;
* OpenAPI spec: &amp;lt;code&amp;gt;[{{SERVER}}{{SCRIPTPATH}}/rest.php/specs/v0/module/- /rest.php/specs/v0/module/-]&amp;lt;/code&amp;gt;&lt;br /&gt;
* Module discovery: &amp;lt;code&amp;gt;[{{SERVER}}{{SCRIPTPATH}}/rest.php/specs/v0/discovery /rest.php/specs/v0/discovery]&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Representative read endpoints:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;GET /neowiki/v0/subject/{subjectId}&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;GET /neowiki/v0/schema/{schemaName}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For full endpoint documentation, see the OpenAPI spec above.&lt;/div&gt;</summary>
		<author><name>NeoWiki</name></author>
	</entry>
	<entry>
		<id>https://neowiki.dev/w/index.php?title=Research_catalog&amp;diff=257</id>
		<title>Research catalog</title>
		<link rel="alternate" type="text/html" href="https://neowiki.dev/w/index.php?title=Research_catalog&amp;diff=257"/>
		<updated>2026-05-11T14:24:47Z</updated>

		<summary type="html">&lt;p&gt;NeoWiki: Importing NeoWiki demo data&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A fictional research-output catalog showing NeoWiki&#039;s relations across institutions, authors, projects, and publications. The dataset is invented for the demo and reflects the kind of structured bibliographic content found in the European Literary Bibliography case study.&lt;br /&gt;
&lt;br /&gt;
== Featured publications ==&lt;br /&gt;
&lt;br /&gt;
{{#invoke:SubjectRow|render|layout=PublicationOverview|s1demo8aaaaaaP1|s1demo8aaaaaaP5}}&lt;br /&gt;
&lt;br /&gt;
== Publications per project ==&lt;br /&gt;
&lt;br /&gt;
{{#invoke:NeoWikiDemo|query|MATCH (p:Publication)-[:`Part of project`]-&amp;gt;(pr:Project) RETURN pr.name AS Project, count(p) AS Publications ORDER BY Publications DESC|columns=Project, Publications|linkColumns=Project}}&lt;br /&gt;
&lt;br /&gt;
== Browse ==&lt;br /&gt;
&lt;br /&gt;
{{#invoke:NeoWikiDemo|query|MATCH (p:Publication) RETURN p.name AS Title, p.Year AS Year, p.Venue[0] AS Venue ORDER BY Year DESC, Title|columns=Title, Year, Venue|linkColumns=Title}}&lt;br /&gt;
&lt;br /&gt;
== How this is built ==&lt;br /&gt;
&lt;br /&gt;
* Schemas: [[Schema:Publication]], [[Schema:Author]], [[Schema:Institution]], [[Schema:Project]]&lt;br /&gt;
* Layout: [[Layout:PublicationOverview]]&lt;br /&gt;
* See the source of one publication: [{{fullurl:Linked Bibliography Mappings for European Archives|action=edit}} Edit Linked Bibliography Mappings for European Archives]&lt;br /&gt;
* The featured infoboxes use &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{#view}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;. The tables come from Cypher queries via [[Module:NeoWikiDemo]].&lt;/div&gt;</summary>
		<author><name>NeoWiki</name></author>
	</entry>
	<entry>
		<id>https://neowiki.dev/w/index.php?title=Museum_collection&amp;diff=256</id>
		<title>Museum collection</title>
		<link rel="alternate" type="text/html" href="https://neowiki.dev/w/index.php?title=Museum_collection&amp;diff=256"/>
		<updated>2026-05-11T14:24:47Z</updated>

		<summary type="html">&lt;p&gt;NeoWiki: Importing NeoWiki demo data&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A demo dataset of European museums, artists, artworks, and exhibitions. This hub shows how NeoWiki connects&lt;br /&gt;
entities across schemas, mirroring the cultural-heritage scenarios ECHOLOT and GLAM partners work with. The&lt;br /&gt;
data is curated for demonstration and is not authoritative.&lt;br /&gt;
&lt;br /&gt;
== Featured museums ==&lt;br /&gt;
&lt;br /&gt;
{{#invoke:SubjectRow|render|sEpfwJLnxyQy6vR|sEpfwJLnx3Kze3t}}&lt;br /&gt;
&lt;br /&gt;
== Which museums have the most visitors? ==&lt;br /&gt;
&lt;br /&gt;
{{#invoke:NeoWikiDemo|query|MATCH (m:Museum) RETURN m.name AS Museum, m.`Annual visitors` AS `Annual visitors` ORDER BY `Annual visitors` DESC|columns=Museum, Annual visitors|linkColumns=Museum}}&lt;br /&gt;
&lt;br /&gt;
== Browse ==&lt;br /&gt;
&lt;br /&gt;
{{#invoke:NeoWikiDemo|query|MATCH (m:Museum)-[:`Located in`]-&amp;gt;(c:City) RETURN m.name AS Museum, c.name AS City, m.Founded AS Founded, m.`Annual visitors` AS `Annual visitors` ORDER BY Museum|columns=Museum, City, Founded, Annual visitors|linkColumns=Museum, City}}&lt;br /&gt;
&lt;br /&gt;
== How this is built ==&lt;br /&gt;
&lt;br /&gt;
* Schemas: [[Schema:Museum]], [[Schema:Artist]], [[Schema:Artwork]], [[Schema:Exhibition]], [[Schema:Attendance]], [[Schema:City]]&lt;br /&gt;
* See the source of one subject: [{{fullurl:Rijksmuseum|action=edit}} Edit Rijksmuseum]&lt;br /&gt;
* The featured museums are embedded with the &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{#view}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; parser function. The tables come from Cypher queries via [[Module:NeoWikiDemo]].&lt;/div&gt;</summary>
		<author><name>NeoWiki</name></author>
	</entry>
	<entry>
		<id>https://neowiki.dev/w/index.php?title=Subject_views&amp;diff=255</id>
		<title>Subject views</title>
		<link rel="alternate" type="text/html" href="https://neowiki.dev/w/index.php?title=Subject_views&amp;diff=255"/>
		<updated>2026-05-11T14:24:47Z</updated>

		<summary type="html">&lt;p&gt;NeoWiki: Importing NeoWiki demo data&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A Subject&#039;s data can be presented through multiple Layouts, each tailored to a different context. Below, the [[Sandbox Subject]] is rendered in three views: the default schema view, plus the [[Layout:SandboxCompact|SandboxCompact]] and [[Layout:SandboxDetail|SandboxDetail]] layouts.&lt;br /&gt;
&lt;br /&gt;
Edits in any view also propagate to the others without a page reload.&lt;br /&gt;
&lt;br /&gt;
Sandbox Subject uses a dedicated [[Schema:Sandbox|Sandbox]] schema, so editing it here won&#039;t affect any other Subject in the demo wiki.&lt;br /&gt;
&lt;br /&gt;
{{#invoke:SubjectRow|render|s1demo9aaaaaaa1|s1demo9aaaaaaa1@SandboxCompact|s1demo9aaaaaaa1@SandboxDetail}}&lt;/div&gt;</summary>
		<author><name>NeoWiki</name></author>
	</entry>
	<entry>
		<id>https://neowiki.dev/w/index.php?title=Main_Page&amp;diff=254</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://neowiki.dev/w/index.php?title=Main_Page&amp;diff=254"/>
		<updated>2026-05-11T14:24:47Z</updated>

		<summary type="html">&lt;p&gt;NeoWiki: Importing NeoWiki demo data&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;padding:24px 16px;background:var(--background-color-interactive-subtle, #eaecf0);border:1px solid var(--border-color-subtle, #c8ccd1);border-radius:2px;margin-block:1em&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:1.5rem;font-weight:600;line-height:1.25;color:var(--color-base, #202122);max-width:800px&amp;quot;&amp;gt;NeoWiki turns wiki pages into queryable structured data&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;color:var(--color-subtle, #54595d);max-width:560px;margin-top:4px&amp;quot;&amp;gt;Schemas, infoboxes, relations, and Cypher, native to MediaWiki.&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Explore by use case ==&lt;br /&gt;
&lt;br /&gt;
{{#invoke:Card|cards|&lt;br /&gt;
card1_title=Museum collection&lt;br /&gt;
|card1_description=Connect institutions, artists, artworks, and exhibitions.&lt;br /&gt;
|card1_link=Museum collection&lt;br /&gt;
&lt;br /&gt;
|card2_title=ACME Inc&lt;br /&gt;
|card2_description=Document a company&#039;s departments, products, and offices.&lt;br /&gt;
|card2_link=ACME Inc&lt;br /&gt;
&lt;br /&gt;
|card3_title=Research catalog&lt;br /&gt;
|card3_description=Track publications, authors, institutions, and projects.&lt;br /&gt;
|card3_link=Research catalog&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== See how it works ==&lt;br /&gt;
&lt;br /&gt;
* Subjects hold your structured data. A page can have multiple. See the Data tab. Example: [{{fullurl:Rijksmuseum|action=subjects}} Rijksmuseum]&lt;br /&gt;
* [[Special:Schemas]]. Every Subject is shaped by a Schema. View or manage Schemas via this list page.&lt;br /&gt;
* [[Special:Layouts]]. Customize the presentation of Subjects via Layouts. Example usage: [[Subject views]].&lt;br /&gt;
&lt;br /&gt;
== Build on it ==&lt;br /&gt;
&lt;br /&gt;
* [[Developers|Developers hub]]: Cypher, parser functions, Lua, REST API.&lt;br /&gt;
* [https://github.com/ProfessionalWiki/NeoWiki Source on GitHub]&lt;br /&gt;
* [https://github.com/ProfessionalWiki/NeoWiki/tree/master/docs Technical documentation]&lt;br /&gt;
* [https://github.com/ProfessionalWiki/NeoWiki/issues Issue tracker]&lt;br /&gt;
&lt;br /&gt;
== About this wiki ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NeoWiki&#039;&#039;&#039; is a MediaWiki extension for queryable structured data. See [https://neowiki.ai neowiki.ai] for downloads, documentation, and updates.&lt;br /&gt;
&lt;br /&gt;
NeoWiki is under active development. Public interfaces and structure will continue to change. This demo wiki may be reset periodically, and edits may not persist.&lt;br /&gt;
&lt;br /&gt;
* [https://professional.wiki/en/contact Contact Professional Wiki] — the team behind NeoWiki&lt;br /&gt;
* Follow NeoWiki: [https://mastodon.social/@NeoWiki Mastodon] · [https://bsky.app/profile/neowiki.bsky.social Bluesky] · [https://x.com/NeoWikiAI X]&lt;/div&gt;</summary>
		<author><name>NeoWiki</name></author>
	</entry>
	<entry>
		<id>https://neowiki.dev/w/index.php?title=Marcus_Rendl&amp;diff=253</id>
		<title>Marcus Rendl</title>
		<link rel="alternate" type="text/html" href="https://neowiki.dev/w/index.php?title=Marcus_Rendl&amp;diff=253"/>
		<updated>2026-05-11T14:24:47Z</updated>

		<summary type="html">&lt;p&gt;NeoWiki: Importing NeoWiki demo data&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Marcus Rendl&#039;&#039;&#039; is a historian specialising in linked open data for cultural heritage collections. His research examines how RDF-based knowledge graphs can preserve scholarly nuance while making collection data interoperable across institutions.&lt;br /&gt;
&lt;br /&gt;
He is based at [[OEAW Vienna]] and has contributed to publications on [[Wikibase Backends for GLAM Knowledge Graphs|Wikibase backends]] and on [[Reconciling Author Identifiers Across Cultural Heritage Datasets|author identifier reconciliation]] in the [[Heritage Linked Data]] programme.&lt;/div&gt;</summary>
		<author><name>NeoWiki</name></author>
	</entry>
	<entry>
		<id>https://neowiki.dev/w/index.php?title=Dutch_Golden_Age_Highlights&amp;diff=252</id>
		<title>Dutch Golden Age Highlights</title>
		<link rel="alternate" type="text/html" href="https://neowiki.dev/w/index.php?title=Dutch_Golden_Age_Highlights&amp;diff=252"/>
		<updated>2026-05-11T14:24:47Z</updated>

		<summary type="html">&lt;p&gt;NeoWiki: Importing NeoWiki demo data&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Dutch Golden Age Highlights&#039;&#039;&#039; is a special exhibition at the [[Rijksmuseum]] drawing on the museum&#039;s holdings of 17th-century Dutch art. It brings together masterworks of painting, drawing, and decorative art from the period when the Dutch Republic dominated European trade and culture.&lt;br /&gt;
&lt;br /&gt;
Featured works include pieces by [[Johannes Vermeer]] and other leading masters of the era, grouped thematically to trace the social and economic context of the Republic&#039;s golden century.&lt;/div&gt;</summary>
		<author><name>NeoWiki</name></author>
	</entry>
	<entry>
		<id>https://neowiki.dev/w/index.php?title=Gustav_Klimt&amp;diff=251</id>
		<title>Gustav Klimt</title>
		<link rel="alternate" type="text/html" href="https://neowiki.dev/w/index.php?title=Gustav_Klimt&amp;diff=251"/>
		<updated>2026-05-11T14:24:47Z</updated>

		<summary type="html">&lt;p&gt;NeoWiki: Importing NeoWiki demo data&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Gustav Klimt&#039;&#039;&#039; was an Austrian Symbolist painter and one of the most prominent members of the [[Vienna]] Secession movement. His primary subject was the female body, and his work is marked by frank eroticism and an ornamental, often gilded surface treatment drawn from Byzantine mosaics.&lt;br /&gt;
&lt;br /&gt;
His &amp;quot;Golden Phase&amp;quot; produced his most celebrated works, including &amp;quot;[[The Kiss]]&amp;quot; and &amp;quot;Portrait of Adele Bloch-Bauer I&amp;quot;. Both combine richly patterned decoration with naturalistic figures and have become enduring icons of early twentieth-century art.&lt;/div&gt;</summary>
		<author><name>NeoWiki</name></author>
	</entry>
	<entry>
		<id>https://neowiki.dev/w/index.php?title=TEI_Encoding_Patterns_for_Multilingual_Editions&amp;diff=250</id>
		<title>TEI Encoding Patterns for Multilingual Editions</title>
		<link rel="alternate" type="text/html" href="https://neowiki.dev/w/index.php?title=TEI_Encoding_Patterns_for_Multilingual_Editions&amp;diff=250"/>
		<updated>2026-05-11T14:24:47Z</updated>

		<summary type="html">&lt;p&gt;NeoWiki: Importing NeoWiki demo data&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;quot;&#039;&#039;&#039;TEI Encoding Patterns for Multilingual Editions&#039;&#039;&#039;&amp;quot; surveys the encoding choices editors make when preparing scholarly editions of texts that exist in multiple languages or translations. The paper distils a small set of TEI patterns that handle parallel passages, code-switching, and translator attribution without sacrificing source readability.&lt;br /&gt;
&lt;br /&gt;
It serves as a practical reference for editorial teams working on cross-linguistic editions in digital humanities projects.&lt;/div&gt;</summary>
		<author><name>NeoWiki</name></author>
	</entry>
	<entry>
		<id>https://neowiki.dev/w/index.php?title=ACME_Operations&amp;diff=249</id>
		<title>ACME Operations</title>
		<link rel="alternate" type="text/html" href="https://neowiki.dev/w/index.php?title=ACME_Operations&amp;diff=249"/>
		<updated>2026-05-11T14:24:46Z</updated>

		<summary type="html">&lt;p&gt;NeoWiki: Importing NeoWiki demo data&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;ACME Operations&#039;&#039;&#039; runs the company&#039;s back-office functions: finance, people, IT, and facilities. At 47 people, it is the leanest of [[ACME Inc|ACME]]&#039;s three departments.&lt;br /&gt;
&lt;br /&gt;
The team keeps day-to-day company infrastructure running and coordinates the planning cycles behind the corporate roadmap.&lt;/div&gt;</summary>
		<author><name>NeoWiki</name></author>
	</entry>
	<entry>
		<id>https://neowiki.dev/w/index.php?title=ACME_Inc&amp;diff=248</id>
		<title>ACME Inc</title>
		<link rel="alternate" type="text/html" href="https://neowiki.dev/w/index.php?title=ACME_Inc&amp;diff=248"/>
		<updated>2026-05-11T14:24:46Z</updated>

		<summary type="html">&lt;p&gt;NeoWiki: Importing NeoWiki demo data&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A fictional company that demonstrates NeoWiki&#039;s structured-data features in a corporate knowledge-base scenario: departments, offices, products, and the relations between them. &#039;&#039;&#039;ACME Inc&#039;&#039;&#039; is the Main Subject of this page. Each related entity has its own page, linked through the relations shown in the infobox above.&lt;br /&gt;
&lt;br /&gt;
== Which departments are largest by headcount? ==&lt;br /&gt;
&lt;br /&gt;
{{#invoke:NeoWikiDemo|query|MATCH (d:Department) RETURN d.name AS Department, d.Headcount AS Headcount ORDER BY Headcount DESC|columns=Department, Headcount|linkColumns=Department}}&lt;br /&gt;
&lt;br /&gt;
== Browse ==&lt;br /&gt;
&lt;br /&gt;
{{#invoke:NeoWikiDemo|query|MATCH (d:Department) RETURN d.name AS Subject, &#039;Department&#039; AS Type UNION MATCH (o:Office) RETURN o.name AS Subject, &#039;Office&#039; AS Type UNION MATCH (p:Product) RETURN p.name AS Subject, &#039;Product&#039; AS Type|columns=Subject, Type|linkColumns=Subject}}&lt;br /&gt;
&lt;br /&gt;
== How this is built ==&lt;br /&gt;
&lt;br /&gt;
* Schemas: [[Schema:Company]], [[Schema:Department]], [[Schema:Office]], [[Schema:Product]], [[Schema:Employee]]&lt;br /&gt;
* Layout: [[Layout:CompanyOverview]]&lt;br /&gt;
* See the source of this page: [{{fullurl:{{FULLPAGENAME}}|action=edit}} Edit this page]&lt;br /&gt;
* The infobox renders automatically from the Main Subject. The tables come from Cypher queries via [[Module:NeoWikiDemo]].&lt;/div&gt;</summary>
		<author><name>NeoWiki</name></author>
	</entry>
	<entry>
		<id>https://neowiki.dev/w/index.php?title=Kunsthistorisches_Museum&amp;diff=247</id>
		<title>Kunsthistorisches Museum</title>
		<link rel="alternate" type="text/html" href="https://neowiki.dev/w/index.php?title=Kunsthistorisches_Museum&amp;diff=247"/>
		<updated>2026-05-11T14:24:45Z</updated>

		<summary type="html">&lt;p&gt;NeoWiki: Importing NeoWiki demo data&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The &#039;&#039;&#039;Kunsthistorisches Museum&#039;&#039;&#039; is an art museum in [[Vienna]], Austria, housed in a grand Ringstrasse palace opened in 1891 to display the imperial Habsburg collections. Its facade and domed interior rank among the major examples of late nineteenth-century historicist architecture.&lt;br /&gt;
&lt;br /&gt;
Its holdings span Egyptian and Near Eastern antiquities, Greek and Roman art, and an exceptional picture gallery with works by Bruegel, [[Johannes Vermeer|Vermeer]], [[Diego Velázquez|Velázquez]], Titian, and Raphael, including the world&#039;s largest Bruegel collection.&lt;/div&gt;</summary>
		<author><name>NeoWiki</name></author>
	</entry>
	<entry>
		<id>https://neowiki.dev/w/index.php?title=Paris&amp;diff=246</id>
		<title>Paris</title>
		<link rel="alternate" type="text/html" href="https://neowiki.dev/w/index.php?title=Paris&amp;diff=246"/>
		<updated>2026-05-11T14:24:45Z</updated>

		<summary type="html">&lt;p&gt;NeoWiki: Importing NeoWiki demo data&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Paris&#039;&#039;&#039; is the capital and largest city of France, on the river Seine in the country&#039;s north. It has been a major European centre of finance, diplomacy, fashion, and the arts for centuries.&lt;br /&gt;
&lt;br /&gt;
The city is celebrated for landmarks such as the Eiffel Tower, Notre-Dame, and the Louvre, and hosts world-leading art collections at the [[Musée d&#039;Orsay]], the Centre Pompidou, and other institutions.&lt;/div&gt;</summary>
		<author><name>NeoWiki</name></author>
	</entry>
	<entry>
		<id>https://neowiki.dev/w/index.php?title=Reconciling_Author_Identifiers_Across_Cultural_Heritage_Datasets&amp;diff=245</id>
		<title>Reconciling Author Identifiers Across Cultural Heritage Datasets</title>
		<link rel="alternate" type="text/html" href="https://neowiki.dev/w/index.php?title=Reconciling_Author_Identifiers_Across_Cultural_Heritage_Datasets&amp;diff=245"/>
		<updated>2026-05-11T14:24:45Z</updated>

		<summary type="html">&lt;p&gt;NeoWiki: Importing NeoWiki demo data&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;quot;&#039;&#039;&#039;Reconciling Author Identifiers Across Cultural Heritage Datasets&#039;&#039;&#039;&amp;quot; examines the problem of aligning author identifiers across collection systems that use different authority files and identifier schemes. The paper proposes a reconciliation workflow that combines string similarity, biographical metadata, and curator review to balance recall against editorial trust.&lt;br /&gt;
&lt;br /&gt;
The work contributes a concrete reconciliation pattern to the [[Heritage Linked Data]] programme&#039;s linked open data integrations.&lt;/div&gt;</summary>
		<author><name>NeoWiki</name></author>
	</entry>
	<entry>
		<id>https://neowiki.dev/w/index.php?title=A_Survey_of_Provenance_Models_in_Open_Knowledge_Graphs&amp;diff=244</id>
		<title>A Survey of Provenance Models in Open Knowledge Graphs</title>
		<link rel="alternate" type="text/html" href="https://neowiki.dev/w/index.php?title=A_Survey_of_Provenance_Models_in_Open_Knowledge_Graphs&amp;diff=244"/>
		<updated>2026-05-11T14:24:45Z</updated>

		<summary type="html">&lt;p&gt;NeoWiki: Importing NeoWiki demo data&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;quot;&#039;&#039;&#039;A Survey of Provenance Models in Open Knowledge Graphs&#039;&#039;&#039;&amp;quot; reviews the main approaches to recording provenance in public knowledge graphs, comparing their expressivity, query support, and real-world adoption. The paper argues that pragmatic, layered models tend to outperform fully expressive frameworks once editorial workflows are considered.&lt;br /&gt;
&lt;br /&gt;
The work informs the [[Heritage Linked Data]] programme by clarifying which provenance patterns are realistic when integrating heterogeneous cultural heritage datasets.&lt;/div&gt;</summary>
		<author><name>NeoWiki</name></author>
	</entry>
	<entry>
		<id>https://neowiki.dev/w/index.php?title=Impressionist_Masters&amp;diff=243</id>
		<title>Impressionist Masters</title>
		<link rel="alternate" type="text/html" href="https://neowiki.dev/w/index.php?title=Impressionist_Masters&amp;diff=243"/>
		<updated>2026-05-11T14:24:45Z</updated>

		<summary type="html">&lt;p&gt;NeoWiki: Importing NeoWiki demo data&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Impressionist Masters&#039;&#039;&#039; is a special exhibition at the [[Musée d&#039;Orsay]] tracing the development of light and colour in French Impressionism. Drawing on the museum&#039;s deep holdings of late 19th-century painting, it charts the movement&#039;s break with academic conventions.&lt;br /&gt;
&lt;br /&gt;
Featured artists include [[Claude Monet]] and [[Vincent van Gogh]], shown alongside their contemporaries to track how Impressionist techniques were absorbed and reinterpreted in the decades that followed.&lt;/div&gt;</summary>
		<author><name>NeoWiki</name></author>
	</entry>
	<entry>
		<id>https://neowiki.dev/w/index.php?title=Aur%C3%A9lie_Cordier&amp;diff=242</id>
		<title>Aurélie Cordier</title>
		<link rel="alternate" type="text/html" href="https://neowiki.dev/w/index.php?title=Aur%C3%A9lie_Cordier&amp;diff=242"/>
		<updated>2026-05-11T14:24:45Z</updated>

		<summary type="html">&lt;p&gt;NeoWiki: Importing NeoWiki demo data&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Aurélie Cordier&#039;&#039;&#039; is a digital humanities researcher focused on TEI encoding and bibliographic ontologies. She studies how scholarly editing practices can be modelled in shared, machine-readable formats without losing editorial intent.&lt;br /&gt;
&lt;br /&gt;
She is affiliated with [[Sorbonne University]] and has published on [[TEI Encoding Patterns for Multilingual Editions|TEI encoding patterns for multilingual editions]] and on [[Cross-Lingual Author Disambiguation at Scale|cross-lingual author disambiguation]].&lt;/div&gt;</summary>
		<author><name>NeoWiki</name></author>
	</entry>
	<entry>
		<id>https://neowiki.dev/w/index.php?title=ACME_Engineering&amp;diff=241</id>
		<title>ACME Engineering</title>
		<link rel="alternate" type="text/html" href="https://neowiki.dev/w/index.php?title=ACME_Engineering&amp;diff=241"/>
		<updated>2026-05-11T14:24:45Z</updated>

		<summary type="html">&lt;p&gt;NeoWiki: Importing NeoWiki demo data&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;ACME Engineering&#039;&#039;&#039; builds and maintains the company&#039;s product portfolio, from the original [[Acme Anvil|Anvil]] to the more recent [[Acme Rocket|Rocket]] and [[Acme TNT|TNT]] lines. At 184 people, it is the largest department at [[ACME Inc|ACME]].&lt;br /&gt;
&lt;br /&gt;
The team is based at the [[ACME Amsterdam HQ|Amsterdam headquarters]] and owns product design, manufacturing, and post-launch support end to end.&lt;/div&gt;</summary>
		<author><name>NeoWiki</name></author>
	</entry>
	<entry>
		<id>https://neowiki.dev/w/index.php?title=Cross-Lingual_Author_Disambiguation_at_Scale&amp;diff=240</id>
		<title>Cross-Lingual Author Disambiguation at Scale</title>
		<link rel="alternate" type="text/html" href="https://neowiki.dev/w/index.php?title=Cross-Lingual_Author_Disambiguation_at_Scale&amp;diff=240"/>
		<updated>2026-05-11T14:24:45Z</updated>

		<summary type="html">&lt;p&gt;NeoWiki: Importing NeoWiki demo data&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;quot;&#039;&#039;&#039;Cross-Lingual Author Disambiguation at Scale&#039;&#039;&#039;&amp;quot; presents methods for resolving author identities across bibliographic datasets that span multiple languages and transliteration conventions. The paper combines name normalisation, co-author network signals, and topic-aware embeddings to disambiguate authors at the scale of national catalogue exports.&lt;br /&gt;
&lt;br /&gt;
The work feeds into the [[Multilingual NER Toolkit]] project, where the disambiguation pipeline integrates with upstream entity recognition for historical European texts.&lt;/div&gt;</summary>
		<author><name>NeoWiki</name></author>
	</entry>
	<entry>
		<id>https://neowiki.dev/w/index.php?title=Vienna&amp;diff=239</id>
		<title>Vienna</title>
		<link rel="alternate" type="text/html" href="https://neowiki.dev/w/index.php?title=Vienna&amp;diff=239"/>
		<updated>2026-05-11T14:24:45Z</updated>

		<summary type="html">&lt;p&gt;NeoWiki: Importing NeoWiki demo data&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Vienna&#039;&#039;&#039; is the capital and largest city of Austria, on the Danube in the country&#039;s east. As the long-time seat of the Habsburg court, it shaped centuries of European politics, music, and architecture.&lt;br /&gt;
&lt;br /&gt;
The city remains a leading centre for classical music and the visual arts, with major institutions including the [[Kunsthistorisches Museum]], the Belvedere, the Albertina, and the Austrian Academy of Sciences.&lt;/div&gt;</summary>
		<author><name>NeoWiki</name></author>
	</entry>
	<entry>
		<id>https://neowiki.dev/w/index.php?title=Linked_Bibliography_Mappings_for_European_Archives&amp;diff=238</id>
		<title>Linked Bibliography Mappings for European Archives</title>
		<link rel="alternate" type="text/html" href="https://neowiki.dev/w/index.php?title=Linked_Bibliography_Mappings_for_European_Archives&amp;diff=238"/>
		<updated>2026-05-11T14:24:45Z</updated>

		<summary type="html">&lt;p&gt;NeoWiki: Importing NeoWiki demo data&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;quot;&#039;&#039;&#039;Linked Bibliography Mappings for European Archives&#039;&#039;&#039;&amp;quot; presents a CIDOC CRM mapping framework for archival bibliographic records, drawing on case studies from three European national archives. The paper documents the property-level transformations needed to align MARC21 source data with a CRM-compliant graph projection.&lt;br /&gt;
&lt;br /&gt;
The work informs the [[European Literary Bibliography]] project by providing a reusable mapping methodology for migrating heterogeneous bibliographic descriptions into linked open data.&lt;/div&gt;</summary>
		<author><name>NeoWiki</name></author>
	</entry>
	<entry>
		<id>https://neowiki.dev/w/index.php?title=Vincent_van_Gogh&amp;diff=237</id>
		<title>Vincent van Gogh</title>
		<link rel="alternate" type="text/html" href="https://neowiki.dev/w/index.php?title=Vincent_van_Gogh&amp;diff=237"/>
		<updated>2026-05-11T14:24:44Z</updated>

		<summary type="html">&lt;p&gt;NeoWiki: Importing NeoWiki demo data&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Vincent van Gogh&#039;&#039;&#039; was a Dutch Post-Impressionist painter whose bold colors and dramatic brushwork helped lay the foundations of modern art. He produced around 2,100 works in a career of just over a decade, including some 860 oil paintings, most from his final two years.&lt;br /&gt;
&lt;br /&gt;
Van Gogh struggled with mental illness, lived in poverty for much of his career, and achieved little commercial success in his lifetime. He died in 1890, and his reputation grew posthumously, helped by the tireless advocacy of his sister-in-law Johanna van Gogh-Bonger.&lt;/div&gt;</summary>
		<author><name>NeoWiki</name></author>
	</entry>
	<entry>
		<id>https://neowiki.dev/w/index.php?title=Rijksmuseum&amp;diff=236</id>
		<title>Rijksmuseum</title>
		<link rel="alternate" type="text/html" href="https://neowiki.dev/w/index.php?title=Rijksmuseum&amp;diff=236"/>
		<updated>2026-05-11T14:24:44Z</updated>

		<summary type="html">&lt;p&gt;NeoWiki: Importing NeoWiki demo data&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The &#039;&#039;&#039;Rijksmuseum&#039;&#039;&#039; is the Dutch national museum of arts and history, in [[Amsterdam]]. Founded in 1800 in The Hague and moved to Amsterdam in 1808, it has occupied its Pierre Cuypers-designed building since 1885.&lt;br /&gt;
&lt;br /&gt;
The museum holds around one million objects from 1200 to 2000, including masterpieces by Rembrandt, [[Johannes Vermeer|Vermeer]], and Frans Hals. It is best known for &amp;quot;The Night Watch&amp;quot; and a comprehensive survey of Dutch Golden Age painting.&lt;br /&gt;
&lt;br /&gt;
== Annual attendance ==&lt;br /&gt;
&lt;br /&gt;
Yearly attendance for the Rijksmuseum, stored as individual [[Schema:Attendance|Attendance]] Subjects on this page.&lt;br /&gt;
&lt;br /&gt;
{{#invoke:NeoWikiDemo|childTable|schema=Attendance|columns=Year, Visitors|sortBy=Year|numberColumns=Visitors}}&lt;/div&gt;</summary>
		<author><name>NeoWiki</name></author>
	</entry>
	<entry>
		<id>https://neowiki.dev/w/index.php?title=Madrid&amp;diff=235</id>
		<title>Madrid</title>
		<link rel="alternate" type="text/html" href="https://neowiki.dev/w/index.php?title=Madrid&amp;diff=235"/>
		<updated>2026-05-11T14:24:44Z</updated>

		<summary type="html">&lt;p&gt;NeoWiki: Importing NeoWiki demo data&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Madrid&#039;&#039;&#039; is the capital and most populous city of Spain. It sits on the Manzanares river in the centre of the Iberian Peninsula and is the country&#039;s political, economic, and cultural heart.&lt;br /&gt;
&lt;br /&gt;
The city is home to the Spanish royal family, national government institutions, and a dense concentration of museums. The [[Museo del Prado]], Reina Sofía, and Thyssen-Bornemisza together form its renowned Golden Triangle of Art.&lt;/div&gt;</summary>
		<author><name>NeoWiki</name></author>
	</entry>
	<entry>
		<id>https://neowiki.dev/w/index.php?title=Museo_del_Prado&amp;diff=234</id>
		<title>Museo del Prado</title>
		<link rel="alternate" type="text/html" href="https://neowiki.dev/w/index.php?title=Museo_del_Prado&amp;diff=234"/>
		<updated>2026-05-11T14:24:44Z</updated>

		<summary type="html">&lt;p&gt;NeoWiki: Importing NeoWiki demo data&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The &#039;&#039;&#039;Museo del Prado&#039;&#039;&#039; is the main Spanish national art museum, in central [[Madrid]]. Opened to the public in 1819, it grew out of the Spanish royal collections and now holds one of the world&#039;s finest gatherings of European art from the twelfth to the early twentieth century.&lt;br /&gt;
&lt;br /&gt;
The collection is particularly strong in Spanish painting, with definitive holdings of [[Diego Velázquez|Velázquez]], Goya, and El Greco, alongside major works by Bosch, Titian, Rubens, and Dürer from centuries of Habsburg and Bourbon patronage.&lt;/div&gt;</summary>
		<author><name>NeoWiki</name></author>
	</entry>
	<entry>
		<id>https://neowiki.dev/w/index.php?title=Multilingual_NER_Toolkit&amp;diff=233</id>
		<title>Multilingual NER Toolkit</title>
		<link rel="alternate" type="text/html" href="https://neowiki.dev/w/index.php?title=Multilingual_NER_Toolkit&amp;diff=233"/>
		<updated>2026-05-11T14:24:44Z</updated>

		<summary type="html">&lt;p&gt;NeoWiki: Importing NeoWiki demo data&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The &#039;&#039;&#039;Multilingual NER Toolkit&#039;&#039;&#039; is an open-source named-entity recognition project tuned for historical European languages. Started in 2022, it ships models and tooling that handle the spelling variation, archaic vocabulary, and code-switching common in pre-modern texts.&lt;br /&gt;
&lt;br /&gt;
Led by [[Sorbonne University]], it serves as a foundation for downstream work on entity disambiguation and linking across cultural heritage corpora.&lt;/div&gt;</summary>
		<author><name>NeoWiki</name></author>
	</entry>
	<entry>
		<id>https://neowiki.dev/w/index.php?title=Claude_Monet&amp;diff=232</id>
		<title>Claude Monet</title>
		<link rel="alternate" type="text/html" href="https://neowiki.dev/w/index.php?title=Claude_Monet&amp;diff=232"/>
		<updated>2026-05-11T14:24:44Z</updated>

		<summary type="html">&lt;p&gt;NeoWiki: Importing NeoWiki demo data&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Claude Monet&#039;&#039;&#039; was a French painter and founder of Impressionist painting. He is seen as a key precursor to Modernism, especially in his later series of [[Water Lilies|water lilies]], haystacks, and Rouen Cathedral.&lt;br /&gt;
&lt;br /&gt;
Monet&#039;s ambition to document the French countryside led him to paint the same scene many times to capture shifts in light and season.&lt;/div&gt;</summary>
		<author><name>NeoWiki</name></author>
	</entry>
	<entry>
		<id>https://neowiki.dev/w/index.php?title=Lessons_from_a_Year_of_MARC_to_RDF_Migration&amp;diff=231</id>
		<title>Lessons from a Year of MARC to RDF Migration</title>
		<link rel="alternate" type="text/html" href="https://neowiki.dev/w/index.php?title=Lessons_from_a_Year_of_MARC_to_RDF_Migration&amp;diff=231"/>
		<updated>2026-05-11T14:24:44Z</updated>

		<summary type="html">&lt;p&gt;NeoWiki: Importing NeoWiki demo data&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;quot;&#039;&#039;&#039;Lessons from a Year of MARC to RDF Migration&#039;&#039;&#039;&amp;quot; reports on a twelve-month programme converting a sizeable MARC21 catalogue into RDF. The paper documents recurring data-quality issues, the trade-offs between faithful preservation and cleanup, and the workflow choices that proved durable.&lt;br /&gt;
&lt;br /&gt;
The findings inform the [[European Literary Bibliography]] project by setting out reusable patterns for migrating legacy bibliographic records into linked open data.&lt;/div&gt;</summary>
		<author><name>NeoWiki</name></author>
	</entry>
	<entry>
		<id>https://neowiki.dev/w/index.php?title=Las_Meninas&amp;diff=230</id>
		<title>Las Meninas</title>
		<link rel="alternate" type="text/html" href="https://neowiki.dev/w/index.php?title=Las_Meninas&amp;diff=230"/>
		<updated>2026-05-11T14:24:44Z</updated>

		<summary type="html">&lt;p&gt;NeoWiki: Importing NeoWiki demo data&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;quot;&#039;&#039;&#039;Las Meninas&#039;&#039;&#039;&amp;quot; is a 1656 painting by [[Diego Velázquez]], the leading artist of the Spanish Golden Age, held by the [[Museo del Prado]] in [[Madrid]]. Its complex, enigmatic composition raises questions about reality and illusion and sets an uncertain relationship between viewer and figure.&lt;br /&gt;
&lt;br /&gt;
The painting shows the young Infanta Margaret Theresa surrounded by her entourage, with Velázquez himself at work on a large canvas at the left and the king and queen reflected in a mirror at the back of the room. Called &amp;quot;the theology of painting&amp;quot;, it is regarded as one of the most important paintings in Western art history.&lt;/div&gt;</summary>
		<author><name>NeoWiki</name></author>
	</entry>
	<entry>
		<id>https://neowiki.dev/w/index.php?title=Heritage_Linked_Data&amp;diff=229</id>
		<title>Heritage Linked Data</title>
		<link rel="alternate" type="text/html" href="https://neowiki.dev/w/index.php?title=Heritage_Linked_Data&amp;diff=229"/>
		<updated>2026-05-11T14:24:44Z</updated>

		<summary type="html">&lt;p&gt;NeoWiki: Importing NeoWiki demo data&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Heritage Linked Data&#039;&#039;&#039; is a research programme connecting European cultural heritage datasets through CIDOC CRM mappings. Started in 2019, it focuses on practical strategies for aligning heterogeneous collection records around a shared semantic backbone.&lt;br /&gt;
&lt;br /&gt;
Led by [[OEAW Vienna]], the programme produces methodological guidance and technical tooling, including work on provenance modelling, identifier reconciliation, and Wikibase-based knowledge graphs.&lt;/div&gt;</summary>
		<author><name>NeoWiki</name></author>
	</entry>
	<entry>
		<id>https://neowiki.dev/w/index.php?title=Mus%C3%A9e_d%27Orsay&amp;diff=228</id>
		<title>Musée d&#039;Orsay</title>
		<link rel="alternate" type="text/html" href="https://neowiki.dev/w/index.php?title=Mus%C3%A9e_d%27Orsay&amp;diff=228"/>
		<updated>2026-05-11T14:24:43Z</updated>

		<summary type="html">&lt;p&gt;NeoWiki: Importing NeoWiki demo data&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The &#039;&#039;&#039;Musée d&#039;Orsay&#039;&#039;&#039; is a museum in [[Paris]], France, on the Left Bank of the Seine. It occupies the former Gare d&#039;Orsay,&lt;br /&gt;
a Beaux-Arts railway station built between 1898 and 1900.&lt;br /&gt;
&lt;br /&gt;
The museum holds mainly French art from 1848 to 1914: paintings, sculptures, furniture, and photography.&lt;br /&gt;
It is home to the world&#039;s largest collection of Impressionist and Post-Impressionist masterpieces, with works by&lt;br /&gt;
[[Claude Monet|Monet]], Manet, Degas, Renoir, Cézanne, Seurat, Sisley, Gauguin, and [[Vincent van Gogh|Van Gogh]].&lt;br /&gt;
&lt;br /&gt;
{{#view: sEpfwLY8VcdQZJL}}&lt;br /&gt;
{{#view: sEpfwLY8WnceT2y}}&lt;br /&gt;
{{#view: sEpfwLY8XjJ8gE1}}&lt;/div&gt;</summary>
		<author><name>NeoWiki</name></author>
	</entry>
	<entry>
		<id>https://neowiki.dev/w/index.php?title=Acme_TNT&amp;diff=227</id>
		<title>Acme TNT</title>
		<link rel="alternate" type="text/html" href="https://neowiki.dev/w/index.php?title=Acme_TNT&amp;diff=227"/>
		<updated>2026-05-11T14:24:43Z</updated>

		<summary type="html">&lt;p&gt;NeoWiki: Importing NeoWiki demo data&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Acme TNT&#039;&#039;&#039; is the most recent addition to the [[ACME Inc|ACME]] product range, available since 2015. It rounds out the catalogue alongside the [[Acme Anvil|Anvil]] and [[Acme Rocket|Rocket]], sharing the same underlying platform.&lt;br /&gt;
&lt;br /&gt;
Like the other products, TNT is engineered and supported from the [[ACME Amsterdam HQ|Amsterdam headquarters]] and sold worldwide through the regional sales teams.&lt;/div&gt;</summary>
		<author><name>NeoWiki</name></author>
	</entry>
	<entry>
		<id>https://neowiki.dev/w/index.php?title=Sandbox_Subject&amp;diff=226</id>
		<title>Sandbox Subject</title>
		<link rel="alternate" type="text/html" href="https://neowiki.dev/w/index.php?title=Sandbox_Subject&amp;diff=226"/>
		<updated>2026-05-11T14:24:43Z</updated>

		<summary type="html">&lt;p&gt;NeoWiki: Importing NeoWiki demo data&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Sandbox Subject&#039;&#039;&#039; is a Subject used by the [[Subject views]] page. It uses the dedicated [[Schema:Sandbox|Sandbox]] schema, so edits made here don&#039;t affect any other Subject in the demo wiki.&lt;/div&gt;</summary>
		<author><name>NeoWiki</name></author>
	</entry>
	<entry>
		<id>https://neowiki.dev/w/index.php?title=Johannes_Vermeer&amp;diff=225</id>
		<title>Johannes Vermeer</title>
		<link rel="alternate" type="text/html" href="https://neowiki.dev/w/index.php?title=Johannes_Vermeer&amp;diff=225"/>
		<updated>2026-05-11T14:24:43Z</updated>

		<summary type="html">&lt;p&gt;NeoWiki: Importing NeoWiki demo data&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Johannes Vermeer&#039;&#039;&#039; was a Dutch Baroque painter who specialized in domestic interior scenes of middle-class life. A moderately successful provincial genre painter in his lifetime, he produced relatively few paintings and was not wealthy, leaving his wife and children in debt at his death.&lt;br /&gt;
&lt;br /&gt;
Vermeer worked slowly and carefully, often with expensive pigments. He is renowned for his masterly use of light, evident in canvases such as &amp;quot;Girl with a Pearl Earring&amp;quot; and &amp;quot;[[The Milkmaid]]&amp;quot;.&lt;/div&gt;</summary>
		<author><name>NeoWiki</name></author>
	</entry>
	<entry>
		<id>https://neowiki.dev/w/index.php?title=The_Kiss&amp;diff=224</id>
		<title>The Kiss</title>
		<link rel="alternate" type="text/html" href="https://neowiki.dev/w/index.php?title=The_Kiss&amp;diff=224"/>
		<updated>2026-05-11T14:24:43Z</updated>

		<summary type="html">&lt;p&gt;NeoWiki: Importing NeoWiki demo data&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;quot;&#039;&#039;&#039;The Kiss&#039;&#039;&#039;&amp;quot; is an oil-on-canvas painting with added gold leaf, silver, and platinum by the Austrian Symbolist [[Gustav Klimt]]. Painted between 1907 and 1908, it is the highpoint of his Golden Period and depicts a couple embracing, their bodies entwined in elaborately patterned robes.&lt;br /&gt;
&lt;br /&gt;
It now hangs in the Österreichische Galerie Belvedere in [[Vienna]] and is considered a masterpiece of Vienna Jugendstil. The Belvedere acquired it shortly after its first exhibition, before Klimt had even finished it, and the painting has rarely left Austria since.&lt;/div&gt;</summary>
		<author><name>NeoWiki</name></author>
	</entry>
	<entry>
		<id>https://neowiki.dev/w/index.php?title=European_Literary_Bibliography&amp;diff=223</id>
		<title>European Literary Bibliography</title>
		<link rel="alternate" type="text/html" href="https://neowiki.dev/w/index.php?title=European_Literary_Bibliography&amp;diff=223"/>
		<updated>2026-05-11T14:24:43Z</updated>

		<summary type="html">&lt;p&gt;NeoWiki: Importing NeoWiki demo data&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The &#039;&#039;&#039;European Literary Bibliography&#039;&#039;&#039; harmonises MARC21 bibliographic records across European literary archives into linked open data. Started in 2021, it builds shared mappings that let records held in different national archives be queried and cross-referenced as a single graph.&lt;br /&gt;
&lt;br /&gt;
The project is led by [[KNAW Amsterdam]] and brings together collaborators working on bibliographic ontologies, multilingual cataloguing, and migration tooling for legacy library formats.&lt;/div&gt;</summary>
		<author><name>NeoWiki</name></author>
	</entry>
	<entry>
		<id>https://neowiki.dev/w/index.php?title=Sorbonne_University&amp;diff=222</id>
		<title>Sorbonne University</title>
		<link rel="alternate" type="text/html" href="https://neowiki.dev/w/index.php?title=Sorbonne_University&amp;diff=222"/>
		<updated>2026-05-11T14:24:43Z</updated>

		<summary type="html">&lt;p&gt;NeoWiki: Importing NeoWiki demo data&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Sorbonne University&#039;&#039;&#039; is a public research university in [[Paris]] with strong programmes in the humanities and digital scholarship. It traces its origins to the 13th-century University of Paris and now operates across faculties of arts, sciences, and medicine.&lt;br /&gt;
&lt;br /&gt;
In the demo&#039;s research graph, Sorbonne University leads the [[Multilingual NER Toolkit]] project and is the affiliation of authors contributing to TEI encoding and entity disambiguation work.&lt;/div&gt;</summary>
		<author><name>NeoWiki</name></author>
	</entry>
</feed>