- From: Luc Moreau <l.moreau@ecs.soton.ac.uk>
- Date: Tue, 02 Apr 2013 21:25:55 +0100
- To: public-prov-wg@w3.org
- Message-ID: <EMEW3|f7b8ab27eff356ed46463408fa21437dp31LQ108l.moreau|ecs.soton.ac.uk|515B3ED3>
Hi Stephan,
Thanks for still looking into a solution for this issue, and summarizing
the options.
May I suggest option 1.5.
a) keep use of abstract element and substitution,
but in FAQ, add an xml processing step, that inserts all included
files in a single one,
and replaces the abstract element with the concrete ones.
With this, you keep the modularity, but offer a JAXB way of
handling it.
b) introduce a mechanism to support any non prov element.
I am not sure what the right option is.
I think this option is not as radical as your option 1.
An option for xsd:any not discussed yet I think is to introduce a new
element:
<prov:others>
here, xsd:any non-prov element
</prov:others>
Thoughts?
Luc
On 02/04/13 20:56, Stephan Zednik wrote:
> Hi Luc,
>
> I've looked into ways to update the schema while retaining our current
> encapsulation strategy of having extension schemas uses substitution
> group elements on the prov:internalElement element and I have yet to
> figure out a way to do it. I also have yet to figure out if we can
> provide a solution to improve JAXB binding without forcing all
> non-prov elements to be after the prov elements in document and bundle
> containers.
>
> We are getting to the end of our timeframe for addressing this so we
> should make a decision ASAP.
>
> Possible solutions:
>
> 1) implement the changes mentioned by Luc, which would be:
>
> a) remove use of abstract element and substitution groups in prov-core
> and extension schemas
> b) introduce ordering that requires xsd:any after prov elements in
> document and element containers
>
> these changes would force us to also do the following:
>
> c) remove include statements from prov.xsd and extension schemas, all
> schemas contain local declarations of prov core types
> d) update the Note document to reflect changes
>
> PROS:
> - Removes the JAXBElement.class type from the @XmlElementRef
> annotations in generated classes
>
> CONS:
> - Removes our strategy for modularity and encapsulation in the schemas
> - Restricts non-prov elements to only be valid after prov-elements in
> bundle and document containers
>
> 2) leave the schema and Note as they are; look into developing a
> separate JAXB-friendly schema which can be introduced in a FAQ entry.
> Write FAQ entry about our experiences with JAXB binding irregardless
> of if a separate JAXB-friendly schema can be successfully developed.
>
> PROS:
> - Increases our window to get the work done, we may not have
> determined the best solution yet
> - Does not require a change to the existing Note or schema
> - Allows us to introduce jaxb annotations in the FAQ schema that may
> help with the schema binding
> - Preserves exiting modularity and encapsulation in the schemas
>
> CONS:
> - The JAX-friendly schema will likely need to be a more restrictive
> schema than the official schema (such as perhaps requiring xs:any
> elements outside of choices at the end of sequences), this may lead to
> problems in trying to unmarshall valid PROV-XML that does not conform
> to the JAXB-friendly schema.
>
> 3) Do nothing
>
> I prefer 2) or 1) over not addressing this request.
>
> --Stephan
>
>> Hi
>>
>> I have ported the ProvToolbox and the ProvValidator to the new XML
>> schema.
>> I just wanted to report on my experience with the schema and JAXB.
>> Obviously, others may have better experience with JAXB and may be able
>> to help on some of the issues I encountered.
>>
>> Everything worked fine, except:
>> - <xs:element ref="prov:internalElement abstract=true/>
>> - extensibility <xs:any namespace="##other"/> in Document and Bundle
>>
>>
>> These two constructs, while processable by JAXB, are not JAXB-friendly.
>>
>> Indeed, JAXB compiles the schema in a list containing all possible
>> statements.
>>
>> protected List<Object> entityAndActivityAndWasGeneratedBy;
>>
>> However, the presence on an abstract element and an <any/> element
>> result in the
>> content of that list to be of type:
>>
>>
>> @XmlElementRefs({
>> @XmlElementRef(name = "used", namespace =
>> "http://www.w3.org/ns/prov#", type = JAXBElement.class),
>> @XmlElementRef(name = "wasAssociatedWith", namespace =
>> "http://www.w3.org/ns/prov#", type = JAXBElement.class),
>> @XmlElementRef(name = "person", namespace =
>> "http://www.w3.org/ns/prov#", type = JAXBElement.class),
>> @XmlElementRef(name = "entity", namespace =
>> "http://www.w3.org/ns/prov#", type = JAXBElement.class),
>> @XmlElementRef(name = "wasInfluencedBy", namespace =
>> "http://www.w3.org/ns/prov#"
>> ....
>> })
>>
>> @XmlAnyElement(lax = true)
>> protected List<Object> entityAndActivityAndWasGeneratedBy;
>>
>> where all data structures are wrapped up in this unpleasant JAXBElement.
>>
>> Without these features, we get a much more natural mapping:
>> @XmlElements({
>> @XmlElement(name = "entity", namespace =
>> "http://www.w3.org/ns/prov#", type = Entity.class),
>> @XmlElement(name = "activity", namespace =
>> "http://www.w3.org/ns/prov#", type = Activity.class),
>> @XmlElement(name = "wasGeneratedBy", namespace =
>> "http://www.w3.org/ns/prov#", type = WasGeneratedBy.class),
>> @XmlElement(name = "used", namespace = "http://www.w3.org/ns/prov#",
>> type = Used.class),
>> @XmlElement(name = "wasInformedBy", namespace =
>> "http://www.w3.org/ns/prov#", type = WasInformedBy.class),
>> ...
>> })
>>
>> So, how I did I solve the problem? I inserted the extension schemas
>> into the schema file, and hence got rid of the abstract element. I am
>> ok with this. We could possible provide the utility to that
>> transformation.
>>
>> For the extensibility, I used a different definition. It happens to
>> parse prov-xml compliant xml. When serializing, it puts all
>> extensibility elements at the end. This is not a satisfactory
>> solution, and is likely to be dependent of the jaxb implementation
>> (though I am not entirely sure).
>>
>>
>> <xs:complexType name="Document">
>> <xs:sequence>
>> <xs:choice maxOccurs="unbounded">
>> <xs:group ref="prov:documentElements"/>
>> <xs:element name="bundleContent" type="prov:NamedBundle"/>
>> </xs:choice>
>> <xs:any namespace="##other" processContents="lax" minOccurs="0"
>> maxOccurs="unbounded"/>
>> </xs:sequence>
>> </xs:complexType>
>>
>> Can something be done to make the XML schema a bit more jaxb friendly,
>> while still keeping the same flexibility? Thoughts welcome.
>>
>> Cheers,
>> Luc
--
Professor Luc Moreau
Electronics and Computer Science tel: +44 23 8059 4487
University of Southampton fax: +44 23 8059 2865
Southampton SO17 1BJ email: l.moreau@ecs.soton.ac.uk
United Kingdom http://www.ecs.soton.ac.uk/~lavm
Received on Tuesday, 2 April 2013 20:26:26 UTC