On 11/05/2018 12:26, Rob Atkinson wrote:
OK - thanks for that.
so just checking we'd need to merge outputs of B,C in module flow A
-> (B,C) -> D by
<A>
<B>
<update temp>
</B>
<C>
<update temp>
</C>
</A>
<D context=temp/>
?
Yes that would work.
On Friday, 11 May 2018 12:01:45 UTC+10, Holger Knublauch wrote:
On 11/05/2018 11:56, Rob Atkinson wrote:
Hi Holger
Thanks for this. I'm trying to follow up to see if I can adapt
it - and can't locate the sparqlmotion in SWP information needed
to progess. I can find the SML module reference in the TBC help -
but not the control flow syntax..
- is nesting of elements in SWP equivalent to the sm:next
connector in SparqlMotion?
Yes.
And multiple children is an order-independent equivalent of
multiple sm:next
If your sml:XY module has multiple children then they will all
have the same input graph.
- but how would you bring multiple predecessors into a single
module in that case?
You cannot. This is a main feature of SPARQLMotion that has no
direct equivalent in SWP. What we often do is to copy the result
triples into a temp graph such as in
<ui:update ui:updateQuery="{! INSERT { GRAPH ui:tempGraph { ?s ?p
?o } } WHERE { ?s ?p ?o } }" />
and then continue with the ui:tempGraph as context graph
<ui:setContext ui:queryGraph="{= ui:tempGraph }"> ...
</ui:setContext> once you have collected any data that you want to
merge. This also liberates you from a particular order.
If you need to merge multiple named graphs, you can also use the
function ui:unionOfGraphs.
Holger
Rob
On Tuesday, 8 May 2018 14:27:04 UTC+10, Holger Knublauch wrote:
Hi Rob,
I wanted to confirm the best recommendation myself so created
a little toy example of converting XML instance documents
into a stable ontology. You can unpack the attached .zip file
into a folder "xml" in a project called example.org
<http://example.org> to reproduce, then visit
http://localhost:8083/tbl/swp?_viewClass=scripts:ImportXMLService&fileName=thing.xml
<http://localhost:8083/tbl/swp?_viewClass=scripts:ImportXMLService&fileName=thing.xml>
to try it in your browser. It produces a dummy JSON just for
the sake of the demo, for example including a loop over all
<thing> elements found in the XML.
To produce the schema ontology, I started with an example
instance document - loaded it into TBC with double-click and
then saved it to TTL, deleting any instances. I created a
suitable namespace prefix to avoid the default namespace and
then replaced the sxml:element triples from URIs to string
values (because otherwise the XML tags would have to match
ont:thing etc). The result was thing-ont.ttl which is the
master ontology against which users could write SPIN/SHACL
transformation rules etc. There are other ways to produce
such an ontology including XSD import, but the trick is to
get the sxml:element annotations right so that they really
match the XML instance documents.
The provided SWP script can be used to batch process any
number of XML instance documents. They will all get URIs from
the provided namespace (base URI), although I understand in
your case they might be a temporary structure that is then
further processed down the line.
I prefer using SWP over SML for such tasks, among others due
to the more compact syntax and more features. You can still
use debugging techniques including ui:dumpResultSet.
I know I am not directly responding to your specific
questions but think it might be more fruitful to present you
with a foundation that actually works and we can take baby
steps from there if you get stuck.
HTH
Holger
On 8/05/2018 8:17, Rob Atkinson wrote:
Thanks Holger
have been playing with Semantic XML and have specific questions:
I have an an example XML file and a schema I want to load
and manipulate using the RDF Construct transform approach,
but be able to load multiple similar XML files, and also
re-load as the XML file itself is versioned.
Approaches that create per-file namespaces for clones of the
SXML ontology make it hard to reuse the transforms.
Also I am getting different flavours of SXML results if I
load the file via the TBCME import wizard or via the
SParqlMotion import from XML, then export to RDF
(i suspect you also get different RDf if you drag and drop
the file into SPARQLmotion vs load it via names - but I need
to predict the namespaces in use and make it a re-usable
script so drag and drop individual files or using wizards is
of no value beyond testing.)
There are a few issues layered up here:
ultimate goal is to be able to load files of a given XML
schema into an equivalent ontology (note this is distinctly
different from the SXML model which recreates XML DOM
nodes). Specifically data has foreign key references using
data values - these need to be turned into object properties
- not XSML text nodes with nested values that happen to
match some other property of some other object somewhere:
<thing><idprop>23</idprop></thing>
<otherthing><id2>2</id2><refthing>23</refthing></otherthing>
needs to end up as something like
myns:thing_23 a mymodel:thing .
myns:otherthing_2 a mymodel:otherthing ;
mymodel:otherthingref myns:thing_23 .
not the original DOM.
So I can create constructs to do this rebuilding of the
original object model - if I can predict the form.
So questions:
1) if i wish to make a repeatable test case in SPARQLmotion
(because the debugger is handy) and ultimately deploy the
processing to SWA applications, what is the optimum way to
do this that makes the SPARQL (or tool config) re-usable ?
2) is there a better way (some configurable version of XML
import that is scriptable)
3) which of these methods produce the same outputs - or why
do they differ:
a) import via wizard without XSd
b) import via wizard with XSD
c) import via XML import -> XML2RDF (no option provided to
use XSD?)
d) import via drag and drop of specific file (no option to
use XSD?)
e) open the file directly in TBCME
e) ... other options I havent found yet?
--> differences seem to be the assumption about the
namespace the data is in
4) it strikes me that these XML->RDF patterns could be
turned into parameterised functions (do they exist - and
what are the moving parts in different technology layers so
these can be tested and deployed in a SWP environment?
5) is there succinct documentation anyway showing examples
of the SXML structures - the help docs are pretty verbose
and hard to visualise.
6) is there any way of making it not put the data and the
class model into the same namespace (that is just a
really,really,really bad idea when we naturally we will want
to have multiple data files using the same model and be able
to re-use the mappings...)
>
> SpinMap - doesnt seem to be supported in other
technology layers (how
> to access it via SPARQLMotion and/or SWP ?)
SPINMap should work fine - it is just a collection of
SPIN templates
with a visual notation. The SPIN templates can be
executed as rules
using the normal SPIN infrastructure including
sml:ApplyTopSPIN (which
also happens to be accessible using SWP). SPINMap is for
example used
under the hood of the EDG spreadsheet importers.
-
>
> XML import in general - does importing with an XSD
produce something
> substantially different from SPARQLMotion XML->RDF
module? What is the
> recommended way of doing an XML import and conversion
in a SWP
> environment?
The recommended way is to produce a stable Semantic XML
ontology that
has sxml: annotations at classes and properties. These
ontologies can be
either created by hand, generalized from example
instance files, or
through the XSD importer. Then use sml:ConvertXMLToRDF
to convert XML
instance documents.
actually I dont want to produce the XML yet - but thanks for
the tip :-)
HTH
Holger
--
You received this message because you are subscribed to the
Google Groups "TopBraid Suite Users" group.
To unsubscribe from this group and stop receiving emails
from it, send an email to [email protected].
For more options, visit https://groups.google.com/d/optout
<https://groups.google.com/d/optout>.
--
You received this message because you are subscribed to the
Google Groups "TopBraid Suite Users" group.
To unsubscribe from this group and stop receiving emails from it,
send an email to [email protected] <javascript:>.
For more options, visit https://groups.google.com/d/optout
<https://groups.google.com/d/optout>.
--
You received this message because you are subscribed to the Google
Groups "TopBraid Suite Users" group.
To unsubscribe from this group and stop receiving emails from it, send
an email to [email protected]
<mailto:[email protected]>.
For more options, visit https://groups.google.com/d/optout.
--
You received this message because you are subscribed to the Google Groups "TopBraid
Suite Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.