- From: Stephan Zednik <zednis2@rpi.edu>
- Date: Tue, 2 Apr 2013 14:56:22 -0600
- To: Luc Moreau <l.moreau@ecs.soton.ac.uk>
- Cc: "public-prov-wg@w3.org" <public-prov-wg@w3.org>
- Message-Id: <44195BFF-1F35-401E-B876-AAB47B4049CF@rpi.edu>
Comments below.
--Stephan
On Apr 2, 2013, at 2:25 PM, Luc Moreau <l.moreau@ecs.soton.ac.uk> wrote:
> 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.
I like this idea.
>
> 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?
I had forgotten about this suggestion. At first thought I think it might work.
It seems like a reasonable compromise.
We will need to make slight modifications to the note, our examples, and possibly the primer.
> 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:56:55 UTC