Draft

OGC Draft Standard

The ModSpec Model - Part 1: Core - A Standard for Designing and Writing Modular Standards
Carl Reed, PhD Editor Chuck Heazel Editor John Herring, PhD Editor
Version: 1.1.0
OGC Draft Standard

Draft

Document number:08-131r5
Document type:OGC Draft Standard
Document subtype:Logical Model
Document stage:Draft
Document language:English

License Agreement

Use of this document is subject to the license agreement at https://www.ogc.org/license




I.  Preface

This OGC member developed and approved document, referred to as the ModSpec, defines a model and related requirements and recommendations for writing and structuring modular standards documents. Further, this model is designed to enable consistent and verifiable testing of implementations of a standard that claim conformance. The ModSpec is a meta-standard: A standard specifying requirements for crafting and documenting modular and testable standards.

The goals of using the ModSpec are:

  • To define characteristics and a structure for the development of modular standards which will minimize the difficulty in writing testable standards while maximizing usability and interoperability.

  • To ensure that a standard specifies requirements in a common and consistent manner and that these requirements are testable.

    NOTE:  Historically, this document has been known and abbreviated as the “ModSpec”. For continuity and ease of understanding this document is also be referred to as the “OGC ModSpec”.

Suggested additions, changes, and comments on this document are welcome and encouraged. Such suggestions may be submitted by creating an issue in the OGC ModSpec GitHub repository ( https://github.com/opengeospatial/ogc-modspec).

II.  Security considerations

No security considerations have been made for this document.

III.  Submitting Organizations

The following organizations submitted this Document to the Open Geospatial Consortium (OGC):

  • Carl Reed, Charles Heazel, ImageMatters

IV.  Document terms and definitions

This document uses the terms defined in OGC Policy Directive 49, which is based on the ISO/IEC Directives, Part 2, Rules for the structure and drafting of International Standards. In particular, the word “shall” (not “must”) is the verb form used to indicate a requirement to be strictly followed to conform to this ModSPec standard.

V.  Document editors

The following OGC Members participated in editing this document:

PersonOrganization Represented
Carl ReedCarl Reed & Associates
Chuck HeazelCharles Heazel

VI.  Document Contributors

The following OGC Members contributed and particpated in developing ModSpec Version 1.1

PersonOrganization Represented
Carl ReedCarl Reed
Chuck HeazelCharles Heazel
Jeff YutzlerImageMatters

VII.  Document Contributors

The following OGC Members support the ModSpec Version 1.1 submission

Organization
Carl Reed & Associates
Heazeltech
ImageMatters
UK Met Office

VIII.  Revision history

This is the second normative version of this document.

IX.  Future work

This version of the ModSpec restructures the document into a multi-part standard. This document is Part 1 — Core. It provides a technology agnostic model for modular standards. Future “parts” will be specific for different technologies. Planned extensions include:

  • ModSpec Part providing requirements and recommendations for specifying requirements and conformance tests using RDFS, SHACL, and OWL.

  • ModSpec Part providing requirements and recommendations for specifying requirements and conformance tests using JSON.

In addition, improvements to this document will be made based on implementation and changing technical requirements.

X.  Foreword

The OGC ModSpec — A Standard for Designing and Writing Modular Standards specifies a formal structure and requirements for writing modular standards documents. However, the ModSpec does not supply specific content. Where possible, this document is conformant with itself (with respect to the core requirements class and the conformance test class, Clause 8 and the Conformance Test Suite Annex A.1).

The first version of the ModSpec was approved by the OGC Membership in 2009. There have been no revisions to the ModSpec since then. This revision is based on suggestions and issues raised since 2009. A complete list of revisions, other than fixes to spelling and grammatical errors can be found in the ModSpec Version 1.1 Release Notes [OGC 25-003].

Attention is drawn to the possibility that some of the elements of this document may be the subject of patent rights. The Open Geospatial Consortium Inc. shall not be held responsible for identifying any or all such patent rights.

Recipients of this document are requested to submit, with their comments, notification of any relevant patent claims or other intellectual property rights of which they may be aware that might be infringed by any implementation of the standard set forth in this document, and to provide supporting documentation.

1.  Scope

This OGC Standard for Designing and Writing Modular Standards, also known as the ModSpec:

  • Specifies rules for the internal structure and organization of a standard.

  • Defines requirements for specifying the structure of a standards document as organized sets of criteria, those that are to be tested (“requirements”) and those that are not tested (“recommendations” and “permissions”).

  • Is designed to enable the clear and concise specification of requirements (the shalls or musts in a standard) that fully supports the ability to define implementable conformance tests.

  • Formalizes implementing the requirements specified in the ModSpec so that reusable, modular standards can be developed.

The standardization goal of the ModSpec is to define characteristics and a structure for the specification of modular and testable standards that will encourage implementation by minimizing difficulty determining requirements, mimicking implementation structure, and maximizing usability and interoperability. The ultimate goal of this approach is to enable interoperable implementations of a standard that can be tested and deemed conformant or not.

The ModSpec standardization target type is modular standards.

1.1.  Understanding the ModSpec

Reading the Terms and Definitions clause will help in understanding the content and requirements stated in this document.

The Standards Fundamentals clause provides a more detailed introduction to the fundamental concepts used in the creation of this document.

Annex C of this Standard defines the UML model upon which the ModSpec is based. Annex C also contains informal and non-normative definitions ordered for ease of understanding. The two sections contained in Annex C should be read first to aid in the understanding of the rest of the ModSpec.

NOTE:  Please note that the ModSpec has been approved by the OGC Membership as a policy directive for the development and revision of any OGC Standard or Abstract Specification that has requirements. However, the ModSpec is written to be non-OGC specific and can be used by any Standards Development Organization (SDO) as a formal guide for structuring a standards document.

1.2.  ModSpec document structure

Version 1.1 of the ModSpec is split into a Core standard and multiple Parts. These are:

  • Part 1 — Core: contains all the core requirements and informational text that define the model and internal structure of a standard.

  • Part 2: UML Model requirements

  • Part 3: XML and Schematron Model requirements

Future Parts to the ModSpec Standard may include:

  • Part 4: RDF/OWL requirements

  • Part 5: JSON Schema

2.  Conformance

Conformance to the ModSpec by a modular standard can be tested by inspection. The test suite is provided in Annex A.

Part 1: Core of the ModSpec (this document) defines one requirements class and one related conformance class:

  • The Core: Common requirements for specifying standards documents. See Clause 8 and Annex A.1

The ModSpec contains normative language and thus places requirements on conformance, or mechanism for adoption, of candidate standards to which the ModSpec applies. In particular:

Such extensions are defined in additional Parts (volumes) to the ModSpec Standard.

3.  Normative references

The following documents are referred to in the text in such a way that some or all of their content constitutes requirements of this document. For dated references, only the edition cited applies. For undated references, the latest edition of the referenced document (including any amendments) applies.

ISO/IEC: ISO/IEC 10000-1:1998, Information technology — Framework and taxonomy of International Standardized Profiles Part 1: General principles and documentation framework. ISO, IEC (1998).

ISO/IEC DIR 2, ISO/IEC Directives, Part 2. https://www.iso.org/sites/directives/current/part2/index.xhtml.

ISO: ISO 19105:2022, Geographic information — Conformance and testing. International Organization for Standardization, Geneva (2022). https://www.iso.org/standard/76457.html.

Policy SWG: OGC 08-131r3, The Specification Model — Standard for Modular specifications. Open Geospatial Consortium (2009). https://portal.ogc.org/files/?artifact_id=34762&version=2.

OMG Unified Modeling Language (OMG UML), Infrastructure, V2.5, OMG Document Number: formal/2015-03-01, Standard document URL: https://www.omg.org/spec/UML/2.5

OMG Unified Modeling Language (OMG UML), Superstructure, V2.4.1, OMG Document Number: formal/2012-05-07; Standard document URL: https://www.omg.org/spec/UML/ISO/19505-2/PDF

5.  Terms and definitions by category

For the purposes of this document, the following terms and definitions shall apply. Terms not defined here take their meaning from computer science or from their Standard English (common US and UK) meanings. The form of the definitions is defined by ISO Directives.

Many of these definitions depend upon the model given in Annex C: ModSpec UML Model, Semantics, and Definitions.

5.1.  Building Blocks Terms and Definitions

5.1.1.  Building Block

a requirements class or a requirements module with no direct dependencies on other requirements classes or modules and their associated conformance test class or conformance test module.

5.1.2.  Dependency

a module (the target) which is used by, produced by, or associated with an implementation of the source module.

5.1.3.  Direct Dependency

another requirements class (the dependency) whose requirements are defined to also be requirements of this requirements class

NOTE:  A direct dependency (of a requirements class) of the current requirements class will have the same standardization target as the current requirements class. This is another ways of saying that the current requirements class extends, or uses all the aspects of the direct dependency (or a requirements class). Any tests associated with this dependency can be applied to this requirements class.

When testing a direct dependency of a requirements class, the standardization target is directly subject to the test in the specified conformance test class of the direct dependency of a requirements class.

5.1.4.  Extension

requirements class which has a direct dependency on another requirements class

NOTE:  Here an extension of a requirements class is defined in the model on requirements class so that their implementation may be software extensions in a manner analogous to the extension relation between the requirements classes.

5.1.5.  Indirect Dependency

requirements class with a different standardization target which is used by, produced by, or associated with the implementation of this requirements class

NOTE:  In this instance, as opposed to the direct dependency of a requirements class, the test against the consumable or product used or produced by the requirements class does not directly test the requirements class, but tests only its side effects. Hence, a particular type of feature service could be required to produce valid XML documents, but the test of validity for the XML document is not directly testing the service, but only indirectly testing the validity of its output. Direct dependencies test the same standardization target, but indirect dependencies test related but different standardization targets.
For example, if a DRM-enabled service is required to have an association to a licensing service, then the requirements of a licensing service are indirect requirements for the DRM-enabled service. Such a requirement may be stated as the associated licensing service has a certificate of conformance of a particular kind.

5.1.6.  Leaf Package

UML model package that does not contain any subpackages, but contains classifiers

5.1.7.  Module

each of a set of standardized parts or independent units that can be used to construct a more complex structure

Note: The concept ‘module’ is key to the ModSpec structure and model. Modules have a direct relationship to the concept of building blocks. The power of the concept is that modules can be reused in different systems (specify once, use many). Modules can be imported from other programs. Modules can be replaced without affecting the rest of the system.

5.1.8.  Part

there are two cases for the concept part as used in this document:

  • The standards document is physically structured into a core and additional parts where each part is a separate document. These parts may be extensions to the core or have a different standardization target type/subtype.

  • For clarity, a requirement specifies more than one normative statement. The requirement parts are co-dependent. An example is Requirement 2: /req/core/reqs-are-testable of this document.

5.1.9.  Profile

specification or standard consisting of a set of references to one or more base standards and/or other profiles, and the identification of any chosen conformance test classes, conforming subsets, options and parameters of those base standards, or profiles necessary to accomplish a particular function.

NOTE:  In the usage of the ModSpec, a profile is a set of requirements classes or conformance classes (either preexisting or locally defined) of the base standards.

This means that a standardization target being conformant to a profile implies that the same target is conformant to the standards referenced in the profile.

5.2.  Document Terms and Definitions

5.2.1.  Best Practice

a specification that has been approved by a legitimate Standards Body as a recommendation for implementation.

5.2.2.  Certificate Of Conformance

evidence of conformance to all or part of a standard, awarded for passing one or more of the conformance test classes specified in that standard

NOTE:  Certificates do not have to be instantiated documents. Having proof of passing the conformance test class is sufficient. For example, the OGC currently keeps an online list of conformant applications at http://www.opengeospatial.org/resource/products. Each certificate of conformance is awarded to a standardization target.

5.2.3.  Informative Statement

expression in a document conveying non-normative information

NOTE:  Includes all statements in a document not part of the normative requirements, recommendations, permissions, or conformance tests. Included for completeness.

5.2.4.  Normative Statement

expression in a document conveying information required to define conformance

NOTE:  Includes all normative statements in a document including requirements, recommendations, permissions, and conformance tests. Included for completeness.

5.2.5.  Specification

document containing recommendations, requirements, permissions, and conformance tests

NOTE 1:  This definition is included for completeness.

NOTE 2:  In the OGC, there are Abstract Specifications and Implementation Standards. Abstract Specifications may of may not be testable. Further, Abstract Specifications may not be directly implementable. Implementation Standards are always testable and contain a conformance test suite.

5.2.6.  Standard

a specification that has been approved by a legitimate Standards Body

NOTE 1:  This definition is included for completeness. Standard and specification can apply to the same document. While specification is always valid, standard only applies after the adoption of the document by a legitimate standards organization.

NOTE 2:  A standard should consist primarily of Normative Statements. The goal should be for the standard to be concise. Supporting information can be provided through a user’s guide.

5.2.7.  Statement

expression in a document conveying information

5.2.8.  Users Guide

Non-normative information that assists in understanding a standard but is not required to implement the standard.

5.3.  Core Terms and Definitions

5.3.1.  Conformance Class

a set of conformance tests that must be passed to receive a single certificate of conformance

NOTE:  When no ambiguity is possible, the word test may be left out, so conformance test class may be called a conformance class.
In the ModSpec, the set of requirements tested by the conformance tests within a conformance class is a requirements class and its dependencies. Optional requirements will be in a separate requirements class with other requirements that are part of the same option. Each requirements class corresponds to a separate conformance class
Each requirements class will be in a 1 to 1 correspondence to a similarly named conformance class that tests all of the requirements in the requirements class.
All requirements in a requirements class will have the same standardization target type.

5.3.2.  Conformance Module

a set of related conformance classes and their associated components.

5.3.3.  Conformance Suite

set of conformance classes and/or conformance modules that define tests for all requirements of a standard

NOTE:  The conformance suite is the union of all conformance classes and their associated conformance classes. It is by definition the conformance class of the entire standard or abstract specification.

5.3.4.  Conformance Test

test, abstract or real, of one or more requirements contained within a standard, or set of standards

5.3.5.  Conformance Test Method

how an implementation of the standard is tested for conformance. Testing may be automated, manual, or a hybrid.

NOTE:  Testing by an independent second party is recommended.

5.3.6.  Core Requirements Class

unique requirements class that must be satisfied by any conformant standardization targets associated with the standard

NOTE:  The core requirements class is unique because if it were possible to have more than one, then each core would have to be implemented to pass any conformance test class, and thus would have to be contained in any other core. The core may be empty, or all or part of another standard or related set of standards.

The core can refer to this requirements class, its associated conformance test class, or the software module that implements that requirements class.

5.3.7.  Model

A representation of those aspects of the standardization target type which are to be governed by a standard. The model captures both the conceptual and logical properties of the standardization target type. The requirements promulgated by a standard should be expressed in terms of those conceptual and logical properties.

In short, the model provides the vocabulary for expressing requirements.

5.3.8.  Permission

uses “may” and is used to prevent a requirement from being “over interpreted” and as such is considered to be more of a “statement of fact” rather than a “normative” condition.

5.3.9.  Recommendation

expression in the content of a standard conveying that among several possibilities one is recommended as particularly suitable, without mentioning or excluding others, or that a certain course of action is preferred but not necessarily required, or that (in the negative form) a certain possibility or course of action is deprecated but not prohibited

NOTE 1:  Although using normative language, a recommendation is not a requirement. The usual form replaces the shall (imperative or command) of a requirement with a should (suggestive or conditional).

NOTE 2:  Recommendations are not tested and therefore have no related conformance test.

5.3.10.  Requirement

expression in the content of a standard conveying criteria to be fulfilled if compliance with the standard is to be claimed and from which no deviation is permitted

NOTE:  Each requirement is a normative criterion for a single type of standardization target. In the ModSpec, requirements are associated to conformance tests that can be used to prove compliance to the underlying criteria by the standardization target. The implementation of a requirement is dependent on the type of standard being written. A data standard requires data structures, but a procedural standard requires software implementations. The view of a standard in terms of a set of testable requirements supports using set descriptions of both the standard and its implementations. The specification of a requirement is usually expressed in terms of a model of the standardization target type, such as a UML model, or an XML, JSON or SQL schema. Anything without a defined test is a-priori not testable and thus would be better expressed as a recommendation. Requirements use normative language and in particular are commands and use the imperative “shall” or similar imperative constructs. Statements in standards which are not requirements and need to be either conditional or future tense normally use “will” and should not be confused with requirements that use “shall” imperatively

5.3.11.  Requirements Class

an aggregate of requirements with a single standardization target type that must all be satisfied to pass a conformance test Class.

NOTE:  There is some confusion possible here, since the testing of indirect dependencies seems to violate this definition. But the existence of an indirect dependency implies that the test is actually a test of the existence of the relationship from the original target to something that has a property (satisfies a condition or requirement from another requirements class).

5.3.12.  Requirements Module

a set of related requirement classes and their associated components.

5.3.13.  Standardization Goal

a concise statement of the problem that the standard helps address and the strategy envisioned for achieving a solution. This strategy typically identifies real-world entities that need to be modified or constrained. At the abstract level, those entities are the Standardization Target Types.

5.3.14.  Standardization Target

entity to which some requirements of a standard apply

NOTE:  The standardization target is the entity which may receive a certificate of conformance for a requirements class.

5.3.15.  Standardization Target Type

type of entity or set of entities to which the requirement of a standard apply

NOTE:  For example, the standardization target type for The OGC API – Features Standard are Web APIs. The standardization target type for the CDB Standard is “datastore”. It is important to understand that a standard’s root standardization target type can have sub-types, and that there can be a hierarchy of target types. For example, a Web API can have sub types of client, server, security, and so forth. As such, each requirements class can have a standardization target type that is a sub-type of the root.

5.3.16.  will

In informative sections, the word “will” implies that something is an implication of a requirement. The “will” statements are not requirements, but explain the consequence of requirements.

6.  Conventions

6.1.  Symbols (and abbreviated terms)

All symbols used in this document are either:

  1. Common mathematical symbols

  2. UML 2 (Unified Modeling Language) as defined by OMG and accepted as a publicly available standard (PAS) by ISO in its earlier 1.3 version.

6.2.  Identifiers

The normative provisions in this standard are denoted by the URI namespace

https://www.opengis.net/spec/modspec-1/1.1/

All requirements that appear in this document are denoted by partial URIs which are relative to the namespace shown above.

For the sake of brevity, the use of “req” in a requirement URI denotes:

https://www.opengis.net/spec/modspec-1/1.1/

An example might be:

/req/core/crs

All conformance tests that appear in this document are denoted by partial URIs which are relative to the namespace shown above.

For the sake of brevity, the use of “conf” in a requirement URI denotes:

https://www.opengis.net/spec/modspec-1/1.1/

The same convention is used for permissions (per) and recommendations (rec).

6.3.  Abbreviated terms

In this document the following abbreviations and acronyms are used or introduced:

ERA

Entity, Relation, Attribute (pre-object modeling technique)

ISO

International Organization for Standardization (from Greek for “same”)

OGC

Open Geospatial Consortium (http://www.opengeospatial.org/)

OMG

Object Management Group (http://www.omg.org/)

SQL

ISO/IEC 9075 query language for relational databases, not originally an acronym, but now often cited as “Structured Query Language”

TC

Technical Committee (usually either in ISO or OGC)

UML

Unified Modeling Language (an object modeling language)

XML

eXtensible Markup Language

6.4.  Finding requirements and recommendations

Each normative statement in the ModSpec is stated in one and only one place, in a standard format, with a unique label, such as REQ001, REC001, or PER001. A requirement, recommendation, or permission may be repeated for clarification. The statement with the unique label is considered the official statement of the normative requirement or recommendation.

In this document, all requirements are associated with tests specified in the test suite in Annex A. The reference to the requirement in the conformance test is done by a requirements label and/or unique identifier. Recommendations and permissions are not tested although they should still be documented using a standard template and have unique labels and/or identifiers.

Requirements classes are separated into their own clauses and named and specified according to inheritance (direct dependencies). The Conformance test classes in the test suite are similarly named to establish an explicit and link between requirements classes and conformance test classes.

7.  Standards Fundamentals

7.1.  Building Blocks

In software development technology, there is a concept called building block. In software development, building blocks are used to support the software build process where source code files/libraries can be accessed from multiple sources, converted into executable code, and linked together in the proper order until a complete set of executable files is generated. The same concept can be applied to OGC Standards development: Requirements classes can be linked together from one or more standards to create a new standard not originally envisioned when the requirements were originally defined.

The Open Group suggests that building blocks have the following characteristics:

  1. A building block is a package of functionality defined to meet business or domain needs.

  2. A building block may interoperate with other, inter-dependent, building blocks.

  3. A good building block has the following characteristics:

    1. Considers implementation and usage, and evolves to exploit technology and standards.

    2. May be assembled from other building blocks.

    3. May be a subassembly of other building blocks.

    4. Ideally a building block is re-usable and replaceable, and well specified.

  4. A building block may have multiple implementations but with different inter-dependent building blocks.

These characteristics are slightly modified from the Open Group definitions to accommodate the use of the building block concept in standards work.

7.2.  Standardization Context — Goals, Target Types, and Targets

Every standards document should include a Standardization Goal. This is a concise statement of the problem that the standard helps address and the strategy envisioned for achieving a solution. This strategy typically identifies real-world entities that need to be modified or constrained. At the abstract level, those entities are the Standardization Target Types. These are the classes of entities to be standardized. A Standard defines the requirements levied on one or more Standardization Target Types.

Instances of a Standardization Target Type are the Standardization Targets. These are the real-world manifestations of the Standardization Target Type. In summary:

  • Standardization Goal – identifies the problem and identifies the actors and entities involved in solving that problem

  • Standardization Target Type – An abstract representation of one of the actors or entities identified in the Standardization Goal

  • Standardization Target – an implementation of a Standardization Target Type. These are the real-world entities which can be tested for conformance with the requirements documented in the standard.

Standardization Target Types can be hierarchical. The Conceptual, Logical, Physical model hierarchy is one example where the Standardization Target Types are information models. Another example would be implementations of OGC API — Features Part 2 that support XML data exchange.

The following are two examples of Target Types and Targets as used in the OGC API suite of standards:

  1. OGC API Standards

    1. Standardization target type: Web API

    2. Standardization target: Any API that is consistent with the web architecture (HTTP, web linking, etc) and implements a requirements class of an OGC API standard.

  2. OGC JSON — Feature Geometry

    1. Standardization target type: JSON documents (or JSON objects, to be discussed by the SWG)

    2. Standardization target: Any JSON document (or object) that implements the Core requirements class of JSON-FG. The document can be a created by an API as a response document representing a features collection or by a tool like GDAL, FME, QGIS, etc.

The Standardization Target Types, Standardization Targets, and Standardization Goal provide a well-defined context for the standard. This will help users of standards to quickly understand the scope of a standard and to select those standards appropriate for their needs. It also will help keep standards developers focused on the intended use of their standards, avoiding standards which are overly broad and/or unfocused.

7.3.  Conformance, Requirements, and key information

In the conformance test suite, there will be a test defined to verify the validity of the claim that an implementation of the standard (standardization target) satisfies each mandatory requirement specified in the standard. Since the normative language of the body of the standard and the conformance test classes both define what conformance to the standard means, they will be equivalent in a well-written standard. The ModSpec requires a standards document to be well-written, at least in stating requirements and conformance tests.

Conformance tests are aggregated into conformance classes that specify how certain “certificates of conformance” are achieved. The natural inclination is to aggregate the requirements. The issue that blocks this approach is that some requirements are optional while others are mandatory. To achieve a cleaner separation of requirements, the ModSpec separates them into sets (called “requirements classes”), each of which has no optional components. Since the normative statement of each requirement is only declared once and is uniquely identified as such, each requirement will be in a clause associated to its requirements class.

Therefore, the ModSpec defines a “requirements class” as a set of requirements that must all be passed as per the tests defined in the related conformance class (see Clause 5.3.1). Each requirements class has a one-to-one correspondence with a conformance class. A standard written to conform with the ModSpec mayuse this “module” structure in any manner consistent with the rest of the ModSpec.

A standard may have mandatory and optional requirements classes. This allows the options in the testing procedure to be grouped into non-varying mandatory and optional conformance classes. Each requirement within an optional requirements class is mandatory when that requirements class is implemented. When needed, a particular requirements class may contain only a single requirement.

Conformance classes may contain dependencies on one another. These are represented by tests in one conformance class that state that another conformance class must be passed to qualify to pass this conformance class. In terms of requirements, that says that the dependent conformance class contains tests (by reference) for all requirements of the “included” conformance class.

As defined in the ModSpec, one requirements class is dependent on another if the other is included through such a reference. In this manner, requirements classes can be treated as sets of requirements (each in a single requirements class but included in others by reference to its “home” requirements class).

In the ModSpec, each conformance requirement is separated in its own labeled paragraph, such as seen in Requirement 1 below.

The distribution of the information in a standard is not restricted. The only requirement is that requirements be grouped in a manner consistent with the conformance test classes, see Requirement 6 and Requirement 7.

7.4.  Documenting the Standard

Standards development should be a repeatable process producing a suite of standards with a common look and feel. In addition, that process should embody the ModSpec principles so that ModSpec conformance is almost automatic. A standardized template is an essential element of such a repeatable process.

NOTE:  OGC Standards are written using an OGC Member approved template that is conformant with the requirements stated in the ModSpec

This template should be specified by the following descriptions:

  1. A standards document contains Clauses (corresponding to numbered sections as they might appear in a table of contents) which describe its standardization target type and its requirements.

  2. A standard contains Annexes or is associated to other documents (both a logical type of Clause), one of which is the Conformance Test Suite (which may be an abstract description of the test suites to be implemented separately). In OGC Documents, this is Annex A – Abstract Test Suite.

  3. All requirements, recommendations, permissions, and models are introduced and defined first in the numbered Clauses.

  4. All requirements are identifiable as requirements.

  5. All requirements in a document are uniquely numbered.

  6. All tests for conformance to those requirements are defined in the Conformance Test Suite.

  7. Tests are grouped for convenience into conformance test classes and if desired the classes are grouped into conformance test modules.

  8. The tests, if conducted, determine to some degree of certainty whether an implementation meets the requirements which the tests reference.

  9. The tests are organized into some number of conformance “classes” where each conformance class has a one to one relationship with a requirements class. If a standard does not do this, it is has by default only one “conformance class”.

  10. Certificates of conformance are awarded by a testing entity based on these conformance classes.

  11. There is a clear distinction between normative and informative parts of the text.

  12. Examples and notes are informative, and do not use “normative” language.

A UML representation of important properties of this model is given in Annex C, Section 2.

8.  ModSpec Requirements Class: Core

This clause specifies the requirements, recommendations, and permissions for the content and structure of a modular standard. This collection of requirements, recommendations, and permissions are also known as the core of the ModSpec. All the requirements specified in this ModSpec core comprise the ModSpec Core Requirements Class.

Requirements class 1: Requirements Class ‘Core’

Identifierhttps://www.opengis.net/spec/modspec-1/1.1/req/req-class-core
Target typeModular Standard
Conformance classConformance class A.1: https://www.opengis.net/spec/modspec-1/1.1/conf/conf-class-core
Normative statementsRequirement 2: /req/core/reqs-are-testable
Requirement 3: /req/core/all-components-assigned-uri
Requirement 4: /req/core/vocabulary-and-parent-req-class
Requirement 5: /req/core/single-standardization-target-type
Requirement 6: /req/core/test-class-single-standardization-target-type
Requirement 7: /req/core/requirements-grouped
Requirement 8: /req/core/requirements-test-suite-structure
Requirement 9: /req/core/requirements-class-correspondence-to-conformance-classes
Requirement 10: /req/core/no-optional-tests
Requirement 11: /req/core/all-parameters-expressed
Requirement 12: /req/core/conf-class-single-req-class
Requirement 13: /req/core/con-class-dependencies
Requirement 14: /req/core/imported-requirements-class
Requirement 15: /req/core/all-classes-explicitly-named
Requirement 16: /req/core/req-in-only-one-req-class
Requirement 17: /req/core/co-dependent-requirements
Requirement 18: /req/core/structure-requirements-classes
Requirement 19: /req/core/requirements-and-dependencies
Requirement 20: /req/core/profile-conformance
Requirement 21: /req/core/core-requirements-separate
Requirement 22: /req/core/general-recommendations-core
Requirement 23: /req/core/req-class-not-core-stt-subtype-of-core
Requirement 24: /req/core/core-and-extensions
Requirement 25: /req/core/extensions-conformant-to-the-modspec
Requirement 26: /req/core/restriction-of-extensions
Requirement 27: /req/core/optional-requirements
Requirement 28: /req/core/req-class-overlap-by-reference
Requirement 1: /req/core/reqs-are-in-class

8.1.  General Requirements

The following requirement states that every requirement in a standards document is associated with one and only one requirements class(es).

Requirement 1

Identifier/req/core/reqs-are-in-class
Included inRequirements class 1: https://www.opengis.net/spec/modspec-1/1.1/req/req-class-core
A

Each requirement in a standard SHALL be associated with exactly one requirements class.

There may be one or more requirements in a requirements class.

The following requirement states that every requirement is testable.

Requirement 2

Identifier/req/core/reqs-are-testable
Included inRequirements class 1: https://www.opengis.net/spec/modspec-1/1.1/req/req-class-core
A

All the parts of a requirement SHALL be testable.

B

Failure to pass any part of a requirement SHALL be a failure to pass the associated conformance test.

NOTE 1:  This further means that failure to pass the test specified for a part of requirement is a failure to pass the requirement.

Therefore, by definition, any requirements class that contains the requirement that failed to pass also fails to pass.

The following requirement states that every component of a standard will have a unique identifier

Requirement 3

Identifier/req/core/all-components-assigned-uri
Included inRequirements class 1: https://www.opengis.net/spec/modspec-1/1.1/req/req-class-core
A

Each component of a standard, including requirements, requirements modules, requirements classes, conformance test, conformance modules, and conformance test classes SHALL be assigned a unique identifier and/or label.

NOTE 2:  In the OGC, the enforcement of this requirement and its associated recommendation is the purview of the OGC Naming Authority or its equivalent.

The following recommendation encourages the consistent use of these unique identifiers/labels in the standard as well as any external documentation referencing that standard.

Recommendation 1

Identifier/rec/core/uri-external-use
A

These unique identifiers/labels SHOULD be used in any external documentation that references component elements of a standard in a normative manner, including but not limited to other standards, implementations of the conformance test suite, or certificates of conformance for implementations conformant to the standard in question.

While a requirement may be referenced in more than one place in a standard, the normative definition of a requirement is its “home” (see Clause 6.4) and will be the only place where full normative language is used.

The following permissions relate to possible content specified in the core of a standard. In this manner, the core requirements class and its associated content can be thought of not only as the requirements of the core conformance class, but as a form of reference model for establishing core vocabularies and schemas for the entire standard.

Permission 1

Identifier/per/core/informational-content-in-core
A

The informational and structural universals of the standard MAY be included in the core text of the standard without violations of the ModSpec. This is true if the requirements of the extension are not implicit in what is included in the core.

B

The core MAY contain the definition and schema of commonly used terms and data structures for use in other components and/or structures throughout the standard.

The following states how and where vocabularies are specified in relation to a requirements class.

Requirement 4

Identifier/req/core/vocabulary-and-parent-req-class
Included inRequirements class 1: https://www.opengis.net/spec/modspec-1/1.1/req/req-class-core
A

Requirements on the use and interpretation of vocabulary SHALL be in the requirements class where that use or interpretation is used.

Permission 2

Identifier/per/core/external-vocabs-core
A

Importation of external vocabularies and schemas MAY be in the core of a standard.

For example, consider the specification of a metadata service in which the Dublin Core concept “Title” and the XML schema structure used for its specification can be in the core of the service standard. How a particular request-response pair uses the data structure to mean the title of a particular document or dataset will be specified in the requirements class in which the request-response pair is defined and set against requirements.

8.2.  Using the model

The primary difficulty in speaking about standards (or candidate standards) as a group is their diverse nature. Some standards use UML to define behavior, others use XML or JSON to define data structures, and others use no specific modeling language at all. However, they all must model the standardization target type to which they apply since they need to use unambiguous language to specify requirements. Thus, the only thing they have in common is that they define testable requirements against some model of an implementation of the standard (the standardization target type). For completeness, they should also specify the conformance tests for these requirements that are to be run for validation of the implementations against those requirements.

The assumption is that each standard has a single (root) standardization target type from which all extensions inherit. If this is not true, then the standard can be logically factored into parts each corresponding to a “root” standardization target type, and that the standard addresses each such part separately (see the definition of requirements class). In this sense, the next requirement divides the standard into parts more than restricting their content.

Requirement 5

Identifier/req/core/single-standardization-target-type
Included inRequirements class 1: https://www.opengis.net/spec/modspec-1/1.1/req/req-class-core
A

Each requirement class in a conformant standard SHALL have a single standardization target type.

In practice, the standardization target type of the core requirements class is the root of an inheritance tree where extensions all have the core’s target type as an ancestor, and thus can be considered as belonging to the same “class” or type as the core’s target type.

Requirement 6

Identifier/req/core/test-class-single-standardization-target-type
Included inRequirements class 1: https://www.opengis.net/spec/modspec-1/1.1/req/req-class-core
A

All conformance tests in a single conformance test class in a conformant standard SHALL have the same standardization target type.

This means that all requirements are considered as targeting the same entity being tested for a particular certificate of conformance. The test may specify other types as intermediaries or indirect dependencies (see indirect dependency of-a-requirements-class).

Permission 3

Identifier/per/core/repeated-requirements
A

If needed, a requirement MAY be repeated word for word in another requirement up to but not including the identification of the standardization target type.

A repeated requirement will be in a separate requirements class. This is because it will have a separate standardization target and thus belong to the requirements to be tested by a separate conformance class. For example, in a service interface, a standard may be written that requires both the client and server to use a particular language for data transmission. Since the client and server are different standardization targets types (except in some special circumstances), they will have different conformance test classes.

One solution is to state the requirement twice, once for each target. An alternative is to introduce a new “superclass”.

Permission 4

Identifier/per/core/abstract-superclass
A

The standard MAY introduce an abstract superclass of all affected standardization target types and use this for the requirements common to all of the affected target types.

An example is provided below.

 

Figure 1 — Abstract superclass example

8.3.  The “standards” document

Each standards document is comprised of a set of requirements and their associated conformance tests. Requirements are grouped into requirements classes. Each requirements class is contained within one section/clause in a standards document.

Requirement 7

Identifier/req/core/requirements-grouped
Included inRequirements class 1: https://www.opengis.net/spec/modspec-1/1.1/req/req-class-core
A

Requirements SHALL be grouped together in clauses (numbered sections) of the document in a strictly hierarchical manner, consistent with the requirements classes.

The following requirement states that the sequence of requirements and requirements classes is the same as the sequence of conformance tests and conformance classes in the conformance suite.

Requirement 8

Identifier/req/core/requirements-test-suite-structure
Included inRequirements class 1: https://www.opengis.net/spec/modspec-1/1.1/req/req-class-core
A

The requirements structure of the document SHALL be in logical correspondence with the test suite structure.

If two requirements are in the same requirements class, they should be tested in the same conformance class in the conformance suite. Each requirement is separately identifiable either by a unique label and/or identifier as is done in the ModSpec.

In summary, the structure of the requirements and requirements classes of the model should be reflected in the organization of the conformance tests and classes, and also in the structure of the normative clauses in the specification document.

8.4.  Conformance Test Suite

The requirements specified in this clause will be applied directly to the test suite, and in particular to the conformance classes. By definition, a “test suite” is a collection of identifiable conformance classes. A conformance class is a well-defined set of conformance tests. Each conformance test is a concrete or abstract (depending on the type of suite) description of a test to be performed on each candidate conformant implementation, to determine if it meets a well-defined set of requirements as stated in the normative clauses of the standards document.

NOTE:  The Conformance Test Suite is normative in the sense that it describes the tests to be performed to pass conformance, but it specifies no requirements in any other sense. The requirements are specified in the body of the standard. The test suite only describes in detail how those requirements should be tested.

Requirement 9

Identifier/req/core/requirements-class-correspondence-to-conformance-classes
Included inRequirements class 1: https://www.opengis.net/spec/modspec-1/1.1/req/req-class-core
A

The requirements classes SHALL be in a one-to-one correspondence to the conformance test classes, and thus to the various certificate of conformance types possible for a candidate implementation.

Strict parallelism of implementation and governance is the essence of this standard.

8.5.  Requirements for Modularity

The following states that each conformance class tests a complete requirements class

Requirement 10

Identifier/req/core/no-optional-tests
Included inRequirements class 1: https://www.opengis.net/spec/modspec-1/1.1/req/req-class-core
A

A conformance class SHALL not contain any optional conformance tests.

This requirement stops conformance classes from containing optional requirements and tests, and, at least as far as the standard is concerned, makes all certificates of conformance mean that exactly the same tests have been conducted. Standards documents may use recommendations for such options, but the conformance test classes do not test recommendations.

Permission 5

Identifier/per/core/conf-class-paramterized
A

A Conformance class MAY be parameterized..

This means that the class’s tests depend on some parameter that must be defined before the tests can be executed. This can be thought of as an “if-then-else” decision tree.

For example, if a conformance class needs to apply tests against a specific data format, such as GML or KML, then XYZ(GML) is XYZ using GML, and XYZ(KML) is XYZ using KML. Because the parameters choose which requirements will be tested, two conformance tests with distinct parameters should be considered as distinct conformance classes.

The most common parameters are the identities of indirect dependencies. For example, if a service uses or produces feature data, the format of that data may be a parameter, such as GML, KML or GeoJSON. When reading a certificate of conformance, the values of such parameters are very important.

Requirement 11

Identifier/req/core/all-parameters-expressed
Included inRequirements class 1: https://www.opengis.net/spec/modspec-1/1.1/req/req-class-core
A

A certificate of conformance SHALL specify all parameter values used to pass the tests in its conformance test class.

Conformance to a particular conformance class means exactly the same thing everywhere.

Requirement 12

Identifier/req/core/conf-class-single-req-class
Included inRequirements class 1: https://www.opengis.net/spec/modspec-1/1.1/req/req-class-core
A

A Conformance class SHALL explicitly test only requirements from a single requirements class.

This means that there is a strict correspondence between the requirements classes and the conformance test classes in the test suite. Recall that a conformance test class may specify dependencies causing other conformance test classes to be used, but this is a result of an explicit requirement in the “home” requirements class.

Requirement 13

Identifier/req/core/con-class-dependencies
Included inRequirements class 1: https://www.opengis.net/spec/modspec-1/1.1/req/req-class-core
A

A Conformance class SHALL specify any other conformance class upon which it is dependent and

B

That other conformance class SHALL be used to test the specified dependency.

Such referenced conformance classes may be in the same standard or may be a conformance class of another standard.

The following is an example of an indirect dependency. If a service specifies that a particular output is required to be conformant to a conformance test class in a specific standard (say a normatively referenced XML schema), then the conformance class of that normative reference will be used to test that output. For example, if an OGC Web Feature Service (WFS) implementation instance specifies that its feature collection output is compliant to a particular profile of GML, then that profile of GML will be used to validate that output. This means that the service is indirectly tested using the GML standard. In other words, GML is an indirect dependency of the original service.

Requirements classes may be optional as a whole, but not piecemeal. This means that every implementation that passed a particular conformance class satisfies exactly the same requirements and passes exactly the same conformance tests. Differences between implementations will be determined by which conformance test classes are passed, not by a listing of which options within a class were tested. If a standard’s authors wish to make a particular requirement optional, Requirement 10: /req/core/no-optional-tests forces them to include it in a separate requirements class (and therefore in a separate conformance test class) which can be left untested.

NOTE 1:  Standards developed outside the OGC may not follow a strict parallelism between requirement specification and testing, so for use within a standard compliant to the ModSpec, special care must be taken in importing conformance test classes from other standards.

Requirement 14

Identifier/req/core/imported-requirements-class
Included inRequirements class 1: https://www.opengis.net/spec/modspec-1/1.1/req/req-class-core
A

If a requirements class is imported from another standard for use within a standard conformant to the ModSpec, and if any imported requirement is “optional,” then that requirement SHALL be factored out as a separate requirements class in the profile of that imported standard used in the conformant standard.

B

Each such used requirements class SHALL be a conformance class of the source standard or a combination of conformance classes of the source standard or standards.

The tracking of the parallelism between requirements and tests should be easy if the standards document is non-ambiguous. To ensure this, by utilizing the names of the two types of classes, the following requirement places a default mapping between the two.

Requirement 15

Identifier/req/core/all-classes-explicitly-named
Included inRequirements class 1: https://www.opengis.net/spec/modspec-1/1.1/req/req-class-core
A

For the sake of consistency and readability, all requirements classes and all conformance test classes SHALL be explicitly named, with corresponding requirements classes and conformance test classes having similar names.

Logically, a requirements class (set of requirements) and a conformance class (set of tests) are not comparable. This can be remedied by noting that both have a consistent relation to a set of requirements. A requirements class is a set of requirements. A conformance class tests a set of requirements. Therefore a requirements class corresponds precisely to a conformance class if they both are related (as described) to the same set of requirements.

The following states that requirements classes contain all requirements tested by a conformance test case

Requirement 16

Identifier/req/core/req-in-only-one-req-class
Included inRequirements class 1: https://www.opengis.net/spec/modspec-1/1.1/req/req-class-core
A

Each requirement in the standard SHALL be contained in one and only one requirements class.

B

Inclusion of any requirement in a requirements class by a conformance class SHALL imply inclusion of all requirements in its class (as a dependency).

Unless a requirement is referenced in a conformance test and thus in a conformance class, it cannot be considered a requirement since no test has been defined for it.

Recommendation 2

Identifier/rec/core/parallel-structure
A

If possible, the structure of the normative clauses of the standard SHOULD parallel the structure of the conformance classes in the conformance clause.

The above requirement in conjunction with Requirement 10: /req/core/no-optional-tests means that all requirements in a conformant standard will be tested in some conformance class. In the best example, a requirement should be contained explicitly in one and only one requirements class and tested in one and only one conformance class. This is not really a requirement here, since a single requirement can be stated twice in different requirements classes with different standardization target types.

Requirement 17

Identifier/req/core/co-dependent-requirements
Included inRequirements class 1: https://www.opengis.net/spec/modspec-1/1.1/req/req-class-core
A

If any two requirements are co-dependent (each dependent on the other) then they SHALL be in the same requirements class.

B

If any two requirements classes are co-dependent, they SHALL be merged into a single requirements class.

Normally, circular dependencies between implementation components are signs of a poor design, but they often cannot be avoided because of other considerations (code ownership for example).

Recommendation 3

Identifier/rec/core/circular-dependencies
A

Circular dependencies of all types SHOULD be avoided whenever possible.

Requirement 18

Identifier/req/core/structure-requirements-classes
Included inRequirements class 1: https://www.opengis.net/spec/modspec-1/1.1/req/req-class-core
A

There SHALL be a natural structure to the requirements classes so that each may be implemented on top of any implementations of its dependencies and independent of its extensions.

NOTE 2:  The only certain manner to test this requirement maybe to create a reference implementation.

This requirement is more important and may be more difficult than it seems. It states simply that conformance classes and their associated requirements classes can be put in a one-to-one correspondence to a fully modular implementation of the complete standard (at least against a single standardization target). Implementors who wish to sacrifice modularity for some other benefit can still do what they want. The requirement here only states that if the software requirements classes are properly separated, they can be implemented in a plug and play fashion.

Requirement 19

Identifier/req/core/requirements-and-dependencies
Included inRequirements class 1: https://www.opengis.net/spec/modspec-1/1.1/req/req-class-core
A

No requirements class SHALL redefine the requirements of its dependencies, unless that redefinition is for an entity derived from but not contained in those dependencies.

This means, for example, that a UML classifier cannot be redefined in a new extension. If a new version of the classifier is needed it has to be a valid subtype of the original.

In terms of generalization, subclassing, extension and restriction (into a new class or type) are all acceptable, redefinition (of an old class or type) is not.

Clause 8.3 makes suggestions as to how to organize the conformance classes and normative clauses in parallel to make this requirement easier to verify.

Most standards include examples, which are useful for illustrative or pedagogical purposes. However, it is not possible to write a standard “by example” that supports conformance testing. Examples are therefore non-normative, by definition.

8.5.1.  Profiles are defined as sets of conformance classes

All the conformance classes created in a standard form a base (an upper bound of all conformance classes) for defining profiles as defined in ISO/IEC 10000 (see ISO/IEC DIR 2). The base for creating a profile can be defined as the union of all requirements classes.

Requirement 20

Identifier/req/core/profile-conformance
Included inRequirements class 1: https://www.opengis.net/spec/modspec-1/1.1/req/req-class-core
A

The conformance tests for a profile of a standard SHALL be defined as the union of a list of conformance classes that are to be satisfied by that profile’s standardization targets.

8.6.  There is a Defined Core

The following requirements define the content of the core.

Requirement 21

Identifier/req/core/core-requirements-separate
Included inRequirements class 1: https://www.opengis.net/spec/modspec-1/1.1/req/req-class-core
A

Every standard SHALL define and identify a core set of requirements as a separate requirements class with a corresponding conformance class.

The following states that any recommendations applicable to the entire standard are in the core document.

Requirement 22

Identifier/req/core/general-recommendations-core
Included inRequirements class 1: https://www.opengis.net/spec/modspec-1/1.1/req/req-class-core
A

All general recommendations for a standard SHALL be in the core.

The following states that all non-core requirements classes have a standardization target type that is a sub-type of the core.

Requirement 23

Identifier/req/core/req-class-not-core-stt-subtype-of-core
Included inRequirements class 1: https://www.opengis.net/spec/modspec-1/1.1/req/req-class-core
A

Every requirements class in a standard, with the exception of the core, SHALL have a standardization target type which is a subtype of that of the core.

B

Every requirement class in a standard, with the exception of the core, SHALL have the core as a direct dependency.

The following recommendation is guidance to the group developing a standard to keep the core as simple as possible.

Recommendation 4

Identifier/rec/core/simple-core
A

The core SHOULD be as simple as possible.

The following enables the development and documentation of anstract standards. Examples of such standards are the OGC Abstract Specification. Typically, an abstract standard cannot be directly implemented.

Permission 6

Identifier/per/core/core-type
A

The core MAY be partially or totally abstract.

The following enables the ability of the standard being developed and then implemented to reference, as normative, conformance classes from another standard. An example in the OGC would be OGC API — Records Standard core referencing conformance classes defined in the OGC API — Common Standard. By definition these externally defined conformance classes need to be passed in order to claim compliance.

Permission 7

Identifier/per/core/req-class-another-standard
A

The core requirements class in a standard MAY be a conformance class defined in another standard.

Recommendation 5

Identifier/rec/core/optional-tests
A

If a requirements class is from another standard, the current standard SHOULD identify any optional tests in that conformance class that are required by the current standard’s core requirements class. See Requirement 14: /req/core/imported-requirements-class.

Since the core requirements class is contained (as a direct dependency) in each other requirements class with a similar standardization target type, the general recommendations are thus universal to all requirements classes.

Permission 8

Identifier/per/core/core-maybe-recommendations
A

Since the basic concept of some standards is mechanism not implementation, the core MAY contain only recommendations and state no requirements.

NOTE:  In most cases, if someone feels the need to define a “simple” version of the standard, it is probably a good approximation of the best core. For example, the core of a refactored GML might be the equivalent of the “GML for Simple Features” profile. The core for any SQL version of feature geometry is probably “Simple Features.”

8.7.  Extensions are requirements classes

A common mechanism to extend the functionality of a standard is to define extensions, which may be either local or encompass other standards.

Standards should use extensions as required and feasible, but should never hinder them.

Requirement 24

Identifier/req/core/core-and-extensions
Included inRequirements class 1: https://www.opengis.net/spec/modspec-1/1.1/req/req-class-core
A

Each standard conformant to the ModSpec SHALL consist of a core and some number of requirements classes defined as extensions to that core.

Requirement 25

Identifier/req/core/extensions-conformant-to-the-modspec
Included inRequirements class 1: https://www.opengis.net/spec/modspec-1/1.1/req/req-class-core
A

A standard conformant to the ModSpec SHALL require all conformant extensions to be conformant to the ModSpec.

Since software is evolutionary at its best, it would not be wise to restrict that evolutionary tendency by restricting the specification of extensions. A good standard will thus list the things a standardization target has to do, but will never list things that a standardization target might want to do above and beyond the current design requirements.

Requirement 26

Identifier/req/core/restriction-of-extensions
Included inRequirements class 1: https://www.opengis.net/spec/modspec-1/1.1/req/req-class-core
A

A standard conformant to the ModSpec SHALL never restrict in any manner future, logically valid extensions of its standardization target types.

The above requirement should not be interpreted as a restriction on quality control. Any efforts by a standard to enforce a level of quality on its standardization targets, when well and properly formed, do not interfere with the proper extension of those targets. So, the standard may require its standardization targets to behave in a certain manner when presented with a logical inconsistency, but that inconsistency must be fundamental to the internal logic of the model, and not a possible extension. Thus, a standard may require a standardization target to accept GML as a feature specification language, but cannot require a standardization target to not accept an alternative, such as KML, or GeoJSON, as long at that alternative can carry viable information consistent with the fundamental intent of the standard.

8.8.  Optional requirements are organized as optional requirements classes

Requirement 27

Identifier/req/core/optional-requirements
Included inRequirements class 1: https://www.opengis.net/spec/modspec-1/1.1/req/req-class-core
A

The only conditional (optional) requirements acceptable in a standard conformant with the ModSpec SHALL be expressible as a list of conformance classes to be passed.

A standard and implementations of that standard are restricted by this requirement.

Requirements of the form “if the implementation does this, it must do it this way” are considered to be options and should be in a separate requirements class.

8.8.1.  Requirements classes intersect overlap only by reference

Requirement 28

Identifier/req/core/req-class-overlap-by-reference
Included inRequirements class 1: https://www.opengis.net/spec/modspec-1/1.1/req/req-class-core
A

The common portion of any two requirements classes SHALL consist only of references to other requirements classes.

This implies that each requirement is directly in exactly one requirements class and all references to that requirement from another requirements class must include its complete “home” requirements class. This means that requirements for dependencies will often result in conformance test cases which require the execution of the

NOTE:  All general recommendations are in the core requirements class. The core conformance test class contains tests that all other conformance classes must pass.

9.  Mapping the ModSpec to types of models

9.1.  Semantics

The previous section defines requirements for conformance to the ModSpec core requirements. However, testing for that conformance may depend on how the various forms and parts of a conformant standard are viewed. Additional Parts to the ModSpec Standard specify how those views are to be defined. Standards that take an alternative mechanism to the ones defined in the additional Parts must be tested solely on the structure of their conformance test suite until such times as an extension to the ModSpec is defined for that alternate mechanism.

Standards are often structured and documented using some form of modeling language, or implementation paradigm. Additional Parts to the ModSpec define a mechanism to map parts of the model (language, schema, etc.) to the

As suggested in Clause Requirement 23: /req/core/req-class-not-core-stt-subtype-of-core, the structure of the normative clauses in a standard should parallel the structure of the conformance test classes in that standard. The structure of the normative clauses in a well written standard will follow the structure of its model. This means that all three are parallel.

9.2.  A Note on Data Models

If a data model is to be used to define the parameters of operational interfaces, then that model should belong in the core since it can be considered as part of a common reference model and vocabulary.

If a data model is to be used to create “data transfer” elements, the issue is more complex. In the use of parameter names and types in the operational model above, the definition of a common vocabulary in the core is justifiable. In the case where data transfer elements are being defined, it may be that some types and elements are a defining separator between conformance classes and have to exist independently of such data elements defined for non-dependent classes. For these reasons, care should be taken in creating separable data transfer schemas across requirements. Dependencies in the schemas will have to parallel the dependencies in the requirements classes. The mechanism for enforcing this is dependent on the schema language.


Annex A
(normative)
Abstract Conformance Test Suite

A.1.  Conformance Test Class: The Core

Conformance class A.1: Conformance Class ‘Core’

Identifierhttps://www.opengis.net/spec/modspec-1/1.1/conf/conf-class-core
Requirements classRequirements class 1: https://www.opengis.net/spec/modspec-1/1.1/req/req-class-core
Conformance testsAbstract test A.1: /conf/core/reqs-are-testable
Abstract test A.2: /conf/core/all-components-assigned-uri
Abstract test A.3: /conf/core/vocabulary-and-parent-req-class
Abstract test A.4: /conf/core/single-standardization-target-type
Abstract test A.5: /conf/core/test-class-single-standardization-target-type
Abstract test A.6: /conf/core/requirements-grouped
Abstract test A.7: /conf/core/requirements-test-suite-structure
Abstract test A.8: /conf/core/requirements-class-correspondence-to-conformance-classes
Abstract test A.9: /conf/core/no-optional-tests
Abstract test A.10: /conf/core/all-parameters-expressed
Abstract test A.11: /conf/core/conf-class-single-req-class
Abstract test A.12: /conf/core/con-class-dependencies
Abstract test A.13: /conf/core/imported-requirements-class
Abstract test A.14: /conf/core/all-classes-explicitly-named
Abstract test A.15: /conf/core/req-in-only-one-req-class
Abstract test A.16: /conf/core/co-dependent-requirements
Abstract test A.17: /conf/core/structure-requirements-classes
Abstract test A.18: /conf/core/requirements-and-dependencies
Abstract test A.19: /conf/core/profile-conformance
Abstract test A.20: /conf/core/core-requirements-separate
Abstract test A.21: /conf/core/general-recommendations-core
Abstract test A.22: /conf/core/req-class-not-core-stt-subtype-of-core
Abstract test A.23: /conf/core/core-and-extensions
Abstract test A.24: /conf/core/extensions-conformant-to-the-modspec
Abstract test A.25: /conf/core/restriction-of-extensions
Abstract test A.26: /conf/core/optional-requirements
Abstract test A.27: /conf/core/req-class-overlap-by-reference
Abstract test A.28: /conf/core/reqs-are-in-class

A.1.1.  Requirements are testable

Abstract test A.1

Identifier/conf/core/reqs-are-testable
RequirementRequirement 2: /req/core/reqs-are-testable
Test purpose

Validate that all the parts of a requirement are testable and that Failure to pass any part of a requirement is also a failure to pass the associated conformance test.

Test method

Inspect the document to verify the above.

A.1.2.  All components have an assigned URI

Abstract test A.2

Identifier/conf/core/all-components-assigned-uri
RequirementRequirement 3: /req/core/all-components-assigned-uri
Test purpose

Validate that each component of a standard, including requirements, requirements modules, requirements classes, conformance test, conformance modules, and conformance test classes are assigned a unique identifer or label.

Test method

Inspect the document to verify the above.

A.1.3.  Requirements on vocabulary are appropriately placed

Abstract test A.3

Identifier/conf/core/vocabulary-and-parent-req-class
RequirementRequirement 4: /req/core/vocabulary-and-parent-req-class
Test purpose

Validate that requirements on the use and interpretation of vocabulary are in the requirements class where that use or interpretation is used.

Test method

Inspect the document to verify the above.

A.1.4.  Requirements have a single target type

Abstract test A.4

Identifier/conf/core/single-standardization-target-type
RequirementRequirement 5: /req/core/single-standardization-target-type
Test purpose

Validate that each requirement class in a conformant standard has a single standardization target type.

Test method

Inspect the document to verify the above.

A.1.5.  Conformance test classes have a single target type

Abstract test A.5

Identifier/conf/core/test-class-single-standardization-target-type
RequirementRequirement 6: /req/core/test-class-single-standardization-target-type
Test purpose

Validate that all conformance tests in a single conformance test class in a conformant standard have the same standardization target type.

Test method

Inspect the document to verify the above.

A.1.6.  Requirements are organized by clauses

Abstract test A.6

Identifier/conf/core/requirements-grouped
RequirementRequirement 7: /req/core/requirements-grouped
Test purpose

Validate that requirements are grouped together in clauses (numbered sections) of the document in a strictly hierarchical manner, consistent with requirements classes.

Test method

Inspect the document to verify the above.

A.1.7.  Conformance test classes are consistent with requirements classes

Abstract test A.7

Identifier/conf/core/requirements-test-suite-structure
RequirementRequirement 8: /req/core/requirements-test-suite-structure
Test purpose

Validate that the requirements structure of the document are in a logical correspondence with the test suite structure.

Test method

Inspect the document to verify the above.

A.1.8.  Requirement classes and the Conformance Test classes in correspondence

Abstract test A.8

Identifier/conf/core/requirements-class-correspondence-to-conformance-classes
RequirementRequirement 9: /req/core/requirements-class-correspondence-to-conformance-classes
Test purpose

Validate that the requirements classes are in a one-to-one correspondence to the conformance test classes, and thus to the various certificate of conformance types possible for a candidate implementation.

Test method

Inspect the document to verify the above.

A.1.9.  No Optional Elements in Requirements classes

Abstract test A.9

Identifier/conf/core/no-optional-tests
RequirementRequirement 10: /req/core/no-optional-tests
Test purpose

Validate that a conformance class does not contain any optional conformance tests.

Test method

Inspect the document to verify the above.

A.1.10.  Certificate of conformance specifies all parameters used

Abstract test A.10

Identifier/conf/core/all-parameters-expressed
RequirementRequirement 11: /req/core/all-parameters-expressed
Test purpose

Validate that a certificate of conformance specifies all parameter values used to pass the tests in its conformance test class.

Test method

Inspect the document to verify the above.

A.1.11.  Conformance class tests only one requirements class

Abstract test A.11

Identifier/conf/core/conf-class-single-req-class
RequirementRequirement 12: /req/core/conf-class-single-req-class
Test purpose

Validate that every conformance class explicitly tests only requirements from a single requirements class.

Test method

Inspect the document to verify the above.

A.1.12.  Conformance class specifies all dependencies

Abstract test A.12

Identifier/conf/core/con-class-dependencies
RequirementRequirement 13: /req/core/con-class-dependencies
Test purpose

Validate that all conformance classes specify any other conformance class upon which they are dependent and that other conformance class shall be used to test the specified dependency.

Test method

Inspect the document to verify the above.

A.1.13.  Imported Conformance class tests are consistent with the specification

Abstract test A.13

Identifier/conf/core/imported-requirements-class
RequirementRequirement 14: /req/core/imported-requirements-class
Test purpose

Validate that if a requirements class is imported from another standard for use within a standard conformant to the ModSpec, and if any imported requirement is “optional,” then that requirement SHALL be factored out as a separate requirements class in the profile of that imported standard used in the conformant standard.
And that each such used requirements class is a conformance class of the source standard or a combination of conformance classes of the source standard or standards..

Test method

Inspect the document to verify the above.

A.1.14.  Naming consistency

Abstract test A.14

Identifier/conf/core/all-classes-explicitly-named
RequirementRequirement 15: /req/core/all-classes-explicitly-named
Test purpose

Validate that all requirements classes and all conformance test classes are explicitly named, with corresponding requirements classes and conformance test classes having similar names.

Test method

Inspect the document to verify the above.

A.1.15.  Requirements in one and only one requirements class

Abstract test A.15

Identifier/conf/core/req-in-only-one-req-class
RequirementRequirement 16: /req/core/req-in-only-one-req-class
Test purpose

Validate that each requirement in the standard is contained in one and only one requirements class. And that Inclusion of any requirement in a requirements class by a conformance class implies inclusion of all requirements in its class (as a dependency).

Test method

Inspect the document to verify the above.

A.1.16.  Co-dependent Requirements are in the same requirements class

Abstract test A.16

Identifier/conf/core/co-dependent-requirements
RequirementRequirement 17: /req/core/co-dependent-requirements
Test purpose

Validate that if any two requirements are co-dependent (each dependent on the other) then they are in the same requirements class. And if any two requirements classes are co-dependent, they have been merged into a single class.

Test method

Inspect the document to verify the above.

A.1.17.  Modularity in implementation is possible

Abstract test A.17

Identifier/conf/core/structure-requirements-classes
RequirementRequirement 18: /req/core/structure-requirements-classes
Test purpose

Validate that there is a natural structure to the requirements classes so that each may be implemented on top of any implementations of its dependencies and independent of its extensions.

Test method

Inspect the document to verify the above.

A.1.18.  Requirements follow rules of inheritance

Abstract test A.18

Identifier/conf/core/requirements-and-dependencies
RequirementRequirement 19: /req/core/requirements-and-dependencies
Test purpose

Validate that no requirements class redefines the requirements of its dependencies, unless that redefinition is for an entity derived from but not contained in those dependencies.

Test method

Inspect the document to verify the above.

A.1.19.  Profiles are expressed as sets of conformance classes

Abstract test A.19

Identifier/conf/core/profile-conformance
RequirementRequirement 20: /req/core/profile-conformance
Test purpose

Validate that the conformance tests for a profile of a standard are defined as the union of a list of conformance classes that are to be satisfied by that profile’s standardization targets.

Test method

Inspect the document to verify the above.

A.1.20.  There is a named Core requirements class

Abstract test A.20

Identifier/conf/core/core-requirements-separate
RequirementRequirement 21: /req/core/core-requirements-separate
Test purpose

Validate that every standard defines and identifies a core set of requirements as a separate requirements class with a corresponding conformance class.

Test method

Inspect the document to verify the above.

A.1.21.  General conditions are in the core

Abstract test A.21

Identifier/conf/core/general-recommendations-core
RequirementRequirement 22: /req/core/general-recommendations-core
Test purpose

Validate that all general recommendations for a standard are in the core.

Test method

Inspect the document to verify the above.

A.1.22.  Every extension has a consistent target type

Abstract test A.22

Identifier/conf/core/req-class-not-core-stt-subtype-of-core
RequirementRequirement 23: /req/core/req-class-not-core-stt-subtype-of-core
Test purpose

Validate that every requirements class in a standard, with the exception of the core, has a standardization target type which is a subtype of that of the core. And that every requirement class, with the exception of the core, has the core as a direct dependency.

Test method

Inspect the document to verify the above.

A.1.23.  A standard is a core plus some number of extensions

Abstract test A.23

Identifier/conf/core/core-and-extensions
RequirementRequirement 24: /req/core/core-and-extensions
Test purpose

Validate that each standard conformant to the ModSpec consists of a core and some number of requirements classes defined as extensions to that core.

Test method

Inspect the document to verify the above.

A.1.24.  Conformance to this ModSpec is required for any extensions

Abstract test A.24

Identifier/conf/core/extensions-conformant-to-the-modspec
RequirementRequirement 25: /req/core/extensions-conformant-to-the-modspec
Test purpose

Validate that a standard conformant to the ModSpec requires all conformant extensions to be conformant to the ModSpec.

Test method

Inspect the document to verify the above.

A.1.25.  Future extensions cannot be restricted

Abstract test A.25

Identifier/conf/core/restriction-of-extensions
RequirementRequirement 26: /req/core/restriction-of-extensions
Test purpose

Validate that a standard conformant to the ModSpec never restricts in any manner future, logically valid extensions of its standardization target types.

Test method

Inspect the document to verify the above.

A.1.26.  Optional requirements are organized as requirements classes

Abstract test A.26

Identifier/conf/core/optional-requirements
RequirementRequirement 27: /req/core/optional-requirements
Test purpose

Validate that the only conditional (optional) requirements acceptable in a standard conformant with the ModSpec are expressed as a list of conformance classes to be passed.

Test method

Inspect the document to verify the above.

A.1.27.  Requirements classes intersect overlap only by reference

Abstract test A.27

Identifier/conf/core/req-class-overlap-by-reference
RequirementRequirement 28: /req/core/req-class-overlap-by-reference
Test purpose

Validate that the common portion of any two requirements classes consist only of references to other requirements classes.

Test method

Inspect the document to verify the above.

A.1.28.  Requirements are in class

Abstract test A.28

Identifier/conf/core/reqs-are-in-class
RequirementRequirement 1: /req/core/reqs-are-in-class
Test purpose

Validate that each requirement in a standard is associated with exactly one requirements class.

Test method

Inspect the document to verify the above.


Annex B
(normative)
OGC Only: Changes required in the OGC Standards

NOTE:  The following is for OGC Standards and Abstract Specifications only: No changes are required to existing OGC Standards

B.1.  New OGC standards and revisions to existing OGC standards

Any new standard or major revision of an existing standard SHALL comply with the ModSpec in the structure of its internal models and its conformance tests.

Failure to conform by a candidate standard to the ModSpec should be specifically noted and reasons given for such non-compliance in the conformance clauses of any new or new version of such candidate standards.

The adoption of such documents not compliant with the ModSpec SHALL be considered as an authorized exception to the requirements of the ModSpec by the approporiate authority, such as the OGC or ISO. An exception to the rules of the authority such as the OGC will require a two-thirds (2/3) majority (“Robert’s Rules”) or as specified in the authorities Policy and Procedures for an exception to procedure. In the OGC, a similar vote is required within the Planning Committee or as specified in any Policy and Procedure document used by this committee.


Annex C
(informative)
ModSpec UML Model, Semantics, and Definitions

C.1.  Semantically ordered definitions

Clause 4 formally defines the terms used in the conformance tests in alphabetical order. It may be easier to understand the more significant terms in the following less formal definitions arranged in a bottom-up order:

  1. a standardization target type is a type of entity about which a standard is written. An instance of a standardization target type is a standardization target. A standard may address multiple targets in separate conformance classes.

  2. a requirement is a statement of a condition to be satisfied by a single standardization target type, and it must be stated in “normative” language.

  3. a conformance test checks if a set of requirements are met (pass) or not met (fail) by a standardization target.

  4. all conformance tests are graded as pass or fail against each instance of the standardization target type.

  5. a requirement is associated to one conformance test.

  6. a recommendation is a suggestion and is not associated to any conformance test.

  7. a requirements class is a set of one or more requirements all with the same standardization target type.

  8. a conformance (test) class is a collection of conformance tests that are associated to and only to the requirements in a corresponding requirements class.

  9. a conformance (test) module is a reusable collection of related conformance test classes.

  10. a conformant implementation is a standardization target that has successfully passed all tests in a specified conformance (test) class and received a certificate of conformance.

  11. the Core requirements class of a standard is the minimal set of requirements which must be supported by all conformant implementations . If a standard addresses multiple standardization target types, it may have a core for each target type .

  12. an extension of a requirements class is an additional requirements class (the extension) that adds additional requirements to the first requirements class (the base requirements class being extended). The extension is said to be dependent on the base. Any conformance (test) class must identify all its dependencies during the execution of conformance tests against a candidate standardization target.

C.2.  UML Model

 

Figure C.1

Figure 1 represents a UML model consistent with the model described in Clause 8 of this document.


Annex D
(normative)
Acknowledgements

The following OGC Members were key contributors to Version 1 of the ModSpec

PersonOrganization Represented
Simon CoxCSIRO
David DankoEsri
James GreenwoodSeiCorp, Inc.
John R. HerringOracle USA
Andreas MatheusUniversity of the Bundeswehr — ITS
Richard PearsallUS National Geospatial-Intelligence Agency (NGA)
Clemens Porteleinteractive instruments GmbH
Barry ReffUS Department of Homeland Security (DHS)
Paul ScarponciniBentley Systems, Inc.
Arliss WhitesideBAE Systems — C3I Systems

Bibliography

To preserve a unique numeric identifier for all documents listed as references in this standard, the numbering of references in this annex is continued from the list of normative reference in Clause 3.

[1]  ISO/IEC: ISO/IEC 9075:2003, ISO/IEC JTC 1, ISO/IEC 9075:2003 — Information Technology — Database Languages — SQL.. ISO, IEC (2003).

[2]  ISO/IEC: ISO/IEC TR 10000, ISO/IEC TR 10000: Information Technology — Framework and taxonomy of International Standardized Profiles. ISO, IEC

[3]  ISO/IEC: ISO/IEC 13249-3:2006, Information technology — Database languages — SQL multimedia and application packages — Part 3: Spatial. International Organization for Standardization, International Electrotechnical Commission, Geneva (2006). https://www.iso.org/standard/38651.html.

[4]  W3C: W3C xmlschema11-1, W3C XML Schema Definition Language (XSD) 1.1 Part 1: Structures. World Wide Web Consortium http://www.w3.org/TR/xmlschema11-1/.

[5]  W3C: W3C xmlschema11-2, W3C XML Schema Definition Language (XSD) 1.1 Part 2: Datatypes. World Wide Web Consortium http://www.w3.org/TR/xmlschema11-2/.