Предполагая, что for my particular purposes, I need the 'id' element on a BaseType to be present always
вы на самом деле означает всегда, то вы можете применить переопределять такие, как показано ниже:
<?xml version="1.0" encoding="utf-8"?>
<!--XML Schema generated by QTAssistant/XSR Module (http://www.paschidev.com)-->
<xsd:schema xmlns="http://tempuri.org/XMLSchema.xsd" attributeFormDefault="unqualified" elementFormDefault="qualified" targetNamespace="http://tempuri.org/XMLSchema.xsd" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:redefine schemaLocation="xsd-overriding-minoccurs-from-a-group.xsd">
<xsd:complexType name="BaseType">
<xsd:complexContent>
<xsd:restriction base="BaseType">
<xsd:sequence>
<xsd:element name="id" type="xsd:string"/>
<xsd:element name="name" type="xsd:string" minOccurs="0"/>
</xsd:sequence>
</xsd:restriction>
</xsd:complexContent>
</xsd:complexType>
<xsd:group name="Address-Group">
<xsd:sequence>
<xsd:element name="street" type="xsd:string"/>
<xsd:element name="city" type="xsd:string" minOccurs="0"/>
</xsd:sequence>
</xsd:group>
</xsd:redefine>
</xsd:schema>
Дело в том, переопределения работы «всегда», то есть во всех тех случаях, когда используется BaseType , переопределенное определение будет иметь приоритет. Другими словами, в XSD нет механизма, где вы можете выбрать и выбрать свой контекст, если только вы не перейдете на XSD 1.1, где вам тогда не понадобится переопределять, а какое-то утверждение. Проблема в том, что я бы рискнул сказать, что XSD 1.1 еще менее поддерживается, чем XSD 1.0 (на разных платформах, а не на той, которая может поддерживаться в любом случае, например, Saxon или Xerces).
XML-такие, как это справедливо:
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<!-- Sample XML generated by QTAssistant (http://www.paschidev.com) -->
<paschidev.dummy xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="BaseType" xmlns="http://tempuri.org/XMLSchema.xsd">
<id>id1</id>
<name>name1</name>
</paschidev.dummy>
В то время как это один потерпит неудачу:
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<!-- Sample XML generated by QTAssistant (http://www.paschidev.com) -->
<paschidev.dummy xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="BaseType" xmlns="http://tempuri.org/XMLSchema.xsd">
<name>name1</name>
</paschidev.dummy>
С следующее сообщение об ошибке (.NET на основе):
Error occurred while loading [], line 4 position 3
The element 'paschidev.dummy' in namespace 'http://tempuri.org/XMLSchema.xsd' has invalid child element 'name' in namespace 'http://tempuri.org/XMLSchema.xsd'. List of possible elements expected: 'id' in namespace 'http://tempuri.org/XMLSchema.xsd'.
или это (на основе Java):
Error while loading [], line 4 position 8
cvc-complex-type.2.4.a: Invalid content was found starting with element 'name'. One of '{"http://tempuri.org/XMLSchema.xsd":id}' is expected.
Редефикс хорошо работает с XML-процессорами, поддерживающими XSD. Тем не менее, некоторые XSD для привязки фреймворков привязки или движков баз данных со встроенной поддержкой XSD могут кашлять на этом.
Я отредактировал ваш заголовок. Пожалуйста, смотрите: «Если вопросы включают« теги »в их названиях?] (Http://meta.stackexchange.com/questions/19190/), где консенсус« нет, они не должны ». –