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

|<urn:uuid:bb8e7dbe-f0b4-4d94-a1cf-46ed0e920832>|*example-User:
  name = "Jane Doe"
;

Every SURF handle represents an URF tag.

Namespace prefixes represent segments relative the IRI https://urf.name/.
example-User (SURF type)
https://urf.name/example/User
crypto-salt (SURF property)
https://urf.name/crypto/salt

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)
https://urf.name/urf/String#foobar
%Zm9vYmFy (urf-Binary)
https://urf.name/urf/Binary#Zm9vYmFy

Every URF resource can be described.

Describing a SURF Object

|<urn:uuid:bb8e7dbe-f0b4-4d94-a1cf-46ed0e920832>|*example-User:
  name = "Jane Doe"
;

Describing an URF Property in SURF

|<https://urf.name/crypto/salt>|*urf-Property:
  urf-description = "Cryptographic hash function extra input."
  urf-domain = |<https://urf.name/urf/Resource>|
  urf-range = |<https://urf.name/urf/Binary>|
;

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

crypto-salt*urf-Property:
  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.

ontology
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-Ontology:
  urf-of = (
    |<https://urf.name/example/name>|*urf-Property:
      urf-description = "User name."
      urf-domain = |<https://urf.name/example/User>|
      urf-range = |<https://urf.name/urf/String>|
    ;
    …
  )
;
Experimental.