| Status: | effective |
| Progress: | 100% |
| Version: | 3.0.0+ |
Help:Schema
The "smw/schema" namespace has been introduced12 to allow Semantic MediaWiki or related extensions to store different structured type definition (aka schema).
To create, edit, or modify a page in the "smw/schema" namespace, the smw-schemaedit user right is necessary.
Further detailed information is available on the following pages:
- Schema types contains details about available types and examples
- Schema error handling explains how the JSON validation helps minimize inconsistency and maintenance effort for a schema
Objective
The objective of the SMW_NS_SCHEMA (aka smw/schema) namespace provides a structured definition space where different schemata types can be defined and that independently use a type specific interpreter, syntax elements, and possible constraints.
The namespace expects a JSON format (or if available, YAML as superset of JSON) as input format to ensure that content elements are structured and a validation_schema (see JSON schema) can be assigned to help and enforce requirements and constraints for a specific type.
The following annotation properties are provided to make elements of a schema and its definition discoverable.
- Schema type (
_SCHEMA_TYPE) - Schema definition (
_SCHEMA_DEF) - Schema description (
_SCHEMA_DESC) - Schema tag (
_SCHEMA_TAG) - Schema link (
_SCHEMA_LINK)
Registration
Extensibility for new schema types and interpreters is provided by adding a new type to the SchemaTypes::defaultTypes setting or via the SMW::Schema::RegisterSchemaTypes hook.
$schemaTypes = [
'FOO_SCHEMA' => [
'group' => SMW_SCHEMA_FOO_GROUP,
'validation_schema => __DIR__ . '/data/schema/foo-schema.v1.json',
]
];
In the example above, FOO_SCHEMA refers to the type name and any attributes assigned to that type will be used when constructing a schema instance. Types can define individual attributes that may be use exclusively by the type.
- group defines types belonging to the same schemata class
- validation_schema links to the JSON schema expected to be used
Available types
LINK_FORMAT_SCHEMASEARCH_FORM_SCHEMAPROPERTY_GROUP_SCHEMAPROPERTY_CONSTRAINT_SCHEMACLASS_CONSTRAINT_SCHEMAPROPERTY_PROFILE_SCHEMA
Technical notes
/src/Schema (SMW\Schema)
│ ├─ Compartment
│ ├─ CompartmentIterator
│ ├─ Schema
│ ├─ SchemaDefinition
│ ├─ SchemaFactory
│ ├─ SchemaValidator
│ ├─ SchemaFilterFactory
│ └─ SchemaFilter
│ │
│ /src/Schema/Filters (SMW\Schema\Filters)
│ ├─ CategoryFilter
│ ├─ NamespaceFilter
│ ├─ PropertyFilter
│
/src/MediaWiki (SMW\MediaWiki)
└─ Content
├─ SchemaContent
├─ SchemaContentFormatter
└─ SchemaContentHandler
Filters
Filter conditions can be defined as aprt of a type to provide means to create conditional requirements.
Validation
As outlined above, the use of a JSON schema is an important part of a provided type to ensure that only specific data in an appropriate format can be stored and is validated against a normed vocabulary.
See also[edit]
- Help page on property grouping
- Help page on special property "Is property group"Marks a category for holding properties belonging to a property group
- Help page on special page "Browse"Shows all properties and their values annotated to a page
References
- ^ Semantic MediaWiki: GitHub pull request gh:smw:3019
- ^ Semantic MediaWiki: GitHub pull request gh:smw:3431