Re: Which file format to use?

Are these transformations basically a kind of provenance of how
something was created - or is it a plan of how something can be made?


For provenance, any of the serializations of the PROV model should be
a good fit:

http://www.w3.org/TR/prov-primer/
http://www.w3.org/TR/prov-overview/

Using the PROV Toolbox you can convert from/to your favourite and
standard RDF representations.
https://github.com/lucmoreau/ProvToolbox


As an example of how I would express a transformation, using PROV-O and JSON-LD:

{ "@context": { "prov": "http://www.w3.org/ns/prov#",
                        "prov:wasDerivedFrom": {"@type": "@id" },
                        "prov:agent": {"@type": "@id" },
                        "prov:hadPlan": {"@type": "@id" }
              },
  "@graph": [
  { "@id": "http://example.com/resource1",
    "prov:wasDerivedFrom": "http://example.com/resource0",
    "prov:wasGeneratedBy": {
      "@id": "http://example.com/transformation/c97abb50-1beb-4af9-87b5-ecfcd273769a",
      "prov:qualifiedAssociation": {
             "prov:agent": "http://example.com/transformationService",
             "prov:hadPlan": "http://example.com/script" }
        }
  },
  { "@id": "http://example.com/resource0",
     "...": {}
  }
  ]
}


Basically it says that resource1 was derived from resource0, and its
creation happened in a transformation involving a transformation
service and a script.



This allows you to build a transformation chain of arbitrary length.
You can use anonymous identifiers like "_:intermediate5" for
intermediate resources which don't have URIs. By using the identifiers
you don't need to do the nesting with deeper JSON objects - although
that is also an option.


(Note: In JSON-LD the @context can be externalized, e.g. you only need
"@context": "http://example.com/context" or even just a Link header )

You can tweak the context to make the JSON more natural for your
application, and thus do "Linked Data by stealth"

{ "@context": { "prov": "http://www.w3.org/ns/prov#",
                "ex": "http://example.com/vocab#",
                "transformedFrom": {"@type": "@id", "@id":
"prov:wasDerivedFrom" },
                "transformation": {"@type": "@id", "@id":
"prov:wasGeneratedBy" },
                "transformedBy": {"@type": "@id", "@id":
"prov:qualifiedAssociation" },
                "script": {"@type": "@id", "@id": "prov:hadPlan" },
                "service": {"@type": "@id", "@id": "prov:agent" },
                "resources": "@graph",
                "id": "@id"
              },
  "resources": [
  { "id": "http://example.com/resource1",
    "transformedFrom": "http://example.com/resource0",
    "transformation": {
      "id": "http://example.com/transformation/c97abb50-1beb-4af9-87b5-ecfcd273769a",
      "transformedBy": {
             "service": "http://example.com/transformationService",
             "script": "http://example.com/script" }
        }
  },
  { "id": "http://example.com/resource0",
     "...": {}
  }
  ]
}


Using a JSON-LD processor to translated to Turtle/N-Quads, this will
give you the triples:

<http://example.com/resource1>
<http://www.w3.org/ns/prov#wasDerivedFrom>
<http://example.com/resource0> .
<http://example.com/resource1>
<http://www.w3.org/ns/prov#wasGeneratedBy>
<http://example.com/transformation/c97abb50-1beb-4af9-87b5-ecfcd273769a>
.
<http://example.com/transformation/c97abb50-1beb-4af9-87b5-ecfcd273769a>
<http://www.w3.org/ns/prov#qualifiedAssociation> _:b0 .
_:b0 <http://www.w3.org/ns/prov#agent>
<http://example.com/transformationService> .
_:b0 <http://www.w3.org/ns/prov#hadPlan> <http://example.com/script> .


Or as PROV-XML:

  <prov:document>

    <entity prov:id="http://example.com/resource1"/>
    <prov:wasDerivedFrom>
      <prov:generatedEntity prov:ref="http://example.com/resource1"/>
      <prov:usedEntity prov:ref="http://example.com/resource0"/>
    </prov:wasDerivedFrom>

    <prov:wasGeneratedBy>
      <prov:entity prov:ref="http://example.com/resource1"/>
      <prov:activity
prov:ref="http://example.com/transformation/c97abb50-1beb-4af9-87b5-ecfcd273769a"/>
    </prov:wasGeneratedBy>


    <prov:wasAssociatedWith>
      <prov:activity
prov:ref="http://example.com/transformation/c97abb50-1beb-4af9-87b5-ecfcd273769a"/>
      <prov:agent prov:ref="http://example.com/transformationService"/>
      <prov:plan prov:ref="http://example.com/script"/>
    </prov:wasAssociatedWith>


  </prov:document>


Note that you can often avoid the distinction between the activity (a
particular transformation), the agent (a transformation service) and a
script (what the agent did) - but I have here separated out the agent
with a script as a plan - therefore the transformation service could
deal with multiple scripts (e.g. in different versions).




On 20 October 2014 00:13, Victor Porton <porton@narod.ru> wrote:
> I need to feed a program I am writing a finite ordered list whose members may be:
>
> * A pair of URLs which denotes a transformation
>
> * A pair of URLs which denotes a script
>
> * A set of URLs (which also describe a kind of transformation)
>
> In short, I need a finite ordered list, which consist of URLs together with information how to use these URLs (e.g. to differentiate between scripts and transformations, each represented as a pair of URLs)
>
> In which file format would you recommend to write this kinds of information?
>
> Should I describe this in RDF?
>
> Are there lists in Turtle?
>
> Or should I recommend users to use RDF/XML because of its explicit loops?
>
> Maybe even to switch from RDF to plain XML?
>
> --
> Victor Porton - http://portonvictor.org
>



-- 
Stian Soiland-Reyes, myGrid team
School of Computer Science
The University of Manchester
http://soiland-reyes.com/stian/work/ http://orcid.org/0000-0001-9842-9718

Received on Monday, 20 October 2014 10:56:42 UTC