-
Notifications
You must be signed in to change notification settings - Fork 2
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
add section about 'unstar' mapping #115
base: main
Are you sure you want to change the base?
Conversation
Is this proposed "as well as" the graph-to-graph algorithm or "instead of"? |
This approach requires graphs containing triple terms to be represented as datasets. That excludes cases where you need to put "unstarred" RDF 1.2 graphs into an RDF 1.1-based quad store and manage them within specific named graphs. Implementations supporting the default graph union mechanism would also treat the "triple term graphs" as asserted in that union graph. |
It has been mentioned (or opined) that the "star" name would eventually go away (it would be just RDF 1.2 with triple terms). If so, perhaps "unstar" is an unfortunate name for future reference? |
There seems to be an issue with the examples section: all examples say "Cannot GET /uploads/dcqFS6/spec/ex-unstar-output.trig". |
It's the general PR-preview issue of not being able to retrieve neighboring resources. They are fleshed out if you look at the GitHack version. |
I personally don't think that we should have multiple such mappings, and I am more and more convinced that the graph-to-graph approach makes more sense. The reasons I stuck to my initial graph-to-dataset approach in this PR are that
|
What is the "graph-to-graph" algorithm? A mapping based on the RDF standard reification vocabulary? |
Or something isomorphic to it but using dedicated terms. There's an example of that in this recent wiki page (with links to w3c/rdf-semantics#49 and w3c/rdf-star-wg#114.). |
Semantic Task Force 2024-11-22
|
Design goals: (content from the PR)
|
- unstarring a graph now produce a graph (not a dataset) - it uses the reification vocabulary (with a distinctinve type rdf:UnstarredTripleTerm)
I just updated the PR; the new algorithm is "graph-to-graph", repurposing the reification vocabulary. Note that I deliberately chose a very specific name for this, to distinguish it from the type we will probably introduce as the class of all triple terms, for example, to describe the range of rdf:reifies (say, |
This is a suggestion related to presentation only. RDF-concepts defines RDF and is also a readable document. The algorithms of unstar/restar are good for defining the translation but algorithms do not communicate the broad intent so well. Maybe: have all the written description, discussion and examples, then have the algorithms.
|
@gkellogg How did you create that link? I'm trying to read the new PR but again am unable to read the included examples. |
Select spec/index.html in the branch you want to see and enter it in http://raw.githack.com/. It gives you a link to the rendered version. |
I think this approach is good. The use of a dedicated type for unstarred triple terms seems prudent. If used, an Whether the constituent triple term predicates should be reused from the reification vocabulary or not has been debated some (see e.g. w3c/rdf-semantics#49 (comment)). It depends on whether or not it makes sense to make I think the name But these details, about naming and which constituent triple term predicates to use, can probably be dealt with separately, to avoid blocking this PR. The question about whether to use name "unstar" at all remains (as "RDF-star" is not mentioned as such in RDF 1.2; only in reference to the RDF-star WG). |
To me it seems like the discussions in the Semantics TF and in Github issues, e.g. rdf-semantics issue #49 and rdf-star-wg issue #130, moved away from re-using the RDF reification vocabulary. The reason is a bit intricate: the RDF standard reification describes an occurrence/instance/reification of a triple. The triple term describes a triple and only the reification, indicated by
Given this difference in meaning I think it's more prudent to not reuse the properties from the reification vocabulary but to mint new ones, like e.g. W.r.t. other wordings:
|
Regarding the name of the algorithm, I guess we could go for "classicize" (as it converts to RDF "classic"). |
Regarding the vocabulary, I think that duplicating the properties |
The WG seems to tend towards allowing the usage of triple terms in a more general way than just as a source of reifiers. In that context it is probably prudent to differentiate the two concepts, and not mix and mingle them. Also, I don't see how |
On second (or rather n-th) thought I'd like to add something. Following recent discussions in the Semantics TF (as captured here and discussed there) we might settle for calling However, doesn't this jeopardize backwards compatability? So far it's possible to infer that an entity is of type To work around this problem, we could stress that any application of the unstar mapping should refrain from applying the same optimization. Also, an unassuming RDF 1.1 environment would not be led into a completely wrong direction if it assumed that the immediate subject of an unstar operation - On the other hand, backwards compatability is what the unstar mapping is all about, so why jeopardize it? |
Applying the
I do not suggest to change the domain of So yes, it would mean that any bnode generated by the unstar mapping could be inferred to be of type Regarding the notion of |
Fair enough.
I discussed the "unassuming RDF 1.1 environment", and that is what matters to backwards compatability. In such an environment,
I disagree. No matter what the term "statement" means, the term |
I stand corrected; re-reading the related sections in RDF Semantics, it says "The subject of a reification is intended to refer to a concrete realization of an RDF triple, such as a document in a surface syntax, rather than a triple considered as an abstract object" (emphasis is mine). I will change my PR accordingly. |
also, the algo 'quote-triple-term' was renamed, because it was not actually "quoting" the triple.
following @afs, the two transformations ('classicize' and revert) are now primarily described in prose, the algorithm being secundary. We now also describe the reverse transformation.
W.r.t. vocabulary I’m still not convinced: defining a new |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This looks good now. A bit of wordsmithing might be useful - "it consists .... of ..."
@pfps - please could you re-review to remove your "requested changes" that blocks merging? |
For the record: I don't see the issues I raised adequately addressed. I see no need to push this PR w.rt. avoiding conflicts with other PRs as it is really very well isolated. Questions w.r.t. naming (the properties, basic vs classic) IMHO simply arose because the PR strays from agreed upon terminology and should be rolled back until properly discussed (e.g. by raising an issue about basic vs classic). My comment w.r.t.the most important issue - how triple terms relate to RDF standard refication - hasn't been properly discussed. So: no, I'm still not okay with merging this PR. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think the general sense of this is good, but we should be consistent on graph immutability.
Encoding an [=RDF graph=] to ensure that it is consumable by an RDF [=Classic=] implementation is called <dfn data-lt="classicize|classicized">classicizing</dfn> it. | ||
It consists, while the graph has a [=triple term=] <var>tt</var> in its [=constituent terms=], to mint a fresh [=blank node=] <var>b</var> | ||
(i.e. a blank node not in use in the graph), and replace <var>tt</var> with <var>b</var> in all the triples of the graph having <var>tt</var> in their [=constituents=]. | ||
Then the following triples are added to the graph (where <var>s</var>, <var>p</var> and <var>o</var> are respectively the [=subject=], [=predicate=] and [=object=] of <var>tt</var>): |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This section is written considering that graphs are mutable (add or remove something to a graph), while we define a graph as being static:
The RDF data model is atemporal: RDF graphs are static snapshots of information.
Would it not be cleaner to describe the creation of a new graph after applying such transformations to make these operations more functional?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This section is written considering that graphs are mutable (add or remove something to a graph), while we define a graph as being static
Yes, I agree that could be confusing, but there are precedents of speaking of "replacing" nodes in a graph (sec 3.7 and 3.8). And I think that this is a concise and intuitive way to convey what the transformation is.
Note that the algorithm, on the other hand assumes immutable graphs and produces a new graph from scratch.
Co-authored-by: Andy Seaborne <[email protected]>
As I explained above, the current version of the spec, on which this PR is based, defined "Full conformance" and "Classic conformance", so the PR sticks to this and refers to "Classic conformance". Using "Basic" in section 8 while section 2 says "Classic" would have been inconsistent and confusing. Note that I personally don't have a strong preference between "basic" and "classic". It is not that I refuse to make the change, but I don't think that this PR should "casually" change a normatively defined term, when its purpose is somewhere else. |
I just added a note about why we introduce another vocabulary rather than reuse the old reification vocabulary. For more general discussion about the relation between triple terms and old-style reification, as I responded earlier: I agree that it is needed, but this should be in rdf-semantics and/or rdf-primer. And anyway, this is orthogonal to this PR: the relationship between triple terms and old-style reification is about triple terms in general, not just triple terms being "classicized". |
@@ -888,6 +889,12 @@ <h3>Triple Terms</h3> | |||
Every <a>triple</a> whose <a>object</a> is not a <a>triple term</a> SHOULD NOT | |||
use <code>http://www.w3.org/1999/02/22-rdf-syntax-ns#reifies</code> (<code>rdf:reifies</code>) | |||
as its <a>predicate</a>.</p> | |||
|
|||
<p>The <dfn data-lt="constituent">constituent terms</dfn> (or simply constituents) | |||
of a [=triple term=] (resp. an [=RDF triple=]) are its [=subject=], its [=predicate=], its [=object=], |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
resp.
? This expands in my head to respectively
(and minimally requires a following comma, in every instance), but I don't know what the respective
reference is.
Abbreviations like this should generally be avoided, especially when, as here, their meaning might be at all confusing.
<p>It defines the <a href="#section-unstar-algo">`unstar`</a> algorithm, which transforms an RDF [=Full=] dataset into an RDF [=Classic=] dataset by encoding all triple-terms into dedicated named graphs. | ||
This algorithm is designed to be: | ||
</p> | ||
<p class=issue>AT RISK: the working group may decide to replace the terms `rdf:TripleTerm`, `rdf:ttSubject`, `rdf:ttPredicate` and `rdf:ttObject` used in this section by other terms, possibly in a different namespace.</p> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
<p class=issue>AT RISK: the working group may decide to replace the terms `rdf:TripleTerm`, `rdf:ttSubject`, `rdf:ttPredicate` and `rdf:ttObject` used in this section by other terms, possibly in a different namespace.</p> | |
<p class=issue>AT RISK: The Working Group may decide to replace the terms `rdf:TripleTerm`, `rdf:ttSubject`, `rdf:ttPredicate`, and `rdf:ttObject` used in this section with other terms, possibly in a different namespace.</p> |
Note that, on the other hand, the algorithm is not designed to be semantics preserving: | ||
the graphs in the produced dataset are not semantically <a>equivalent</a> to their corresponding graph in the input dataset. | ||
<dd>It must be possible to reconstruct the input graph (resp. dataset) from the output graph (resp. dataset). | ||
Note that, on the other hand, these transformations are not designed to be semantics preserving: |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Note that, on the other hand, these transformations are not designed to be semantics preserving: | |
Note, however, that these transformations are not designed to preserve semantics: |
</dd> | ||
<dt>Idempotent</dt> | ||
<dd>Transforming a dataset that is already complying with RDF [=Classic=] (i.e. containing no <a>triple term</a>) must result in the same dataset. | ||
<dd>Applying a transformation several times to a graph (resp. dataset) should have the same effect as applying it once. | ||
Moreover, [=classicizing=] a graph (resp. dataset) that is already complying with RDF [=Classic=] (i.e. containing no [=triple term=]) must result in the same graph (resp. dataset). |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think we will be well served by using RDF Classic
as the defined term, rather than just Classic
. I'm not making that change here; only suggesting it to you.
Moreover, [=classicizing=] a graph (resp. dataset) that is already complying with RDF [=Classic=] (i.e. containing no [=triple term=]) must result in the same graph (resp. dataset). | |
Moreover, [=classicizing=] a graph (resp. dataset) that is already complying with RDF [=Classic=] (i.e., containing no [=triple term=]) must result in the same graph (resp. dataset). |
<dd>It should be possible to transform any [=Full=] graph (resp. dataset) to a [=Classic=] graph (resp. dataset) using this method. | ||
There is actually <a href="#section-classicize-caveat">a minor caveat</a> to this property. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
<dd>It should be possible to transform any [=Full=] graph (resp. dataset) to a [=Classic=] graph (resp. dataset) using this method. | |
There is actually <a href="#section-classicize-caveat">a minor caveat</a> to this property. | |
<dd>It should be possible (with <a href="#section-classicize-caveat">a minor caveat</a>) to transform any [=Full=] graph (resp. dataset) to a [=Classic=] graph (resp. dataset) using this method. |
It consists, while the graph has a [=triple term=] <var>tt</var> in its [=constituent terms=], in minting a fresh [=blank node=] <var>b</var> | ||
(i.e. a blank node not in use in the graph), and replace <var>tt</var> with <var>b</var> in all the triples of the graph having <var>tt</var> in their [=constituents=]. | ||
Then the following triples are added to the graph (where <var>s</var>, <var>p</var> and <var>o</var> are respectively the [=subject=], [=predicate=] and [=object=] of <var>tt</var>): |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It consists, while the graph has a [=triple term=] <var>tt</var> in its [=constituent terms=], in minting a fresh [=blank node=] <var>b</var> | |
(i.e. a blank node not in use in the graph), and replace <var>tt</var> with <var>b</var> in all the triples of the graph having <var>tt</var> in their [=constituents=]. | |
Then the following triples are added to the graph (where <var>s</var>, <var>p</var> and <var>o</var> are respectively the [=subject=], [=predicate=] and [=object=] of <var>tt</var>): | |
[=Classicizing=] consists of repeating the following steps until no [=constituent=] of the graph is a [=triple term=], and the graph is therefore compliant with RDF [=Classic=]: while the graph has a [=triple term=] <var>tt</var> in its [=constituent terms=], of minting a fresh [=blank node=] <var>b</var> | |
(i.e., a blank node not yet in use in the graph); replacing each <var>tt</var> with <var>b</var> in all the triples of the graph having <var>tt</var> in their [=constituents=]; | |
and then adding the following triples to the graph (where <var>s</var>, <var>p</var>, and <var>o</var> are respectively the [=subject=], [=predicate=] and [=object=] of <var>tt</var>): |
<li>(<var>b</var>, `rdf:ttPredicate`, <var>p</var>) | ||
<li>(<var>b</var>, `rdf:ttObject`, <var>o</var>) | ||
</ul> | ||
<p>This process is repeated until the graph has no [=triple term=] [=constituent=], and is therefore compliant with RDF [=Classic=].</p> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I've moved this sentence into the introductory sentence, above.
<p>This process is repeated until the graph has no [=triple term=] [=constituent=], and is therefore compliant with RDF [=Classic=].</p> |
<p>Note that this transformation is <em>information preserving</em> only when the input graph does not contain at the same time a [=triple term=] | ||
and an [=asserted=] triple (<var>b</var>, `rdf:type`, `rdf:TripleTerm`) where <var>b</var> is a [=blank node=]. | ||
Implementations encountering this situation MUST report an error. | ||
See Section <a href="#section-classicize-caveat"></a> for a discussion on this limitation. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
See Section <a href="#section-classicize-caveat"></a> for a discussion on this limitation. | |
This limitation is discussed in Section <a href="#section-classicize-caveat"></a>. |
|
||
<p class=note>The blank nodes generated to replace [=triple terms=] should not be confused with the [=reifiers=] that are typically associated to these [=triple terms=].</p> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It would be good to link this to the discussion of those "typical associations".
<p class=note>The blank nodes generated to replace [=triple terms=] should not be confused with the [=reifiers=] that are typically associated to these [=triple terms=].</p> | |
<p class=note>The blank nodes generated to replace [=triple terms=] should not be confused with the [=reifiers=] that are typically associated with these [=triple terms=].</p> |
<section id="section-unstar-algo" class="algorithm"> | ||
<h2>The `unstar` algorithm</h2> | ||
<p> | ||
[=Classicizing=] an [=RDF dataset=] consists in [=classicizing=] its [=default graph=] and each of its [=named graph=]. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
[=Classicizing=] an [=RDF dataset=] consists in [=classicizing=] its [=default graph=] and each of its [=named graph=]. | |
[=Classicizing=] an [=RDF dataset=] consists of [=classicizing=] its [=default graph=] and each of its [=named graph=]. |
<p>The algorithm expects one input variable <var>Dᵢ</var> which is an <a>RDF dataset</a>. It returns a [=Classic=] <a>RDF dataset</a>. | ||
In the algorithm, we adopt the view presented in <a href="#section-dataset-quad"></a>. | ||
<p> | ||
See Section <a href="#section-classicize-algo"></a> for a detailed algorithm of the transformation. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
See Section <a href="#section-classicize-algo"></a> for a detailed algorithm of the transformation. | |
A detailed algorithm of the transformation is found in Section <a href="#section-classicize-algo"></a>. |
<section id="section-classicize-example"> | ||
<h2>Example</h2> | ||
|
||
<p>The examples in this section are using the Turtle concrete syntax [[RDF12-TURTLE]].</p> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
<p>The examples in this section are using the Turtle concrete syntax [[RDF12-TURTLE]].</p> | |
<p>The examples in this section are expressed in the Turtle concrete syntax [[RDF12-TURTLE]].</p> |
<p>Reverting a [=classicize=] graph to its original form consists, | ||
for each [=blank node=] <var>b</var> that is the subject of an [=asserted=] triple (<var>b</var>, `rdf:type`, `rdf:TripleTerm`), | ||
in locating the three other [=asserted=] triples (<var>b</var>, `rdf:ttSubject`, <var>s</var>), | ||
(<var>b</var>, `rdf:ttPredicate`, <var>p</var>), | ||
and (<var>b</var>, `rdf:ttObject`, <var>o</var>). | ||
These four triples are removed from the graph. | ||
All remaining occurrences of <var>b</var> as a [=constituent term=] of the graph are then replaced with the triple term (<var>s</var>, <var>p</var>, <var>o</var>). |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
<p>Reverting a [=classicize=] graph to its original form consists, | |
for each [=blank node=] <var>b</var> that is the subject of an [=asserted=] triple (<var>b</var>, `rdf:type`, `rdf:TripleTerm`), | |
in locating the three other [=asserted=] triples (<var>b</var>, `rdf:ttSubject`, <var>s</var>), | |
(<var>b</var>, `rdf:ttPredicate`, <var>p</var>), | |
and (<var>b</var>, `rdf:ttObject`, <var>o</var>). | |
These four triples are removed from the graph. | |
All remaining occurrences of <var>b</var> as a [=constituent term=] of the graph are then replaced with the triple term (<var>s</var>, <var>p</var>, <var>o</var>). | |
<p>Reverting a [=classicized=] graph to its original form consists of locating | |
each [=asserted=] triple (<var>b</var>, `rdf:type`, `rdf:TripleTerm`) | |
that has a [=blank node=] <var>b</var> as its subject, | |
along with the three associated [=asserted=] triples | |
that have the same [=blank node=] <var>b</var> as their subjects, i.e., | |
(<var>b</var>, `rdf:ttSubject`, <var>s</var>), | |
(<var>b</var>, `rdf:ttPredicate`, <var>p</var>), | |
and (<var>b</var>, `rdf:ttObject`, <var>o</var>); | |
removing these four triples from the graph; | |
and replacing all remaining occurrences of <var>b</var> | |
as a [=constituent term=] of the graph | |
with the triple term (<var>s</var>, <var>p</var>, <var>o</var>). |
<p>Implementations MUST report an error if, for a given <var>b</var>, | ||
it can not unambiguously determine <var>s</var>, <var>p</var> or <var>o</var> | ||
(i.e. if one of the `classicize:` properties of <var>b</var> is missing or duplicated). | ||
Implementations MUST also report an error if the input graph contains at the same time a [=triple term=] and an [=asserted triple=] (<var>b</var>, `rdf:type`, `rdf:TripleTerm`) where <var>b</var> is a [=blank node=]. | ||
None of these situations can occur if the input graph was produced by the [=classicize=] transformation. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
<p>Implementations MUST report an error if, for a given <var>b</var>, | |
it can not unambiguously determine <var>s</var>, <var>p</var> or <var>o</var> | |
(i.e. if one of the `classicize:` properties of <var>b</var> is missing or duplicated). | |
Implementations MUST also report an error if the input graph contains at the same time a [=triple term=] and an [=asserted triple=] (<var>b</var>, `rdf:type`, `rdf:TripleTerm`) where <var>b</var> is a [=blank node=]. | |
None of these situations can occur if the input graph was produced by the [=classicize=] transformation. | |
<p>An implementation MUST report an error if, for a given <var>b</var>, | |
it can not unambiguously determine <var>s</var>, <var>p</var>, or <var>o</var> | |
(i.e., if one of the `classicize:` properties | |
— `rdf:ttSubject`, `rdf:ttPredicate`, or `rdf:ttObject` — | |
of <var>b</var> is missing or duplicated). | |
An implementation MUST also report an error if the input graph contains | |
at the same time a [=triple term=] and an [=asserted triple=] | |
(<var>b</var>, `rdf:type`, `rdf:TripleTerm`) | |
where <var>b</var> is the same [=blank node=]. | |
Note that none of these situations can occur if the input graph was produced by the [=classicize=] transformation. |
<p>The two transformations above are explicitly not supporting graphs or datasets containing at the same time a [=triple term=] | ||
and an [=asserted triple=] (<var>b</var>, `rdf:type`, `rdf:TripleTerm`) where <var>b</var> is a [=blank node=]. | ||
This means, in particular, that the [=classicize=] transformation is not strictly <em>universal</em>. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
<p>The two transformations above are explicitly not supporting graphs or datasets containing at the same time a [=triple term=] | |
and an [=asserted triple=] (<var>b</var>, `rdf:type`, `rdf:TripleTerm`) where <var>b</var> is a [=blank node=]. | |
This means, in particular, that the [=classicize=] transformation is not strictly <em>universal</em>. | |
<p>The two transformations above explicitly do not support graphs or datasets containing at the same time a [=triple term=] and an [=asserted triple=] | |
(<var>b</var>, `rdf:type`, `rdf:TripleTerm`) | |
where <var>b</var> is the same [=blank node=]. | |
This means that the [=classicize=] transformation is not <em>strictly</em> universal. |
as it was not defined prior to this specification. | ||
For this reason, using it would actually have been bad practice. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
as it was not defined prior to this specification. | |
For this reason, using it would actually have been bad practice. | |
as it was not defined prior to this specification, | |
and, therefore, using it would actually have been bad practice. |
For this reason, using it would actually have been bad practice. | ||
As for future datasets, their authors should consider the graph name `rdf:unstarMetadata` to be reserved, in order to prevent interference with the `unstar` algorithm. | ||
As for future graphs and datasets, their authors should consider this type to be reserved, in order to prevent interference with the [=classicize=] transformation. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
As for future graphs and datasets, their authors should consider this type to be reserved, in order to prevent interference with the [=classicize=] transformation. | |
For future graphs and datasets, this type should be considered to be reserved for use within the [=classicize=] transformation, and not used otherwise. |
This is one of the reasons why this transformation introduces a new vocabulary | ||
(`rdf:TripleTerm`, `rdf:ttSubject`, `rdf:ttPredicate`, `rdf::ttObject`), | ||
rather than repurposing the existing <a data-cite="RDF12-SCHEMA#ch_reificationvocab">reification vocabulary</a> | ||
(`rdf:Statement`, `rdf:subject`, `rdf:predicate`, `rdf:object`). | ||
Contrarily to `rdf:TripleTerm`, `rdf:Statement` is known to used in widely used datasets (e.g. <a href="https://www.uniprot.org/">Uniprot</a>), | ||
so deprecating its usage as "reserved" was not an option. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It would be good to find another example or two, to go with Uniprot.
This is one of the reasons why this transformation introduces a new vocabulary | |
(`rdf:TripleTerm`, `rdf:ttSubject`, `rdf:ttPredicate`, `rdf::ttObject`), | |
rather than repurposing the existing <a data-cite="RDF12-SCHEMA#ch_reificationvocab">reification vocabulary</a> | |
(`rdf:Statement`, `rdf:subject`, `rdf:predicate`, `rdf:object`). | |
Contrarily to `rdf:TripleTerm`, `rdf:Statement` is known to used in widely used datasets (e.g. <a href="https://www.uniprot.org/">Uniprot</a>), | |
so deprecating its usage as "reserved" was not an option. | |
This is one reason why this transformation introduces new vocabulary terms | |
(`rdf:TripleTerm`, `rdf:ttSubject`, `rdf:ttPredicate`, `rdf::ttObject`), | |
rather than repurposing the existing <a data-cite="RDF12-SCHEMA#ch_reificationvocab">reification vocabulary</a> | |
(`rdf:Statement`, `rdf:subject`, `rdf:predicate`, `rdf:object`). | |
Unlike `rdf:TripleTerm`, `rdf:Statement` is known to be found in | |
widely used datasets (e.g., <a href="https://www.uniprot.org/">Uniprot</a>), | |
so reserving its use for the [=classicize=] transformation was not an option. |
<p>Another consequence of this restriction is that users should be careful when merging graphs in an application that [=classicize=] graphs or datasets. | ||
More precisely, merging a [=Full=] [=RDF graph=] (containing at least one [=triple term=]) | ||
with a [=classicized=] [=RDF graph=] (and therefore potentially containing [=blank node=] instances of `rdf:TripleTerm`) | ||
could result in a "hybrid" graph that can not be transformed. | ||
Such applications should make sure to [=classicize=] every graph prior to merging them. | ||
Conversely, applications supporting RDF [=Full=] should make sure to apply the reverse tranformation to any graph that is known or likely to be [=classicized=], | ||
to avoid creating such "hybrid" graphs. | ||
Since these transformations are <em>idempotent</em>, there is no harm in applying them more than necessary. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Its troubling that this caution was written to users and then later, to applications, rather than implementers who ought to bear the burden. Further editing will be good. Also, this segment --
Therefor, such applications should [=classicize=] every graph prior to merging them.
Conversely, applications supporting RDF [=Full=] should make sure to apply the reverse transformation
to any graph that is known or likely to have been [=classicized=],
to avoid creating such "hybrid" graphs.
— would benefit from rewriting to make it a single caution that covers both [=Classic=]
applications classicizing, and [=Full=]
applications "de-classicing" (there must be a better word! "the reverse transformation" doesn't cut it...), every graph
<p>Another consequence of this restriction is that users should be careful when merging graphs in an application that [=classicize=] graphs or datasets. | |
More precisely, merging a [=Full=] [=RDF graph=] (containing at least one [=triple term=]) | |
with a [=classicized=] [=RDF graph=] (and therefore potentially containing [=blank node=] instances of `rdf:TripleTerm`) | |
could result in a "hybrid" graph that can not be transformed. | |
Such applications should make sure to [=classicize=] every graph prior to merging them. | |
Conversely, applications supporting RDF [=Full=] should make sure to apply the reverse tranformation to any graph that is known or likely to be [=classicized=], | |
to avoid creating such "hybrid" graphs. | |
Since these transformations are <em>idempotent</em>, there is no harm in applying them more than necessary. | |
<p>Another consequence of this restriction is that users will need to be aware and careful when merging graphs in an application that [=classicizes=] graphs or datasets. | |
The concern is that merging a [=Full=] [=RDF graph=] containing at least one [=triple term=] | |
with a [=classicized=] [=RDF graph=] (which might contain [=blank node=] instances of `rdf:TripleTerm`) | |
could result in a "hybrid" graph that cannot be transformed to a consistent [=Full=] nor [=Classic=] [=RDF graph=]. | |
Therefor, such applications should [=classicize=] every graph prior to merging them. | |
Conversely, applications supporting RDF [=Full=] should make sure to apply the reverse transformation | |
to any graph that is known or likely to have been [=classicized=], | |
to avoid creating such "hybrid" graphs. | |
Since these transformations are designed to be <em>idempotent</em>, there is no harm in applying them more than necessary. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I've reviewed spec/index.html up to the Algorithms. I'll come back for that. There are a number of requested changes above. I didn't think I'd find so many, nor that I'd have this much time to do so, or I'd have bundled them into a review... Sorry for the extra clicks these will take to apply!
as per w3c/rdf-star-wg#129
Preview with the examples working
(as opposed to the automatic preview below)
Preview | Diff