Biztalk Composite Operations Service - wcf

I need to consume a Biztalk service that contains some composite operations. Essentially, one of my entities is in the form
<?xml version="1.0" encoding="utf-16"?>
<xs:schema xmlns:b="http://schemas.microsoft.com/BizTalk/2003" xmlns="http://HRMApplication.Schemas.Customer" targetNamespace="http://HRMApplication.Schemas.Customer" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="Customer">
<xs:complexType>
<xs:sequence>
<xs:element name="CustomerCode" type="xs:string" />
<xs:element name="Name" type="xs:string" />
<xs:element name="Active" type="xs:int" />
<xs:element name="SubNumber" type="xs:string" />
<xs:element name="CustomerAccountNumber" type="xs:string" />
<xs:element name="AccountBranchCode" type="xs:string" />
<xs:element name="BranchLocationCode" type="xs:string" />
<xs:element name="Attention" type="xs:string" />
<xs:element minOccurs="0" maxOccurs="unbounded" name="Addresses">
<xs:complexType>
<xs:sequence>
<xs:element name="Street1" type="xs:string" />
<xs:element name="Street2" type="xs:string" />
<xs:element name="City" type="xs:string" />
<xs:element name="State" type="xs:string" />
<xs:element name="Zip" type="xs:string" />
<xs:element name="Country" type="xs:string" />
<xs:element name="Description" type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element minOccurs="0" maxOccurs="unbounded" name="PhoneNumbers">
<xs:complexType>
<xs:sequence>
<xs:element name="PhoneNumber" type="xs:string" />
<xs:element name="PhoneType" type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
On the client side, I need to create a proxy for my service, and then create requests passing in customer objects and then displaying the response from the server in c#. How do I go about doing this in code please? Essentially, I am looking for code sample to help start me off of how to handle this sort of scenario given that when I generate a proxy using the ADD SERVICE REFERENCE option in visual studio, I get a proxy that requires I create a request object and then expect a response object.

Even within BizTalk, your composite operation will be wrapped around the response object. Your customer element will probably be created within the response object. The response object name and namespace is usually defined in the Adapter. What type of adapter are you using?

Related

Replace values in XML string with less than descriptive path

I have a very large xml field inside of a SQL Database that I have to edit regularly. I wrote the following Query to change that code which was easy following the xml path to get to what needed changed.
However I found more things further down in SQL that needs altered and I can not figure out the xml path to edit to make that change.
I've been utilizing the following Query to change just the username
DECLARE #config_xml2 xml
select #config_xml2 = configuration_xml from tblDatafeed where datafeed_name = 'DatafeedName' update tbldatafeed
set configuration_xml.modify('replace value of (//*:NetworkCredentialWrapper/#UserName)[1] with sql:variable("#LOGIN")') where datafeed_name ='DataFeedName'
Which is used to change the Username in the following:
<Tokens>
<Token name="DataFileDirectoryName" />
<Token name="DataFileName" />
<Token name="DataFileExtension" />
<Token name="LastRunTime" />
<Token name="LastFileProcessed" />
</Tokens>
<Transporter>
<transporters:WebServiceTransportActivity xmlns:transporters="clr-namespace:ArcherTech.DataFeed.Activities.Transporters;assembly=ArcherTech.DataFeed" xmlns:out="clr-namespace:ArcherTech.DataFeed;assembly=ArcherTech.DataFeed" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:compModel="clr-namespace:ArcherTech.DataFeed.ComponentModel;assembly=ArcherTech.DataFeed" xmlns:channel="clr-namespace:ArcherTech.DataFeed.Engine.Channel;assembly=ArcherTech.DataFeed" xmlns:engine="clr-namespace:ArcherTech.DataFeed.Engine;assembly=ArcherTech.DataFeed" xmlns:kernel="clr-namespace:ArcherTech.Kernel.Channel;assembly=ArcherTech.Kernel" xmlns="clr-namespace:ArcherTech.DataFeed;assembly=ArcherTech.DataFeed" xmlns:schema="clr-namespace:System.Xml.Schema;assembly=System.Xml" xmlns:xmlLinq="clr-namespace:System.Xml.Linq;assembly=System.Xml" xmlns:domain="clr-namespace:ArcherTech.Common.Domain;assembly=ArcherTech.Common" xmlns:s="clr-namespace:System;assembly=mscorlib" x:Key="transportActivity" SearchType="ReportId" Uri="Type URL Here" RecordsPerFile="100" ReportID="" UseWindowsAuth="false" IsWindowsAuthSpecific="false" WindowsAuthUserName="" WindowsAuthPassword="" WindowsAuthDomain="" ProxyName="" ProxyPort="" ProxyUsername="" ProxyPassword="" ProxyDomain="" IsProxyActive="False" ProxyOption="None" InstanceName="Type Instance Name Here" TempFileOnSuccessAction="DoNothing" TempFileOnSuccessRenameString="" TempFileOnErrorAction="DoNothing" TempFileOnErrorRenameString="" Transform="{engine:DataFeedBinding Path=Transform}" SessionContext="{engine:DataFeedBinding Path=Session}">
<transporters:ArcherWebServiceTransportActivity.Credentials>
<NetworkCredentialWrapper UserName="" />
</transporters:ArcherWebServiceTransportActivity.Credentials>
</transporters:ArcherWebServiceTransportActivity>
</Transporter>
<Iterator>
<XmlIterator>
But now I need to alter a string that a lot more complex and I am not sure my xml location is right. I have tried using //*NewSourceName1/#Calculation but it doesnt seem work:
Line of code Here I am trying to edit:
<xs:element name="NewSourceName1" type="xs:string" nillable="true" c:Name="Dashboard_Instance_Name" c:Calculation="=STATIC(&quot;MYSTRINGOFTEXTHERE&quot;)" dfm:SimpleFieldType="StaticText" />
Full xml it falls under
<Action>
<DataTransfer TargetType="Application" TargetLevel="20595ffc-afd5-4d34-babb-c8fa67c610ee" DisableValidation="true" PreValidate="false" InsertRecords="true" UpdateRecords="false" SyncAction="None" SyncFlagField="00000000-0000-0000-0000-000000000000" SyncFlagValue="00000000-0000-0000-0000-000000000000">
<Source>
<Schema><Schemas>
<xs:schema xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" attributeFormDefault="unqualified" elementFormDefault="qualified" targetNamespace="http://www.archer-tech.com/" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:dfm="http://schemas.archer-tech.com/2009/xaml/datafeed" xmlns:c="http://archertech.com/ChannelFramework/Extensions" dfm:ComplexFieldType="None">
<xs:element name="ArcherRecords" nillable="true">
<xs:complexType>
<xs:sequence>
<xs:element name="ArcherRecord" nillable="true" c:Name="ArcherRecord" dfm:ComplexFieldType="None" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="Name" type="xs:string" nillable="true" c:Name="Name" />
<xs:element name="Container_Type" nillable="true" c:Name="Container_Type">
<xs:complexType>
<xs:sequence>
<xs:element name="Item" type="xs:string" nillable="true" c:Name="Item" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="Path" type="xs:string" nillable="true" c:Name="Path" />
<xs:element name="Abbreviation_Unique_Key" type="xs:string" nillable="true" c:Name="Abbreviation_Unique_Key" />
<xs:element name="Container_Owner" nillable="true" c:Name="Container_Owner">
<xs:complexType>
<xs:sequence>
<xs:element name="Item" type="xs:string" nillable="true" c:Name="Item" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="Send_Upstream" nillable="true" c:Name="Send_Upstream">
<xs:complexType>
<xs:sequence>
<xs:element name="Item" type="xs:string" nillable="true" c:Name="Item" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="NewSourceName" type="xs:string" nillable="true" c:Name="Iteration" c:Calculation="=IF(AND(HOUR(NOW())&gt;=0,HOUR(NOW())&lt;8), &quot;ONE&quot;,&#xA; IF(AND(HOUR(NOW())&gt;=8,HOUR(NOW())&lt;16), &quot;TWO&quot;, &quot;THREE&quot;))" dfm:SimpleFieldType="CalculatedField" />
<xs:element name="NewSourceName1" type="xs:string" nillable="true" c:Name="Dashboard_Instance_Name" c:Calculation="=STATIC(&quot;MyTextHere&quot;)" dfm:SimpleFieldType="StaticText" />
<xs:element name="NewSourceName2" type="xs:string" nillable="true" c:Name="Date_Created" c:Calculation="=DATEFORMAT(TODAY(), &quot;MM/dd/yyyy&quot;)" dfm:SimpleFieldType="CalculatedField" />
<xs:element name="NewSourceName3" type="xs:string" nillable="true" c:Name="Created_By" c:Calculation="=STATIC(&quot;Local Dashboard&quot;)" dfm:SimpleFieldType="StaticText" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
</Schemas></Schema>
</Source>
Hopeful out come (Look for MYSTRINGOFTEXTHERE or if I could just edit all of =STATIC("MYSTRINGOFTEXTHERE")):
<xs:element name="NewSourceName1" type="xs:string" nillable="true" c:Name="Dashboard_Instance_Name" c:Calculation="=STATIC(&quot;MYSTRINGOFTEXTHERE&quot;)" dfm:SimpleFieldType="StaticText" />
What I tried that didn't work
DECLARE #config_xml2 xml
select #config_xml2 = configuration_xml from tblDatafeed where datafeed_name = 'DatafeedName' update tbldatafeed
set configuration_xml.modify('replace value of (//*:NewSourceName1/#Calculation)[1] with sql:variable("#CoolVariableName")') where datafeed_name ='DataFeedName'
Any help would be greatly appreciated.
The XPath expression was completely off, so I adjusted it.
In XML, there are only five built-in character entities: <, >, &, " and &apos; for <, >, &, " and ' respectively. I replaced them with their literals. Please try the following.
SQL
DECLARE #tbl TABLE (id int IDENTITY PRIMARY KEY, configuration_xml XML);
INSERT INTO #tbl (configuration_xml)
VALUES
(N'<Action>
<DataTransfer TargetType="Application" TargetLevel="20595ffc-afd5-4d34-babb-c8fa67c610ee" DisableValidation="true" PreValidate="false" InsertRecords="true" UpdateRecords="false" SyncAction="None" SyncFlagField="00000000-0000-0000-0000-000000000000" SyncFlagValue="00000000-0000-0000-0000-000000000000">
<Source>
<Schema>
<Schemas>
<xs:schema xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" attributeFormDefault="unqualified" elementFormDefault="qualified" targetNamespace="http://www.archer-tech.com/" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:dfm="http://schemas.archer-tech.com/2009/xaml/datafeed" xmlns:c="http://archertech.com/ChannelFramework/Extensions" dfm:ComplexFieldType="None">
<xs:element name="ArcherRecords" nillable="true">
<xs:complexType>
<xs:sequence>
<xs:element name="ArcherRecord" nillable="true" c:Name="ArcherRecord" dfm:ComplexFieldType="None" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="Name" type="xs:string" nillable="true" c:Name="Name" />
<xs:element name="Container_Type" nillable="true" c:Name="Container_Type">
<xs:complexType>
<xs:sequence>
<xs:element name="Item" type="xs:string" nillable="true" c:Name="Item" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="Path" type="xs:string" nillable="true" c:Name="Path" />
<xs:element name="Abbreviation_Unique_Key" type="xs:string" nillable="true" c:Name="Abbreviation_Unique_Key" />
<xs:element name="Container_Owner" nillable="true" c:Name="Container_Owner">
<xs:complexType>
<xs:sequence>
<xs:element name="Item" type="xs:string" nillable="true" c:Name="Item" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="Send_Upstream" nillable="true" c:Name="Send_Upstream">
<xs:complexType>
<xs:sequence>
<xs:element name="Item" type="xs:string" nillable="true" c:Name="Item" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="NewSourceName" type="xs:string" nillable="true" c:Name="Iteration" c:Calculation="=IF(AND(HOUR(NOW())&gt;=0,HOUR(NOW())&lt;8), &quot;ONE&quot;,&#xA; IF(AND(HOUR(NOW())&gt;=8,HOUR(NOW())&lt;16), &quot;TWO&quot;, &quot;THREE&quot;))" dfm:SimpleFieldType="CalculatedField" />
<xs:element name="NewSourceName1" type="xs:string" nillable="true" c:Name="Dashboard_Instance_Name" c:Calculation="=STATIC(&quot;MyTextHere&quot;)" dfm:SimpleFieldType="StaticText" />
<xs:element name="NewSourceName2" type="xs:string" nillable="true" c:Name="Date_Created" c:Calculation="=DATEFORMAT(TODAY(), &quot;MM/dd/yyyy&quot;)" dfm:SimpleFieldType="CalculatedField" />
<xs:element name="NewSourceName3" type="xs:string" nillable="true" c:Name="Created_By" c:Calculation="=STATIC(&quot;Local Dashboard&quot;)" dfm:SimpleFieldType="StaticText" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
</Schemas>
</Schema>
</Source>
</DataTransfer>
</Action>');
DECLARE #CoolVariableName varchar(30) = 'Whatever Value';
UPDATE #tbl
SET configuration_xml.modify('replace value of (//xs:element[#name="NewSourceName1"]/#*:Calculation)[1] with sql:variable("#CoolVariableName")');
SELECT * FROM #tbl;

need to use web application as publisher and console application as consumer for rabbit mq

<?xml version="1.0"?>
<DataTable>
<xs:schema id="NewDataSet" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xs:element name="NewDataSet" msdata:IsDataSet="true" msdata:MainDataTable="point24" msdata:UseCurrentLocale="true">
<xs:complexType>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element name="point24">
<xs:complexType>
<xs:sequence>
<xs:element name="RoadCode" type="xs:string" minOccurs="0" />
<xs:element name="Chainage" type="xs:string" minOccurs="0" />
<xs:element name="Dir" type="xs:string" minOccurs="0" />
<xs:element name="Latitude" type="xs:string" minOccurs="0" />
<xs:element name="Longitude" type="xs:string" minOccurs="0" />
<xs:element name="test1" type="xs:string" minOccurs="0" />
<xs:element name="CompositeKey" type="xs:string" minOccurs="0" />
<xs:element name="AddedBy" type="xs:string" minOccurs="0" />
<xs:element name="AddedOn" type="xs:dateTime" minOccurs="0" />
<xs:element name="ModifiedBy" type="xs:string" minOccurs="0" />
<xs:element name="ModifiedOn" type="xs:dateTime" minOccurs="0" />
<xs:element name="MasterColumnKey" type="xs:string" minOccurs="0" />
<xs:element name="LinkCode" type="xs:string" minOccurs="0" />
<xs:element name="SurveyId" type="xs:string" minOccurs="0" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:choice>
</xs:complexType>
</xs:element>
</xs:schema>
<diffgr:diffgram xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1">
<DocumentElement>
<point24 diffgr:id="point241" msdata:rowOrder="0" diffgr:hasChanges="inserted">
<RoadCode>SH0008</RoadCode>
<Chainage>5894</Chainage>
<Dir>I</Dir>
<Latitude>6.3</Latitude>
<Longitude>2.5</Longitude>
<test1>56</test1>
<CompositeKey>SH00085894IJAN2016</CompositeKey>
<AddedBy>dev</AddedBy>
<AddedOn>2017-11-29T10:16:09.3488278+05:30</AddedOn>
<MasterColumnKey>SH0008589456JAN2016</MasterColumnKey>
<LinkCode>LI:SH00084502</LinkCode>
<SurveyId>JAN2016</SurveyId>
</point24>
</DocumentElement>
</diffgr:diffgram>
</DataTable>
Am publishing a datatable into queue using rabbit mq and trying to consume the datable from console application.
Unable to get the data.
I am using rabbit mq 3.6.14 version with erlang 20.1Rabbit MQ management UI
Am adding the datatable to queue from web application like this..
Producer web application code
Am retreiving the message from queue from console application
Consumer application code
here is my queue binding
enter image description here
Queue Details
Binding Details
please suggest.

xml file with no columns recognized by XML source

I have an XML file with the following content (some sensitive data replaced with 'DummyData')
<Alert>
<AlertID>23210B</AlertID>
<Title>DummyData</Title>
<PublishDate>3/31/2014 12:00:00 AM</PublishDate>
<Severity>03</Severity>
<ResponseNecessary>Yes</ResponseNecessary>
<ThreatDate>6/2/2014 12:00:00 AM</ThreatDate>
<DueDate>
</DueDate>
<SystemStandard>Yes</SystemStandard>
<Type>DummyData</Type>
<Overview>DummyDataDummyDataDummyDataDummyDataDummyDataDummyDataDummyDataDummyDataDummyDataDummyData</Overview>
<NIRTAnalysis><p>N/A</p></NIRTAnalysis>
<ThreatAsessment><p>N/A</p></ThreatAsessment>
<ProductsAffected><p>DummyData 10 SP4 LTSS</p></ProductsAffected>
<RequiredActions>DummyDataDummyDataDummyDataDummyDataDummyData</RequiredActions>
<AdditionalInformation>DummyDataDummyDataDummyDataDummyDataDummyData</AdditionalInformation>
<ExternalReference>DummyDataDummyDataDummyDataDummyDataDummyDataDummyData</ExternalReference>
<PatchID>
</PatchID>
</Alert>
And the following xsd file generated by SSIS:
<?xml version="1.0"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="Alert">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" name="AlertID" type="xs:string" />
<xs:element minOccurs="0" name="Title" type="xs:string" />
<xs:element minOccurs="0" name="PublishDate" type="xs:string" />
<xs:element minOccurs="0" name="Severity" type="xs:unsignedByte" />
<xs:element minOccurs="0" name="ResponseNecessary" type="xs:string" />
<xs:element minOccurs="0" name="ThreatDate" type="xs:string" />
<xs:element minOccurs="0" name="DueDate" type="xs:string" />
<xs:element minOccurs="0" name="SystemStandard" type="xs:string" />
<xs:element minOccurs="0" name="Type" type="xs:string" />
<xs:element minOccurs="0" name="Overview" type="xs:string" />
<xs:element minOccurs="0" name="NIRTAnalysis" type="xs:string" />
<xs:element minOccurs="0" name="ThreatAsessment" type="xs:string" />
<xs:element minOccurs="0" name="ProductsAffected" type="xs:string" />
<xs:element minOccurs="0" name="RequiredActions" type="xs:string" />
<xs:element minOccurs="0" name="AdditionalInformation" type="xs:string" />
<xs:element minOccurs="0" name="ExternalReference" type="xs:string" />
<xs:element minOccurs="0" name="PatchID" type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
My problem is when I use XML Source to load the file but the source doesn't recognize the columns. I'm guessing it thinks the file has nested nodes because the only way I can get it to see any columns is with the following XSD below, which will see all the columns but all as separate output:
<?xml version="1.0"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="Alert">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="unbounded" name="AlertID" type="xs:string" />
<xs:element minOccurs="0" maxOccurs="unbounded" name="Title" type="xs:string" />
<xs:element minOccurs="0" maxOccurs="unbounded" name="PublishDate" type="xs:string" />
<xs:element minOccurs="0" maxOccurs="unbounded" name="Severity" type="xs:unsignedByte" />
<xs:element minOccurs="0" maxOccurs="unbounded" name="ResponseNecessary" type="xs:string" />
<xs:element minOccurs="0" maxOccurs="unbounded" name="ThreatDate" type="xs:string" />
<xs:element minOccurs="0" maxOccurs="unbounded" name="DueDate" type="xs:string" />
<xs:element minOccurs="0" maxOccurs="unbounded" name="SystemStandard" type="xs:string" />
<xs:element minOccurs="0" maxOccurs="unbounded" name="Type" type="xs:string" />
<xs:element minOccurs="0" maxOccurs="unbounded" name="Overview" type="xs:string" />
<xs:element minOccurs="0" maxOccurs="unbounded" name="NIRTAnalysis" type="xs:string" />
<xs:element minOccurs="0" maxOccurs="unbounded" name="ThreatAsessment" type="xs:string" />
<xs:element minOccurs="0" maxOccurs="unbounded" name="ProductsAffected" type="xs:string" />
<xs:element minOccurs="0" maxOccurs="unbounded" name="RequiredActions" type="xs:string" />
<xs:element minOccurs="0" maxOccurs="unbounded" name="AdditionalInformation" type="xs:string" />
<xs:element minOccurs="0" maxOccurs="unbounded" name="ExternalReference" type="xs:string" />
<xs:element minOccurs="0" maxOccurs="unbounded" name="PatchID" type="xs:string" />
</xs:sequence>
</xs:complexType>
I don't know a lot about XLST, but I know I can flatten the file that way, but to me, it is flat. Are there any suggestions as to what I'm doing wrong? I believe I just have an xsd problem, but what you see was generated by SSIS.
It seems that the problem is related to the XML itself.
Please add a root element to the xml file and try again with a new SSIS-generated xsd after adding the root.
xml should look like:
<?xml version="1.0"?>
<Root>
<Alert>
....
</Alert>
</Root>

Read XML into SQL tables in SSIS

I want to read an XML file and split the data into a parent and 2 child tables. Here is what the SQL schema where the data will go and the XSD. I'm thinking SSIS is what I want to use but not sure how to go about it. Should i iterate through the children and then insert the rows using code. Any ideas would be helpful. I am willing to use something other than SSIS. I using MS SQL Server 2008.
<?xml version="1.0"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="MonthlyReportForm">
<xs:complexType>
<xs:sequence>
<xs:choice maxOccurs="unbounded">
<xs:element minOccurs="0" name="ReportingDate" type="xs:string" />
<xs:element minOccurs="0" name="ReportingYear" type="xs:unsignedShort" />
<xs:element minOccurs="0" name="ReportingRegion" type="xs:string" />
<xs:element minOccurs="0" name="TeamMembersName" type="xs:string" />
<xs:element minOccurs="0" name="chkTraining" type="xs:unsignedByte" />
<xs:element minOccurs="0" name="chkVernacularMaterials" type="xs:unsignedByte" />
<xs:element minOccurs="0" name="RDHelpText" type="xs:string" />
<xs:element minOccurs="0" name="chkOutOfCountryForm" type="xs:unsignedByte" />
<xs:element minOccurs="0" maxOccurs="unbounded" name="TravelData">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" name="TravelRowLocation" type="xs:string" />
<xs:element minOccurs="0" name="TravelRowTeam" type="xs:string" />
<xs:element minOccurs="0" name="TravelRowThisMonth" type="xs:unsignedByte" />
<xs:element minOccurs="0" name="TravelRowNextMonth" type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element minOccurs="0" name="TrainingReport">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="unbounded" name="TrainingData">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" name="TrainerName" type="xs:string" />
<xs:element minOccurs="0" name="TraineeGender" type="xs:string" />
<xs:element minOccurs="0" name="TraineeAge" type="xs:decimal" />
<xs:element minOccurs="0" name="TraineeLanguage" type="xs:string" />
<xs:element minOccurs="0" name="TraineeEducation" type="xs:string" />
<xs:element minOccurs="0" name="TraineeProvince" type="xs:string" />
<xs:element minOccurs="0" name="TrainingPrepHrs" type="xs:decimal" />
<xs:element minOccurs="0" name="TrainingTrainHrs" type="xs:decimal" />
<xs:element minOccurs="0" name="TrainingArea" type="xs:unsignedByte" />
<xs:element minOccurs="0" name="TrainingActivity" type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:choice>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>

XML and Sql Server 2005

i have a problem that I want to resolve in a best possible way. The thing is that I made a schema that looks like this:
print("
<xs:complexType name="rentACarT">
<xs:sequence>
<xs:element name="poslovnice" type="poslovniceT" />
<xs:element name="korisnici" type="korisniciT" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="poslovniceT">
<xs:sequence>
<xs:element name="poslovnica" type="poslovnicaT" minOccurs="0" maxOccurs="unbounded" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="poslovnicaT">
<xs:sequence>
<xs:element name="naziv" type="xs:string" />
<xs:element name="adresa" type="adresaT" />
<xs:element name="grad" type="gradT" />
<xs:element name="vozila" type="vozilaT" />
<xs:element name="zaposlenici" type="zaposleniciT" />
<xs:element name="posudbe" type="posudbeT" />
</xs:sequence>
<xs:attribute name="id" type="xs:int" />
</xs:complexType>
<xs:complexType name="vozilaT">
<xs:sequence>
<xs:element name="vozilo" type="voziloT" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="zaposleniciT">
<xs:sequence>
<xs:element name="zaposlenik" type="zaposlenikT" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="korisniciT">
<xs:sequence>
<xs:element name="korisnik" type="korisnikT" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="posudbeT">
<xs:sequence>
<xs:element name="posudba" type="posudbaT" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="posudbaT">
<xs:sequence>
<xs:element name="idVozila" type="xs:int" />
<xs:element name="jmbgZaposlenika" type="jmbgT" />
<xs:element name="jmbgKorisnika" type="jmbgT" />
<xs:element name="datumPosudbe" type="xs:date" />
<xs:element name="ugovoreniDatumPovratka" type="xs:date" />
<xs:element name="stvarniDatumPovratka" type="xs:date" />
</xs:sequence>
<xs:attribute name="id" type="xs:integer" />
</xs:complexType>
<xs:complexType name="voziloT">
<xs:sequence>
<xs:element name="registracija" type="xs:string" />
<xs:element name="modelVozila" type="modelVozilaT" />
<xs:element name="godinaProizvodnje" type="godinaT" />
<xs:element name="cijenaPosudbePoDanu" type="xs:double" />
</xs:sequence>
<xs:attribute name="id" type="xs:int" />
</xs:complexType>
<xs:complexType name="zaposlenikT">
<xs:sequence>
<xs:element name="ime" type="xs:string" />
<xs:element name="prezime" type="xs:string" />
<xs:element name="spol" type="spolT" />
<xs:element name="datumZaposlenja" type="xs:date" />
<xs:element name="grad" type="xs:double" />
</xs:sequence>
<xs:attribute name="jmbg" type="jmbgT" />
</xs:complexType>
<xs:complexType name="korisnikT">
<xs:sequence>
<xs:element name="ime" type="xs:string" />
<xs:element name="prezime" type="xs:string" />
<xs:element name="spol" type="spolT" />
<xs:element name="adresa" type="adresaT" />
<xs:element name="grad" type="gradT" />
<xs:element name="status" type="statusKorisnikaT" />
</xs:sequence>
<xs:attribute name="jmbg" type="jmbgT" />
</xs:complexType>
<xs:complexType name="modelVozilaT">
<xs:sequence>
<xs:element name="tipVozila" type="tipVozilaT" />
<xs:element name="marka" type="xs:string" />
<xs:element name="model" type="xs:string" />
</xs:sequence>
</xs:complexType>
<xs:simpleType name="tipVozilaT">
<xs:restriction base="xs:string">
<xs:enumeration value="auto" />
<xs:enumeration value="kombi" />
<xs:enumeration value="kamion" />
<xs:enumeration value="limuzina" />
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="godinaT">
<xs:restriction base="xs:int">
<xs:minInclusive value="1980" />
<xs:maxInclusive value="2050" />
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="jmbgT">
<xs:restriction base="xs:string">
<xs:pattern value="([0-9]){13}" />
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="spolT">
<xs:restriction base="xs:string">
<xs:enumeration value="m" />
<xs:enumeration value="f" />
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="statusKorisnikaT">
<xs:restriction base="xs:string">
<xs:enumeration value="stalni" />
<xs:enumeration value="novi" />
</xs:restriction>
</xs:simpleType>
<xs:complexType name="gradT">
<xs:sequence>
<xs:element name="postanskiBroj" type="xs:int" />
<xs:element name="naziv" type="xs:string" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="adresaT">
<xs:sequence>
<xs:element name="ulica" type="xs:string" />
<xs:element name="kucniBroj" type="xs:int" />
</xs:sequence>
</xs:complexType>
");
Now, I don't want to put the entire xml document into one row. At least I think it is bad.
I would like to move "poslovnice"(contains multiple "poslovnica") in one table and "vozila" in other...
And is it better to hold each "poslovnica" in one row in table Poslovnica or have all elements "poslovnica" in one row?
And what about uniqueness since SQL Server doesn't support unique xml data type, I've seen that you can use triggers and functions, is there any other way?
Also, if I break the xml document, and have poslovnice in one table and their vozila in other, how to achieve to show that vozilo belongs to poslovnica, should I put id of poslovnica in each vozilo in xml or should I reference rows in SQL Server?
Or would you reccomend some other database?
Thank you very much, I am sorry if I wasn't clear enough :( !
Miroslav
well first you have to ask yourself why do you want it stored in XML in the db?
this seems like a perfect scenario to have tables Poslovnica, Vozilo and Zaposlenik and have intermediate tables that hold info on which employee rented what car where.
i don't see a reason to store this in xml at all.