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] <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.