Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Consider re-organizing Reference section #1075

Open
jpmckinney opened this issue Sep 18, 2020 · 8 comments
Open

Consider re-organizing Reference section #1075

jpmckinney opened this issue Sep 18, 2020 · 8 comments
Assignees
Labels
Focus - Documentation Includes corrections, clarifications, new guidance, and UI/UX issues
Milestone

Comments

@jpmckinney
Copy link
Member

jpmckinney commented Sep 18, 2020

  • The Reference section doesn't offer a clear path for users. Its landing page doesn't sign-post to all sub-pages, so some readers might never read, e.g. the Identifiers page.
  • Release Reference is very long and will get longer as more fields/objects are added. In a much larger schema like Schema.org, they split each object into its own page, for example: https://schema.org/docs/full.html
  • The long tables are useful when you are looking up a term, but otherwise break up the page and make it hard to scan. It might be better to have at most one long table per page, and for that table to be at the end (like on Schema.org).

The documentation of APIs with a lot of methods and/or objects can also serve as inspiration: for example, Google's and GitHub's developer docs.

@jpmckinney jpmckinney added the Focus - Documentation Includes corrections, clarifications, new guidance, and UI/UX issues label Sep 18, 2020
@jpmckinney jpmckinney added this to the 1.2.0 milestone Sep 18, 2020
@jpmckinney
Copy link
Member Author

In terms of re-architecture, we might consider:

  • Lead with the thematic content, starting with one page per theme
  • Provide the Schema/Codelist references, with one page per object/codelist, so that there is only one big table per page. Presently, I believe a lot of users haven't read the explanatory content above each table, because it's very easy to miss.
  • Provide the schema browsers in one section, with three sub-pages.
  • Provide the package-related content in one section, with sub-pages as needed.

@jpmckinney
Copy link
Member Author

On each sub-schema page, we can implement a new directive to list where that sub-schema is referenced from (with a link to the relevant page), e.g. the Document sub-schema page would like to the Tender, Award and Contract pages.

@jpmckinney jpmckinney self-assigned this Oct 24, 2020
@jpmckinney jpmckinney added Focus - Packages Relating to release packages and record packages and removed Focus - Packages Relating to release packages and record packages labels Oct 24, 2020
@duncandewhurst
Copy link
Contributor

Presently, I believe a lot of users haven't read the explanatory content above each table, because it's very easy to miss.

Strongly agree!

@stevieflow
Copy link

Hi @jpmckinney @duncandewhurst

Just wanted to offer in this mix the example of the IATI docs, whereby there's a specific / persistent URL for each and every "data field" of the standard - eg

https://iatistandard.org/en/iati-standard/203/activity-standard/iati-activities/iati-activity/transaction/sector/

This then included left-hand-side navigation that places you in situ / context

I have always found this very useful, both in terms of specificity and navigability, of the schema/standard

Thanks

@jpmckinney
Copy link
Member Author

Thank you for sharing!

I can see the utility given that XML elements have attributes that require documentation.

Since OCDS is JSON, there is not much more to add beyond the field title, type and description, so pages for each field would be very short. I think there's more utility to seeing all an object's fields on one page.

@odscjen
Copy link
Contributor

odscjen commented Feb 7, 2024

A few specific issues in this section:

  • "Date" is included under the "Subschema reference" heading but it's not a subschema, it's a data format.
  • "Document" refers only to the different stages the documents array can be attached, and "Milestone" refers only to the stage objects it can be included in, but these are the same type of subschema used in arrays so it might be clearer to a user to describe their use in the same way. "Item",
  • "Implementation" has sub-headings for "Milestones" and "Documents" that reference the relevant sections under "Subschema reference" but none of the other high level stages include these sub-headings, despite them being available in those objects (i.e. tender, Award and Contract).
  • "Amendment" is under the "Release structure" heading but would be better under the "Subschema reference" heading as its describing a subschema that is referenced in multiple places in the schema.
  • "RelatedProcess" is under "Subschema reference" but would be better under "Release structure" as it only appears in the one place in the schema (outside of extensions).

@duncandewhurst
Copy link
Contributor

I've been looking at the reference documentation while working on other issues and would like to propose a new content architecture based on the proposal in #1075 (comment), with the following changes:

Navigation structure

I propose the following navigation structure:

Ordering and grouping links on the subschema landing page

As in #1405, I think it makes sense to order the subschema pages alphabetically in the navigation. For the links to the individual pages from the subschema landing page, I propose the following grouping and ordering.

Process

  • Planning
    • Budget
    • Project
  • Tender
  • Award
  • Contract
  • Implementation
  • Amendment
  • Milestone

Items

  • Item
  • ImmediateContainer

Organizations

  • Organization
  • OrganizationReference
  • ContactPoint

References

  • Document
  • Classification
  • Identifier
  • SimpleIdentifier
  • RelatedProcess
  • Link

Quantitative

  • Value
  • Quantity
  • Unit
  • SimpleUnit

Spatial

  • Address
  • Location

Temporal

  • Period

Type and format documentation

As Jen noted above, the reference documentation for Period includes a date subheading that describes OCDS's use of the date-time format. There are many date-time fields outside of the Period object, so I think it makes sense to describe the format elsewhere.

I think it would also be useful to describe the other types and string formats used in the schema in the reference documentation. That way support staff can link implementers to the documentation for a particular type to help them resolve errors in their publication. The documentation could also be linked from the release and subschema references pages. Ideally, the jsonschema directive could link to the documentation for each type and format from the type and format columns of the tables it generates. However, that would require an update to the directive.

I considered a more general reference page describing all the validation constraints used in the schema, but I think that would essentially mean reproducing the JSON Schema keyword documentation.

I propose a single page with a subheading, description and example for each type and format, e.g.

Types and formats

The OCDS schema specifies the data type of each field. The schema also specifies the format of some string (text) fields. This page describes each of the types and string formats used in the schema.

Array

A list of ordered elements of a specific type or types, e.g. tag is an array of strings:

{
	"tag": [
		"tender",
		"award"
	]
}

Boolean

A true or false value, e.g.

{
	"tender": {
		"hasEnquiries": false
	}
}

Integer

An integral (whole) number, e.g.

{
	"tender": {
		"numberOfTenderers": 3
	}
}

Null

A null value, e.g.

{
	"tender": {
		"title": null
	}
}

To learn about the use of null values in OCDS, see updates and deletions.

Number

An integral (whole) or floating point (decimal) number, e.g.

{
	"tender": {
		"value": {
			"amount": 12750.70
		}
	}
}

Object

A map of key-value pairs, e.g. tender is an object:

{
	"tender": {
		"title": "Office furniture",
		"description": "The ministry aims to purchase..."
	}
}

String

A string of text, e.g.

{
	"tender": {
		"title": "Office furniture"
	}
}

OCDS specifies a format for some string fields.

date-time

An ISO8601 date-time, following RFC3339 §5.6, e.g.

{
	"date": "2025-01-01T00:00:00Z"
}

(Content from Date)

uri

A universal resource identifier (URI), according to RFC3986, e.g.

{
	"planning": {
		"budget": {
			"uri": "https://example.com/budgets/1234"
		}
	}
}

Outstanding questions:

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Focus - Documentation Includes corrections, clarifications, new guidance, and UI/UX issues
Projects
Status: To do: Reference
Development

No branches or pull requests

4 participants