---
# System prepended metadata

title: Objects and strings
tags: [openwemi]

---

# Objects and strings

###### tags: `openwemi`


Legend:

```mermaid
flowchart LR
O((object)) --> T[text]
```

What we have now defines links between two objects. (I'm using Work and Expression here to illustrate this, but it is true for all.)

```mermaid
flowchart LR
E((Expression)) --> |expresses| W((Work))
```

Let's say that you have a book in translation, and the following information in your data store:

--URI:Book3--
Title: "War and Peace"
Original work: URI:Tolstoj1

This meets the current definition of the openWEMI vocabulary. But what if your database does not have a URI for the work, because you do not have that version in your database. But you might have information about the original title is a text. 

--URI:Book3--
Title: "War and Peace"
Original work: "Война и мир"

 You may want to use the openWEMI property of `expresses` even though you do not have a URI for the work:

```mermaid
flowchart LR
E((Book3)) --> |expresses| W[Война и мир]
```
As the vocabulary is defined today, this requires the use of a blank node:
```mermaid
flowchart LR
E((Book3)) --> |expresses|B((work bnode)) --> |work title| W[Война и мир]
```
For the inverse properties that we have proposed, the situation is similar. If defined with ranges, such as:

``<http://example.org/openWEMI/expressedBy>``
``  a owl:ObjectProperty ;``
``  rdfs:label "expressedBy"@en ;``
``  skos:definition "A Work that is expressed by an Expression"@en ;``
``  rdfs:isDefinedBy <http://example.org/openWEMI/> ;``
``  rdfs:subPropertyOf <http://example.org/openWEMI/relatedEndeavor> ;``
``  rdfs:domain <http://example.org/openWEMI/Work> ;``
``  rdfs:range <http://example.org/openWEMI/Expression>  .``
Which looks like:
```mermaid
flowchart LR
W((Work)) --> |expressedBy|B((Expression))
```
However, the inverse `expressedBy` is useful even when the `Expression` is not identified with a URI:

```mermaid
flowchart LR
W((Work)) --> |expressedBy|B["Session 1"]
```
Again, if the property is defined with a range of `Expression` it will be necessary to use a bnode as the object of `expressedBy` so that a text string can represent the Expression.

```mermaid
flowchart LR
W((Work)) --> |expressedBy|B((Expression bnode)) --> |expression| E[Session 1]
```

## Using Endeavor as range

This assumes that the range of each property (expresses, manifests, instantiates) is Endeavor, while the domain of each is:
    `expresses` domain:Expression
    `manifests` domain:Manifestation
    `instantiates` domain:Instance

In the case of:
```mermaid
flowchart LR
E((A)) --> |expresses| W((B))
```
the inferences are:
* A is an Expression
* B is an Endeavor

```mermaid
flowchart LR
M((A)) --> |manifests|E
E((B))--> |expresses| W((C))
```
The inferences here are that 
* A is a Manifestation
* B is an Endeavor
* B is an Expression
* C is an Endeavor

Work is actually a special case here because there is no property for which work would be a domain. Work is only inferred if there is a inverse property, such that:
`isExpressedby` domain:Work

