|
Home > Archive > MS SQL XML > December 2005 > Schema: Relationship expected on Error
You are viewing an archived Text-only version of the thread.
To view this thread in it's original format and/or if you want to reply to
this thread please [click here]
| Author |
Schema: Relationship expected on Error
|
|
| Dean Hinson 2005-12-15, 11:23 am |
| Hello,
I found the article 'A Survey of Microsoft Server 2000 XML Features (Extreme
XML) to be informative in helping me with XML. However, I am getting the
error 'Schema: relationship expected on 'PSECP200'' when executing my script.
I have attached my schema below and hope that an XML guru will help point
out what I missed.
<?xml version="1.0" encoding="utf-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:sql="urn:schemas-microsoft-com:xml-sql">
<xsd:element name="PSECP100" sql:relation="PSECP100"
type="PSECP100_Data" />
<xsd:complexType name="PSECP100_Data">
<xsd:sequence>
<xsd:element name="ACTIV" sql:relation="ACTIV" type="xsd:string"
/>
<xsd:element name="CMPNO" sql:relation="CMPNO"
type="xsd:unsignedShort" />
<xsd:element name="PLTNO" sql:relation="PLTNO"
type="xsd:unsignedByte" />
<xsd:element name="ECNNO" sql:relation="ECNNO" type="xsd:string"
/>
<xsd:element name="ECCOM" sql:relation="ECCOM" type="xsd:string"
/>
<xsd:element name="ECRSN" sql:relation="ECRSN" type="xsd:string"
/>
<xsd:element name="ECSTS" sql:relation="ECSTS" type="xsd:string"
/>
<xsd:element name="ECUSR" sql:relation="ECUSR" type="xsd:string"
/>
<xsd:element name="ECREQ" sql:relation="ECREQ" type="xsd:string"
/>
<xsd:element name="ECDDT" sql:relation="ECDDT" type="xsd:date" />
<xsd:element name="ECEDT" sql:relation="ECEDT" type="xsd:date" />
<xsd:element name="ECGRP" sql:relation="ECGRP"
type="xsd:unsignedByte" />
<xsd:element name="ECPTY" sql:relation="ECPTY" type="xsd:string"
/>
<xsd:element ref="PSECP200" sql:relationship="PSECP100_PSECP200" />
</xsd:sequence>
<xsd:attribute name="ECNNO" sql:relation="ECNNO" type="xsd:string"
use="required" />
</xsd:complexType>
<xsd:element name="PSECP200" sql:relation="PSECP200" type="PSECP200_Data" />
<xsd:complexType name="PSECP200_Data">
<xsd:sequence>
<xsd:element name="ACTIV" sql:relation="ACTIV" type="xsd:string"
/>
<xsd:element name="CMPNO" sql:relation="CMPNO"
type="xsd:unsignedShort" />
<xsd:element name="PLTNO" sql:relation="PLTNO"
type="xsd:unsignedByte" />
<xsd:element name="ECNNO" sql:relation="ECNNO" type="xsd:string"
/>
<xsd:element name="PARNT" sql:relation="PARNT" type="xsd:string"
/>
<xsd:element name="CHILD" sql:relation="CHILD" type="xsd:string"
/>
<xsd:element name="ECTYP" sql:relation="ECTYP" type="xsd:string"
/>
<xsd:element name="PSREQ" sql:relation="PSREQ"
type="xsd:decimal" />
<xsd:element name="PSBAS" sql:relation="PSBAS"
type="xsd:decimal" />
<xsd:element name="PSENG" sql:relation="PSENG"
type="xsd:decimal" />
<xsd:element name="PSYLD" sql:relation="PSYLD"
type="xsd:decimal" />
<xsd:element name="PSEDT" sql:relation="PSEDT" type="xsd:date" />
<xsd:element name="PSDDT" sql:relation="PSDDT" type="xsd:date" />
<xsd:element name="PSSTS" sql:relation="PSSTS" type="xsd:string"
/>
<xsd:element name="PSSUB" sql:relation="PSSUB" type="xsd:string"
/>
<xsd:element name="PSOPC" sql:relation="PSOPC" type="xsd:string"
/>
</xsd:sequence>
<xsd:attribute name="ECNNO" sql:relation="ECNNO" type="xsd:string"
use="required" />
<xsd:attribute name="PARNT" sql:relation="PARNT" type="xsd:string"
use="required" />
<xsd:attribute name="CHILD" sql:relation="CHILD" type="xsd:string"
use="required" />
</xsd:complexType>
<xsd:annotation>
<xsd:appinfo>
<sql:relationship name="PSECP100_PSECP200"
parent="PSECP100"
parent-key="ECNNO"
child="PSECP200"
child-key="ECNNO" />
</xsd:appinfo>
</xsd:annotation>
</xsd:schema>
| |
| Monica Frintu [MSFT] 2005-12-15, 8:25 pm |
| Hi Dean,
I looked at your schema and I wanted to clarify one thing first:the child
elements of PSECP100 element belong to different tables like you described :
xsd:element name="ACTIV" sql:relation="ACTIV" type="xsd:string" />
or they are fields in the PSECP100 table?
If first is the case then you need to add sql:relationship annotations on
every child element that is mapped to a different table than the parent.
If second is the case then you need to replace sql:relation annotation to
sql:field.This way you map the child elements and attributes to columns in
the parent table.
I hope this helps.
"Dean Hinson" wrote:
> Hello,
>
> I found the article 'A Survey of Microsoft Server 2000 XML Features (Extreme
> XML) to be informative in helping me with XML. However, I am getting the
> error 'Schema: relationship expected on 'PSECP200'' when executing my script.
> I have attached my schema below and hope that an XML guru will help point
> out what I missed.
>
>
> <?xml version="1.0" encoding="utf-8"?>
> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
> xmlns:sql="urn:schemas-microsoft-com:xml-sql">
> <xsd:element name="PSECP100" sql:relation="PSECP100"
> type="PSECP100_Data" />
>
> <xsd:complexType name="PSECP100_Data">
> <xsd:sequence>
> <xsd:element name="ACTIV" sql:relation="ACTIV" type="xsd:string"
> />
> <xsd:element name="CMPNO" sql:relation="CMPNO"
> type="xsd:unsignedShort" />
> <xsd:element name="PLTNO" sql:relation="PLTNO"
> type="xsd:unsignedByte" />
> <xsd:element name="ECNNO" sql:relation="ECNNO" type="xsd:string"
> />
> <xsd:element name="ECCOM" sql:relation="ECCOM" type="xsd:string"
> />
> <xsd:element name="ECRSN" sql:relation="ECRSN" type="xsd:string"
> />
> <xsd:element name="ECSTS" sql:relation="ECSTS" type="xsd:string"
> />
> <xsd:element name="ECUSR" sql:relation="ECUSR" type="xsd:string"
> />
> <xsd:element name="ECREQ" sql:relation="ECREQ" type="xsd:string"
> />
> <xsd:element name="ECDDT" sql:relation="ECDDT" type="xsd:date" />
> <xsd:element name="ECEDT" sql:relation="ECEDT" type="xsd:date" />
> <xsd:element name="ECGRP" sql:relation="ECGRP"
> type="xsd:unsignedByte" />
> <xsd:element name="ECPTY" sql:relation="ECPTY" type="xsd:string"
> />
> <xsd:element ref="PSECP200" sql:relationship="PSECP100_PSECP200" />
> </xsd:sequence>
> <xsd:attribute name="ECNNO" sql:relation="ECNNO" type="xsd:string"
> use="required" />
> </xsd:complexType>
>
> <xsd:element name="PSECP200" sql:relation="PSECP200" type="PSECP200_Data" />
>
> <xsd:complexType name="PSECP200_Data">
> <xsd:sequence>
> <xsd:element name="ACTIV" sql:relation="ACTIV" type="xsd:string"
> />
> <xsd:element name="CMPNO" sql:relation="CMPNO"
> type="xsd:unsignedShort" />
> <xsd:element name="PLTNO" sql:relation="PLTNO"
> type="xsd:unsignedByte" />
> <xsd:element name="ECNNO" sql:relation="ECNNO" type="xsd:string"
> />
> <xsd:element name="PARNT" sql:relation="PARNT" type="xsd:string"
> />
> <xsd:element name="CHILD" sql:relation="CHILD" type="xsd:string"
> />
> <xsd:element name="ECTYP" sql:relation="ECTYP" type="xsd:string"
> />
> <xsd:element name="PSREQ" sql:relation="PSREQ"
> type="xsd:decimal" />
> <xsd:element name="PSBAS" sql:relation="PSBAS"
> type="xsd:decimal" />
> <xsd:element name="PSENG" sql:relation="PSENG"
> type="xsd:decimal" />
> <xsd:element name="PSYLD" sql:relation="PSYLD"
> type="xsd:decimal" />
> <xsd:element name="PSEDT" sql:relation="PSEDT" type="xsd:date" />
> <xsd:element name="PSDDT" sql:relation="PSDDT" type="xsd:date" />
> <xsd:element name="PSSTS" sql:relation="PSSTS" type="xsd:string"
> />
> <xsd:element name="PSSUB" sql:relation="PSSUB" type="xsd:string"
> />
> <xsd:element name="PSOPC" sql:relation="PSOPC" type="xsd:string"
> />
> </xsd:sequence>
> <xsd:attribute name="ECNNO" sql:relation="ECNNO" type="xsd:string"
> use="required" />
> <xsd:attribute name="PARNT" sql:relation="PARNT" type="xsd:string"
> use="required" />
> <xsd:attribute name="CHILD" sql:relation="CHILD" type="xsd:string"
> use="required" />
> </xsd:complexType>
>
> <xsd:annotation>
> <xsd:appinfo>
> <sql:relationship name="PSECP100_PSECP200"
> parent="PSECP100"
> parent-key="ECNNO"
> child="PSECP200"
> child-key="ECNNO" />
> </xsd:appinfo>
> </xsd:annotation>
> </xsd:schema>
>
| |
| Dean Hinson 2005-12-15, 8:25 pm |
| Hi Monica,
After your comments I looked over the schema and found some errrors that you
pointed out. Here is the finished product that seemed to do the trick.....
<?xml version="1.0" encoding="utf-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:sql="urn:schemas-microsoft-com:mapping-schema">
<xsd:annotation>
<xsd:appinfo>
<sql:relationship name="PSECP100_PSECP200"
parent="PSECP100" parent-key="ECNNO"
child="PSECP200" child-key="ECNNO" />
</xsd:appinfo>
</xsd:annotation>
<xsd:element name="Header" sql:relation="PSECP100" type="PSECP100_Data" />
<xsd:complexType name="PSECP100_Data">
<xsd:sequence>
<xsd:element name="ACTIV" sql:field="ACTIV" type="xsd:string" />
<xsd:element name="CMPNO" sql:field="CMPNO"
type="xsd:unsignedShort" />
<xsd:element name="PLTNO" sql:field="PLTNO"
type="xsd:unsignedByte" />
<xsd:element name="ECNNO" sql:field="ECNNO" type="xsd:string" />
<xsd:element name="ECCOM" sql:field="ECCOM" type="xsd:string" />
<xsd:element name="ECRSN" sql:field="ECRSN" type="xsd:string" />
<xsd:element name="ECSTS" sql:field="ECSTS" type="xsd:string" />
<xsd:element name="ECUSR" sql:field="ECUSR" type="xsd:string" />
<xsd:element name="ECREQ" sql:field="ECREQ" type="xsd:string" />
<xsd:element name="ECDDT" sql:field="ECDDT" type="xsd:date" />
<xsd:element name="ECEDT" sql:field="ECEDT" type="xsd:date" />
<xsd:element name="ECGRP" sql:field="ECGRP"
type="xsd:unsignedByte" />
<xsd:element name="ECPTY" sql:field="ECPTY" type="xsd:string" />
<xsd:element ref="Detail" sql:relationship="PSECP100_PSECP200"
maxOccurs="unbounded" />
</xsd:sequence>
<xsd:attribute name="ECNNO" sql:field="ECNNO" type="xsd:string"
use="required" />
</xsd:complexType>
<xsd:element name="Detail" sql:relation="PSECP200" type="PSECP200_Data" />
<xsd:complexType name="PSECP200_Data">
<xsd:sequence>
<xsd:element name="ACTIV" sql:field="ACTIV" type="xsd:string" />
<xsd:element name="CMPNO" sql:field="CMPNO"
type="xsd:unsignedShort" />
<xsd:element name="PLTNO" sql:field="PLTNO"
type="xsd:unsignedByte" />
<xsd:element name="ECNNO" sql:field="ECNNO" type="xsd:string" />
<xsd:element name="PARNT" sql:field="PARNT" type="xsd:string" />
<xsd:element name="CHILD" sql:field="CHILD" type="xsd:string" />
<xsd:element name="ECTYP" sql:field="ECTYP" type="xsd:string" />
<xsd:element name="PSREQ" sql:field="PSREQ" type="xsd:decimal" />
<xsd:element name="PSBAS" sql:field="PSBAS" type="xsd:decimal" />
<xsd:element name="PSENG" sql:field="PSENG" type="xsd:decimal" />
<xsd:element name="PSYLD" sql:field="PSYLD" type="xsd:decimal" />
<xsd:element name="PSEDT" sql:field="PSEDT" type="xsd:date" />
<xsd:element name="PSDDT" sql:field="PSDDT" type="xsd:date" />
<xsd:element name="PSSTS" sql:field="PSSTS" type="xsd:string" />
<xsd:element name="PSSUB" sql:field="PSSUB" type="xsd:string" />
<xsd:element name="PSOPC" sql:field="PSOPC" type="xsd:string" />
</xsd:sequence>
<xsd:attribute name="ECNNO" sql:field="ECNNO" type="xsd:string"
use="required" />
<xsd:attribute name="PARNT" sql:field="PARNT" type="xsd:string"
use="required" />
<xsd:attribute name="CHILD" sql:field="CHILD" type="xsd:string"
use="required" />
</xsd:complexType>
</xsd:schema>
Thanks for your help.
"Monica Frintu [MSFT]" wrote:
[color=darkred]
> Hi Dean,
>
> I looked at your schema and I wanted to clarify one thing first:the child
> elements of PSECP100 element belong to different tables like you described :
> xsd:element name="ACTIV" sql:relation="ACTIV" type="xsd:string" />
> or they are fields in the PSECP100 table?
>
> If first is the case then you need to add sql:relationship annotations on
> every child element that is mapped to a different table than the parent.
> If second is the case then you need to replace sql:relation annotation to
> sql:field.This way you map the child elements and attributes to columns in
> the parent table.
>
> I hope this helps.
>
>
>
>
>
> "Dean Hinson" wrote:
>
|
|
|
|
|