|
dev
newsgroups
|
|||||||||||||||||||||||
|
|||||||||||||||||||||||
new to SQL XML Validation. Please help with errorthanks 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: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 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] Farmer wrote:
Show quote > I am trying to create xsd schema and validate an xml as typed. I have Your schema below defines elements in its targetNamespace > 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? urn:schemas-2020Technologies-com:sql:Test so it defines a root element in that namespace. > N'<?xml version="1.0" encoding="UTF-16"?> Later on when you construct the XML instance you seem to construct a > > <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"> 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 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/ 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/ > 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/ >> > 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/ 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/ > > |
|||||||||||||||||||||||