XSD all-or-nothing group - xsd

I want to match these two documents:
<a>
<b/>
</a>
and:
<a>
<b/>
<c/>
<d/>
</a>
That is, there must be either neither of c and d or both of c and d.
I've tried to have a choice of two sequences, but I get: "The content model is
not determinist.", I guess because the choice has to be disambiguated on the
first element, which is the same for the two different documents.

You can put c and d inside a sequence group with minOccurs=0. Like this:
<element name="a">
<complexType>
<sequence>
<element name="b" />
<sequence minOccurs="0">
<element name="c" />
<element name="d" />
</sequence>
</sequence>
</complexType>
</element>
If you want c and d to be able to appear in any order, you can do this:
<element name="a">
<complexType>
<sequence>
<element name="b" />
<choice minOccurs="0">
<sequence>
<element name="c" />
<element name="d" />
</sequence>
<sequence>
<element name="d" />
<element name="c" />
</sequence>
</choice>
</sequence>
</complexType>
</element>
Obviously, this approach does not scale well if you have more than two members in the group.

Related

xml choice : single element should repeat

I want a document to consist only apples or oranges. I am creating an XML schema as follows:
<element name="fruit" type="myns:fruitType"></element>
<complexType name="fruitType">
<choice minOccurs="1" maxOccurs="1">
<sequence>
<element name="apple" type="string" minOccurs="0" maxOccurs="unbounded"></element>
<element name="orange" type="string" minOccurs="0" maxOccurs="0"></element>
</sequence>
<sequence >
<element name="orange" type="string" minOccurs="0" maxOccurs="unbounded"></element>
<element name="apple" type="string" minOccurs="0" maxOccurs="0"></element>
</sequence>
</choice>
</complexType>
but this accepts the following as a valid element.
<fruit>
<apple> apple1 </apple>
<orange> orange1 </orange>
<orange> orange2 </orange>
<apple> apple2 </apple>
</fruit>
I want only the following to be valid:
<fruit>
<apple> apple1 </apple>
<apple> apple2 </apple>
.
.
<apple> appleN </apple>
</fruit>
OR
<fruit>
<orange> orange1 </orange>
<orange> orange2 </orange>
.
.
<orange> orangeN </orange>
</fruit>
Any idea how to do that?
<complexType name="fruitType">
<choice minOccurs="1" maxOccurs="1">
<sequence>
<element name="apple" type="string" minOccurs="0" maxOccurs="unbounded"></element>
</sequence>
<sequence >
<element name="orange" type="string" minOccurs="0" maxOccurs="unbounded"></element>
</sequence>
</choice>
</complexType>
The correct schema should have been:
<complexType name="fruitType">
<choice minOccurs="1" maxOccurs="1">
<sequence>
<element name="apple" type="string" **minOccurs="1"** maxOccurs="unbounded">
</element>
</sequence>
<sequence >
<element name="orange" type="string" **minOccurs="1"** maxOccurs="unbounded">
</element>
</sequence>
</choice>
</complexType>

Using Unique without namespace declaration

Can anyone explain why a unique identity constraint on an eleement would not work unless the elements are namespace prefixed? This leads me to beleive that unique constraints can only be applied to gloabbly defined elements. I am not sure why a unique constratint couldnt be put on a locally defiened element. In my sample schema below, i have a unique constraint defined on Writer.name which works fine. I also defined one on Test.name which does not work unless I make Test and its chiled name, global elements.
<schema targetNamespace="http://www.amica.com/dev_v1/Test" xmlns="http://www.w3.org/2001/XMLSchema" xmlns:tns="http://www.amica.com/dev_v1/Test" elementFormDefault="unqualified" attributeFormDefault="unqualified">
<element name="MyMusic">
<complexType>
<sequence>
<element name="Song" type="tns:SongType"/>
</sequence>
</complexType>
</element>
<complexType name="SongType">
<sequence>
<element ref="tns:Artists"/>
<element ref="tns:Writers"/>
<element name="Tests">
<complexType>
<sequence>
<element name="Test" maxOccurs="unbounded">
<complexType>
<sequence>
<element name="name"/>
</sequence>
</complexType>
</element>
</sequence>
</complexType>
<unique name="UniqueTestName">
<selector xpath="Test"/>
<field xpath="name"/>
</unique>
</element>
</sequence>
</complexType>
<element name="Artist">
<complexType>
<simpleContent>
<extension base="string">
<attribute name="aID" use="required">
<simpleType>
<restriction base="string"/>
</simpleType>
</attribute>
</extension>
</simpleContent>
</complexType>
</element>
<element name="Writer">
<complexType>
<sequence>
<element ref="tns:name"/>
</sequence>
</complexType>
</element>
<element name="Artists">
<annotation>
<documentation>Test unique constraint on an attrbute</documentation>
</annotation>
<complexType>
<sequence>
<element ref="tns:Artist" maxOccurs="unbounded"/>
</sequence>
</complexType>
<unique name="UniqueArtistKey">
<selector xpath="tns:Artist"/>
<field xpath="#aID"/>
</unique>
</element>
<element name="Writers">
<annotation>
<documentation>Test unique constraint on an element</documentation>
</annotation>
<complexType>
<sequence>
<element ref="tns:Writer" maxOccurs="unbounded"/>
</sequence>
</complexType>
<unique name="UniqueWriterName">
<selector xpath="tns:Writer"/>
<field xpath="tns:name"/>
</unique>
</element>
<element name="name" type="string"/>
</schema>

how to enforce atleast one occurence for 2 element types in XSD schema

I need to develop an xsd for the scenario. where i have 2 element of types Server1 and Server2. There can be any number of occurances for Server1 and Server2 but atleast one of the occurance is mandatory either Server1 or Server2.
<element name="Server1">
<complexType>
<sequence>
<element name="hostName" type="string"/>
<element name="portNumber" type="integer"/>
<element name="userName" type="string"/>
</sequence>
</complexType>
</element>
<element name="Server2">
<complexType>
<sequence>
<element name="hostName" type="string"/>
<element name="portNumber" type="integer"/>
</sequence>
</complexType>
</element>
Thanks
Ravi
You can wrap them to choice schema element with maxOccurs attribute set to unbounded.
Sample:
<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
<element name="root">
<complexType>
<choice maxOccurs="unbounded">
<element name="Server1">
<complexType>
<sequence>
<element name="hostName" type="string"/>
<element name="portNumber" type="integer"/>
<element name="userName" type="string"/>
</sequence>
</complexType>
</element>
<element name="Server2">
<complexType>
<sequence>
<element name="hostName" type="string"/>
<element name="portNumber" type="integer"/>
</sequence>
</complexType>
</element>
</choice>
</complexType>
</element>
</schema>
I'm not sure it's the best possibility by any means, but one possibility would be for Server1 and Server2 to be just type names, and then create an element that's a union of Server1 and Server2.
<xsd:comlexType name=Server1>
<sequence>
// ...
</sequence>
</xsd:complextype>
<xsd:complexType name=Server2>
// ...
</xsd:complexType>
<element name="Server">
<xsd:union memberTypes = "Server1 Server2" />
</element>

DTD -> XSD conversion: mixed list of two elements, one constrained

I'm trying to represent the following DTD fragment in XSD:-
(A | B)* | (A | C)* | (A | D)* | ...
i.e. a mixed list of any number of As and any number of one of B, C, D, ...
CastorConverter spits out:-
<choice>
<choice minOccurs="0" maxOccurs="unbounded">
<element ref="tns:A" />
<element ref="tns:B" />
</choice>
<choice minOccurs="0" maxOccurs="unbounded">
<element ref="tns:A" />
<element ref="tns:C" />
</choice>
<choice minOccurs="0" maxOccurs="unbounded">
<element ref="tns:A" />
<element ref="tns:D" />
</choice>
</choice>
but this gives me a parser error. Investigating with visual studio brings up the following warning:-
"Multiple definition of element 'A' causes the content model to become ambiguous. A content model must be formed such that during validation of an element information item sequence, the particle contained directly, indirectly or implicitly therein with which to attempt to validate each item in the sequence in turn can be uniquely determined without examining the content or attributes of that item, and without any information about the items in the remainder of the sequence."
The problem appears to be that if the parser encounters an "A" will need to "look-ahead" to the rest of the sequence in order to determine which choice to validate against.
Is there another way I can represent this sequence in XSD?
Use sequences, like this:
<sequence minOccurs="0">
<element minOccurs="0" maxOccurs="unbounded" ref="tns:A" />
<choice>
<sequence>
<element minOccurs="1" maxOccurs="unbounded" ref="tns:B" />
<sequence minOccurs="0" maxOccurs="unbounded">
<element maxOccurs="unbounded" ref="tns:A" />
<element minOccurs="0" maxOccurs="unbounded" ref="tns:B" />
</sequence>
</sequence>
<sequence>
<element minOccurs="1" maxOccurs="unbounded" ref="tns:C" />
<sequence minOccurs="0" maxOccurs="unbounded">
<element maxOccurs="unbounded" ref="tns:A" />
<element minOccurs="0" maxOccurs="unbounded" ref="tns:C" />
</sequence>
</sequence>
<sequence>
<element minOccurs="1" maxOccurs="unbounded" ref="tns:D" />
<sequence minOccurs="0" maxOccurs="unbounded">
<element maxOccurs="unbounded" ref="tns:A" />
<element minOccurs="0" maxOccurs="unbounded" ref="tns:D" />
</sequence>
</sequence>
</choice>
</sequence>
alt text http://www.freeimagehosting.net/uploads/29c07bafa2.png

Errors using SvcUtil.exe on a wsdl to generate proxy class - xs:group element

I'm trying to use SvcUtil against a wsdl file to generate proxy classes, but I'm getting an element missing error that I think is related to schema group elements. Does anyone know for a fact if svcutil can handle ? And if so will it handle xs:group elements that have ref attributes that point to the group definition that lives in another schema file?
SvcUtil.exe Command (included the paths to the xsd files as well):
d:\codegen\svcutil.exe d:\codegen\RPE\ProtocolStateManager.wsdl d:\codegen\RPE\schema\RPE.xsd d:\codegen\RPE\schema\PORT_MT100001UV.xsd d:\codegen\RPE\schema\coreschemas\infrastructureRoot.xsd d:\codegen\RPE\schema\coreschemas\dataTypes.xsd d:\codegen\RPE\schema\coreschemas\voc.xsd /l:cs
The error is:
Error: Cannot import wsdl:portType
Detail: An exception was thrown while
running a WSDL import extension:
System.ServiceModel.Description.XmlSerializerMessageContractImporter
Error: Group
InfrastructureRootElements is missing.
XPath to Error Source:
//wsdl:definitions[#targetNamespace='urn:ihe:qrph:rpe:2009']/wsdl:portType[#name= 'ProtocolStateManager']
ProtocolStateManager.wsdl:
<?xml version="1.0" encoding="UTF-8"?>
<definitions name="ProtocolStateManager"
targetNamespace="urn:ihe:qrph:rpe:2009"
xmlns:rpe="urn:ihe:qrph:rpe:2009"
xmlns="http://schemas.xmlsoap.org/wsdl/"
xmlns:plnk="http://schemas.xmlsoap.org/ws/2003/05/partner-link/">
<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
TYPE DEFINITION - List of services participating in this BPEL process
The default output of the BPEL designer uses strings as input and
output to the BPEL Process. But you can define or import any XML
Schema type and use them as part of the message types.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
<types>
<schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="urn:ihe:qrph:rpe:2009">
<include schemaLocation="schema\RPE.xsd"/>
</schema>
</types>
<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
MESSAGE TYPE DEFINITION - Definition of the message types used as
part of the port type defintions
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
<message name="EnterPatientRequestRequestMessage">
<part name="payload" element="rpe:EnterPatientRequest"/>
</message>
<message name="EnterPatientRequestResponseMessage">
<part name="payload" element="rpe:EnterPatientRequest"/>
</message>
<message name="PatientScreeningVisitsScheduledRequestMessage">
<part name="payload" element="rpe:PatientScreeningVisitsScheduled"/>
</message>
<message name="PatientScreeningVisitsScheduledResponseMessage">
<part name="payload" element="rpe:PatientScreeningVisitsScheduled"/>
</message>
<message name="PatientScreeningVisitRecordedRequestMessage">
<part name="payload" element="rpe:PatientScreeningVisitRecorded"/>
</message>
<message name="PatientScreeningVisitRecordedResponseMessage">
<part name="payload" element="rpe:PatientScreeningVisitRecorded"/>
</message>
<message name="EnrollPatientRequestRequestMessage">
<part name="payload" element="rpe:EnrollPatientRequest"/>
</message>
<message name="EnrollPatientRequestResponseMessage">
<part name="payload" element="rpe:EnrollPatientRequest"/>
</message>
<message name="PatientStudyVisitsScheduledRequestMessage">
<part name="payload" element="rpe:PatientStudyVisitsScheduled"/>
</message>
<message name="PatientStudyVisitsScheduledResponseMessage">
<part name="payload" element="rpe:PatientStudyVisitsScheduled"/>
</message>
<message name="PatientStudyVisitRecordedRequestMessage">
<part name="payload" element="rpe:PatientStudyVisitRecorded"/>
</message>
<message name="PatientStudyVisitRecordedResponseMessage">
<part name="payload" element="rpe:PatientStudyVisitRecorded"/>
</message>
<message name="AlertProtocolStateMessage">
<part name="payload" element="rpe:AlertProtocolState"/>
</message>
<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
PORT TYPE DEFINITION - A port type groups a set of operations into
a logical service unit.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
<!-- portType implemented by the ProtocolStateManager BPEL process -->
<portType name="ProtocolStateManager">
<operation name="EnterPatientRequest">
<input message="rpe:EnterPatientRequestRequestMessage"/>
<output message="rpe:EnterPatientRequestResponseMessage"/>
</operation>
<operation name="PatientScreeningVisitsScheduled">
<input message="rpe:PatientScreeningVisitsScheduledRequestMessage"/>
<output message="rpe:PatientScreeningVisitsScheduledResponseMessage"/>
</operation>
<operation name="RecordPatientScreeningVisit">
<input message="rpe:PatientScreeningVisitRecordedRequestMessage"/>
<output message="rpe:PatientScreeningVisitRecordedResponseMessage"/>
</operation>
<operation name="EnrollPatientRequest">
<input message="rpe:EnrollPatientRequestRequestMessage"/>
<output message="rpe:EnrollPatientRequestResponseMessage"/>
</operation>
<operation name="PatientStudyVisitsScheduled">
<input message="rpe:PatientStudyVisitsScheduledRequestMessage"/>
<output message="rpe:PatientStudyVisitsScheduledResponseMessage"/>
</operation>
<operation name="RecordPatientStudyVisit">
<input message="rpe:PatientStudyVisitRecordedRequestMessage"/>
<output message="rpe:PatientStudyVisitRecordedResponseMessage"/>
</operation>
</portType>
<portType name="ProtocolStateManagerCallback">
<operation name="onAlertProtocolState">
<input message="rpe:AlertProtocolStateMessage"/>
</operation>
</portType>
<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
PARTNER LINK TYPE DEFINITION
the ProtocolStateManager partnerLinkType binds the provider and
requester portType into an asynchronous conversation.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
<plnk:partnerLinkType name="ProtocolStateManager">
<plnk:role name="ProtocolStateManagerProvider">
<plnk:portType name="rpe:ProtocolStateManager"/>
</plnk:role>
<plnk:role name="ProtocolStateManagerCallbackListener">
<plnk:portType name="rpe:ProtocolStateManagerCallback"/>
</plnk:role>
</plnk:partnerLinkType>
</definitions>
RPE.xsd (reference by ProtocolStateManager.wsdl):
<schema attributeFormDefault="unqualified" elementFormDefault="qualified"
targetNamespace="urn:ihe:qrph:rpe:2009"
xmlns:rpe="urn:ihe:qrph:rpe:2009"
xmlns:v3="urn:hl7-org:v3"
xmlns="http://www.w3.org/2001/XMLSchema">
<import namespace="urn:hl7-org:v3" schemaLocation="PORT_MT100001UV.xsd"/>
<element name="RetrieveProtocolDef" type="rpe:RetrieveProtocolDefType"/>
<element name="EnterPatientRequest" type="rpe:EnterPatientRequestType"/>
<element name="EnrollPatientRequest" type="rpe:EnrollPatientRequestType"/>
<element name="PatientScreeningVisitsScheduled" type="rpe:PatientScreeningVisitsScheduledType"/>
<element name="PatientScreeningVisitRecorded" type="rpe:PatientScreeningVisitRecordedType"/>
<element name="PatientStudyVisitsScheduled" type="rpe:PatientStudyVisitsScheduledType"/>
<element name="PatientStudyVisitRecorded" type="rpe:PatientStudyVisitRecordedType"/>
<element name="AmendProtocolDef" type="rpe:AmendProtocolDefType"/>
<element name="AlertProtocolState" type="rpe:AlertProtocolStateType"/>
<!-- need patient information and study information
EnterPatientRequestType can also be used for the return of candidateID?-->
<complexType name="RetrieveProtocolDefType">
<sequence>
<element name="query" type="string"/>
<element name="protocolDef" type="string"/>
</sequence>
</complexType>
<complexType name="EnterPatientRequestType">
<sequence>
<element name="patient" type="rpe:PatientType"/>
<element name="study" type="v3:PORT_MT100001UV.Study"/>
</sequence>
</complexType>
<!-- need patient for candidateID of the patient being scheduled for screening visits
need studyID to associate the candidate with the study
need schedule information-->
<complexType name="PatientScreeningVisitsScheduledType">
<sequence>
<element name="patient" type="rpe:PatientType"/>
<element name="studyID" type="v3:II"/>
<element name="schedule" type="rpe:ScreeningVisitScheduleType"/>
</sequence>
</complexType>
<!-- need patient for candidateID of patient being recorded for screening visit
need studyID to associate the candidate with the study
need visit information for the screening visit being recorded-->
<complexType name="PatientScreeningVisitRecordedType">
<sequence>
<element name="patient" type="rpe:PatientType"/>
<element name="studyID" type="v3:II"/>
<element name="visit" type="rpe:ScreenVisitType"/>
</sequence>
</complexType>
<!-- need patient information and study information
EnterPatientRequestType can also be used for the return of subjectID?-->
<complexType name="EnrollPatientRequestType">
<sequence>
<element name="patient" type="rpe:PatientType"/>
<element name="study" type="v3:PORT_MT100001UV.Study"/>
</sequence>
</complexType>
<!-- need patient for subjectID of the patient being scheduled for visits
need studyID to associate the subject with the study
need schedule information-->
<complexType name="PatientStudyVisitsScheduledType">
<sequence>
<element name="patient" type="rpe:PatientType"/>
<element name="studyID" type="v3:II"/>
<element name="schedule" type="rpe:StudyVisitScheduleType"/>
</sequence>
</complexType>
<!-- need patient for subjectID of patient being recorded for visit
need studyID to associate the subject with the study
need visit information for the visit being recorded-->
<complexType name="PatientStudyVisitRecordedType">
<sequence>
<element name="patient" type="rpe:PatientType"/>
<element name="studyID" type="v3:II"/>
<element name="visit" type="rpe:StudyVisitType"/>
</sequence>
</complexType>
<!-- patient information should NOT include emrID?
should contain placeholder for candidateID and subjectID
what specific demographics data is needed?
Should this be a generic type so that an XML standard can be passed?-->
<complexType name="PatientType">
<sequence>
<element name="candidateID" type="string"/>
<element name="subjectID" type="string"/>
<element name="name" type="string"/>
<element name="address" type="string"/>
<element name="dob" type="string"/>
</sequence>
</complexType>
<!-- studyID to identify the study
should studyData be a generic type to store an XML standard
<complexType name="StudyType">
<sequence>
<element name="studyID" type="string"/>
<element name="studyData" type="string"/>
</sequence>
</complexType>-->
<complexType name="ScreenVisitType">
<sequence>
<element name="visitID" type="string"/>
<element name="candidateID" type="string"/>
<element name="date" type="string"/>
<element name="screenVisitData" type="string"/>
</sequence>
</complexType>
<complexType name="StudyVisitType">
<sequence>
<element name="visitID" type="string"/>
<element name="subjectID" type="string"/>
<element name="date" type="string"/>
<element name="studyVisitData" type="string"/>
</sequence>
</complexType>
<complexType name="ScreeningVisitScheduleType">
<sequence>
<element name="visit" type="rpe:ScreenVisitType" maxOccurs="unbounded"/>
</sequence>
</complexType>
<complexType name="StudyVisitScheduleType">
<sequence>
<element name="visit" type="rpe:StudyVisitType" maxOccurs="unbounded"/>
</sequence>
</complexType>
<complexType name="AmendProtocolDefType">
<sequence>
<element name="protocolDef" type="string"/>
</sequence>
</complexType>
<complexType name="AlertProtocolStateType">
<sequence>
<element name="patient" type="rpe:PatientType"/>
<element name="study" type="v3:PORT_MT100001UV.Study"/>
</sequence>
</complexType>
</schema>
Snippet from PORT_MT100001UV.xsd (Referenced by RPE.xsd) - notice the "InfrastructureRootElements" xs:group:
<xs:complexType name="PORT_MT100001UV.Access">
<xs:sequence>
<xs:group ref="InfrastructureRootElements"/>
<xs:element name="id" type="II" minOccurs="0" maxOccurs="unbounded"/>
<xs:element name="targetSiteCode" type="CD" minOccurs="0" maxOccurs="1"/>
<xs:choice>
<xs:choice>
<xs:element name="accessedPerson" type="PORT_MT100001UV.Person" nillable="true"
minOccurs="0"
maxOccurs="1"/>
<xs:element name="accessedNonPersonLivingSubject"
type="PORT_MT100001UV.NonPersonLivingSubject"
nillable="true"
minOccurs="0"
maxOccurs="1"/>
</xs:choice>
<xs:element name="accessedProduct" type="PORT_MT100001UV.Product" nillable="true"
minOccurs="0"
maxOccurs="1"/>
</xs:choice>
</xs:sequence>
<xs:attributeGroup ref="InfrastructureRootAttributes"/>
<xs:attribute name="nullFlavor" type="NullFlavor" use="optional"/>
<xs:attribute name="classCode" type="RoleClassAccess" use="required"/>
</xs:complexType>
infrastructureRoot.xsd (reference by PORT_MT100001UV.xsd) notice the definition of the InfrastructureRootElements group here - this is the same group from the above schema that has the ref attribute:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<xs:schema xmlns:mif="urn:hl7-org:v3/mif" xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:v3="urn:hl7-org:v3"
xmlns:ex="urn:hl7-org/v3-example"
elementFormDefault="qualified">
<xs:annotation xmlns="urn:hl7-org:v3">
<xs:documentation>Source Information...</xs:documentation>
</xs:annotation>
<xs:include schemaLocation="voc.xsd"/>
<xs:include schemaLocation="datatypes.xsd"/>
<xs:group name="InfrastructureRootElements">
<xs:sequence>
<xs:element name="realmCode" type="CS" minOccurs="0" maxOccurs="unbounded"/>
<xs:element name="typeId" type="II" minOccurs="0" maxOccurs="1"/>
<xs:element name="templateId" type="II" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:group>
<xs:attributeGroup name="InfrastructureRootAttributes"/>
</xs:schema>
I found this tool - WSCF Blue - from a post on msdn forums. It got me past my errors and also looks to offer quite a bit more in terms of functionality.
I'm not sure about SvcUtil, but for XSD.exe and WSDL.exe you have to specify all the files that are used by the .xsd file, because they don't recognize elements. Maybe my post will help you, too: http://seanmcilvenna.com/blog/7-general/30-xca-implementation

Resources