Transcend wikitext to store and edit structured & linked data

From OpenSemanticWorld
Item:OSW7113f5cf921a4c82ad1872afeff9d01d
Transcend wikitext to store and edit structured & linked data ID: OSW7113f5cf921a4c82ad1872afeff9d01d | UUID: 7113f5cf-921a-4c82-ad18-72afeff9d01d
ID OSW7113f5cf921a4c82ad1872afeff9d01d
UUID 7113f5cf-921a-4c82-ad18-72afeff9d01d
Label Transcend wikitext to store and edit structured & linked data
Machine compatible name TranscendWikitextToStoreAndEditStructuredLinkedData
Types/Categories Tutorial
Statements (outgoing)
.. IsRelatedTo OSW Schema
Statements (incoming)
Details

Description[edit | edit source]

No description found
Item
Type(s)/Category(s) Tutorial
Tutorial
Prerequisites (required)
Prerequisites (optional)
Follow-up (recommended) JSON Tutorial

View as slide show

Conventional approach: Using a single slot (main) and multiple pages[edit | edit source]

You can have content-model = wikitext for pages, templates, forms, etc.
Some unstructured text
{{MyTemplate
|param1=value1
}}
{{#aparserfunction:}}
or content-model = json without any specific rendering
{
    "param1": "value1"
}

Problems:

  • you can have rendered page content or structured page content
  • content is distributed over multiple pages

Conventional approach: Using a single slot (main) and a single page[edit | edit source]

Store structured data within nested templates in wikitext
Some unstructured text
{{MyDataTemplate
  |text=some text
  |number=123
  |array=1;two;3.0
  |nested={{MySubDataTemplate
    |param=value
  }}
  watch out, i am a nested string
  {{MySubDataTemplate
    |param=value2
  }}
}}
{{#aparserfunction:}}
json-equivalent
{
    "@type": "MyDataTemplate",
    "text": "some text",
    "number": 123,
    "array": [1,"two",3.0],
    "nested": [{
        "@type": "MySubDataTemplate",
        "param": "value"
    },
    "watch out, i am a nested string",
    {
        "@type": "MySubDataTemplate",
        "param": "value"
    }]
}
Problems
  • Extensions like SMW only cover reading mappend template params as json
  • Extensions like PageForms require a individual form to edit the data
  • => In general you need a template-parser (e. g. wikitext to json) in your client software at least to edit/write data in general
  • => Doing so requires guessing of data types and correct interpretation of arrays

Luckily we have Multi-Content-Revisions (MCR)[edit | edit source]

Lets add a jsondata slot

Slot Content Model
main wikitext
jsondata json
main
Some unstructured text

{{#aparserfunction:}}
jsondata
{
    "@type": "MyDataTemplate",
    "text": "some text",
    "number": 123,
    "array": [1,"two",3.0]
}

Would be nice to validate the json data[edit | edit source]

Lets add a jsonschema slot for Category pages

Slot Content Model
main wikitext
jsondata json
jsonschema json
Category:MyCategory jsonschema
{
    "type": "object",
    "properties": {
        "text": { "type": "string" },
        "number": { "type": "number" },
        "array": { "type": "array" }
    }
}
Item:MyInstance jsondata
{
    "@type": "MyDataTemplate",
    "text": "some text",
    "number": 123,
    "array": [1,"two",3.0]
}

If we have a jsonschema, we get the editor & validator for free[edit | edit source]

https://github.com/json-editor/json-editor

Category:MyCategory jsonschema
{
    "type": "object",
    "title": "My Form",
    "title*": {"de": "Mein Formular"} ,
    "properties": {
        "color": { 
            "type": "string", 
            "format": "color" 
        },
        "number": { 
            "type": "number", 
            "description": "not a string!"
        }
    }
}
Item:MyInstance jsondata
{
    "color": "#ff0000",
    "number": "123"
}

Classes, Instances, Inheritance?[edit | edit source]

Lets add a jsonschema slot for Category pages

Slot Content Model
main wikitext
jsondata json
jsonschema json
Category:MyCategory jsonschema
{
    "type": "object",
    "properties": {
        "text": { "type": "string" },
        "number": { "type": "number" },
        "array": { "type": "array" }
    }
}
Category:MySubCategory jsonschema
{
    "type": "object",
    "allOf": "/wiki/Category:MyCategory?action=raw&slot=jsonschema",
    "properties": {
        "additional_property": { "type": "string" }
    }
}

Context and Semantic MediaWiki[edit | edit source]

Lets add a json-ld context within the jsonschema slot for Category pages

Slot Content Model
main wikitext
jsondata json
jsonschema json
Category:MySubCategory jsonschema
{
    "@context": [
        "/wiki/Category:MyCategory?action=raw&slot=jsonschema",
       {
            "schema": "https://schema.org/",
            "Property": "<my.domain>/id/",
            "image": "schema:image",
            "image*": "Property:HasProperty"
       }
    ],
    "allOf": "/wiki/Category:MyCategory?action=raw&slot=jsonschema",
    "properties": {
        "additional_property": { "type": "string" }
    }
}

Item:MyInstance jsondata

=> [[HasProperty:{{{additional_property|}}}]]

Interconnection with the wikiparser[edit | edit source]

Additional slots rendered by the wiki parser
Slot Content Model Description
main wikitext default content slot, rendered between the page header and footer
jsondata json structured data
jsonschema json stored within a category (=class) page, defining the schema for the jsondata slot of any category member (instance)
header_template wikitext stored within a category (=class) page, renders the page header of any category member (instance)
footer_template wikitext stored within a category (=class) page, renders the page footer of any category member (instance)
header wikitext renders the page header via {{#invoke: Entity|header}}*
footer wikitext renders the page footer via {{#invoke: Entity|footer}}*
Footer / Header template
Entries of my_list:
{{{my_list|}}}
Property-specific templates within the schema
{
    "type": "object",
    "properties": {
        "my_list": { 
            "type": "array", 
            "eval_template": {
                "type": "mustache-wikitext",
                "value": "{{#my_list}} * [[{{{.}}}]] <br> {{/my_list}}"
            }
        }
    }
}
  • *Wiki-side feature are implemented in Lua => To be rewritten in PHP
  • Why are parser calls needed at all? Currently there seems no options to provide a hook from the core that allows injecting slot-specific content

Further links[edit | edit source]


📎 Select files (or drop them here)... 📷 Camera
    jsondata
    recommended_successor
    "Item:OSWf1df064239044b8fa3c968339fb93344"
    type
    "Category:OSW494f660e6a714a1a9681c517bbb975da"
    uuid"7113f5cf-921a-4c82-ad18-72afeff9d01d"
    name"TranscendWikitextToStoreAndEditStructuredLinkedData"
    label
    text"Transcend wikitext to store and edit structured & linked data"
    lang"en"
    statements
    uuid"65cb09b2-cbab-4bf0-8e0b-0aa21ec68c2f"
    predicate"Property:IsRelatedTo"
    object"Item:OSWab674d663a5b472f838d8e1eb43e6784"
    Cookies help us deliver our services. By using our services, you agree to our use of cookies.