Home All Groups Group Topic Archive Search About

new to SQL XML Validation. Please help with error

Author
19 Nov 2007 5:14 PM
Farmer
Hi.



thanks for your help. I appreciate you time and effort in helping me.



I am trying to create xsd schema and validate an xml as typed. I have been reading as much as I could in SQL BOL and seem to define it correctly. I can schema collection and it appears to be valid.



However, when I try to use it to validate XML, I get the specified error



Msg 6913, Level 16, State 1, Line 30

XML Validation: Declaration not found for element 'root'. Location: /*:root[1]

I seem to declare root element in schema. Why do I get this error?



Please help me.



thanks

Farmer





IF EXISTS

(

    SELECT *

    FROM sys.xml_schema_collections c

    JOIN sys.schemas s ON s.schema_id = c.schema_id

    WHERE s.[name] = N'dbo'

    AND c.[name] = N'SchemaCollection_Test'

)

    DROP XML SCHEMA COLLECTION dbo.SchemaCollection_Test

GO

DECLARE @SchemaCollection_Test nvarchar(max)

SET @SchemaCollection_Test =

N'<?xml version="1.0" encoding="UTF-16"?>

<xsd:schema targetNamespace="urn:schemas-2020Technologies-com:sql:Test" xmlns:schema="urn:schemas-2020Technologies-com:sql:Test"

    xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:sqltypes="http://schemas.microsoft.com/sqlserver/2004/sqltypes" elementFormDefault="qualified">

      <xsd:element name="root">

            <xsd:complexType>

                  <xsd:sequence>

                        <xsd:element name="Identity">

                              <xsd:complexType>

                                    <xsd:sequence>

                                          <xsd:element ref="schema:Config"/>

                                    </xsd:sequence>

                                    <xsd:attribute name="docID" use="required">

                            <xsd:simpleType>

                              <xsd:restriction base="sqltypes:char" sqltypes:localeId="1033" sqltypes:sqlCompareOptions="IgnoreCase IgnoreKanaType IgnoreWidth" sqltypes:sqlSortId="52">

                                <xsd:maxLength value="36" />

                              </xsd:restriction>

                            </xsd:simpleType>

                                    </xsd:attribute>

                                    <xsd:attribute name="docVersion" use="required">

                                          <xsd:simpleType>

                                                <xsd:restriction base="xsd:string"/>

                                          </xsd:simpleType>

                                    </xsd:attribute>

                                    <xsd:attribute name="CreatedOn" type="sqltypes:smalldatetime" use="required">

                                    </xsd:attribute>

                              </xsd:complexType>

                        </xsd:element>

                  </xsd:sequence>

            </xsd:complexType>

      </xsd:element>

      <xsd:element name="Config">

            <xsd:complexType>

                  <xsd:attribute name="AutoImport">

                        <xsd:simpleType>

                              <xsd:restriction base="xsd:byte"/>

                        </xsd:simpleType>

                  </xsd:attribute>

                  <xsd:attribute name="Action">

                        <xsd:simpleType>

                              <xsd:restriction base="xsd:string"/>

                        </xsd:simpleType>

                  </xsd:attribute>

            </xsd:complexType>

      </xsd:element>

</xsd:schema>

';





IF NOT EXISTS

(

    SELECT *

    FROM sys.xml_schema_collections c

    JOIN sys.schemas s ON s.schema_id = c.schema_id

    WHERE s.[name] = N'dbo'

    AND c.[name] = N'SchemaCollection_Test'

)

    CREATE XML SCHEMA COLLECTION dbo.SchemaCollection_Test AS @SchemaCollection_Test

GO









GO



-- Verify - list of collections in the database.

select *

from sys.xml_schema_collections

-- Verify - list of namespaces in the database.

select name

from sys.xml_schema_namespaces



SELECT xml_schema_namespace(N'dbo',N'SchemaCollection_Test')

DECLARE @xml xml

SET @xml =

(

    SELECT

        (

            SELECT

                 newID()            as [@docID]

                ,'4.3.0'            as [@docVersion]

                ,getdate()          as [@CreatedOn]

                ,(

                    SELECT

                        cast(0 as bit) as [@AutoImport]

                        ,'ADD'  as [@Action]

                    FOR XML PATH ('Config'), TYPE

                )

            FOR XML PATH ('Identity'), TYPE

        )

    FOR XML PATH (''), ROOT, TYPE

)

SELECT @xml as untyped

SELECT cast(@xml as xml (dbo.SchemaCollection_Test)) as typed







Msg 6913, Level 16, State 1, Line 30

XML Validation: Declaration not found for element 'root'. Location: /*:root[1]

Author
19 Nov 2007 5:33 PM
Martin Honnen
Farmer wrote:

Show quote
> I am trying to create xsd schema and validate an xml as typed. I have
> been reading as much as I could in SQL BOL and seem to define it
> correctly. I can schema collection and it appears to be valid.
>

>
> However, when I try to use it to validate XML, I get the specified error
>

>
> Msg 6913, Level 16, State 1, Line 30
>
> XML Validation: Declaration not found for element 'root'. Location:
> /*:root[1]
>
> I seem to declare root element in schema. Why do I get this error?


Your schema below defines elements in its targetNamespace
urn:schemas-2020Technologies-com:sql:Test so it defines a root element
in that namespace.

> N'<?xml version="1.0" encoding="UTF-16"?>
>
> <xsd:schema targetNamespace="urn:schemas-2020Technologies-com:sql:Test"
> xmlns:schema="urn:schemas-2020Technologies-com:sql:Test"
>
>     xmlns:xsd="http://www.w3.org/2001/XMLSchema"
> xmlns:sqltypes="http://schemas.microsoft.com/sqlserver/2004/sqltypes"
> elementFormDefault="qualified">


Later on when you construct the XML instance you seem to construct a
root element in no namespace so you need to change that, construct
elements in the targetNamespace of the schema.

You can do that using WITH XMLNAMESPACES e.g.


WITH XMLNAMESPACES (DEFAULT 'urn:schemas-2020Technologies-com:sql:Test')
Show quote
> SET @xml =
>
> (
>
>     SELECT
>
>         (
>
>             SELECT
>
>                  newID()            as [@docID]
>
>                 ,'4.3.0'            as [@docVersion]
>
>                 ,getdate()          as [@CreatedOn]
>
>                 ,(
>
>                     SELECT
>
>                         cast(0 as bit) as [@AutoImport]
>
>                         ,'ADD'  as [@Action]
>
>                     FOR XML PATH ('Config'), TYPE
>
>                 )
>
>             FOR XML PATH ('Identity'), TYPE
>
>         )
>
>     FOR XML PATH (''), ROOT, TYPE
>
> )
>
> SELECT @xml as untyped
>
> SELECT cast(@xml as xml (dbo.SchemaCollection_Test)) as typed


--

    Martin Honnen --- MVP XML
    http://JavaScript.FAQTs.com/
Author
19 Nov 2007 7:21 PM
Farmer
Thanks Martin. Awesome!

I see what you are suggesting.

the next roadblock is that now I can't seem to figure the SET syntax any
more.
Any idea?

It's complaining about

Msg 156, Level 15, State 1, Line 31
Incorrect syntax near the keyword 'WITH'.
Msg 319, Level 15, State 1, Line 31
Incorrect syntax near the keyword 'with'. If this statement is a common
table expression or an xmlnamespaces clause, the previous statement must be
terminated with a semicolon.
Msg 102, Level 15, State 1, Line 47
Incorrect syntax near ')'.



IF EXISTS
(
    SELECT *
    FROM sys.xml_schema_collections c
    JOIN sys.schemas s ON s.schema_id = c.schema_id
    WHERE s.[name] = N'dbo'
    AND c.[name] = N'SchemaCollection_Test'
)
    DROP XML SCHEMA COLLECTION dbo.SchemaCollection_Test
GO
DECLARE @SchemaCollection_Test nvarchar(max)
SET @SchemaCollection_Test =
N'<?xml version="1.0" encoding="UTF-16"?>
<xsd:schema targetNamespace="urn:schemas-2020Technologies-com:sql:Test"
xmlns:schema="urn:schemas-2020Technologies-com:sql:Test"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:sqltypes="http://schemas.microsoft.com/sqlserver/2004/sqltypes"
elementFormDefault="qualified">
    <xsd:import
namespace="http://schemas.microsoft.com/sqlserver/2004/sqltypes"
schemaLocation="http://schemas.microsoft.com/sqlserver/2004/sqltypes/sqltypes.xsd"
/>
<xsd:element name="root">
  <xsd:complexType>
   <xsd:sequence>
    <xsd:element name="Identity">
     <xsd:complexType>
      <xsd:sequence>
       <xsd:element ref="schema:Config"/>
      </xsd:sequence>
      <xsd:attribute name="docID" use="required">
                            <xsd:simpleType>
                              <xsd:restriction base="sqltypes:char"
sqltypes:localeId="1033" sqltypes:sqlCompareOptions="IgnoreCase
IgnoreKanaType IgnoreWidth" sqltypes:sqlSortId="52">
                                <xsd:maxLength value="36" />
                              </xsd:restriction>
                            </xsd:simpleType>
      </xsd:attribute>
      <xsd:attribute name="docVersion" use="required">
       <xsd:simpleType>
        <xsd:restriction base="xsd:string"/>
       </xsd:simpleType>
      </xsd:attribute>
      <xsd:attribute name="CreatedOn" type="sqltypes:smalldatetime"
use="required">
      </xsd:attribute>
     </xsd:complexType>
    </xsd:element>
   </xsd:sequence>
  </xsd:complexType>
</xsd:element>
<xsd:element name="Config">
  <xsd:complexType>
   <xsd:attribute name="AutoImport">
    <xsd:simpleType>
     <xsd:restriction base="xsd:byte"/>
    </xsd:simpleType>
   </xsd:attribute>
   <xsd:attribute name="Action">
    <xsd:simpleType>
     <xsd:restriction base="xsd:string"/>
    </xsd:simpleType>
   </xsd:attribute>
  </xsd:complexType>
</xsd:element>
</xsd:schema>
';


IF NOT EXISTS
(
    SELECT *
    FROM sys.xml_schema_collections c
    JOIN sys.schemas s ON s.schema_id = c.schema_id
    WHERE s.[name] = N'dbo'
    AND c.[name] = N'SchemaCollection_Test'
)
    CREATE XML SCHEMA COLLECTION dbo.SchemaCollection_Test AS
@SchemaCollection_Test
GO




GO

-- Verify - list of collections in the database.
select *
from sys.xml_schema_collections
-- Verify - list of namespaces in the database.
select name
from sys.xml_schema_namespaces

SELECT xml_schema_namespace(N'dbo',N'SchemaCollection_Test')
DECLARE @xml xml;

    WITH XMLNAMESPACES
('urn:schemas-2020Technologies-com:sql:OrganizationsImport' as ns)
    SELECT
        (
            SELECT
                 newID()            as [@docID]
                ,'4.3.0'            as [@docVersion]
                ,getdate()          as [@CreatedOn]
                ,(
                    SELECT
                        cast(0 as bit) as [@AutoImport]
                        ,'ADD'  as [@Action]
                    FOR XML PATH ('Config'), TYPE
                )
            FOR XML PATH ('Identity'), TYPE
        )
    FOR XML PATH (''), ROOT, TYPE
;
SET @xml =
(
    WITH XMLNAMESPACES
('urn:schemas-2020Technologies-com:sql:OrganizationsImport' as ns)
    SELECT
        (
            SELECT
                 newID()            as [@docID]
                ,'4.3.0'            as [@docVersion]
                ,getdate()          as [@CreatedOn]
                ,(
                    SELECT
                        cast(0 as bit) as [@AutoImport]
                        ,'ADD'  as [@Action]
                    FOR XML PATH ('Config'), TYPE
                )
            FOR XML PATH ('Identity'), TYPE
        )
    FOR XML PATH (''), ROOT, TYPE
)
SELECT @xml as untyped
SELECT cast(@xml as xml (dbo.SchemaCollection_Test)) as typed



Show quote
"Martin Honnen" <mahotr***@yahoo.de> wrote in message
news:e7wQ$ItKIHA.2176@TK2MSFTNGP06.phx.gbl...
> Farmer wrote:
>
>> I am trying to create xsd schema and validate an xml as typed. I have
>> been reading as much as I could in SQL BOL and seem to define it
>> correctly. I can schema collection and it appears to be valid.
>>
>>  However, when I try to use it to validate XML, I get the specified error
>>
>>  Msg 6913, Level 16, State 1, Line 30
>>
>> XML Validation: Declaration not found for element 'root'. Location:
>> /*:root[1]
>>
>> I seem to declare root element in schema. Why do I get this error?
>
>
> Your schema below defines elements in its targetNamespace
> urn:schemas-2020Technologies-com:sql:Test so it defines a root element in
> that namespace.
>
>> N'<?xml version="1.0" encoding="UTF-16"?>
>>
>> <xsd:schema targetNamespace="urn:schemas-2020Technologies-com:sql:Test"
>> xmlns:schema="urn:schemas-2020Technologies-com:sql:Test"
>>
>>     xmlns:xsd="http://www.w3.org/2001/XMLSchema"
>> xmlns:sqltypes="http://schemas.microsoft.com/sqlserver/2004/sqltypes"
>> elementFormDefault="qualified">
>
>
> Later on when you construct the XML instance you seem to construct a root
> element in no namespace so you need to change that, construct elements in
> the targetNamespace of the schema.
>
> You can do that using WITH XMLNAMESPACES e.g.
>
>
> WITH XMLNAMESPACES (DEFAULT 'urn:schemas-2020Technologies-com:sql:Test')
>> SET @xml =
>>
>> (
>>
>>     SELECT
>>
>>         (
>>
>>             SELECT
>>
>>                  newID()            as [@docID]
>>
>>                 ,'4.3.0'            as [@docVersion]
>>
>>                 ,getdate()          as [@CreatedOn]
>>
>>                 ,(
>>
>>                     SELECT
>>
>>                         cast(0 as bit) as [@AutoImport]
>>
>>                         ,'ADD'  as [@Action]
>>
>>                     FOR XML PATH ('Config'), TYPE
>>
>>                 )
>>
>>             FOR XML PATH ('Identity'), TYPE
>>
>>         )
>>
>>     FOR XML PATH (''), ROOT, TYPE
>>
>> )
>>
>> SELECT @xml as untyped
>>
>> SELECT cast(@xml as xml (dbo.SchemaCollection_Test)) as typed
>
>
> --
>
> Martin Honnen --- MVP XML
> http://JavaScript.FAQTs.com/
Author
19 Nov 2007 7:26 PM
Farmer
OK, I figured SET issue.
But the original error is  still there.


Msg 6913, Level 16, State 1, Line 32
XML Validation: Declaration not found for element 'root'. Location:
/*:root[1]



SQL Posted below.



IF EXISTS
(
    SELECT *
    FROM sys.xml_schema_collections c
    JOIN sys.schemas s ON s.schema_id = c.schema_id
    WHERE s.[name] = N'dbo'
    AND c.[name] = N'SchemaCollection_Test'
)
    DROP XML SCHEMA COLLECTION dbo.SchemaCollection_Test
GO
DECLARE @SchemaCollection_Test nvarchar(max)
SET @SchemaCollection_Test =
N'<?xml version="1.0" encoding="UTF-16"?>
<xsd:schema targetNamespace="urn:schemas-2020Technologies-com:sql:Test"
xmlns:schema="urn:schemas-2020Technologies-com:sql:Test"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:sqltypes="http://schemas.microsoft.com/sqlserver/2004/sqltypes"
elementFormDefault="qualified">
    <xsd:import
namespace="http://schemas.microsoft.com/sqlserver/2004/sqltypes"
schemaLocation="http://schemas.microsoft.com/sqlserver/2004/sqltypes/sqltypes.xsd"
/>
<xsd:element name="root">
  <xsd:complexType>
   <xsd:sequence>
    <xsd:element name="Identity">
     <xsd:complexType>
      <xsd:sequence>
       <xsd:element ref="schema:Config"/>
      </xsd:sequence>
      <xsd:attribute name="docID" use="required">
                            <xsd:simpleType>
                              <xsd:restriction base="sqltypes:char"
sqltypes:localeId="1033" sqltypes:sqlCompareOptions="IgnoreCase
IgnoreKanaType IgnoreWidth" sqltypes:sqlSortId="52">
                                <xsd:maxLength value="36" />
                              </xsd:restriction>
                            </xsd:simpleType>
      </xsd:attribute>
      <xsd:attribute name="docVersion" use="required">
       <xsd:simpleType>
        <xsd:restriction base="xsd:string"/>
       </xsd:simpleType>
      </xsd:attribute>
      <xsd:attribute name="CreatedOn" type="sqltypes:smalldatetime"
use="required">
      </xsd:attribute>
     </xsd:complexType>
    </xsd:element>
   </xsd:sequence>
  </xsd:complexType>
</xsd:element>
<xsd:element name="Config">
  <xsd:complexType>
   <xsd:attribute name="AutoImport">
    <xsd:simpleType>
     <xsd:restriction base="xsd:byte"/>
    </xsd:simpleType>
   </xsd:attribute>
   <xsd:attribute name="Action">
    <xsd:simpleType>
     <xsd:restriction base="xsd:string"/>
    </xsd:simpleType>
   </xsd:attribute>
  </xsd:complexType>
</xsd:element>
</xsd:schema>
';


IF NOT EXISTS
(
    SELECT *
    FROM sys.xml_schema_collections c
    JOIN sys.schemas s ON s.schema_id = c.schema_id
    WHERE s.[name] = N'dbo'
    AND c.[name] = N'SchemaCollection_Test'
)
    CREATE XML SCHEMA COLLECTION dbo.SchemaCollection_Test AS
@SchemaCollection_Test
GO




GO

-- Verify - list of collections in the database.
select *
from sys.xml_schema_collections
-- Verify - list of namespaces in the database.
select name
from sys.xml_schema_namespaces

SELECT xml_schema_namespace(N'dbo',N'SchemaCollection_Test')
DECLARE @xml xml;

WITH XMLNAMESPACES
('urn:schemas-2020Technologies-com:sql:OrganizationsImport' as ns)
SELECT @xml =
(
    SELECT
        (
            SELECT
                 newID()            as [@docID]
                ,'4.3.0'            as [@docVersion]
                ,getdate()          as [@CreatedOn]
                ,(
                    SELECT
                        cast(0 as bit) as [@AutoImport]
                        ,'ADD'  as [@Action]
                    FOR XML PATH ('Config'), TYPE
                )
            FOR XML PATH ('Identity'), TYPE
        )
    FOR XML PATH (''), ROOT, TYPE
)
SELECT @xml as untyped
SELECT cast(@xml as xml (dbo.SchemaCollection_Test)) as typed

--with xmlnamespaces (default
'http://staff.develop.com/ktegels/examples/stores')
--select @x = (select s.CustomerID as '@customerID'
--, s.name as 'name'
--from sales.store s
--order by s.name
--for xml path('store'),root('stores'))

Show quote
"Farmer" <some***@somewhere.com> wrote in message
news:446BAD39-C37B-4280-A9DA-EF041849A526@microsoft.com...
> Thanks Martin. Awesome!
>
> I see what you are suggesting.
>
> the next roadblock is that now I can't seem to figure the SET syntax any
> more.
> Any idea?
>
> It's complaining about
>
> Msg 156, Level 15, State 1, Line 31
> Incorrect syntax near the keyword 'WITH'.
> Msg 319, Level 15, State 1, Line 31
> Incorrect syntax near the keyword 'with'. If this statement is a common
> table expression or an xmlnamespaces clause, the previous statement must
> be terminated with a semicolon.
> Msg 102, Level 15, State 1, Line 47
> Incorrect syntax near ')'.
>
>
>
> IF EXISTS
> (
>    SELECT *
>    FROM sys.xml_schema_collections c
>    JOIN sys.schemas s ON s.schema_id = c.schema_id
>    WHERE s.[name] = N'dbo'
>    AND c.[name] = N'SchemaCollection_Test'
> )
>    DROP XML SCHEMA COLLECTION dbo.SchemaCollection_Test
> GO
> DECLARE @SchemaCollection_Test nvarchar(max)
> SET @SchemaCollection_Test =
> N'<?xml version="1.0" encoding="UTF-16"?>
> <xsd:schema targetNamespace="urn:schemas-2020Technologies-com:sql:Test"
> xmlns:schema="urn:schemas-2020Technologies-com:sql:Test"
>    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
> xmlns:sqltypes="http://schemas.microsoft.com/sqlserver/2004/sqltypes"
> elementFormDefault="qualified">
>    <xsd:import
> namespace="http://schemas.microsoft.com/sqlserver/2004/sqltypes"
> schemaLocation="http://schemas.microsoft.com/sqlserver/2004/sqltypes/sqltypes.xsd"
> />
> <xsd:element name="root">
>  <xsd:complexType>
>   <xsd:sequence>
>    <xsd:element name="Identity">
>     <xsd:complexType>
>      <xsd:sequence>
>       <xsd:element ref="schema:Config"/>
>      </xsd:sequence>
>      <xsd:attribute name="docID" use="required">
>                            <xsd:simpleType>
>                              <xsd:restriction base="sqltypes:char"
> sqltypes:localeId="1033" sqltypes:sqlCompareOptions="IgnoreCase
> IgnoreKanaType IgnoreWidth" sqltypes:sqlSortId="52">
>                                <xsd:maxLength value="36" />
>                              </xsd:restriction>
>                            </xsd:simpleType>
>      </xsd:attribute>
>      <xsd:attribute name="docVersion" use="required">
>       <xsd:simpleType>
>        <xsd:restriction base="xsd:string"/>
>       </xsd:simpleType>
>      </xsd:attribute>
>      <xsd:attribute name="CreatedOn" type="sqltypes:smalldatetime"
> use="required">
>      </xsd:attribute>
>     </xsd:complexType>
>    </xsd:element>
>   </xsd:sequence>
>  </xsd:complexType>
> </xsd:element>
> <xsd:element name="Config">
>  <xsd:complexType>
>   <xsd:attribute name="AutoImport">
>    <xsd:simpleType>
>     <xsd:restriction base="xsd:byte"/>
>    </xsd:simpleType>
>   </xsd:attribute>
>   <xsd:attribute name="Action">
>    <xsd:simpleType>
>     <xsd:restriction base="xsd:string"/>
>    </xsd:simpleType>
>   </xsd:attribute>
>  </xsd:complexType>
> </xsd:element>
> </xsd:schema>
> ';
>
>
> IF NOT EXISTS
> (
>    SELECT *
>    FROM sys.xml_schema_collections c
>    JOIN sys.schemas s ON s.schema_id = c.schema_id
>    WHERE s.[name] = N'dbo'
>    AND c.[name] = N'SchemaCollection_Test'
> )
>    CREATE XML SCHEMA COLLECTION dbo.SchemaCollection_Test AS
> @SchemaCollection_Test
> GO
>
>
>
>
> GO
>
> -- Verify - list of collections in the database.
> select *
> from sys.xml_schema_collections
> -- Verify - list of namespaces in the database.
> select name
> from sys.xml_schema_namespaces
>
> SELECT xml_schema_namespace(N'dbo',N'SchemaCollection_Test')
> DECLARE @xml xml;
>
>    WITH XMLNAMESPACES
> ('urn:schemas-2020Technologies-com:sql:OrganizationsImport' as ns)
>    SELECT
>        (
>            SELECT
>                 newID()            as [@docID]
>                ,'4.3.0'            as [@docVersion]
>                ,getdate()          as [@CreatedOn]
>                ,(
>                    SELECT
>                        cast(0 as bit) as [@AutoImport]
>                        ,'ADD'  as [@Action]
>                    FOR XML PATH ('Config'), TYPE
>                )
>            FOR XML PATH ('Identity'), TYPE
>        )
>    FOR XML PATH (''), ROOT, TYPE
> ;
> SET @xml =
> (
>    WITH XMLNAMESPACES
> ('urn:schemas-2020Technologies-com:sql:OrganizationsImport' as ns)
>    SELECT
>        (
>            SELECT
>                 newID()            as [@docID]
>                ,'4.3.0'            as [@docVersion]
>                ,getdate()          as [@CreatedOn]
>                ,(
>                    SELECT
>                        cast(0 as bit) as [@AutoImport]
>                        ,'ADD'  as [@Action]
>                    FOR XML PATH ('Config'), TYPE
>                )
>            FOR XML PATH ('Identity'), TYPE
>        )
>    FOR XML PATH (''), ROOT, TYPE
> )
> SELECT @xml as untyped
> SELECT cast(@xml as xml (dbo.SchemaCollection_Test)) as typed
>
>
>
> "Martin Honnen" <mahotr***@yahoo.de> wrote in message
> news:e7wQ$ItKIHA.2176@TK2MSFTNGP06.phx.gbl...
>> Farmer wrote:
>>
>>> I am trying to create xsd schema and validate an xml as typed. I have
>>> been reading as much as I could in SQL BOL and seem to define it
>>> correctly. I can schema collection and it appears to be valid.
>>>
>>>  However, when I try to use it to validate XML, I get the specified
>>> error
>>>
>>>  Msg 6913, Level 16, State 1, Line 30
>>>
>>> XML Validation: Declaration not found for element 'root'. Location:
>>> /*:root[1]
>>>
>>> I seem to declare root element in schema. Why do I get this error?
>>
>>
>> Your schema below defines elements in its targetNamespace
>> urn:schemas-2020Technologies-com:sql:Test so it defines a root element in
>> that namespace.
>>
>>> N'<?xml version="1.0" encoding="UTF-16"?>
>>>
>>> <xsd:schema targetNamespace="urn:schemas-2020Technologies-com:sql:Test"
>>> xmlns:schema="urn:schemas-2020Technologies-com:sql:Test"
>>>
>>>     xmlns:xsd="http://www.w3.org/2001/XMLSchema"
>>> xmlns:sqltypes="http://schemas.microsoft.com/sqlserver/2004/sqltypes"
>>> elementFormDefault="qualified">
>>
>>
>> Later on when you construct the XML instance you seem to construct a root
>> element in no namespace so you need to change that, construct elements in
>> the targetNamespace of the schema.
>>
>> You can do that using WITH XMLNAMESPACES e.g.
>>
>>
>> WITH XMLNAMESPACES (DEFAULT 'urn:schemas-2020Technologies-com:sql:Test')
>>> SET @xml =
>>>
>>> (
>>>
>>>     SELECT
>>>
>>>         (
>>>
>>>             SELECT
>>>
>>>                  newID()            as [@docID]
>>>
>>>                 ,'4.3.0'            as [@docVersion]
>>>
>>>                 ,getdate()          as [@CreatedOn]
>>>
>>>                 ,(
>>>
>>>                     SELECT
>>>
>>>                         cast(0 as bit) as [@AutoImport]
>>>
>>>                         ,'ADD'  as [@Action]
>>>
>>>                     FOR XML PATH ('Config'), TYPE
>>>
>>>                 )
>>>
>>>             FOR XML PATH ('Identity'), TYPE
>>>
>>>         )
>>>
>>>     FOR XML PATH (''), ROOT, TYPE
>>>
>>> )
>>>
>>> SELECT @xml as untyped
>>>
>>> SELECT cast(@xml as xml (dbo.SchemaCollection_Test)) as typed
>>
>>
>> --
>>
>> Martin Honnen --- MVP XML
>> http://JavaScript.FAQTs.com/
>
Author
19 Nov 2007 9:06 PM
Farmer
Almost there but  no sigar yet. Any idea?

Msg 6926, Level 16, State 1, Line 32
XML Validation: Invalid simple type value: '2007-11-19T16:05:00Z'. Location:
/*:root[1]/*:Identity[1]/@*:CreatedOn


IF EXISTS
(
    SELECT *
    FROM sys.xml_schema_collections c
    JOIN sys.schemas s ON s.schema_id = c.schema_id
    WHERE s.[name] = N'dbo'
    AND c.[name] = N'SchemaCollection_Test'
)
    DROP XML SCHEMA COLLECTION dbo.SchemaCollection_Test
GO
DECLARE @SchemaCollection_Test nvarchar(max)
SET @SchemaCollection_Test =
N'<?xml version="1.0" encoding="UTF-16"?>
<xsd:schema
    targetNamespace="urn:schemas-2020Technologies-com:sql:Test"
    xmlns:schema="urn:schemas-2020Technologies-com:sql:Test"
    xmlns:sql="urn:schemas-microsoft-com:mapping-schema"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns:sqltypes="http://schemas.microsoft.com/sqlserver/2004/sqltypes"
    elementFormDefault="qualified">
    <xsd:import
namespace="http://schemas.microsoft.com/sqlserver/2004/sqltypes"
schemaLocation="http://schemas.microsoft.com/sqlserver/2004/sqltypes/sqltypes.xsd"
/>
<xsd:element name="root">
  <xsd:complexType>
   <xsd:sequence>
    <xsd:element name="Identity">
     <xsd:complexType>
      <xsd:sequence>
       <xsd:element ref="schema:Config"/>
      </xsd:sequence>
      <xsd:attribute name="docID" use="required">
                            <xsd:simpleType>
                              <xsd:restriction base="sqltypes:char"
sqltypes:localeId="1033" sqltypes:sqlCompareOptions="IgnoreCase
IgnoreKanaType IgnoreWidth" sqltypes:sqlSortId="52">
                                <xsd:maxLength value="36" />
                              </xsd:restriction>
                            </xsd:simpleType>
      </xsd:attribute>
      <xsd:attribute name="docVersion" use="required">
       <xsd:simpleType>
        <xsd:restriction base="xsd:string"/>
       </xsd:simpleType>
      </xsd:attribute>
      <xsd:attribute name="CreatedOn" type="sqltypes:smalldatetime"
use="required">
      </xsd:attribute>
     </xsd:complexType>
    </xsd:element>
   </xsd:sequence>
  </xsd:complexType>
</xsd:element>
<xsd:element name="Config">
  <xsd:complexType>
   <xsd:attribute name="AutoImport">
    <xsd:simpleType>
     <xsd:restriction base="xsd:byte"/>
    </xsd:simpleType>
   </xsd:attribute>
   <xsd:attribute name="Action">
    <xsd:simpleType>
     <xsd:restriction base="xsd:string"/>
    </xsd:simpleType>
   </xsd:attribute>
  </xsd:complexType>
</xsd:element>
</xsd:schema>
';


IF NOT EXISTS
(
    SELECT *
    FROM sys.xml_schema_collections c
    JOIN sys.schemas s ON s.schema_id = c.schema_id
    WHERE s.[name] = N'dbo'
    AND c.[name] = N'SchemaCollection_Test'
)
    CREATE XML SCHEMA COLLECTION dbo.SchemaCollection_Test AS
@SchemaCollection_Test
GO




GO

-- Verify - list of collections in the database.
select *
from sys.xml_schema_collections
-- Verify - list of namespaces in the database.
select name
from sys.xml_schema_namespaces

SELECT xml_schema_namespace(N'dbo',N'SchemaCollection_Test')
DECLARE @xml xml;

WITH XMLNAMESPACES (DEFAULT 'urn:schemas-2020Technologies-com:sql:Test')
SELECT @xml =
(
    SELECT
        (
            SELECT
                 newID()            as [@docID]
                ,'4.3.0'            as [@docVersion]
                ,convert(varchar(50), cast(getdate() as smalldatetime),
126)+'Z' as [@CreatedOn]
                ,(
                    SELECT
                        cast(0 as bit) as [@AutoImport]
                        ,'ADD'  as [@Action]
                    FOR XML PATH ('Config'), TYPE
                )
            FOR XML PATH ('Identity'), TYPE
        )
    FOR XML PATH (''), ROOT, TYPE
)
SELECT @xml as untyped
SELECT cast(@xml as xml (dbo.SchemaCollection_Test)) as typed


Show quote
"Farmer" <some***@somewhere.com> wrote in message
news:B396E48D-8D50-4653-B3F8-9AC54FD8AB75@microsoft.com...
> OK, I figured SET issue.
> But the original error is  still there.
>
>
> Msg 6913, Level 16, State 1, Line 32
> XML Validation: Declaration not found for element 'root'. Location:
> /*:root[1]
>
>
>
> SQL Posted below.
>
>
>
> IF EXISTS
> (
>    SELECT *
>    FROM sys.xml_schema_collections c
>    JOIN sys.schemas s ON s.schema_id = c.schema_id
>    WHERE s.[name] = N'dbo'
>    AND c.[name] = N'SchemaCollection_Test'
> )
>    DROP XML SCHEMA COLLECTION dbo.SchemaCollection_Test
> GO
> DECLARE @SchemaCollection_Test nvarchar(max)
> SET @SchemaCollection_Test =
> N'<?xml version="1.0" encoding="UTF-16"?>
> <xsd:schema targetNamespace="urn:schemas-2020Technologies-com:sql:Test"
> xmlns:schema="urn:schemas-2020Technologies-com:sql:Test"
>    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
> xmlns:sqltypes="http://schemas.microsoft.com/sqlserver/2004/sqltypes"
> elementFormDefault="qualified">
>    <xsd:import
> namespace="http://schemas.microsoft.com/sqlserver/2004/sqltypes"
> schemaLocation="http://schemas.microsoft.com/sqlserver/2004/sqltypes/sqltypes.xsd"
> />
> <xsd:element name="root">
>  <xsd:complexType>
>   <xsd:sequence>
>    <xsd:element name="Identity">
>     <xsd:complexType>
>      <xsd:sequence>
>       <xsd:element ref="schema:Config"/>
>      </xsd:sequence>
>      <xsd:attribute name="docID" use="required">
>                            <xsd:simpleType>
>                              <xsd:restriction base="sqltypes:char"
> sqltypes:localeId="1033" sqltypes:sqlCompareOptions="IgnoreCase
> IgnoreKanaType IgnoreWidth" sqltypes:sqlSortId="52">
>                                <xsd:maxLength value="36" />
>                              </xsd:restriction>
>                            </xsd:simpleType>
>      </xsd:attribute>
>      <xsd:attribute name="docVersion" use="required">
>       <xsd:simpleType>
>        <xsd:restriction base="xsd:string"/>
>       </xsd:simpleType>
>      </xsd:attribute>
>      <xsd:attribute name="CreatedOn" type="sqltypes:smalldatetime"
> use="required">
>      </xsd:attribute>
>     </xsd:complexType>
>    </xsd:element>
>   </xsd:sequence>
>  </xsd:complexType>
> </xsd:element>
> <xsd:element name="Config">
>  <xsd:complexType>
>   <xsd:attribute name="AutoImport">
>    <xsd:simpleType>
>     <xsd:restriction base="xsd:byte"/>
>    </xsd:simpleType>
>   </xsd:attribute>
>   <xsd:attribute name="Action">
>    <xsd:simpleType>
>     <xsd:restriction base="xsd:string"/>
>    </xsd:simpleType>
>   </xsd:attribute>
>  </xsd:complexType>
> </xsd:element>
> </xsd:schema>
> ';
>
>
> IF NOT EXISTS
> (
>    SELECT *
>    FROM sys.xml_schema_collections c
>    JOIN sys.schemas s ON s.schema_id = c.schema_id
>    WHERE s.[name] = N'dbo'
>    AND c.[name] = N'SchemaCollection_Test'
> )
>    CREATE XML SCHEMA COLLECTION dbo.SchemaCollection_Test AS
> @SchemaCollection_Test
> GO
>
>
>
>
> GO
>
> -- Verify - list of collections in the database.
> select *
> from sys.xml_schema_collections
> -- Verify - list of namespaces in the database.
> select name
> from sys.xml_schema_namespaces
>
> SELECT xml_schema_namespace(N'dbo',N'SchemaCollection_Test')
> DECLARE @xml xml;
>
> WITH XMLNAMESPACES
> ('urn:schemas-2020Technologies-com:sql:OrganizationsImport' as ns)
> SELECT @xml =
> (
>    SELECT
>        (
>            SELECT
>                 newID()            as [@docID]
>                ,'4.3.0'            as [@docVersion]
>                ,getdate()          as [@CreatedOn]
>                ,(
>                    SELECT
>                        cast(0 as bit) as [@AutoImport]
>                        ,'ADD'  as [@Action]
>                    FOR XML PATH ('Config'), TYPE
>                )
>            FOR XML PATH ('Identity'), TYPE
>        )
>    FOR XML PATH (''), ROOT, TYPE
> )
> SELECT @xml as untyped
> SELECT cast(@xml as xml (dbo.SchemaCollection_Test)) as typed
>
> --with xmlnamespaces (default
> 'http://staff.develop.com/ktegels/examples/stores')
> --select @x = (select s.CustomerID as '@customerID'
> --, s.name as 'name'
> --from sales.store s
> --order by s.name
> --for xml path('store'),root('stores'))
>
> "Farmer" <some***@somewhere.com> wrote in message
> news:446BAD39-C37B-4280-A9DA-EF041849A526@microsoft.com...
>> Thanks Martin. Awesome!
>>
>> I see what you are suggesting.
>>
>> the next roadblock is that now I can't seem to figure the SET syntax any
>> more.
>> Any idea?
>>
>> It's complaining about
>>
>> Msg 156, Level 15, State 1, Line 31
>> Incorrect syntax near the keyword 'WITH'.
>> Msg 319, Level 15, State 1, Line 31
>> Incorrect syntax near the keyword 'with'. If this statement is a common
>> table expression or an xmlnamespaces clause, the previous statement must
>> be terminated with a semicolon.
>> Msg 102, Level 15, State 1, Line 47
>> Incorrect syntax near ')'.
>>
>>
>>
>> IF EXISTS
>> (
>>    SELECT *
>>    FROM sys.xml_schema_collections c
>>    JOIN sys.schemas s ON s.schema_id = c.schema_id
>>    WHERE s.[name] = N'dbo'
>>    AND c.[name] = N'SchemaCollection_Test'
>> )
>>    DROP XML SCHEMA COLLECTION dbo.SchemaCollection_Test
>> GO
>> DECLARE @SchemaCollection_Test nvarchar(max)
>> SET @SchemaCollection_Test =
>> N'<?xml version="1.0" encoding="UTF-16"?>
>> <xsd:schema targetNamespace="urn:schemas-2020Technologies-com:sql:Test"
>> xmlns:schema="urn:schemas-2020Technologies-com:sql:Test"
>>    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
>> xmlns:sqltypes="http://schemas.microsoft.com/sqlserver/2004/sqltypes"
>> elementFormDefault="qualified">
>>    <xsd:import
>> namespace="http://schemas.microsoft.com/sqlserver/2004/sqltypes"
>> schemaLocation="http://schemas.microsoft.com/sqlserver/2004/sqltypes/sqltypes.xsd"
>> />
>> <xsd:element name="root">
>>  <xsd:complexType>
>>   <xsd:sequence>
>>    <xsd:element name="Identity">
>>     <xsd:complexType>
>>      <xsd:sequence>
>>       <xsd:element ref="schema:Config"/>
>>      </xsd:sequence>
>>      <xsd:attribute name="docID" use="required">
>>                            <xsd:simpleType>
>>                              <xsd:restriction base="sqltypes:char"
>> sqltypes:localeId="1033" sqltypes:sqlCompareOptions="IgnoreCase
>> IgnoreKanaType IgnoreWidth" sqltypes:sqlSortId="52">
>>                                <xsd:maxLength value="36" />
>>                              </xsd:restriction>
>>                            </xsd:simpleType>
>>      </xsd:attribute>
>>      <xsd:attribute name="docVersion" use="required">
>>       <xsd:simpleType>
>>        <xsd:restriction base="xsd:string"/>
>>       </xsd:simpleType>
>>      </xsd:attribute>
>>      <xsd:attribute name="CreatedOn" type="sqltypes:smalldatetime"
>> use="required">
>>      </xsd:attribute>
>>     </xsd:complexType>
>>    </xsd:element>
>>   </xsd:sequence>
>>  </xsd:complexType>
>> </xsd:element>
>> <xsd:element name="Config">
>>  <xsd:complexType>
>>   <xsd:attribute name="AutoImport">
>>    <xsd:simpleType>
>>     <xsd:restriction base="xsd:byte"/>
>>    </xsd:simpleType>
>>   </xsd:attribute>
>>   <xsd:attribute name="Action">
>>    <xsd:simpleType>
>>     <xsd:restriction base="xsd:string"/>
>>    </xsd:simpleType>
>>   </xsd:attribute>
>>  </xsd:complexType>
>> </xsd:element>
>> </xsd:schema>
>> ';
>>
>>
>> IF NOT EXISTS
>> (
>>    SELECT *
>>    FROM sys.xml_schema_collections c
>>    JOIN sys.schemas s ON s.schema_id = c.schema_id
>>    WHERE s.[name] = N'dbo'
>>    AND c.[name] = N'SchemaCollection_Test'
>> )
>>    CREATE XML SCHEMA COLLECTION dbo.SchemaCollection_Test AS
>> @SchemaCollection_Test
>> GO
>>
>>
>>
>>
>> GO
>>
>> -- Verify - list of collections in the database.
>> select *
>> from sys.xml_schema_collections
>> -- Verify - list of namespaces in the database.
>> select name
>> from sys.xml_schema_namespaces
>>
>> SELECT xml_schema_namespace(N'dbo',N'SchemaCollection_Test')
>> DECLARE @xml xml;
>>
>>    WITH XMLNAMESPACES
>> ('urn:schemas-2020Technologies-com:sql:OrganizationsImport' as ns)
>>    SELECT
>>        (
>>            SELECT
>>                 newID()            as [@docID]
>>                ,'4.3.0'            as [@docVersion]
>>                ,getdate()          as [@CreatedOn]
>>                ,(
>>                    SELECT
>>                        cast(0 as bit) as [@AutoImport]
>>                        ,'ADD'  as [@Action]
>>                    FOR XML PATH ('Config'), TYPE
>>                )
>>            FOR XML PATH ('Identity'), TYPE
>>        )
>>    FOR XML PATH (''), ROOT, TYPE
>> ;
>> SET @xml =
>> (
>>    WITH XMLNAMESPACES
>> ('urn:schemas-2020Technologies-com:sql:OrganizationsImport' as ns)
>>    SELECT
>>        (
>>            SELECT
>>                 newID()            as [@docID]
>>                ,'4.3.0'            as [@docVersion]
>>                ,getdate()          as [@CreatedOn]
>>                ,(
>>                    SELECT
>>                        cast(0 as bit) as [@AutoImport]
>>                        ,'ADD'  as [@Action]
>>                    FOR XML PATH ('Config'), TYPE
>>                )
>>            FOR XML PATH ('Identity'), TYPE
>>        )
>>    FOR XML PATH (''), ROOT, TYPE
>> )
>> SELECT @xml as untyped
>> SELECT cast(@xml as xml (dbo.SchemaCollection_Test)) as typed
>>
>>
>>
>> "Martin Honnen" <mahotr***@yahoo.de> wrote in message
>> news:e7wQ$ItKIHA.2176@TK2MSFTNGP06.phx.gbl...
>>> Farmer wrote:
>>>
>>>> I am trying to create xsd schema and validate an xml as typed. I have
>>>> been reading as much as I could in SQL BOL and seem to define it
>>>> correctly. I can schema collection and it appears to be valid.
>>>>
>>>>  However, when I try to use it to validate XML, I get the specified
>>>> error
>>>>
>>>>  Msg 6913, Level 16, State 1, Line 30
>>>>
>>>> XML Validation: Declaration not found for element 'root'. Location:
>>>> /*:root[1]
>>>>
>>>> I seem to declare root element in schema. Why do I get this error?
>>>
>>>
>>> Your schema below defines elements in its targetNamespace
>>> urn:schemas-2020Technologies-com:sql:Test so it defines a root element
>>> in that namespace.
>>>
>>>> N'<?xml version="1.0" encoding="UTF-16"?>
>>>>
>>>> <xsd:schema targetNamespace="urn:schemas-2020Technologies-com:sql:Test"
>>>> xmlns:schema="urn:schemas-2020Technologies-com:sql:Test"
>>>>
>>>>     xmlns:xsd="http://www.w3.org/2001/XMLSchema"
>>>> xmlns:sqltypes="http://schemas.microsoft.com/sqlserver/2004/sqltypes"
>>>> elementFormDefault="qualified">
>>>
>>>
>>> Later on when you construct the XML instance you seem to construct a
>>> root element in no namespace so you need to change that, construct
>>> elements in the targetNamespace of the schema.
>>>
>>> You can do that using WITH XMLNAMESPACES e.g.
>>>
>>>
>>> WITH XMLNAMESPACES (DEFAULT 'urn:schemas-2020Technologies-com:sql:Test')
>>>> SET @xml =
>>>>
>>>> (
>>>>
>>>>     SELECT
>>>>
>>>>         (
>>>>
>>>>             SELECT
>>>>
>>>>                  newID()            as [@docID]
>>>>
>>>>                 ,'4.3.0'            as [@docVersion]
>>>>
>>>>                 ,getdate()          as [@CreatedOn]
>>>>
>>>>                 ,(
>>>>
>>>>                     SELECT
>>>>
>>>>                         cast(0 as bit) as [@AutoImport]
>>>>
>>>>                         ,'ADD'  as [@Action]
>>>>
>>>>                     FOR XML PATH ('Config'), TYPE
>>>>
>>>>                 )
>>>>
>>>>             FOR XML PATH ('Identity'), TYPE
>>>>
>>>>         )
>>>>
>>>>     FOR XML PATH (''), ROOT, TYPE
>>>>
>>>> )
>>>>
>>>> SELECT @xml as untyped
>>>>
>>>> SELECT cast(@xml as xml (dbo.SchemaCollection_Test)) as typed
>>>
>>>
>>> --
>>>
>>> Martin Honnen --- MVP XML
>>> http://JavaScript.FAQTs.com/
>>
>
Author
21 Nov 2007 5:26 AM
Kent Tegels
F> Almost there but  no sigar yet. Any idea?

it works if you define CreatedOn as xsd:dateTime...

<xsd:attribute name="CreatedOn" type="xsd:dateTime"
use="required">

Why use sql:smalldatetime there?

Thanks,
Kent Tegels
http://staff.develop.com/ktegels/
Author
22 Nov 2007 3:01 AM
Farmer
There appears to be an issue here

http://connect.microsoft.com/SQLServer/feedback/ViewFeedback.aspx?FeedbackID=167649


Show quote
"Kent Tegels" <kteg***@develop.com> wrote in message
news:576947689fef8c9f9e3e9a40bc0@news.microsoft.com...
>F> Almost there but  no sigar yet. Any idea?
>
> it works if you define CreatedOn as xsd:dateTime...
>
> <xsd:attribute name="CreatedOn" type="xsd:dateTime" use="required">
>
> Why use sql:smalldatetime there?
>
> Thanks,
> Kent Tegels
> http://staff.develop.com/ktegels/
>
>

AddThis Social Bookmark Button