Status: | effective |
Progress: | 100% |
Version: | 3.0.0+ |
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_SCHEMA
SEARCH_FORM_SCHEMA
PROPERTY_GROUP_SCHEMA
PROPERTY_CONSTRAINT_SCHEMA
CLASS_CONSTRAINT_SCHEMA
PROPERTY_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