URIs! (or IRIs, e.g., in RDFa 1.1)
That’s one of the primary qualities of RDF, and it makes Linked Data possible, as coined by Tim Berners-Lee (emphasis mine):
The Semantic Web isn't just about putting data on the web. It is about making links, so that a person or machine can explore the web of data.
Like the web of hypertext, the web of data is constructed with documents on the web. However, unlike the web of hypertext, where links are relationships anchors in hypertext documents written in HTML, for data they links between arbitrary things described by RDF
From my answer to a question about the Semantic Web:
Use RDF (in the form of a serialization format of your choice) and define URIs for your entities so that you and other people can make statements about them.
So give all your "entities" an URI and use it as subject resp. object in RDF triples. Note that you may not want to use the same URI which your web pages have, as it would make it hard to distinguish between data about the web page and data about the thing represented by the web page (see my answer describing this in more detail).
So let’s say your website has these two pages:
http://example.com/event/42
(about the event 42, i.e., the HTML page)
http://example.com/location/51
(about the location 51, i.e., the HTML page)
Using the hash URI method, you could mint these URIs:
http://example.com/event/42#it
(the event 42, i.e., the real thing)
http://example.com/location/51#it
(the location 51, i.e., the real thing)
Now when you want to use the Schema.org vocabulary to give information about your event, you may use resource
to give its URI:
<!-- on http://example.com/event/42 -->
<article resource="#it" typeof="schema:Event">
<h1 property="schema:name">Event 42</h1>
</article>
And when you want to specify the event’s location (using Place), you could use the URI of the location:
<!-- on http://example.com/event/42 -->
<article about="#it" typeof="schema:Event">
<h1 property="schema:name">Event 42</h1>
<a property="schema:location" typeof="schema:Place" href="/location/51#it">Location 51</a>
</article>
And on the location page you might have something like:
<!-- on http://example.com/location/51 -->
<article about="#it" typeof="schema:Place">
<h1 property="schema:name">Location 51</h1>
<a property="schema:event" typeof="schema:Event" href="/event/42#it">Event 42</a>
</article>
Aggregating this data, you’ll have these triples (in Turtle):
@prefix schema: <http://schema.org/> .
<http://example.com/location/51#it> a schema:Place .
<http://example.com/location/51#it> schema:event <http://example.com/event/42#it> .
<http://example.com/location/51#it> schema:name "Location 51" .
<http://example.com/event/42#it> a schema:Event .
<http://example.com/event/42#it> schema:location <http://example.com/location/51#it> .
<http://example.com/event/42#it> schema:name "Event 42" .
EDIT: I’m not sure (and I hope it’s not the case), but maybe Schema.org expects a blank node with a url
(or sameAs
?) property instead, e.g.:
<article about="#it" typeof="schema:Event">
<h1 property="schema:name">Event 42</h1>
<div property="schema:location" typeof="schema:Place">
<a property="schema:url" href="/location/51#it">Location 51</a>
</div>
</article>