[xsd-users] ID/IDREF problem

Mathew Benson mathew.benson at gmail.com
Sat Mar 8 08:36:25 EST 2014


Thats exactly what it looks like.  I checked and it is a null pointer.  The
corresponding ID is defined and is in my input XML.  When I delete or
rename it, it fails to unmarshall and displays a correct error indicating
the ID is referenced but not found.  But when it is set correctly, passes
validation, and should work, I get a null pointer.

I'm using the xsd published by OMG and CCSDS.  They apparently had not
considered ID and IDREF when it was written because I had to add that
myself anyway.  They were just defined as unique strings.  Below is a
snippet of the xsd section that defines that particular ID:

<complexType name="ParameterSetType">
<choice maxOccurs="unbounded">
<element name="Parameter">
<complexType>
<complexContent>
<extension base="xtce:NameIDDescriptionType">
<sequence>
<element name="ParameterProperties" type="xtce:ParameterPropertiesType"
minOccurs="0"/>
</sequence>
<attribute name="name" type="ID" use="required"/>
</extension>
</complexContent>
</complexType>
</element>
<element name="ParameterRef" type="xtce:ParameterRefType"/>
</choice>
</complexType>

I'm new to the XML schema language.  Is this schema malformed?  The ID
should be the "name" property of the "Parameter" element.


On Sat, Mar 8, 2014 at 12:43 AM, Boris Kolpackov <boris at codesynthesis.com>wrote:

> Hi Mathew,
>
> Mathew Benson <mathew.benson at gmail.com> writes:
>
> > I get a seg fault when I try to dereference the IDREF property.
> >
> > xml_schema::idref& paramRef(this->parameterRef());
> > std::cout << typeid(*paramRef).name() << std::endl;
> >
> > It crashes on the second line.  I'm not really sure how to continue
> > debugging this since I just get a seg fault.  Does anybody have any ideas
> > of what to look at?  Are there any known conditions that cause a seg
> fault
> > when trying to dereference a ::xml_schema::idref variable?
>
> xml_schema::idref is a smart pointer. What is a common condition that
> causes a seg fault when trying to dereference a smart pointer? A NULL
> pointer. Try printing the raw pointer to the object model node that
> idref is supposed to reference:
>
> std::cout << paramRef.get () << std::endl;
>
> If it is NULL, then that means there is no corresponding ID in your
> object model. Print the ID value like that the IDREF refers like
> this:
>
> std::cout << paramRef << std::endl;
>
> Then try to figure out why there is no such ID in your object
> model. One common cause of such problem is making a copy of
> a fragment of the object model rather than using references.
>
> Boris
>


More information about the xsd-users mailing list