HyperObjects (you can think of them as URI references in an RDF graph) play a central role in Hypernotation. They can represent any thing (resource), and can be implemented in two ways: as properties [*] of other hyperObjects, or as top hyperObjects.

In the image above, the hyperObject http://chucknorris.com/data__/chuck [***] is an example of a top hyperObject [**], while e.g. http://chucknorris.com/data__/chuck/foaf__name and http://chucknorris.com/data__/chuck/foaf__based_near are its properties. Furthermore, http://chucknorris.com/data_/chuck/foaf_based_near has its own properties and so on.
Default data locations
How to organize/model data? It depends on the underlying model, i.e. triples that describe it. The data model differs from the classical RDF in that every node has a URI, and the triple structure is written in this URI using the RDF URI pattern in which two types of segments are combined (CURIE and key segments) to produce chained triples.
Hypernotation encourages the creation of nested hyperNodes, as opposed to publishing a “flat” graph. Such a practice involves a small number of top hyperObjects, while the other hyperObjects are organized in different levels of a hierarchy.
/data__
The recommended (parent) location for the top hyperObjects is http://website.com/data__, so that the location of a top hyperObject has the form of http://website.com/data__/something, where the last segment something is called a key segment.
A hyperNode identified by a URI whose last segment is a key segment is an instance or a subclass of its parent node. Several key segments can be connected in a row, as shown in the following Turtle example:
<http://website.com/data__/class/subclass/instance>
rdf:type <http://website.com/data__/class/subclass> .
<http://website.com/data__/class/subclass>
rdfs:subClass <http://website.com/data__/class> .
<http://website.com/data__/class>
rdfs:subClass <http://website.com/data__> .
http://website.com/data__ ends with CURIE segment (data:) so this is where the taxonomy stops.
Possible real-world examples following this pattern are:
http://website.com/data__/movie/3221http://website.com/data__/actor/1232http://website.com/data__/product/book/124
This is a shorthand way of representing is-a relations. The first example, for instance, can be expressed with the following (rather cumbersome) URI:
http://website.com/data__/is___rdfs__subClassOf___of/movie/is___rdf__type___of/3221
On the other hand, has-a properties can be represented using dcterms__hasPart, for instance:
http://website.com/data__/product/book/124/dcterms__hasPart/chapter/1
Hypernotation provides a way to abstract away the specific property using a special kind of CURIE that doesn’t have a name part. Using this method, we can replace dcterms__hasPart with has__, and make the URI more readable:
http://website.com/data__/product/book/124/has__/chapter/1
/schema__
Vocabularies (ontologies) are published on the http://website.com/schema__. The namespace of a particular ontology has the path http://website.com/schema__/ont, while properties and classes would be located on http://website.com/schema__/ont/propertyName and http://website.com/schema__/ont/className respectively. The ontology published on the website (and any other ontology) can be “declared” using the prefix__ location/property.
/prefs__
http://website.com/prefs__ is an optional hyperArray that can contain preferences regarding different aspects of Hypernotation. For instance, if default locations are not used, one can define the data location he uses on the prefs__ path.
The prefs__ location contains the references to http://website.com/prefs__/data and http://website.com/prefs__/schema. Thus, if someone wants to publish data on http://website.com/resource, the hyperReference htpp://website.com/prefs__/data would contain the following hyperlink:
<a href="http://website.com/resource”>default data location</a>
Therefore, prefs__ is mandatory only if other, non-default locations are used. If http://website.com/prefs__ does not exist, i.e. returns HTTP "404 Not found", one (a software agent) can assume that the default paths (locations) data__ and schema__ are used.
Currently there is no ontology for this; instead conventions are used. This basically means that there is one general property abstracted using CURIE prefs__ (prefs:), while the semantics is implicit and realized using key segments. For instance:
<http://website.com> prefs: <http://website.com/prefs__/data> .
<http://website.com/prefs__/data> owl:sameAs <http://website.com/schema>.
<http://website.com> prefs: <http://website.com/prefs__/schema> .
<http://website.com/prefs__/schema> owl:sameAs <http://website.com/schema>.
<http://website.com> prefs: <http://website.com/prefs__/delimiter> .
<http://website.com/prefs__/delimiter> rdf:value "__".
The key segments are bolded and represent conventions that compensate for the lack of the distinct properties representing “hasDataLocation”, “hasSchemaLocation” and “usesDelimiter”. They can be regarded as a sort of functions, or methods in the OO sense, where the property can have different arguments, as shown in the following table.
| Object-Oriented model | Hypernotation |
|---|---|
| website.prefs(“data”) | http://website.com/prefs__/data |
| website.prefs(“schema”) | http://website.com/prefs__/schema |
| website.prefs(“delimiter”) | http://website.com/prefs__/delimiter |
Conventions are an important part of Hypernotaiton. Conventions can be created, tested, adjusted or eventually removed if don’t work, allowing flexibility needed for the evolution of the Web of data to happen. This way a balance between the semantics a more relaxed approach to modeling and expressing is provided. In a wider sense, this balance is between two opposed principles: interoperability and evolvability.
Smaller communities can rely on conventions they understand, perfecting their terminology over time, while eventually “the language” they use can be formalized on the global scale, if there is a demand.
/prefix__
The fundamental difference between hyperNodes and other web resources is the use of URIs that encode RDF triples. The predicates of triples are written in the CURIE form, which makes defining prefixes used in the CURIE names necessary. A CURIE enables writing a URI in the form of prefix:localName.
In Hypernotation, the __ (double underscore [***]) is used instead of :, and it mustn’t be included in the prefix or name part of a CURIE. The __ delimiter can be placed in the middle, at the beginning or end of the segment, resulting in three possible variants of CURIE, that will be discussed later in this post.
Ontologies used for describing the data are declared on the default http://website.com/prefix__ location. It is a hyperArray containing a list of defined prefixes used in CURIEs that are part of hypernodes’ URIs. CURIE prefix1__someName (prefix1:someName) contains the prefix prefix1 which replaces the namespace URI defined in the http://website.com/prefix__/prefix1 path.
http://website.com/prefix__ may also be realized as a hyperReference pointing to the prefix__ hyperArray on another website that already declared the same prefixes. For example, if Chuck wants to use Steven’s prefix definitions, http://chucknorris.com/prefix__ would contain a hyperlink or do a HTTP redirect to http://stevenseagal.com/prefix__, that returns the list of prefixes, one of them being foaf (http://stevenseagal.com/prefix__/foaf).
CURIE magic
In addition to the general form prefix__localName, Hypernotation makes use of the two “special” versions of CURIE syntax in the form of __localName (without prefix) and prefix__ (without localName). Using the more common : delimiter, the two would write :localName and prefix: respectively.
__localName
In the case of __localName (:localName), the prefix is omitted, meaning that the default prefix is assumed. This approach makes CURIEs shorter and more friendly. It’s often used in the existing RDF notations such as Turtle ("@PREFIX : namespace") or RDF/XML (xmlns="namespace" attribute).
Since in the context of Hypernotation the prefix can’t be simply omitted, the default prefix is described with the key segment default on the path http://website.com/prefix__/default.
Using CURIEs without prefixes can make publishing easier. A possible use case is when the data is described with properties that are defined on the same website and not widely used. Another scenario would be the case when the website uses just one ontology, in which case prefixes seem like unnecessary burden.
On the other hand, in Hypernotation prefixes are regarded as relatively stable keywords accepted by the majority, and, having that they are included in URIs, it’s important that they are used consistently. Also, the predictability of URIs and the “hackability” (ability to guess and combine URI parts) are important.
prefix__
The second form, prefix__ (prefix:) is the CURIE with the local name missing. In this case the prefix is mapped to the full URI of the property instead of only a namespace. For example, the prefix label__ (label:) would be defined on the hyperReference identified by the http://website.com/prefix__/label URI, and pointing to http://www.w3.org/2000/01/rdf-schema#label.
In Turtle, such a CURIE would be defined and used as follows:
@PREFIX label: <http://www.w3.org/2000/01/rdf-schema#label> .
:a label: "some label" .
The prefix__ CURIE form is used to create properties of particular importance for Hypernotation, i.e. its “reserved keywords” such as prefix__, schema__, data__ and others. This form is handy because the CURIE is not determined in any way, so the naming is flexible.
CURIEs can be minted without actual property URIs, enabling thinking on the more abstract level, not constrained by specific ontologies and properties. Because they are used as convention and their meaning is implicit, these properties don’t need to be declared in the prefix__ hyperArray.
Another case where this form of CURIE might be useful is when dealing with properties that stand out due their importance and frequency of using, such as rdf:value, owl:sameAs, rdf:type, rdfs:label, rdfs:comment and others. prefix__ form could allow shorter and more intuitive names freed from various prefixes, for example (respectively): value__, is__, type__ (or a__), label__, comment__ and so on. The most frequently used can gain the “convention” status, for instance is__ could be assumed to mean owl:sameAs without requiring to declare the owl prefix for a single property used.
An additional benefit this form of CURIE brings is due to the fact it can’t be written in the crappy RDF/XML format (because XML tags must have names besides prefixes), making RDF/XML a non-option in the context of Hypernotation. Finally, the flexibility of CURIEs allow for a single, consistent method of dealing with all kinds of “special”, or “reserved” words, compared to other, overcomplicated approaches.
Basic structure

The above image shows the recommended (default) hyperNodes published on http://website.com. The arrows show the typed links and hyperlinks (owl:sameAs) between hyperNodes. Therefore, a basic Hypernotation structure is made up of the following triples:
<http://website.com> prefix: <http://website.com/prefix__/prefix1> ,
<http://website.com/prefix__/prefix2> ,
<http://website.com/prefix__/default> ;
data: <http://website.com/data__> ;
schema: <http://website.com/schema__> ;
prefs: <http://website.com/prefs__/data> ,
<http://website.com/prefs__/schema> .
<http://website.com/prefs__/data>
owl:sameAs <http://website.com/data__> .
<http://website.com/prefs__/schema>
owl:sameAs <http://website.com/schema__> .
This example covers many possibilities and perhaps looks a bit complex. However, in most cases only the hyperNodes http://website.com/prefix__ and http://website.com/data__ are needed. prefs__ is the only one that can be considered mandatory, in the case when different locations are used for other hyperNodes. It’s maybe also a good idea that prefix__ is always mandatory as well, because that way the testing if a website publishes data using Hypernotation would be quick and easy.
* properties in a sense of OO programming, not RDF
** Strictly speaking, http://chucknorris.com/data_/chuck is also a property of the (root) http://chucknorris.com, so it can be more precisely regarded a top hyperObject in the context of published data.
*** So far on the blog, a single underscore (_) has been used as a delimiter. However, this was a bad idea because an underscore is used too often to serve as a reserved keyword. Two underscores (__) is an uglier, but better solution. The first image uses a single underscore, so don’t be confused.






What about hyperReferences? As explained above, a hyperReference is a hyperObject described with the 














