The key words must, must not, should, should not and may are to be interpreted as described in RFC 2119.
The data specification will define terms (classes and properties) to describe and relate the entities below:
e.g. William Shakespeare
e.g. a social, commercial or political structure
e.g. member of the XYZ Party
e.g. Member of Parliament for Avalon
e.g. a telephone number, email address, postal address, contact form, etc.
e.g. "That the House do now proceed to the Orders of the Day."
e.g. a vote to pass a bill
e.g. 128 votes in favor of passage
e.g. John Q. Public voted in favor of passage
e.g. a country, city, ward, etc.
e.g. a legislative session, a meeting, a hearing, etc.
e.g. a representative addressing the legislature
1. For example, it must not use vCard's fn
where this specification's name
would suffice.
The data specification should:
Allow the use of imprecise dates [issue 7].
Shakespeare was born in April 1564.
Have a permanent, unique identifier for each instance of the class.
e.g. a URL, an integer or a hex string.
Each resource should have metadata properties for:
time of creation
The electronic resource for Shakespeare was created on May 1, 2000.
time of modification
The electronic resource for Shakespeare was modified on June 15, 2005.
references to sources of information from which the resource is derived
e.g. a book, a website or other reference material.
The subdocuments in a later section add more requirements.
Following a survey of existing specifications, the data specification reuses terms from:
Publisher | Name | Prefix |
---|---|---|
Bibliographic Framework Initiative | BIBFRAME Vocabulary | bf |
BIO: A vocabulary for biographical information | bio |
|
W3C | Contact: Utility concepts for everyday life | con |
DCMI | DCMI Metadata Terms | dcterms |
FOAF Vocabulary Specification | foaf |
|
GeoNames | GeoNames Ontology | gn |
ISA | ISA Programme Location Core Vocabulary | locn |
OSCA Foundation | NEPOMUK Calendar Ontology | ncal |
Open Data Institute | Open Data Rights Statement Vocabulary | odrs |
W3C | The Organization Ontology | org |
ISA | ISA Programme Person Core Vocabulary | person |
W3C | RDF Schema | rdfs |
W3C | Schema.org | schema |
W3C | SKOS Simple Knowledge Organization System | skos |
IETF | vCard Format Specification | vcard |
The inventory of terms from the surveyed specifications is captured in an appendix.
The subdocuments in the next section describe specific standard reuse. Some impose cardinality and range restrictions on the properties of the above specifications, in order to allow for a simpler JSON serialization.
Each of the following subdocuments describes a class and its properties:
The structure of each subdocument is:
The following diagram succinctly describes the relationships among the people and organizations classes. All arrows are one-to-many relationships.
The following table defines the metadata properties and maps each term to an RDF URI2:
Term | Mapping | Definition |
---|---|---|
time of creation | dcterms:created |
The time at which a resource was created |
time of modification | dcterms:modified |
The time at which a resource was modified |
source document | dcterms:source |
A URL to, or a citation of, a document from which the resource is derived |
2. If you do not use RDF, you may ignore the mapping.
The data specification defines two serializations: RDF and JSON. RDF is a technology for data modeling, with a variety of syntax notations and serialization formats, including XML, JSON (via JSON-LD), HTML (via RDFa or RDFa Lite), and N3 (a superset of the simpler Turtle and N-Triples formats). JSON is a text-based, language-independent interchange format for structured data, derived from the JavaScript scripting language.
Given that the same RDF resource can be serialized in many different ways using JSON-LD, JSON Schema are provided below to ensure all JSON serializations look alike, to maximize interoperability. A JSON-LD serialization will nonetheless differ from a plain JSON serialization in a few ways:
@context
, @type
and @id
keywords.email
property of a Person
must be a ‘mailto’ URI.role
property of a Membership
, Post
, Vote
or Speech
must be a URI or blank node for a org:Role
.classification
property of an Organization
or Motion
must be a URI or blank node for a skos:Concept
.classification
property of an Area
must be a URI or blank node for a gn:Code
, which is a subclass of skos:Concept
.type
property of a ContactDetail
must be a node type, i.e. an IRI.scheme
property of an Identifier
must be a value type, i.e. an IRI.requirement
property of a Motion
must be a URI or blank node for a opengov:Requirement
.result
property of a Motion
, VoteEvent
or GroupResult
must be a URI or blank node for a opengov:Result
.location
property of an Event
must be a URI or blank node for a schema:Place
or schema:PostalAddress
.status
property of an Event
must be a URI or blank node for a schema:EventStatusType
.audio
property of a Speech
must be a URI or blank node for a schema:AudioObject
.video
property of a Speech
must be a URI or blank node for a schema:VideoObject
.links
and sources
properties must be an array of URIs, not an array of link objects.*_id
properties:JSON-LD | JSON |
---|---|
@id |
id |
area |
area_id |
audience |
audience_id |
creator |
creator_id |
event |
event_id |
group |
group_id |
legislative_session |
legislative_session_id |
on_behalf_of |
on_behalf_of_id |
organization |
organization_id |
pair |
pair_id |
parent |
parent_id |
person |
person_id |
post |
post_id |
vote_event |
vote_event_id |
voter |
voter_id |
Dates must be stored in UTC. To allow for imprecise dates, the use of ISO 8601:2004 reduced dates3 is recommended. In RDF, the dcterms:W3CDTF
datatype is recommended.
Additional serialization details are given in the subdocuments in the previous section.
3. Consult the list of reduced date formats. XML Schema supports reduced dates such as YYYY
and YYYY-MM
.
As described in the conformance section, JSON serializations must validate against the JSON Schema (draft v3) below. The terms use snake case (birth_date
) instead of camel case (birthDate
), due to its popularity among ORMs.
JSON differences from other RDF serializations:
created_at
is used instead of created
, due to its popularity among ORMs.updated_at
is used instead of modified
, due to its popularity among ORMs.sources
is used instead of source
and is serialized as an array of link objects.The following examples use a Person document to demonstrate the metadata properties.
When serializing to JSON, you may relate entities by linking and/or embedding relations.
Linking | Embedding | Inverse |
---|---|---|
area_id |
area |
memberships , organizations , posts |
audience_id |
audience |
|
creator_id |
creator |
motions , speeches |
event_id |
event |
speeches |
group_id |
group |
|
legislative_session_id |
legislative_session |
motions , vote_events |
member |
memberships |
|
motion_id |
motion |
vote_events |
on_behalf_of_id |
on_behalf_of |
|
organization_id |
organization |
memberships , motions , posts , vote_events |
pair_id |
pair |
|
parent_id |
parent |
children |
person_id |
person |
memberships |
post_id |
post |
memberships |
vote_event_id |
vote_event |
votes |
voter_id |
voter |
votes |
contact_details
, counts
, group_results
, identifiers
, links
, other_names
and sources
are embedded only.
The first option is straight-forward and is used in the examples in the subdocuments above.
To embed an organization’s posts on its Organization document, add a plural posts
property to that document, whose value is an array of Post documents. Since the organization_id
property on each Post subdocument is redundant with the id
property on the Organization document, you may omit the organization_id
property from each subdocument.
For the inverse relation, i.e. to embed a post’s organization on its Post document, add a singular organization
property to that document, whose value is the Organization document. You may omit the organization_id
property from the Post document, since it is redundant with the id
property on the Organization document.
In the case of an organization’s memberships, an organization may both have members and be a member of other organizations. As such, the organization_id
property should be present on each subdocument, to avoid ambiguity.
At the risk of stating the obvious, you must not embed an entity in another unless the two are related. You may embed to any depth, but you must not embed recursively, e.g. embed an organization in a post in an organization.
The JSON Schema above reuse the following subschema for specific properties.
With respect to standard reuse, the term scheme
is used in the Organization ontology, SKOS and XBRL.
JSON differences from other RDF serializations:
With respect to standard reuse, note
comes from skos:note
.
JSON differences from other RDF serializations:
note
property adds a note (e.g. “Wikipedia page”) to the external link.If a name object sets an end_date
property, it represents a former name. With respect to standard reuse, the terms start_date
and end_date
are used in the Participation ontology and others, and note
comes from skos:note
.
For political groups, the range of the group
property will be an organization. For ethnic groups, as in the House of Peoples, it will be an object (a foaf:Group) with a name
(a foaf:name).
classification
from Event to VoteEvent.schema:dissolutionDate
instead of opengov:dissolutionDate
.name
is no longer a required property in other_name.json
.object_id
property from the Motion class’ JSON Schema.party
to group
in the Vote class.schema:validUntil
instead of schema:validThrough
, for a meaning common to UK and US English.opengov:OtherName
.name
and label
are no longer required properties in the JSON Schema.schema:validFrom
and schema:validThrough
instead of org:memberDuring
.