Проблема в том, что я использую XS: все потому, что элементы могут быть в любом порядке. Я не могу поставить MaxOccurs на который ссылается элемент:Схема XSD: MaxOccurs по ссылочному элементу под xs: all
<xs:element name="PersonInfo">
<xs:complexType>
<xs:all>
<xs:element name="Addr" type="AdressType" minOccurs="0" maxOccurs="unbounded" />
</xs:all>
<xs:attribute name="id" type="xs:ID" use="optional" />
<xs:attribute name="Test" type="xs:string" use="optional" />
</xs:complexType>
</xs:element>
<xs:complexType name="AdressType">
<xs:all>
<xs:element name="BuildingAptNumber" type="xs:string" minOccurs="0" />
<xs:element name="Addr1" type="xs:string" minOccurs="0" />
<xs:element name="City" type="xs:string" minOccurs="0" />
<xs:element name="StateProvCd" type="xs:string" minOccurs="0" />
<xs:element name="PostalCode" type="xs:string" minOccurs="0" />
</xs:all>
<xs:attribute name="AddrTypeCd" type="xs:string" use="optional" />
</xs:complexType>
Если элемент не сослались я смог бы уйти с использованием ComplexType. Есть ли способ ссылаться на элемент и иметь maxoccurs под xs: all?
EDIT: Единственный способ я вижу, чтобы добавить MaxOccurs является использование ComplexType и определить хз: выбор внутри сложного типа:
<xs:element name="Test" minOccurs="0">
<xs:complexType>
<xs:choice maxOccurs="unbounded">
<xs:element name="Addr" type="PMICADDRESS"/>
</xs:choice>
</xs:complexType>
</xs:element>
Так что вопрос в том, что я не знаю, как объявить сложный тип элемента addr. Единственное решение, которое я нашел, это изменить на xsd 1.1. Я не смог обновить XSD 1.1. все же. Я нашел нить, которая выручает: Middle way between XSD all and XSD sequence
MSDN говорит: « Любое значение для атрибута maxOccurs, отличного от 1., недействительно. Xsd.exe сообщает об ошибке для недопустимого значения». https://msdn.microsoft.com/en-us/library/d3hx2s7e%28v=vs.85%29.aspx. Я также получаю сообщение об ошибке. Я использую визуальную студию и код C# для проверки XSD. –
james31rock
Ваша цитата MSDN применяется к самому элементу 'xs: all', а не к его дочерним элементам' xs: element', которые могут иметь maxXccurs 0 или 1, так как я заявил. (Кроме того, пожалуйста, процитируйте W3C, * не MSDN *, для обсуждений стандартов XML.) Более подробно о вашем вопросе, 'unbounded' не может использоваться как значение' maxOccurs' на 'xs: element' под' xs: все 'вообще. Надеюсь это поможет. – kjhughes
Спасибо, я понимаю, что вы говорите, элемент XS: вложен внутри xs: all. и ошибка находится на элементе xs:. используя xs; последовательность позаботится об этой проблеме, но элементы могут появиться в любом порядке (именно поэтому я использую xs: all). Я понимаю, что maxOccurs нельзя использовать в xs: element под xs: all (причина для этого сообщения в первую очередь). Я искал альтернативу. Я мог бы использовать xs: choice и создать элемент вместо ссылки на существующий (не идеально, поскольку ссылка используется несколькими точками). Я пытаюсь выяснить, есть ли способ использовать ссылку на элемент с xs: choice – james31rock