SURF and Semantics

SURF is based on the Uniform Resource Framework (URF), a semantic data model framework.

Uniform Resource Framework (URF)

URF is like the Resource Description Framework (RDF)—only less complicated and more consistent.

SURF requires absolutely no knowledge of URF!

You can use SURF like a better JSON, ignoring URF.

SURF gives you a semantic data model for free!

Every SURF “thing” represents an URF resource.

  • example-User (SURF type)
  • crypto-salt (SURF property)
  • "foobar" (SURF string literal)

Every URF resource can be identified by a tag IRI.

Identifying a SURF Object by Tag

  name = "Jane Doe"

Every SURF handle represents an URF tag.

Namespace prefixes represent segments relative the IRI
example-User (SURF type)
crypto-salt (SURF property)

Even SURF literals have URF resource tags.

SURF literals form tag IRIs by their type IRI, with the lexical representation as a fragment identifier.
"foobar" (urf-String)
%Zm9vYmFy (urf-Binary)

Every URF resource can be described.

Describing a SURF Object

  name = "Jane Doe"

Describing an URF Property in SURF

  urf-description = "Cryptographic hash function extra input."
  urf-domain = |<>|
  urf-range = |<>|

Think: crypto-salt is an urf-Property that can be assigned to any resource (its domain) and has values (its range) of type urf-Binary.

Describing an URF Property in TURF

  urf-description = "Cryptographic hash function extra input."
  urf-domain = urf-Resource
  urf-range = urf-Binary

TURF is a separate format for storing URF data.

TURF is superset of SURF.

SURF prohibits describing named types directly to prevent confusion.

No need to know more about TURF for now.

SURF has no “schema”.

There is no need to restrict the SURF syntax.

Define an URF ontology of the data model.

A semantic description of a vocabulary of types and properties; their meanings; and how they can be used.

Describing example-User in an URF Ontology

  urf-of = (
      urf-description = "User name."
      urf-domain = |<>|
      urf-range = |<>|