OASIS Mailing List ArchivesView the OASIS mailing list archive below
or browse/search using MarkMail.

 


Help: OASIS Mailing Lists Help | MarkMail Help

sdo message

[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [List Home]


Subject: Re: [sdo] XML Fidelity issue: xsi:nil with attributes


Hi James,

I agree with Radu.  Looking at xsi:nil (which started the original discussion), in my opinion this should participate in both the copy and equality operations. 

You mention general EqualityHelper and XMLEqualityHelper, which sounds similar to the domain specific HelperContexts (JPAHelperContext, JAXBHelperContext, DOMHelperContext, etc.)  that I've been contemplating where a DOMHelperContext, could return a DOMEqualityHelper that would know to consider xsi:nil in the comparison.  But if you went this far, you could also have a DOMDataObject that tracked an explicit nil property without requiring a generic mechanism.

-Blaise

James Hart wrote:
CFFDD219128FD94FB4F92B99F52D0A4901D5E983@exchmail01.Blue.Roguewave.Com" type="cite">
Hi Radu,

  I would expect that any Copy helper would copy all state, technical properties are.  If the Copy Helper was implemented for a specific type of data it would be up to the implementation on how it wanted to treat technical properties as it is already up to the implementation how they would want to copy anything.  They could even add their own "isCopy" technical property, whatever they wanted.

  In terms of equality there are two concepts here, the equality of the "meaningful" data and the equality of all state information.  When I speak of technical properties I am speaking of data that has no meaning except to mechanism which added it.  I would expect a general Equality Helper to only compare "meaningful" data to it and since I am proposing that technical properties would only be specific to the mechanism that placed it and not sdo specific.  A general SDO equality could ignore them or not, if there is a general equality helper the committee defines than the committee should decide if technical properties are meaningful for a general SDO DO equality.  An XML equality helper could use any technical properties it knows about, such as xsi:nil, because that technical property has meaning to it because the XMLHelper (or DAS, or View, etc) has placed that technical property, but it may not want to use a technical property it doesn't recognize or has no meaning to XML 
state in the comparison.  The point here is that the equality and if technical properties are meaningful is again up to the implementation and the use case, but there is no need to define what equality means to these implementations by the SDO spec. 

  In terms of serialization, again the technical properties are only meaningful to an outside identity that needs additional information that is not part of the normal SDO state.  Therefore it would be up to the DAS if technical properties are meaningful to it.  If you have some kind of BinaryDAS which must be able to store SDO objects and types exactly than it would be up to the implementation of that DAS to store all state including technical properties.  If the DAS was an XMLDas it maybe required that the XMLDas serialized to a document that matched a certain schema and this technical information to make that happen is stored in the Types as technical properties and certain things such as xsi:nil is stored on the data object.  Therefore the XMLDas would not serialize all this information but uses it to influence how it does serialize the information.  The point I am trying to make here is that again the behavior of the technical properties is determined by the mechanism u
sing it and does not have any complicated predefined requirements or usage spelled out by the SDO.

  I don't think there is really much added complexity at all.  There is as little or as much complexity added by whoever wants to use technical properties, but in terms of SDO I think it is a very simple concept and there are only a few basic things we need to say about them.

~James


-----Original Message-----
From: Radu Preotiuc-Pietro [mailto:radu.preotiuc-pietro@oracle.com] 
Sent: Monday, June 23, 2008 5:46 PM
To: sdo@lists.oasis-open.org
Subject: RE: [sdo] XML Fidelity issue: xsi:nil with attributes

James, you said: "They should be ignored in the normal flow of things". So if I run CopyHelper.copy() on a DataObject that has an xs:nil attribute on it, you would expect that the copy will not have the xsi:nil on it? Same goes for EqualityHelper, it would seem that xsi:nil needs to participate in these operations.

But if we want to generalize this to implementation-defined "system properties", then it is not at all clear what operation should they participate/not participate in. CopyHelper/EqualityHelper are examples, but also XML serialization: should they be serialized or not? I think we may be adding a lot of unjustified complexity here.

Radu

  
-----Original Message-----
From: James Hart [mailto:James.Hart@roguewave.com] 
Sent: Monday, June 23, 2008 3:07 PM
To: Frank Budinsky; sdo@lists.oasis-open.org
Subject: RE: [sdo] XML Fidelity issue: xsi:nil with attributes

Could we add a new signature for getInstanceProperties such 
as getInstanceProperties(bool getTechnical) instead?

Thanks,
  James


-----Original Message-----
From: Frank Budinsky [mailto:frankb@ca.ibm.com]
Sent: Monday, June 23, 2008 4:04 PM
To: sdo@lists.oasis-open.org
Subject: RE: [sdo] XML Fidelity issue: xsi:nil with attributes

Hi James,

To me, "meta" implies a change in the description level - 
that is, meta-data describes data, meta-meta-data, describes 
meta-data, and so on. 
So the name
"meta property" would imply that it is describing a property, 
as opposed to being a special "hidden" property.

Technical property, on the other hand, is not a terrible 
name, but IMO not really very obvious what it is. I'm not 
sure if "system" is really much better, but I think it may be 
a little better.

I'd rather not add a new method to DataObject (it has more 
than enough already), if we can avoid it.

Thanks,
Frank.


"James Hart" <James.Hart@roguewave.com> wrote on 06/23/2008 
05:15:29 PM:

    
I am not sure why "meta properties" didn't catch on.  I 
      
don't really 
    
care what it is called and I don't think this should ever 
      
be confused 
    
with anything XMLcentric, it is and SDO thing that 
      
XML/XSDDas/Helper 
    
would simply be utilizing.

getTechnical(Meta|System)Properties would be on the same objects as 
getInstanceProperties is, so DataObject and Type, is 
getInstanceProperties on anything else?  The proposal is that these 
Meta Properties are simply instance properties where
is(Meta|Technical|Whatever) property of the instance 
      
property is true 
    
and these type of instance properties can be added at 
      
anytime even on 
    
closed types and data objects.  They should be ignored in 
      
the normal 
    
flow of things that is why they wouldn't be part of the 
getInstanceProperties list.

I wouldn't want to tie these to anything xmlcentric such as the xml 
attribute solution.  Simply making them special kinds of instance 
properties makes it very robust and general for any 
      
mechanism to take 
    
advantage of.  If it is decided to make xmlcentric than 
      
going back to 
    
a isNill/setNill api would be as desirable to me (as in not very 
desirable).


Thanks,
  James

-----Original Message-----
From: Frank Budinsky [mailto:frankb@ca.ibm.com]
Sent: Monday, June 23, 2008 2:54 PM
To: sdo@lists.oasis-open.org
Subject: RE: [sdo] XML Fidelity issue: xsi:nil with attributes

Hi Guys,

I think something like "system properties" might be a 
      
better name than 
    
"technical properties". XML has 4 intrinsic system/technical 
properties,
      
namely the 4 attributes in the xsi namespace: xsi:type, xsi:nil, 
xsi:schemaLocation, and xsi:noNamespaceSchemaLocation. These 4 are 
built-in attributes that all XML processors allow. I think 
      
we need to
say 
    
that those 4 are system properties by default. If users 
      
want to define 
    
additional ones, they can do it with Ron's proposed sdo annotation 
(but note that they can result in invalid XML serializations).

I'm not really crazy about adding a new API for this to SDO. Where 
would
      
getTechnicalProperties() go? DataObject, DataHelper, or 
      
somewhere else? 
I 
    
wonder if we could require technical/system properties to 
      
map to XML 
    
attributes? If so, maybe we could access them using a solution we 
might come up with for SDO-132?

Frank




"James Hart" <James.Hart@roguewave.com>
06/19/2008 09:23 AM

To
"Barack, Ron" <ron.barack@sap.com>, Frank 
      
Budinsky/Toronto/IBM@IBMCA, 
    
<sdo@lists.oasis-open.org> cc

Subject
RE: [sdo] XML Fidelity issue: xsi:nil with attributes






I really like this more generalized approach with "Option 2".

It would also be nice if there was an additional API similar to
getInstanceProperties() that would be PropertyList 
getTechnicalProperties().  In the long run it would even be nicer if
      
there 
    
becomes a getTechnicalProperties(Namespace) api.  That way 
      
a user of 
    
the
      
technical properties wouldn't have to getProperty(TProp) on 
      
everything
it 
    
may know about, but instead get a list, loop through them 
      
and see if 
    
it recognizes any of them.

  One benefit comes if there is a larger overhead in 
      
multiple calls to
    
getProperty() than a single getTechnicalProperties() call. Another
      
benefit 
    
is if a DAS may recognize 100 technical properties but likely there 
will
      
only be one or two ever set on any type or data object it 
      
will save a 
    
large amount of time to get a list and check if it recognizes those.

Thanks,
  James

-----Original Message-----
From: Barack, Ron [mailto:ron.barack@sap.com]
Sent: Thursday, June 19, 2008 4:25 AM
To: Frank Budinsky; sdo@lists.oasis-open.org
Subject: AW: [sdo] XML Fidelity issue: xsi:nil with attributes

Hi,

I would like to propose generalizing Option 2 below as follows.  We
      
define 
    
an open content property
{commonj.sdo}technicalProperty with type "boolean".

When an open content property is annotated with
      
technicalProperty="true", 
    
then the property may be set on any object, regardless of 
      
whether the 
    
object's type is open or not.  This is the behavior described under 
"Option 2", except now it is not based on a pre-defined set of
      
properties 
    
hardcoded into SDO, but rather on the "technicalProperty" mechanism.

Technical properties DO NOT appear in an object's instance 
      
properties. 
    
Instance properties are typically business relevant, technical
      
properties 
    
are not.  Technical properties can only be retrieved or set through 
the
DataObject.get(Property) or the DataObject.set(Property, 
      
Object) APIs.
    
We must further define the open content property 
{http://www.w3.org/2001/XMLSchema-instance}nil" and declare 
      
it to have 
    
technicalProperty="true".

Best Regards,
Ron

-----Ursprüngliche Nachricht-----
Von: Frank Budinsky [mailto:frankb@ca.ibm.com]
Gesendet: Montag, 16. Juni 2008 21:02
An: sdo@lists.oasis-open.org
Betreff: RE: [sdo] XML Fidelity issue: xsi:nil with attributes

Hi James,

If I understand you, you're suggesting 1) a generic mechanism for 
adding
      
meta information to meta information, and 2) a separate API for
      
accessing 
    
instances of this meta information.

For 1), I think the instanceProperty support we added to Type and
      
Property 
    
is mostly what we need (except, I suppose, it's missing a 
      
set() API if
the 
    
types are defined with XSD).

For 2), I'm not sure I see the value of adding the complexity of a 
separate API for this. Simply using DataObject.get/set() 
      
seems like a
very 
    
clean and simple approach to me.

Frank.




"James Hart" <James.Hart@roguewave.com>
06/11/2008 10:15 AM

To
"Barack, Ron" <ron.barack@sap.com>, <sdo@lists.oasis-open.org> cc

Subject
RE: [sdo] XML Fidelity issue: xsi:nil with attributes






I like option two, but can we make it more generic?  Could we just 
have
      
a 
    
method on Type and Property such as
set/getMetaProperty<val_type>(property, xmlnamespace, name, value). 
This
      
would be an instance property but only accessable through 
      
this API and 
    
only should be used for auxiliary information that is 
      
critical to the
data 
    
itself.

In this way we could say something like any meta property 
      
can be added
to 
    
any kind of property.  By best practice it would only store meta 
information that would only be important to a DAS or a user that 
expects
      
auxiliary information from a DAS. We could even expand that and say 
that
      
certain projects would use these meta data to hold their own custom
      
states 
    
and this is also how the projections can "share" information with 
other projections.

So in terms of the nil property now when the XSDHelper 
      
reads in an xsd
it 
    
could do:
 Type<bool>.addMetaProperty(nillableElementProperty, xsdnamespace, 
"nillable", true);

And when the XSDHelper reads in a file where something is 
      
set, when it
is 
    
creating the DataObject it could do something like:
DataObject.<bool>setMetaProperty("thiselementwasnill", 
      
xsdnamespace, 
    
"nill", true);

So now if the user wants to tell the XMLDas to marshall out 
      
something 
    
as
      
nill they would:
DataObject.<bool>setMetaProperty("thiselementwasnill", 
      
xsdnamespace, 
    
"nill", true);

And then the XMLHelper on read just simply would check to 
      
see if the 
    
"nillable" meta information is on the type and if it is 
      
check to see 
    
if the xsd:nill meta information is set to true on the 
      
actual property
where 
    
the elements dataObjectType is located.

Now the user can use introspection on the meta properties 
      
to get meta 
    
information that was XML or any other medium specific meta 
      
information.
    
But I think the really cool thing about this is that any 
      
kind of DAS 
    
can
      
add any kind of information and now interop with compatible meta 
information from other DAS's.

So I guess the solution I am proposing is a more robust system that
      
allows 
    
for meta information that isn't XML centric but generic 
      
enough to hold
any 
    
kind of meta information.  One might argue since you can 
      
put instance 
    
properties on types that this already a way to provide meta 
      
information.

    
However, there is no real way currently to provide instanced meta 
information on properties on a DataObject that has no 
      
relation to the 
    
stored information.

Of course this is all just very preliminary in of an idea and maybe
      
there 
    
are still use cases it doesn't cover well, but if this system was in
      
place 
    
for 2.1 I think I could of implemented an XSDHelper in such a way it
      
would 
    
of provided all the meta information needed so XMLHelper could of 
inspected a type created by the XSDHelper and generated a valid XML 
instance document, which is valuable because we have ran 
      
into a couple
of 
    
customer use cases for that.

Thanks,
  James



-----Original Message-----
From: Barack, Ron [mailto:ron.barack@sap.com]
Sent: Wednesday, June 11, 2008 6:47 AM
To: sdo@lists.oasis-open.org
Subject: AW: [sdo] XML Fidelity issue: xsi:nil with attributes

Hi SDO-ers,

I want to bring up some additional options for dealing with 
      
xsi:nil. 
    
OPTION 1:

This is more or less motivated by how JAXB deals with 
      
xsi:nil.  JAXB 
    
defines JAXBElement, which more or less corresponds to the 
      
elements in
our 
    
own beloved Sequence.  JAXBElement has a property "isNil", by 
extension,
      
we could add an "isNil(int index)" to Sequence, plus a 
      
corresponding 
    
setter.

The implication would be that types that have elements with 
xsi:nillable="true" would be sequenced.  Since there are costs
      
associated 
    
with sequenced types, we might make to make this rule more 
      
precise.  
    
We could say, that nillable implies sequenced only if the element's 
type
      
does 
    
not extend a simple type.

OPTION 2:

We define a set of global properties that can be set on objects 
whether
      
or 
    
not object.getType().isOpen() is true.  Among these global 
      
properties 
    
would be "xsi:nil" and maybe others, like "xml:lang".  So, 
      
to set an 
    
object to nill, you'd have to look up the global property (using 
TypeHelper or XSDHelper):

                 Property nilProperty = 
XSDHelper.INSTANCE.getGlobalProperty(
                                            "
http://www.w3.org/2001/XMLSchema-instance","nil",false);
      dataObject.set(nilProperty,true);

It's not easy, but doesn't have to be easy, since I consider this 
pretty
      
much a corner case.  The next question is whether or not such 
properties
      
should appear in the instance properties of an object.  My first 
impression is that they should not, they are not business 
      
properties 
    
but
      
only relevant to XML serialization.  But maybe someone can 
      
convince me 
    
that they are business relevant.

It would be the user's responsibility to set this only where the 
object
      
is 
    
used as the value of a nillable property.

I like the second proposal, I think we are introducing 
      
something that
can 
    
also be used to solve other problems.  My reservation is 
      
that we are 
    
effectively making everything "half-open"... But isn't that the way 
XML is?


Ron
-----Ursprüngliche Nachricht-----
Von: Frank Budinsky [mailto:frankb@ca.ibm.com]
Gesendet: Montag, 9. Juni 2008 22:56
An: sdo@lists.oasis-open.org
Betreff: Re: WG: [sdo] XML Fidelity issue: xsi:nil with attributes

Hi Guys,

There are no restrictions on xsd:nillable. Any element 
      
declaration can 
    
have "nillable=true". It can have simple or complex type. So Ron is
      
right 
    
that Blaise's option 2 is ruled out.

My feeling is the getValue()/setValue() approach that Ron is 
suggesting
      
is 
    
a very XML-specific concept, since it's still only used for XML
      
purposes: 
    
1) complexTypes with simpleContent and 2) for xsi:nil. If 
      
that's true, 
    
then it really doesn't seem right to add it to the 
      
DataObject interface.
    
Yes, the project(Node.class) I'm suggesting would be 
      
providing a "live" 
    
Node-view of the DataObject. I don't really think it's that 
      
hard. It's 
    
very similar to the Sequence-view - just a slightly 
      
different "standard"

    
API. I'd like to discuss it in this weeks call, if we can spend a 
little
      
bit of time on it.

Thanks,
Frank.




"Barack, Ron" <ron.barack@sap.com>
06/09/2008 08:48 AM

To
<sdo@lists.oasis-open.org>
cc

Subject
WG: [sdo] XML Fidelity issue: xsi:nil with attributes






Hi Blaise, Everyone

Looking at the example in section 2.7, we see IntegerRange 
      
is simply a 
    
complex type, not a complex type that extends a simple type.  
Therefore,
      
AFAICS, it has no value property. 

We couldn't find any limitations on which elements can be marked 
"nillable".  But we are not the XSD experts, perhaps someone in the
      
group 
    
can identify what (if any) restrictions exist.  In any 
      
case, I assume 
    
Frank's example to be valid.  In this case, option 2 falls 
      
out, and we 
    
have no way to express both that the "min" is set and that 
      
the value 
    
of the property is nil.  I think we need some API changes.

My gut feeling, however, is that Blaise is on the right track, in 
considering nillable and simple content together.  The 
      
current way of 
    
handling complex types that extend simple context, through the 
introduction of an artificial "value" property, is 
      
problematic because
it 
    
leads to name conflicts.  We already have this on our list 
      
of issues 
    
to
      
be 
    
addressed in 3.0.  Perhaps we can address these issues 
      
together.  One
idea 
    
would be to create a DataObject.getValue() and a 
DataObject.setValue(Object x).   We could define this value 
      
as follows
    
   a) if DataObject.getType() extends simple content, the 
      
value is the 
    
value of the simple context.
   b) if the DataObject.getType() does not extend simple 
      
content, then 
    
unless the user does something, the DataObject.getValue() 
      
returns the 
    
DataObject.
   c) the user may call DataObject.setValue(null):  this 
      
sets xsi:nil 
    
to
      
true when serialized to XML.
   d) unless the type extends simple context, it is an error to set 
the "value" of a data object to anything other value (eg, 
      
to another 
    
data object).

If we want to seperate the issues, then it seems odd to have 
XMLHelper.isNil take a DataObject as a parameter.  Whether 
      
something 
    
is nil seems not to be a character of the DataObject, but rather of 
the the
      
property where the data object is set.  That is, we can 
      
take an object 
    
that is used as the value of a non-nillable property, and set it as 
the value of a property that is nillable.  Or the other way 
      
around.  
    
This
      
sort 
    
of leads to the XMLHelper.isNil(DataObject, Property) 
      
approach, with 
    
corresponding setter and getter. I don't see the use case 
      
as being so 
    
important that we need to add the additional convenience methods.

The suggesting to "project" to a DOM tree is interesting.  I'm 
wondering
      
how it differs from simply XMLHelper.save'ing to a 
      
DOMResult.  Frank,
are 
    
you imagining that the resulting DOM tree will be "live", that is, 
that changes to the DOM tree will be tracked, and 
      
immediately visible 
    
in the original SDO object?  This seems very ambitious!

Best Regards,
Ron


Von: Blaise Doughan [mailto:blaise.doughan@oracle.com]
Gesendet: Freitag, 6. Juni 2008 22:25
An: Frank Budinsky
Cc: James Hart; sdo@lists.oasis-open.org
Betreff: Re: [sdo] XML Fidelity issue: xsi:nil with attributes

Hi Frank,

For the following example from your doc (section 2.7), I 
      
think there 
    
are
      
two options: 

<query>
  <intRange min="1" xsi:nil="true"/>
</query>

Option #1 - The property called "intRange" of type 
      
"IntegerRange" is 
    
set
      
and null. This option will not round trip, since the "min" 
      
property is 
    
lost.
Option #2 - The property called "intRange" is set to an instance of 
"IntegerRange" and the "min" property is set to "1" and the "value"
property is set to null.  This option will round trip.

Then the problem is with the following use case?  Both of 
      
the options 
    
below would marshal to the same XML document, but we would need to
      
choose 
    
one for the unmarshal operation.

<query>
  <intRange xsi:nil="true"/>
</query>

Option #1 - The property called "intRange" of type 
      
"IntegerRange" is 
    
set
      
and null.
Option #2 - The property called "intRange" is set to an instance of 
"IntegerRange" and the "min" property is unset, and value 
      
property is
set 
    
to null.  This option will round trip.

---

I do not believe there is a need for the get/setNil operations.

---

I see where you are going with the project to Node.class 
      
concept.  Our 
    
EclipseLink implementation is built on top of our object-to-XML 
mapping
(MOXy) technology (which also supports JAXB).  We would offer the 
corresponding functionality to our users through our 
      
implementation of
the 
    
JAXB Binder (which was designed for just this purpose).  
      
The advantage
of 
    
the JAXB Binder approach is that it provides a specific 
      
scope in which
the 
    
objects and the DOM are linked.  If I use marshaller a new DOM is
      
produced 
    
for each marshal operation, but binder will return the one 
      
linked to 
    
my object.

-Blaise


Frank Budinsky wrote: 
Hi James,

Thanks for the quick response. I'm not sure I understand this part:


When we marshal out then it is a simple matter of checking if the 
property isSet() and isNullable() to know if we need to print out 
xsi:nil="true".


In addition to knowing that the property isSet and isNullable, you 
need
      
to 
    

know if the value is nil ... right? The case where the value is 
acutally
      
set to null is easy, but the case that I'm looking for a 
      
solution to 
    
is that the value is an object where only attribute properties are 
set,
      
while 
    

the element content should be xsi:nil. I think this may be 
      
an XML-only 
    
concept.

The more I think about this, I'm starting to wonder if this is too 
XML-specific to add to SDO? If we introduce an isNil method, like I 
suggested, that only covers the read case. We would then 
      
want to start 
    
thinking about adding some kind of setNil() method as well, e.g., 
xmlHelper.setNil(myDO, "someProperty", true);

So, I'm starting to wonder if an Option 4 that allows XML users to 
fall back to something like DOM and then just use it to 
      
look for the 
    
xsi:nil attribute, would be a better approach.

For other reasons, I have been thinking about suggesting we 
      
add a new 
    
method to DataObject that allows one to project a 
      
DataObject to other
    
interfaces:

    <T> T project(Class<T> targetClass);

I had been thinking that such a method could be used to 
      
project to a 
    
Sequence "view" of the DataObject (and we could deprecate the
      
getSequence 
    
method):

    Sequence sequence = myDO.project(Sequence.class);

or it could be used to project to a static interface 
      
(instead of just 
    
casting - this would allow implementation to use a 
      
different instance
for 
    
the static object):

    Company company = myDO.project(Company.class);

and now, I think this could be the way we allow XML users 
      
to work with 
    
advanced XML features:

    Node node = myDO.project(Node.class);

What do others think about this suggestion and this issue 
      
in general?
    
Thanks,
Frank.





"James Hart" <James.Hart@Roguewave.Com>
06/04/2008 10:57 AM

To
Frank Budinsky/Toronto/IBM@IBMCA, <sdo@lists.oasis-open.org> cc

Subject
RE: [sdo] XML Fidelity issue: xsi:nil with attributes






Our implementation has custom support for this already.  
      
I'll describe 
    
what we do that seems to work well.

In our SDO implementation on our PropertyImpl we support a 
      
isNullable 
    
state which defaults to false. It also contains a 
      
isNullable() method 
    
that returns this state.  The state can only be set during 
construction, but it defaults to false.  On our Impl's for 
      
DataFactory 
    
and TypeManager all of our addProperty* methods have an additional 
method which includes a isNullable parameter so it can be 
      
told to create a nullable property.
    
Our XSDHelper when constructing types simply creates the property 
using the TypeImpl API for addProperty that also exposes the 
isNullable parameter.

When we marshal out then it is a simple matter of checking if the 
property isSet() and isNullable() to know if we need to print out 
xsi:nil="true".  Otherwise we can print out whatever the 
      
default value 
    
is.

I'd like to point out it doesn't matter in this case if the 
      
Property 
    
is has a type of DataObject or DataObjectType so it is more generic 
than the concept of xml's attributes, we just needed this 
      
concept to 
    
support these kind of xml documents.

Saying that I don't think we need a special isNil() method, 
      
that would 
    
just be icing ;)

I do think that the concept of data being "nill" or 
      
nullable for other 
    
data sets than xml is viable.  For example, a DB has 
      
nullable columns 
    
and have defaults vs. columns that have defaults and are 
      
not nullable 
    
much in the same fashion of nillable attributes in schema.  
      
So I would 
    
prefer the benefits of making the concept nillable part of SDO's 
properties and not something that is only DAS dependant.

 I can also say option #2 works well because that is 
      
essentially what 
    
we do and it allows us to support these concepts in both 
      
our XSDHelper 
    
XMLHelper XMLDas and DBDas.  The biggest drawback is that 
      
it increases 
    
the size of the in memory for every single property which 
      
is a concern 
    
when having to support very large data sets, but I think that 
currently is an issue with all of the state information and 
      
could be 
    
trivialized and a responsibility  to solve as an 
      
implementation issue 
    
and not something that the spec has to solve.

 Thanks,
   James



-----Original Message-----
From: Frank Budinsky [mailto:frankb@ca.ibm.com]
Sent: Tuesday, June 03, 2008 7:18 PM
To: sdo@lists.oasis-open.org
Subject: [sdo] XML Fidelity issue: xsi:nil with attributes

Hi Guys,

I'd like to start discussing some of the XML fidelity issues. The 
first one, hopefully easy, is to come up with a way to 
      
handle nillable 
    
elements with attributes. The problem is described in 
      
section 2.7 in 
    
this doc:


      
http://www.oasis-open.org/apps/org/workgroup/sdo/download.php/26722/SD
    
O_
XML_Issues.doc

Here is my first thoughts on possible solutions:

Option 1: Add a helper method (to XMLHelper or maybe 
      
DataHelper if we 
    
think this may not be an XML-only issue) to determine if a 
      
value is nil:
    
boolean isNil(Object value);

This method would return true if value == null or if value is a 
DataObject with an xsi:nil tag. Users could use it something like 
this:

if (xmlHelper.isNil(myDO.get("someValue"))) {
    // someValue is nil
}

Option 2: We could have a method that takes a DataObject and a 
property path as arguments to determine if a property is 
      
nil without 
    
actually getting the value:

boolean isNil(DataObject object, String path);

if (xmlHelper.isNil(myDO, "someValue")) {
    // someValue is nil
}

If we go with this approach we would probably want 3 methods:

boolean isNil(DataObject object, String path); boolean 
isNil(DataObject object, Property property); boolean 
      
isNil(DataObject 
    
object, int index);

Option 3: Add the methods to DataObject:

boolean isNil(String path);
boolean isNil(Property property);
boolean isNil(int index);

if (myDO.isNil("someValue")) {
    // someValue is nil
}

This is nice and clean but would only make sense if we can think of 
other data domains (other than XML) where the concept of nil 
(different from
null) applies.

Please let me know what you guys think about these 
      
suggestions, or if 
    
you have any other ideas.

Thanks,
Frank.


      
---------------------------------------------------------------------
    
To unsubscribe from this mail list, you must leave the 
      
OASIS TC that 
    
generates this mail.  You may a link to this group and all 
      
your TCs in 
    
OASIS
at:

      
https://www.oasis-open.org/apps/org/workgroup/portal/my_workgroups.php
    



      
---------------------------------------------------------------------
    
To unsubscribe from this mail list, you must leave the 
      
OASIS TC that 
    
generates this mail.  You may a link to this group and all 
      
your TCs in 
    
OASIS
at:

      
https://www.oasis-open.org/apps/org/workgroup/portal/my_workgroups.php
    



      
---------------------------------------------------------------------
    
To unsubscribe from this mail list, you must leave the 
      
OASIS TC that 
    
generates this mail.  You may a link to this group and all 
      
your TCs in 
    
OASIS
at:

      
https://www.oasis-open.org/apps/org/workgroup/portal/my_workgroups.php
    

      
---------------------------------------------------------------------
    
To unsubscribe from this mail list, you must leave the 
      
OASIS TC that 
    
generates this mail.  You may a link to this group and all 
      
your TCs in 
    
OASIS
at:

      
https://www.oasis-open.org/apps/org/workgroup/portal/my_workgroups.php
    

      
---------------------------------------------------------------------
    
To unsubscribe from this mail list, you must leave the 
      
OASIS TC that 
    
generates this mail.  You may a link to this group and all 
      
your TCs in 
    
OASIS
at:

      
https://www.oasis-open.org/apps/org/workgroup/portal/my_workgroups.php
    



      
---------------------------------------------------------------------
    
To unsubscribe from this mail list, you must leave the 
      
OASIS TC that 
    
generates this mail.  You may a link to this group and all 
      
your TCs in 
    
OASIS
at:

      
https://www.oasis-open.org/apps/org/workgroup/portal/my_workgroups.php
    

      
---------------------------------------------------------------------
    
To unsubscribe from this mail list, you must leave the 
      
OASIS TC that 
    
generates this mail.  You may a link to this group and all 
      
your TCs in 
    
OASIS
at:

      
https://www.oasis-open.org/apps/org/workgroup/portal/my_workgroups.php
    

      
---------------------------------------------------------------------
    
To unsubscribe from this mail list, you must leave the 
      
OASIS TC that 
    
generates this mail.  You may a link to this group and all 
      
your TCs in 
    
OASIS
at:

      
https://www.oasis-open.org/apps/org/workgroup/portal/my_workgroups.php
    



      
---------------------------------------------------------------------
    
To unsubscribe from this mail list, you must leave the 
      
OASIS TC that 
    
generates this mail.  You may a link to this group and all 
      
your TCs in
OASIS
    
at:

      
https://www.oasis-open.org/apps/org/workgroup/portal/my_workgroups.php
    
---------------------------------------------------------------------
To unsubscribe from this mail list, you must leave the OASIS TC that
generates this mail.  You may a link to this group and all 
your TCs in OASIS
at:
https://www.oasis-open.org/apps/org/workgroup/portal/my_workgr
oups.php 


---------------------------------------------------------------------
To unsubscribe from this mail list, you must leave the OASIS TC that
generates this mail.  You may a link to this group and all 
your TCs in OASIS
at:
https://www.oasis-open.org/apps/org/workgroup/portal/my_workgroups.php



    


---------------------------------------------------------------------
To unsubscribe from this mail list, you must leave the OASIS TC that
generates this mail.  You may a link to this group and all your TCs in OASIS
at:
https://www.oasis-open.org/apps/org/workgroup/portal/my_workgroups.php 


---------------------------------------------------------------------
To unsubscribe from this mail list, you must leave the OASIS TC that
generates this mail.  You may a link to this group and all your TCs in OASIS
at:
https://www.oasis-open.org/apps/org/workgroup/portal/my_workgroups.php 

  


[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [List Home]