## Objective The objective of the `SMW_NS_SCHEMA` (aka [`smw/schema`][ns: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][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`][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][json:schema] expected to be used ## Available types - [`LINK_FORMAT_SCHEMA`](https://github.com/SemanticMediaWiki/SemanticMediaWiki/blob/master/src/Schema/docs/link.format.md) - [`SEARCH_FORM_SCHEMA`](https://github.com/SemanticMediaWiki/SemanticMediaWiki/blob/master/src/Schema/docs/search.form.md) - [`PROPERTY_GROUP_SCHEMA`](https://github.com/SemanticMediaWiki/SemanticMediaWiki/blob/master/src/Schema/docs/property.group.md) - [`PROPERTY_CONSTRAINT_SCHEMA`](https://github.com/SemanticMediaWiki/SemanticMediaWiki/blob/master/src/Schema/docs/property.constraint.md) - [`CLASS_CONSTRAINT_SCHEMA`](https://github.com/SemanticMediaWiki/SemanticMediaWiki/blob/master/src/Schema/docs/class.constraint.md) - [`PROPERTY_PROFILE_SCHEMA`](https://github.com/SemanticMediaWiki/SemanticMediaWiki/blob/master/src/Schema/docs/property.profile.md) ## 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](https://github.com/SemanticMediaWiki/SemanticMediaWiki/blob/master/src/Schema/docs/filter.md) 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][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. [ns:schema]: https://www.semantic-mediawiki.org/wiki/Help:Schema [json:schema]: http://json-schema.org/ [SMW::Schema::RegisterSchemaTypes]: https://github.com/SemanticMediaWiki/SemanticMediaWiki/blob/master/docs/technical/hooks/hook.schema.registerschematypes.md