- From: Stephan Zednik <zednis@rpi.edu>
- Date: Thu, 21 Feb 2013 08:30:43 -0700
- To: Curt Tilmes <Curt.Tilmes@nasa.gov>
- Cc: Luc Moreau <l.moreau@ecs.soton.ac.uk>, "public-prov-wg@w3.org" <public-prov-wg@w3.org>
- Message-Id: <36BE802C-2B69-459C-BE05-0690303077DD@rpi.edu>
Is this issue (http://www.w3.org/2011/prov/track/issues/572) ready to be closed?
--Stephan
On Feb 7, 2013, at 1:30 PM, Stephan Zednik <zednis@rpi.edu> wrote:
> I have committed change to prov-core.xsd to use ordered elements for prov attributes.
>
> https://dvcs.w3.org/hg/prov/rev/3f1e31b0df28
>
> I have also updated a few prov-xml test files in eg-40 to conform with the new required ordering of elements
>
> https://dvcs.w3.org/hg/prov/rev/f95aa1566db7
>
> --Stephan
>
> On Feb 7, 2013, at 1:10 PM, Stephan Zednik <zednis@rpi.edu> wrote:
>
>> Sounds good. I will commit the change.
>>
>> --Stephan
>>
>> On Feb 7, 2013, at 1:06 PM, Curt Tilmes <Curt.Tilmes@nasa.gov> wrote:
>>
>>> I was going to suggest the order from PROV-DM section 5.7.2 and table 8,
>>> which appears to be alphabetical...
>>>
>>> Curt
>>>
>>> On 02/07/2013 01:39 PM, Stephan Zednik wrote:
>>>> How about alphabetical?
>>>>
>>>> --Stephan
>>>>
>>>> On Feb 7, 2013, at 9:57 AM, Stephan Zednik <zednis@rpi.edu> wrote:
>>>>
>>>>> Now I think it is time to determine what ordering we want to have. Should we use alphabetic ordering? order by expectations of usage? I don't have a preference except that we are consistent.
>>>>>
>>>>> --Stephan
>>>>>
>>>>>
>>>>> On Feb 7, 2013, at 4:12 AM, Curt Tilmes <Curt.Tilmes@nasa.gov> wrote:
>>>>>
>>>>>> Agreed. If we just explain clearly in the doc what the order is, anyone implementing can do it that way.
>>>>>> Most people will be using other tools to output the XML so the tool will hide the need for order from them
>>>>>> anyway.
>>>>>>
>>>>>> Curt
>>>>>>
>>>>>> On 2/7/13 4:40 AM, Stephan Zednik wrote:
>>>>>>> Ok. I am on-board with updating the schema to enforce element ordering on prov attributes. I like the idea of using jax bindings + simplify plugin but I think that is too complex a solution.
>>>>>>>
>>>>>>> --Stephan
>>>>>>>
>>>>>>> On Feb 7, 2013, at 1:47 AM, Luc Moreau <l.moreau@ecs.soton.ac.uk> wrote:
>>>>>>>
>>>>>>>> Hi Stephan,
>>>>>>>>
>>>>>>>> Response interleaved.
>>>>>>>>
>>>>>>>> On 07/02/2013 04:08, Stephan Zednik wrote:
>>>>>>>>>
>>>>>>>>> On Feb 6, 2013, at 4:58 PM, Luc Moreau <L.Moreau@ecs.soton.ac.uk> wrote:
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>> Hi Stephan and Curt,
>>>>>>>>>>
>>>>>>>>>> It is good to keep choice in documentElement. You both introduced it. Let's not remove it.
>>>>>>>>>>
>>>>>>>>> I agree, but the choice in documentElement will lead to the same problem with JAXB that a choice in attributes does.
>>>>>>>>>
>>>>>>>>
>>>>>>>> I don't think the situation is the same.
>>>>>>>> A bundle/document has a containment relationship with respect to documentElements, whereas prov attributes, we want them
>>>>>>>> to appear as instance variables (with associated setters and getters). I am therefore fine, with all documentElments being
>>>>>>>> amalgamated in a single list.
>>>>>>>>> Both Document and Bundle classes generated by JAXB's xjc use a single list for all available elements in a documentElement.
>>>>>>>>>
>>>>>>>>> The generated code looks like the following:
>>>>>>>>>
>>>>>>>>> protected List<JAXBElement<?>> entityOrActivityOrWasGeneratedBy;
>>>>>>>>>
>>>>>>>>> /**
>>>>>>>>> * Gets the value of the entityOrActivityOrWasGeneratedBy property.
>>>>>>>>> *
>>>>>>>>> * <p>
>>>>>>>>> * This accessor method returns a reference to the live list,
>>>>>>>>> * not a snapshot. Therefore any modification you make to the
>>>>>>>>> * returned list will be present inside the JAXB object.
>>>>>>>>> * This is why there is not a <CODE>set</CODE> method for the entityOrActivityOrWasGeneratedBy property.
>>>>>>>>> *
>>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> We can easily improve on this, as I did in the provtoolbox:
>>>>>>>> See http://openprovenance.org/java/site/prov/apidocs/org/openprovenance/prov/xml/Document.html#getEntityOrActivityOrWasGeneratedBy()
>>>>>>>>
>>>>>>>>
>>>>>>>>> * <p>
>>>>>>>>> * For example, to add a new item, do as follows:
>>>>>>>>> * <pre>
>>>>>>>>> * getEntityOrActivityOrWasGeneratedBy().add(newItem);
>>>>>>>>> * </pre>
>>>>>>>>> *
>>>>>>>>> *
>>>>>>>>> * <p>
>>>>>>>>> * Objects of the following type(s) are allowed in the list
>>>>>>>>> * {@link JAXBElement }{@code <}{@link Association }{@code >}
>>>>>>>>> * {@link JAXBElement }{@code <}{@link EmptyCollection }{@code >}
>>>>>>>>> * {@link JAXBElement }{@code <}{@link Specialization }{@code >}
>>>>>>>>> * {@link JAXBElement }{@code <}{@link Removal }{@code >}
>>>>>>>>> * {@link JAXBElement }{@code <}{@link Dictionary }{@code >}
>>>>>>>>> * {@link JAXBElement }{@code <}{@link Organization }{@code >}
>>>>>>>>> * {@link JAXBElement }{@code <}{@link EmptyDictionary }{@code >}
>>>>>>>>> * {@link JAXBElement }{@code <}{@link Plan }{@code >}
>>>>>>>>> * {@link JAXBElement }{@code <}{@link Start }{@code >}
>>>>>>>>> * {@link JAXBElement }{@code <}{@link Agent }{@code >}
>>>>>>>>> * {@link JAXBElement }{@code <}{@link Collection }{@code >}
>>>>>>>>> * {@link JAXBElement }{@code <}{@link Mention }{@code >}
>>>>>>>>> * {@link JAXBElement }{@code <}{@link Generation }{@code >}
>>>>>>>>> * {@link JAXBElement }{@code <}{@link SoftwareAgent }{@code >}
>>>>>>>>> * {@link JAXBElement }{@code <}{@link Derivation }{@code >}
>>>>>>>>> * {@link JAXBElement }{@code <}{@link KeyValuePair }{@code >}
>>>>>>>>> * {@link JAXBElement }{@code <}{@link Object }{@code >}
>>>>>>>>> * {@link JAXBElement }{@code <}{@link Communication }{@code >}
>>>>>>>>> * {@link JAXBElement }{@code <}{@link Attribution }{@code >}
>>>>>>>>> * {@link JAXBElement }{@code <}{@link Delegation }{@code >}
>>>>>>>>> * {@link JAXBElement }{@code <}{@link Entity }{@code >}
>>>>>>>>> * {@link JAXBElement }{@code <}{@link Influence }{@code >}
>>>>>>>>> * {@link JAXBElement }{@code <}{@link Usage }{@code >}
>>>>>>>>> * {@link JAXBElement }{@code <}{@link Alternate }{@code >}
>>>>>>>>> * {@link JAXBElement }{@code <}{@link Membership }{@code >}
>>>>>>>>> * {@link JAXBElement }{@code <}{@link Bundle }{@code >}
>>>>>>>>> * {@link JAXBElement }{@code <}{@link End }{@code >}
>>>>>>>>> * {@link JAXBElement }{@code <}{@link Insertion }{@code >}
>>>>>>>>> * {@link JAXBElement }{@code <}{@link Activity }{@code >}
>>>>>>>>> * {@link JAXBElement }{@code <}{@link Invalidation }{@code >}
>>>>>>>>> * {@link JAXBElement }{@code <}{@link Person }{@code >}
>>>>>>>>> * {@link JAXBElement }{@code <}{@link Revision }{@code >}
>>>>>>>>> * {@link JAXBElement }{@code <}{@link Quotation }{@code >}
>>>>>>>>> * {@link JAXBElement }{@code <}{@link PrimarySource }{@code >}
>>>>>>>>> * {@link JAXBElement }{@code <}{@link DictionaryMembership }{@code >}
>>>>>>>>> *
>>>>>>>>> *
>>>>>>>>> */
>>>>>>>>> public List<JAXBElement<?>> getEntityOrActivityOrWasGeneratedBy() {
>>>>>>>>> if (entityOrActivityOrWasGeneratedBy == null) {
>>>>>>>>> entityOrActivityOrWasGeneratedBy = new ArrayList<JAXBElement<?>>();
>>>>>>>>> }
>>>>>>>>> return this.entityOrActivityOrWasGeneratedBy;
>>>>>>>>> }
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>> My concern about choice in prov attributes is that they lead, by default, to non natural object mapping with jaxb. I believe jaxb matters because jaxb is a community standard reaching well beyond the java community.
>>>>>>>>>>
>>>>>>>>> I agree. Would having a section in the FAQ which analyzes the problem in the context of a specific ORM technology and provides possible solutions (hints and/or alternate schemas) for that technology be satisfiable?
>>>>>>>>>
>>>>>>>>>
>>>>>>>>
>>>>>>>> alternate schemas is challenging, since you want any xml compatible with prov-xml to be readable by a jaxb-friendly schema.
>>>>>>>>> Also, looking at the JAXB generated class I think the manner in which the schema defines and uses prov:ref will result in a mapping that is not natural.
>>>>>>>>>
>>>>>>>>> The following components from the schema
>>>>>>>>>
>>>>>>>>> <xs:complexType name="Generation">
>>>>>>>>> <xs:sequence>
>>>>>>>>> <xs:element name="entity" type="prov:IDRef"/>
>>>>>>>>> <xs:element name="activity" type="prov:IDRef" minOccurs="0"/>
>>>>>>>>> <xs:element name="time" type="xs:dateTime" minOccurs="0"/>
>>>>>>>>> <xs:choice minOccurs="0" maxOccurs="unbounded">
>>>>>>>>> <xs:element ref="prov:location"/>
>>>>>>>>> <xs:element ref="prov:role"/>
>>>>>>>>> <xs:element ref="prov:label"/>
>>>>>>>>> <xs:element ref="prov:type"/>
>>>>>>>>> <xs:any namespace="##other"/>
>>>>>>>>> </xs:choice>
>>>>>>>>> </xs:sequence>
>>>>>>>>> <xs:attribute ref="prov:id"/>
>>>>>>>>> </xs:complexType>
>>>>>>>>>
>>>>>>>>> <!-- note, this is not xs:IDREF -->
>>>>>>>>> <xs:complexType name="IDRef">
>>>>>>>>> <xs:attribute ref="prov:ref" use="required" />
>>>>>>>>> </xs:complexType>
>>>>>>>>>
>>>>>>>>> result in class members with type IDRef
>>>>>>>>>
>>>>>>>>> protected IDRef entity;
>>>>>>>>> protected IDRef activity;
>>>>>>>>>
>>>>>>>>> Whose class is defined like so:
>>>>>>>>>
>>>>>>>>>
>>>>>>>>
>>>>>>>> Here, provtoolbox maps as follows:
>>>>>>>>
>>>>>>>> http://openprovenance.org/java/site/prov/apidocs/org/openprovenance/prov/xml/Entity.html#getId()
>>>>>>>>
>>>>>>>> public QName getId()
>>>>>>>>
>>>>>>>> So, i think this works ok.
>>>>>>>>
>>>>>>>> Luc
>>>>>>>>
>>>>>>>>
>>>>>>>>> @XmlAccessorType(XmlAccessType.FIELD)
>>>>>>>>> @XmlType(name = "IDRef")
>>>>>>>>> public class IDRef {
>>>>>>>>>
>>>>>>>>> @XmlAttribute(name = "ref", namespace = MailScanner has detected a possible fraud attempt from "www.w3.org" claiming to be "http://www.w3.org/ns/prov#", required = true)
>>>>>>>>> protected QName ref;
>>>>>>>>>
>>>>>>>>> /**
>>>>>>>>> * Gets the value of the ref property.
>>>>>>>>> *
>>>>>>>>> * @return
>>>>>>>>> * possible object is
>>>>>>>>> * {@link QName }
>>>>>>>>> *
>>>>>>>>> */
>>>>>>>>> public QName getRef() {
>>>>>>>>> return ref;
>>>>>>>>> }
>>>>>>>>>
>>>>>>>>> /**
>>>>>>>>> * Sets the value of the ref property.
>>>>>>>>> *
>>>>>>>>> * @param value
>>>>>>>>> * allowed object is
>>>>>>>>> * {@link QName }
>>>>>>>>> *
>>>>>>>>> */
>>>>>>>>> public void setRef(QName value) {
>>>>>>>>> this.ref = value;
>>>>>>>>> }
>>>>>>>>>
>>>>>>>>> }
>>>>>>>>>
>>>>>>>>> I think our modeling of prov:ref will likewise cause confusion among ORM generated classes.
>>>>>>>>>
>>>>>>>>> --Stephan
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>> Now, I am not expert in jaxb. There may well be standard jaxb annotations that allow us To support a natural object mapping with an xsd choice. If so, we should go for xsd:choice.
>>>>>>>>>>
>>>>>>>>>> Curt's suggestion of a plugin (-simple) is a good, as long as plugin is maintained, which with my jaxb experience, is not encouraging, especially.
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> In the absence of standard jaxb annotations that lead to natural jaxb mappings, my preference is to be conservative and go for ordered prov attributes.
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> Professor Luc Moreau
>>>>>>>>>> Electronics and Computer Science
>>>>>>>>>> University of Southampton
>>>>>>>>>> Southampton SO17 1BJ
>>>>>>>>>> United Kingdom
>>>>>>>>>>
>>>>>>>>>> On 6 Feb 2013, at 20:08, "Stephan Zednik" <zednis@rpi.edu> wrote:
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>> After having played around with JAB and gaining a better understanding of the problem I am more amenable to the idea of requiring element ordering for properties.
>>>>>>>>>>>
>>>>>>>>>>> I am still not sold on the idea of element ordering in documentElements and without that the generated class methods for Bundle will be a 'bag of hurt'.
>>>>>>>>>>>
>>>>>>>>>>> An alternate idea is a to have a section in the FAQ dedicated to providing ORM implementation-specific tips on how to generate 'nice' mappings.
>>>>>>>>>>>
>>>>>>>>>>> The plugin Curt has mentioned could be mentioned in a FAQ entry and we could provide an example of how to use external hints to JAXB. The FAQ could also contain links to a modified schema that uses ordered elements and is only intended to be used as a source for ORM mappings, but not as a schema to validate against.
>>>>>>>>>>>
>>>>>>>>>>> I think I like the second option best as it allows us to respond to ORM-mapping issues after the WG activity has completed and is a natural way to talk about implementation specific ORM issues.
>>>>>>>>>>>
>>>>>>>>>>> --Stephan
>>>>>>>>>>>
>>>>>>>>>>> On Feb 5, 2013, at 11:56 AM, Curt Tilmes <Curt.Tilmes@nasa.gov> wrote:
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>> Luc,
>>>>>>>>>>>>
>>>>>>>>>>>> I haven't tested this yet, but is it possible that the jaxb
>>>>>>>>>>>> "Simplify" plugin could address this problem with jaxb?
>>>>>>>>>>>>
>>>>>>>>>>>> http://confluence.highsource.org/display/J2B/Simplify+Plugin
>>>>>>>>>>>>
>>>>>>>>>>>> It seems (again, untested), that you could use it and specify
>>>>>>>>>>>> some application hints for jaxb ("simplify:as-element-property")
>>>>>>>>>>>> for the attributes that would instruct jaxb to model
>>>>>>>>>>>> each attribute family (type, location, label, etc.) with
>>>>>>>>>>>> its own list rather than bundling them together as it
>>>>>>>>>>>> does by default with choices.
>>>>>>>>>>>>
>>>>>>>>>>>> Curt
>>>>>>>>>>>>
>>>>>>>>>>>> On 02/05/2013 01:37 AM, Luc Moreau wrote:
>>>>>>>>>>>>
>>>>>>>>>>>>> Hi Curt,
>>>>>>>>>>>>>
>>>>>>>>>>>>> Does the schema now impose an order on prov "attributes"?
>>>>>>>>>>>>>
>>>>>>>>>>>>> Without order, I have failed to define an object mapping (with jaxb)
>>>>>>>>>>>>>
>>>>>>>>>>>> that is useful from an OO perspective. Likewise, i have not managed to
>>>>>>>>>>>> define a meaningful ORM mapping. Now, this is my experience with these
>>>>>>>>>>>> tools, maybe somebody has succeeded.
>>>>>>>>>>>>
>>>>>>>>>>>>> In summary, The problem I encountered is as follows. If there is a
>>>>>>>>>>>>>
>>>>>>>>>>>> choice (instead of sequence) between say, prov:type, prov:location,
>>>>>>>>>>>> prov:label, all these elements are mapped to a single java method or a
>>>>>>>>>>>> single sql column. This results in non natural code or SQL queries.
>>>>>>>>>>>>
>>>>>>>>>>>>> Because of this, my preference is to keep these in a sequence. It does
>>>>>>>>>>>>>
>>>>>>>>>>>> not at all reduce expressivity, I think.
>>>>>>>>>>>>
>>>>>>>>>>>>> Professor Luc Moreau
>>>>>>>>>>>>> Electronics and Computer Science
>>>>>>>>>>>>> University of Southampton
>>>>>>>>>>>>> Southampton SO17 1BJ
>>>>>>>>>>>>> United Kingdom
>>>>>>>>>>>>>
>>>>>>>>>>>>> On 5 Feb 2013, at 01:17, "Curt Tilmes" <Curt.Tilmes@nasa.gov> wrote:
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>>> Last week, we also briefly mentioned the PROV-XML element
>>>>>>>>>>>>>> ordering issue, described here:
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> https://www.w3.org/2011/prov/track/issues/572
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> Are there strong opinions about changing anything (either
>>>>>>>>>>>>>> arguments, or attributes or anything else from the way it
>>>>>>>>>>>>>> is now?
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> Tracker, this is ISSUE-572.
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> Curt
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>> --
>>>>>>>>>>>> Curt Tilmes, Ph.D.
>>>>>>>>>>>> U.S. Global Change Research Program
>>>>>>>>>>>> 1717 Pennsylvania Avenue NW, Suite 250
>>>>>>>>>>>> Washington, D.C. 20006, USA
>>>>>>>>>>>>
>>>>>>>>>>>> +1 202-419-3479 (office)
>>>>>>>>>>>> +1 443-987-6228 (cell)
>>>>>>>>>>>> globalchange.gov
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>
>>>>>>>>
>>>>>>>> --
>>>>>>>> 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
>>>>>>>>
>>>>>>
>>>>>>
>>>>>> --
>>>>>> Curt Tilmes, Ph.D.
>>>>>> U.S. Global Change Research Program
>>>>>> 1717 Pennsylvania Avenue, NW, Suite 250
>>>>>> Washington, D.C. 20006, USA
>>>>>
>>>>
>>>
>>>
>>> --
>>> Curt Tilmes, Ph.D.
>>> U.S. Global Change Research Program
>>> 1717 Pennsylvania Avenue NW, Suite 250
>>> Washington, D.C. 20006, USA
>>>
>>> +1 202-419-3479 (office)
>>> +1 443-987-6228 (cell)
>>> globalchange.gov
>>
>
Received on Thursday, 21 February 2013 15:31:13 UTC