Hi Nis,

Glad you are sorted. Next time I'm passing through Copenhagen ...

Dave

On 05/09/13 12:52, Nis Jespersen wrote:
Hi Dave,

Thanks so much! Subclassing Basic was a great idea, and our new custom
Writer works beautifully! Very very helpful - your pointers helped us a
long way in the right direction. Much appreciated!

I'll be happy to buy you a beer one day!  :-)

Nis


*
Nis Jespersen*

Advisory IT Architect • Energy & Utilities Global Center of Competency •
IBM Global Business Services

+45 41208641 • [email protected] • IBM Danmark ApS, Lyngbyvej 2, 2100
Copenhagen, Denmark


  --------    -------------       -------       -------
  --------    ----------------    --------   --------
    ----        ----     -----      -------   -------
    ----        ------------    -------- --------
    ----        ------------    ---- ------- ----
    ----        ----     -----      ----  -----  ----
  --------    ----------------    ------ ---   ------
  --------    -------------       ------    -    ------





From: Dave Reynolds <[email protected]>
To: Nis Jespersen/Denmark/IBM@IBMDK,
Cc: [email protected]
Date: 03-09-2013 15:38
Subject: Re: Circular references when serializing RDF XML

------------------------------------------------------------------------



On 03/09/13 11:14, Nis Jespersen wrote:
 > Hi Dave et al.,
 >
 > Thanks so much for your response! I really appreciate it.
 >
 > The receiving client does indeed need rdf:IDs in a non-nested structure.
 > I've created the mentioned example in a different tool to illustrate the
 > result I am looking for:
 >
 > <?_xml_ version="1.0" encoding="UTF-8" ?>
 > <rdf:RDF xmlns:cim="http://iec.ch/TC57/2012/CIM-schema-cim16#";
 > xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#";>
 >   <cim:ShuntCompensator rdf:ID="_83884fb0-1473-11e3-9b87-00271369ce74">
 >    <cim:IdentifiedObject.name>nisShunt</cim:IdentifiedObject.name>
 >    <cim:RegulatingCondEq.RegulatingControl
 > rdf:resource="#_8fc5db30-1473-11e3-9b87-00271369ce74"/>
 >   </cim:ShuntCompensator>
 >   <cim:RegulatingControl rdf:ID="_8fc5db30-1473-11e3-9b87-00271369ce74">
 >    <cim:IdentifiedObject.name>nisRegControl</cim:IdentifiedObject.name>
 >    <cim:RegulatingControl.Terminal
 > rdf:resource="#_92fb63b0-1473-11e3-9b87-00271369ce74"/>
 >   </cim:RegulatingControl>
 >   <cim:Terminal rdf:ID="_92fb63b0-1473-11e3-9b87-00271369ce74">
 >    <cim:IdentifiedObject.name>nisTerminal</cim:IdentifiedObject.name>
 >    <cim:Terminal.ConductingEquipment
 > rdf:resource="#_83884fb0-1473-11e3-9b87-00271369ce74"/>
 >   </cim:Terminal>
 > </rdf:RDF>
 >
 > Note how the order of the three elements does not prevent the use of
 > rdf:ID. Elements further down the file are still referenced (by use of
 > rdf:resource, as you also mention).

I don't think ordering is relevant here. Those resources could have been
put in a different order and all use rdf:ID or they could all use
rdf:about.

 > The ABBREV writer's "prettyTypes" property seems to be both what we
 > need, and where the limitation is hidden:
 > /prettyTypes: This is a list of the types of the principal objects in
 > the model. The writer will tend to create RDF/XML with resources of
 > these types at the top level. /
 > "Creating resources at top level" is just what we need and use, but
 > "tend to" I'm guessing is where it gives up, when things get circular.

Again, this is not really do with circularity.

 > Is there some alternative way to specify such "principal" objects? I
 > don't need to list them, all objects in the model are principal and
 > should be created at the top level - that might be simpler?

The non-ABBREV writer treats all subjects as top level objects, it never
nests. Which is why I suggested starting with that.

 > PS: Unfortunately, your suggestion on going non-ABBREV was a step in the
 > wrong direction, only making things more hierarchical.

?? The non-ABBREV writer is just too stupid to nest resources :) it
can't do it, everything is guaranteed to be flat (in the sense of the
XML trees).

If by "hierarchical" you mean that it uses rdf:about then that's what I
said. It uses rdf:about uniformly. You would need to transorm the result
afterwards or modify the writer [*].

If you really are seeing nested output from the non-abbrev writer then
something weird must be going on. If you can construct a complete
minimum example which generates and serializes just a few resources that
could make this discussion more concrete.

[*] If the notion of transforming the non-abbrev RDF/XML output is not
appealing then it would be fairly easy for you too do a custom writer.
If you look at the code for the non-abbrev writer [1] you'll see that it
is very straightforward. It lists all the subject resources, for each
subject it outputs an rdf:Description and a set of property/value pairs
for each one. All output is done by primitive string bashing.

The bit that outputs the URI in the rdf:Description is writeResourceId
which is a protected method. So you could subclass Basic and provide
your own writeResourceId which used rdf:ID instead of rdf:about in the
case where substitutedAttribute(relativize(r.getURI()) starts with a
'#'. Since listSubjects should only list unique resources there should
not be any repetition and blindly using rdf:ID for all such local
relative URIs would be safe.

Dave

[1]
http://svn.apache.org/repos/asf/jena/trunk/jena-core/src/main/java/com/hp/hpl/jena/xmloutput/impl/Basic.java






Medmindre andet er angivet ovenfor: / Unless Otherwise Stated Above:
IBM Danmark ApS
Nymøllevej 91
2800 Kongens Lyngby, Danmark
CVR nr.: 65305216

Reply via email to