I have been searching for a while now, and came to the conclusion it may not be possible to change the validation per value of an attribute.
For example I have two "action" nodes, both with a "type" attribute and two elements ("name" and "description")
Only when the value of the "type" attribute is "1" it has an "a" element with "abc" child elements and when the "type" attibute is "2" it has a "bla" element with "yet" child elements.
Example of type 1
<action type="1">
<name>yup</name>
<description>yyy</description>
<a>
<abc>false</abc>
</a>
</action>
Example of type 2
<action type="2">
<name>yup2</name>
<description>RRR</description>
<bla>
<yet />
</bla>
</action>
I want to create one XSD* who whould check both types, is this possible?
And if so, how?
It has to be one XSD because I want to put the XSD on a XML column of a table of a MSSQL database.
You are right, it is not possible with XSD 1.0 which is the only XSD version supported by MSSQL. The best you can get is to create a choice between a and bla, maybe place some constraints on attribute type values, etc. Below is an illustration.
<?xml version="1.0" encoding="utf-8"?>
<!--XML Schema generated by QTAssistant/XML Schema Refactoring (XSR) Module (http://www.paschidev.com)-->
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="action">
<xs:complexType>
<xs:sequence>
<xs:element name="name" type="xs:string" />
<xs:element name="description" type="xs:string" />
<xs:choice>
<xs:element name="a">
<xs:complexType>
<xs:sequence>
<xs:element name="abc" type="xs:boolean" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="bla">
<xs:complexType>
<xs:sequence>
<xs:element name="yet" type="xs:anyType" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:choice>
</xs:sequence>
<xs:attribute name="type" type="xs:unsignedByte" use="required" />
</xs:complexType>
</xs:element>
</xs:schema>
If you control the XML structure, and still want to use some attribute to control the content model, then xsi:type is the only way to do it in XSD 1.0.
You can use the tool XML Stylus Studio to create any type of complex XSDs.
Check the details: http://www.stylusstudio.com/
Related
I have a large XML file that I have been trying to load into a SQL table using a Data Flow task in SSIS. I have an XML Source, and an ADO.NET Destination. When I run the package, even though the XML file has many records, nothing is read like it cannot read the child elements. The XML file has inline XSD so I have checked that in the properties. For the life of me I cannot get it to read the records. Please find the XML.
<?xml version="1.0" encoding="utf-16"?>
<DataSet>
<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:UseCurrentLocale="true">
<xs:complexType>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element name="Table">
<xs:complexType>
<xs:sequence>
<xs:element name="StationID" type="xs:int" />
<xs:element name="Station" minOccurs="0">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:maxLength value="60" />
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="Market" minOccurs="0">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:maxLength value="30" />
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="Format" minOccurs="0">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:maxLength value="30" />
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="earliest_report_data" type="xs:dateTime" minOccurs="0" />
<xs:element name="FCC_ID" type="xs:int" minOccurs="0" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:choice>
</xs:complexType>
<xs:unique name="Constraint1" msdata:PrimaryKey="true">
<xs:selector xpath=".//Table" />
<xs:field xpath="StationID" />
</xs:unique>
</xs:element>
</xs:schema>
<diffgr:diffgram xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1">
<NewDataSet>
<Table diffgr:id="Table1" msdata:rowOrder="0">
<StationID>2978</StationID>
<Station>WKDD-FM</Station>
<Market>Akron</Market>
<Format>Hot AC</Format>
<earliest_report_data>2006-11-28T00:00:00-05:00</earliest_report_data>
<FCC_ID>43863</FCC_ID>
</Table>
<Table diffgr:id="Table2" msdata:rowOrder="1">
<StationID>2975</StationID>
<Station>WNIR-FM</Station>
<Market>Akron</Market>
<Format>News/Talk</Format>
<earliest_report_data>2006-11-28T00:00:00-05:00</earliest_report_data>
<FCC_ID>41077</FCC_ID>
</Table>
<Table diffgr:id="Table3" msdata:rowOrder="2">
<StationID>2977</StationID>
<Station>WONE-FM</Station>
<Market>Akron</Market>
<Format>Classic Rock</Format>
<earliest_report_data>2006-11-28T00:00:00-05:00</earliest_report_data>
<FCC_ID>43873</FCC_ID>
</Table>
<Table diffgr:id="Table4" msdata:rowOrder="3">
<StationID>2976</StationID>
<Station>WQMX-FM</Station>
<Market>Akron</Market>
<Format>Country</Format>
<earliest_report_data>2006-11-28T00:00:00-05:00</earliest_report_data>
<FCC_ID>43872</FCC_ID>
</Table>
<Table diffgr:id="Table5" msdata:rowOrder="4">
<StationID>2804</StationID>
<Station>WAJZ-FM</Station>
<Market>Albany, NY</Market>
<Format>Rhythmic</Format>
<earliest_report_data>2006-08-18T00:00:00-04:00</earliest_report_data>
<FCC_ID>35537</FCC_ID>
</Table>
<Table diffgr:id="Table6" msdata:rowOrder="5">
<StationID>2797</StationID>
<Station>WFLY-FM</Station>
<Market>Albany, NY</Market>
<Format>Top 40</Format>
<earliest_report_data>2006-08-18T00:00:00-04:00</earliest_report_data>
<FCC_ID>832</FCC_ID>
</Table>
<Table diffgr:id="Table7" msdata:rowOrder="6">
<StationID>2793</StationID>
<Station>WGDJ-AM</Station>
<Market>Albany, NY</Market>
<Format>News/Talk</Format>
<earliest_report_data>2009-06-28T00:00:00-04:00</earliest_report_data>
<FCC_ID>40768</FCC_ID>
</Table>
<Table diffgr:id="Table8" msdata:rowOrder="7">
<StationID>2795</StationID>
<Station>WGNA-FM</Station>
<Market>Albany, NY</Market>
<Format>Country</Format>
<earliest_report_data>2006-08-18T00:00:00-04:00</earliest_report_data>
<FCC_ID>72118</FCC_ID>
</Table>
<Table diffgr:id="Table9" msdata:rowOrder="8">
<StationID>2791</StationID>
<Station>WGY-AM</Station>
<Market>Albany, NY</Market>
<Format>News/Talk</Format>
<earliest_report_data>2006-08-18T00:00:00-04:00</earliest_report_data>
<FCC_ID>15329</FCC_ID>
</Table>
<Table diffgr:id="Table10" msdata:rowOrder="9">
<StationID>2805</StationID>
<Station>WINU-FM</Station>
<Market>Albany, NY</Market>
<Format>Alternative Rock</Format>
<earliest_report_data>2008-12-06T00:00:00-05:00</earliest_report_data>
<FCC_ID>27551</FCC_ID>
</Table>
<Table diffgr:id="Table11" msdata:rowOrder="10">
<StationID>2803</StationID>
<Station>WKKF-FM</Station>
<Market>Albany, NY</Market>
<Format>Top 40</Format>
<earliest_report_data>2006-08-18T00:00:00-04:00</earliest_report_data>
<FCC_ID>17030</FCC_ID>
</Table>
<Table diffgr:id="Table12" msdata:rowOrder="11">
<StationID>2798</StationID>
<Station>WKLI-FM</Station>
<Market>Albany, NY</Market>
<Format>Country</Format>
<earliest_report_data>2006-08-18T00:00:00-04:00</earliest_report_data>
<FCC_ID>4682</FCC_ID>
</Table>
<Table diffgr:id="Table13" msdata:rowOrder="12">
<StationID>2807</StationID>
<Station>WPBZ-FM</Station>
<Market>Albany, NY</Market>
<Format>AC</Format>
<earliest_report_data>2006-08-18T00:00:00-04:00</earliest_report_data>
<FCC_ID>40767</FCC_ID>
</Table>
<Table diffgr:id="Table14" msdata:rowOrder="13">
<StationID>2799</StationID>
<Station>WPYX-FM</Station>
<Market>Albany, NY</Market>
<Format>Classic Rock</Format>
<earliest_report_data>2006-08-18T00:00:00-04:00</earliest_report_data>
<FCC_ID>73911</FCC_ID>
</Table>
<Table diffgr:id="Table15" msdata:rowOrder="14">
<StationID>2806</StationID>
<Station>WQBK-FM</Station>
<Market>Albany, NY</Market>
<Format>Classic Rock</Format>
<earliest_report_data>2006-08-18T00:00:00-04:00</earliest_report_data>
<FCC_ID>6613</FCC_ID>
</Table>
<Table diffgr:id="Table16" msdata:rowOrder="15">
<StationID>2792</StationID>
<Station>WROW-AM</Station>
<Market>Albany, NY</Market>
<Format>Adult Standards</Format>
<earliest_report_data>2006-08-18T00:00:00-04:00</earliest_report_data>
<FCC_ID>54853</FCC_ID>
</Table>
<Table diffgr:id="Table17" msdata:rowOrder="16">
<StationID>2800</StationID>
<Station>WRVE-FM</Station>
<Market>Albany, NY</Market>
<Format>Hot AC</Format>
<earliest_report_data>2006-08-18T00:00:00-04:00</earliest_report_data>
<FCC_ID>15330</FCC_ID>
</Table>
<Table diffgr:id="Table18" msdata:rowOrder="17">
<StationID>2815</StationID>
<Station>WTMM-FM</Station>
<Market>Albany, NY</Market>
<Format>Sports</Format>
<earliest_report_data>2010-04-29T00:00:00-04:00</earliest_report_data>
<FCC_ID>22004</FCC_ID>
</Table>
<Table diffgr:id="Table19" msdata:rowOrder="18">
<StationID>2802</StationID>
<Station>WTRY-FM</Station>
<Market>Albany, NY</Market>
<Format>Classic Hits</Format>
<earliest_report_data>2006-08-18T00:00:00-04:00</earliest_report_data>
<FCC_ID>8563</FCC_ID>
</Table>
</NewDataSet>
</diffgr:diffgram>
</DataSet>
Don't use the inline Schema. Just ask SSIS to generate it for you. SSIS generated Schema guaranties that SSIS understands it.
If you have multiple namespaces. Use an XML task. Operation type XSLT. Create the connection for your original XML file and your "transformed" XML file will be a new XML file connection for the Output.
For Second Operand, choose Direct Input.
Use the following in the Second Operand. You will then be able to point your XML source at the Output file and generate the XSD to load correctly to SQL.
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="xml" indent="no" />
<xsl:template match="/|comment()|processing-instruction()">
<xsl:copy>
<xsl:apply-templates />
</xsl:copy>
</xsl:template>
<xsl:template match="*">
<xsl:element name="{local-name()}">
<xsl:apply-templates select="#*|node()" />
</xsl:element>
</xsl:template>
<xsl:template match="#*">
<xsl:attribute name="{local-name()}">
<xsl:value-of select="." />
</xsl:attribute>
</xsl:template>
</xsl:stylesheet>
I want to extract complex XML data to SQL server. Already tried SSIS package with no success. What do I change in my code to desired output
I have tried below T-SQL
DECLARE #xmlData XML
SET #xmlData = (
SELECT CONVERT(XML, BulkColumn) AS BulkColumn
FROM OPENROWSET(BULK 'C:..\NewTextDocument.xml', SINGLE_BLOB) as x
)
SELECT
ref.value('FilterID[1]', 'int') AS FilterID ,
ref.value('Name[1]', 'NVARCHAR (255)') AS Name ,
ref.value('Code[1]', 'NVARCHAR (255)') AS Code ,
ref.value('Department[1]', 'NVARCHAR (255)') AS Department
FROM #xmlData.nodes('DataSet/Export/Test')
xmlData( ref )
My XML is in below format
<?xml version="1.0" encoding="ISO-8859-1"?>
<DataSet>
<xs:schema id="Export" xmlns:msdata="urn:schemas-microsoft-com:xml-
msdata" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="">
<xs:element msdata:Locale="" msdata:IsDataSet="true" name="Export">
<xs:complexType>
<xs:choice maxOccurs="unbounded" minOccurs="0">
<xs:element name="Test">
<xs:complexType>
<xs:sequence>
<xs:element name="FilterID" minOccurs="0" type="xs:int"/>
<xs:element name="Name" minOccurs="0" type="xs:string"/>
<xs:element name="Code" minOccurs="0" type="xs:string"/>
<xs:element name="Department" minOccurs="0" type="xs:string"/>
</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">
<Export>
<Test diffgr:id="Test1" msdata:rowOrder="0">
<FilterID>1</FilterID>
<Name>John</Name>
<Code>123</Code>
<Department>Science</Department>
</Test>
<Test diffgr:id="Test2" msdata:rowOrder="1">
<FilterID>2</FilterID>
<Name>Jay</Name>
<Code>321</Code>
<Department>Maths</Department>
</Test>
</Export>
Expected Output
FilterID | Name | Code | Department
------------------------------------
1 | John | 123 | Science
2 | Jay | 321 | Maths
Resolved, I was able to query data by modifying from clause in above code
FROM #xmlData.nodes('DataSet/Export/Test')
to
FROM #xmlData.nodes('//Export/Test')
i created a sample apache cxf SOAP webservices, following the tutorial here
i'm able to run on tomcat 9 via eclipse neon and access it at http://localhost:8080/camel-example-reportincident/webservices/incident?wsdl.
i installed and started it on websphere, but i can't access it on the same url. i also tried all other ports listed in default host alias.
my maven libraries:
here is my wsdl:
<?xml version="1.0" encoding="ISO-8859-1"?> <wsdl:definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://reportincident.example.camel.apache.org" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" targetNamespace="http://reportincident.example.camel.apache.org">
<!-- Type definitions for input- and output parameters for webservice
--> <wsdl:types> <xs:schema targetNamespace="http://reportincident.example.camel.apache.org"> <xs:element name="inputReportIncident">
<xs:complexType>
<xs:sequence>
<xs:element type="xs:string" name="incidentId" />
<xs:element type="xs:string" name="incidentDate" />
<xs:element type="xs:string" name="givenName" />
<xs:element type="xs:string" name="familyName" />
<xs:element type="xs:string" name="summary" />
<xs:element type="xs:string" name="details" />
<xs:element type="xs:string" name="email" />
<xs:element type="xs:string" name="phone" />
</xs:sequence>
</xs:complexType> </xs:element> <xs:element name="outputReportIncident">
<xs:complexType>
<xs:sequence>
<xs:element type="xs:string" name="code" />
</xs:sequence>
</xs:complexType> </xs:element> </xs:schema> </wsdl:types>
<!-- Message definitions for input and output --> <wsdl:message name="inputReportIncident"> <wsdl:part name="parameters" element="tns:inputReportIncident" /> </wsdl:message> <wsdl:message name="outputReportIncident"> <wsdl:part name="parameters" element="tns:outputReportIncident" /> </wsdl:message>
<!-- Port (interface) definitions --> <wsdl:portType name="ReportIncidentEndpoint"> <wsdl:operation name="ReportIncident"> <wsdl:input message="tns:inputReportIncident" /> <wsdl:output message="tns:outputReportIncident" /> </wsdl:operation> </wsdl:portType>
<!-- Port bindings to transports and encoding - HTTP, document literal encoding is used --> <wsdl:binding name="ReportIncidentBinding" type="tns:ReportIncidentEndpoint"> <soap:binding transport="http://schemas.xmlsoap.org/soap/http" /> <wsdl:operation name="ReportIncident"> <soap:operation
soapAction="http://reportincident.example.camel.apache.org/ReportIncident"
style="document" /> <wsdl:input>
<soap:body parts="parameters" use="literal" /> </wsdl:input> <wsdl:output>
<soap:body parts="parameters" use="literal" /> </wsdl:output> </wsdl:operation> </wsdl:binding>
<!-- Service definition --> <wsdl:service name="ReportIncidentService"> <wsdl:port name="ReportIncidentPort" binding="tns:ReportIncidentBinding"> <soap:address location="http://reportincident.example.camel.apache.org" /> </wsdl:port> </wsdl:service>
</wsdl:definitions>
here is my ibm-web-bnd.xml:
<?xml version="1.0" encoding="UTF-8"?> <web-bnd xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://websphere.ibm.com/xml/ns/javaee"
xsi:schemaLocation="http://websphere.ibm.com/xml/ns/javaee http://websphere.ibm.com/xml/ns/javaee/ibm-web-bnd_1_0.xsd" version="1.0"> <virtual-host name="default_host"/> </web-bnd>
here is my cxf-config.xml:
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jaxws="http://cxf.apache.org/jaxws"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd">
<import resource="classpath:META-INF/cxf/cxf.xml" />
<import resource="classpath:META-INF/cxf/cxf-extension-soap.xml" />
<import resource="classpath:META-INF/cxf/cxf-servlet.xml" />
<!-- implementation of the webservice -->
<bean id="reportIncidentEndpoint"
class="org.apache.camel.example.reportincident.impl.ReportIncidentEndpointImpl" />
<!-- export the webservice using jaxws -->
<jaxws:endpoint id="reportIncident" implementor="#reportIncidentEndpoint"
address="/incident" wsdlLocation="/WEB-INF/wsdl/report_incident.wsdl"
endpointName="s:ReportIncidentPort" serviceName="s:ReportIncidentService"
xmlns:s="http://reportincident.example.camel.apache.org" />
</beans>
here is my web.xml:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
version="2.5">
<display-name>Archetype Created Web Application</display-name>
<!-- the listener that kick-starts Spring -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- CXF servlet -->
<servlet>
<servlet-name>CXFServlet</servlet-name>
<servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<!-- all our webservices are mapped under this URI pattern -->
<servlet-mapping>
<servlet-name>CXFServlet</servlet-name>
<url-pattern>/webservices/*</url-pattern>
</servlet-mapping>
<!-- location of spring xml files -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:cxf-config.xml</param-value>
</context-param>
</web-app>
====================
Update
strangely, the last update for SystemOut.log and SystemErr.log were two days ago. i found some logs in C:\Program Files (x86)\IBM\WebSphere\AppServer\profiles\AppSrv01\logs\ffdc
logs:
FFDC Exception:org.springframework.beans.factory.BeanCreationException SourceId:com.ibm.ws.webcontainer.webapp.WebApp.notifyServletContextCreated ProbeId:1341 Reporter:com.ibm.ws.webcontainer.webapp.WebAppImpl#bdd2e142
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'cxf' defined in class path resource [META-INF/cxf/cxf.xml]: Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [org.apache.cxf.bus.spring.SpringBus]: Constructor threw exception; nested exception is org.apache.cxf.bus.extension.ExtensionException
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:1039)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:985)
.....
Caused by: org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [org.apache.cxf.bus.spring.SpringBus]: Constructor threw exception; nested exception is org.apache.cxf.bus.extension.ExtensionException
at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:163)
at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:87)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:1032)
Caused by: java.lang.UnsupportedClassVersionError: JVMCFRE003 bad major version; class=org/apache/camel/component/cxf/transport/CamelTransportFactory, offset=6
at java.lang.ClassLoader.defineClassImpl(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:273)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:74)
com.ibm.ws.ffdc.impl.FfdcProvider logIncident FFDC1003I: FFDC Incident emitted on C:\Program Files (x86)\IBM\WebSphere\AppServer\profiles\AppSrv01\logs\ffdc\server1_24638c34_17.05.05_01.11.23.0597458986526819616127.txt com.ibm.ws.webcontainer.servlet.ServletInstance.init 181
com.ibm.ws.webcontainer.VirtualHostImpl addWebApplication SRVE0250I: Web Module Archetype Created Web Application has been bound to default_host[*:9080,*:80,*:9443,*:5060,*:5061,*:443].
WSVR0221I: Application started: camel-example-reportincident_war
WSVR0191I: Composition unit WebSphere:cuname=camel-example-reportincident_war in BLA WebSphere:blaname=camel-example-reportincident_war started.
An UnsupportedClassVersionError means that the class (in this case, CamelTransportFactory) was compiled against a higher level of Java than the JVM that you're running on. If you have a version of WebSphere that supports higher Java spec levels, you'll need to pick up a higher-level JDK; if not, then you'll need a version of the Camel package that supports Java 6.
I am trying to generate Apex classes from a wsdl file.but i am facing a problem...
Apex Generation Failed
Unable to find schema for element; {http://www.w3.org/2001/XMLSchema}string
Can you please help on that.
<?xml version="1.0" encoding="UTF-8"?>
<wsdl:definitions targetNamespace="http://eapisws.cbp.dhs.gov/ws/manifest1_0/" xmlns:mns="http://eapisws.cbp.dhs.gov/ws/manifest1_0/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">
<wsdl:types>
<xs:schema targetNamespace="http://eapisws.cbp.dhs.gov/ws/manifest1_0/" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:mns="http://eapisws.cbp.dhs.gov/ws/manifest1_0/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" elementFormDefault="qualified" attributeFormDefault="unqualified" version="1_0">
<xs:annotation>
<xs:documentation xml:lang="en">
This is the first release of WSDL file for the APIS FlightManifest Batch Web Service and it is subject to change.
</xs:documentation>
</xs:annotation>
<xs:element name="flightManifest" nillable="false">
<xs:annotation>
<xs:documentation xml:lang="en">Valid UN-EDIFACT document</xs:documentation>
</xs:annotation>
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:maxLength value="2097152"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="certificationFlightManifest" nillable="false">
<xs:annotation>
<xs:documentation xml:lang="en">Valid UN-EDIFACT document to be certified/validated</xs:documentation>
</xs:annotation>
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:maxLength value="2097152"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="submissionResponse" nillable="true" type="xs:string"/>
</xs:schema>
</wsdl:types>
<wsdl:message name="flightManifestRequest">
<wsdl:part element="mns:flightManifest" name="flightManifest"/>
</wsdl:message>
<wsdl:message name="certificationFlightManifestRequest">
<wsdl:part element="mns:certificationFlightManifest" name="certificationFlightManifest"/>
</wsdl:message>
<wsdl:message name="flightManifestResponse">
<wsdl:part element="mns:submissionResponse" name="submissionResponse"/>
</wsdl:message>
<wsdl:portType name="EapisManifest">
<wsdl:operation name="submitFlightManifest">
<wsdl:input message="mns:flightManifestRequest" name="flightManifestRequest"/>
<wsdl:output message="mns:flightManifestResponse" name="flightManifestResponse"/>
</wsdl:operation>
<wsdl:operation name="submitCarrierCertificationRequest">
<wsdl:input message="mns:certificationFlightManifestRequest" name="certificationFlightManifestRequest"/>
<wsdl:output message="mns:flightManifestResponse" name="flightManifestResponse"/>
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name="EapisManifestSoapBinding" type="mns:EapisManifest">
<wsdlsoap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
<wsdl:operation name="submitFlightManifest">
<wsdlsoap:operation soapAction=""/>
<wsdl:input name="flightManifestRequest">
<wsdlsoap:body use="literal"/>
</wsdl:input>
<wsdl:output name="flightManifestResponse">
<wsdlsoap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="submitCarrierCertificationRequest">
<wsdlsoap:operation soapAction=""/>
<wsdl:input name="certificationFlightManifestRequest">
<wsdlsoap:body use="literal"/>
</wsdl:input>
<wsdl:output name="flightManifestResponse">
<wsdlsoap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name="EapisManifestService">
<wsdl:port binding="mns:EapisManifestSoapBinding" name="EapisManifest">
<wsdlsoap:address location="https://eapisws.cbp.dhs.gov/apis/eapisws1_0/services/EapisManifest"/>
</wsdl:port>
</wsdl:service>
</wsdl:definitions>
The answer to the problem is mentioned in the comment made regarding changing the submission response element from a simple type to a complex type as mentioned in the link.
I hope someone can help me. I'm very new at this. I was wondering if it's possible to get an XSD Schema to dump XML data into multiple SQL tables (using the sql:relation attribute, etc.).
One table is proving no problems, so I just wondered if it's possible to dump data in two. It'd be nice to be able to do this with one XSD Schema, but do I have to make two passes on the XML for the second table?
Thanks for any assistance.
Here's the schema itself:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:sql="urn:schemas-microsoft-com:mapping-schema">
<!-- Skimlinks/Everyfeed schema -->
<!-- definition of simple elements -->
<xs:element name="title" type="xs:string" sql:field="ProductName"/>
<xs:element name="url" type="xs:string" sql:field="ProductURL"/>
<xs:element name="image_url" type="xs:string" sql:field="ImageURL"/>
<xs:element name="currency" type="xs:string" sql:field="currency"/>
<xs:element name="price" type="xs:string" sql:field="Price"/>
<xs:element name="merchant" type="xs:string" sql:field="Brand" default=" " />
<xs:element name="description" type="xs:string" sql:field="Description" default=" "/>
<xs:element name="item" type="xs:string" sql:field="Category" />
<!-- definition of attributes -->
<xs:attribute name="id" type="xs:string" sql:field="SKU" />
<!-- definition of complex elements -->
<xs:element name="category" sql:relation="ProductDataCategory">
<xs:complexType>
<xs:sequence>
<xs:element ref="item" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="product" sql:relation="ProductData">
<xs:complexType>
<xs:sequence>
<xs:element ref="title"/>
<xs:element ref="url"/>
<xs:element ref="image_url"/>
<xs:element ref="currency"/>
<xs:element ref="price"/>
<xs:element ref="merchant"/>
<xs:element ref="description"/>
<xs:element ref="category"/>
</xs:sequence>
<xs:attribute ref="id" use="required"/>
</xs:complexType>
</xs:element>
<xs:element name="products" sql:is-constant="1">
<xs:complexType>
<xs:sequence>
<xs:element ref="product" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="everyFeed" sql:is-constant="1">
<xs:complexType>
<xs:sequence>
<xs:element ref="products" maxOccurs="1" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
Here's an example of the XML we're importing:
<?xml version='1.0' encoding='utf-8'?>
<feed version="2">
<numFound>7985</numFound>
<products>
<product id="18639|216623247">
<title>Trouser</title>
<url>http://www.products.com/trousers/trouser/</url>
<image_url>http://www.images.co.uk/images/big/4d624426.jpg</image_url>
<verified_image>True</verified_image>
<currency>GBP</currency>
<price>1000</price>
<prev_price>1000</prev_price>
<firstseen>2010-10-27T00:00:00Z</firstseen>
<lastseen>2010-10-27T00:00:00Z</lastseen>
<merchant id="20748">Yours Clothing</merchant>
<by>Yours Clothing</by>
<description></description>
<category>
<item id="9">Lounge & nightwear</item>
<item id="3">Women</item>
<item id="2">Clothing</item>
<item id="1">Clothing, shoes & accessories</item>
</category>
</product>
</products>
</feed>
As you can see, it attempts to dump into two tables: ProductData and ProductDataCategory. Only the stuff stored in the <item> elements should go in the latter table (in the field category).
The error message reads:
Error: Relationship expected on 'category'
I don't know why :(
Thanks for any assistance in getting this working!
You may need to define a SQL relationship in the XSD file if you are trying to do a bulk import. I ran into a similar problem (this is just an example, not specific to your XSD):
<xs:annotation>
<xs:appinfo>
<sql:relationship name="Detail"
parent="Product"
parent-key="ProductID"
child="Details"
child-key="ProductID"
/>
<sql:relationship name="ProductFiles"
parent="Product"
parent-key="ProductID"
child="Files"
child-key="ProductID"
/>
<sql:relationship name="ProductToList"
parent="Product"
parent-key="ProductID"
child="ProductList"
child-key="ProductID"
/>
<sql:relationship name="ListToProduct"
parent="ProductList"
parent-key="ID"
child="ProductListProduct"
child-key="ProductListID"
/>
</xs:appinfo>
</xs:annotation>
Django,
Why not try something like DBVis - http://www.dbvis.com/ - to create a visual representation of all the relationships in your database and work towards having the xsd match the generated diagram. This'll ensure you get all of these relationships.
See here for an example screeshot for a very simple database - http://www.dbvis.com/products/dbvis/doc/main/doc/ug/databaseExplorer/images/genericschemaview.png
I can vouch for it working well for much larger databases too.
Hopefully this'll help.