Мне пришлось добавить оболочку, чтобы импортировать две разные схемы в одну (поскольку xmllint принимает только одну XML-схему):
<xs:schema id="Wrapper" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:import schemaLocation="MySchema.xsd" namespace="http://tempuri.org/MySchema"/>
<xs:import schemaLocation="OtherSchema.xsd" namespace="http://tempuri.org/OtherSchema"/>
</xs:schema>
Единственный способ получить что-то вроде Вопроса для работы - это отредактировать OtherSchema, xsd (что запрещено вопросом), поэтому добавьте подстановочный знак атрибута (после существующего):
<xs:attribute name="someAttribute" />
<xs:anyAttribute namespace="##other"/>
Мне не хватает специалиста по XML-схеме, чтобы сказать «это невозможно», но мне кажется, что это невозможно.
Одна проблема с вашим предложением заключается в том, что вы не указываете , где должен появиться новый атрибут. Обычно, если вы объявляете атрибут (или complexElement, modelgroup и т. Д.), Вы можете ссылаться на него или нет. Если вы явно не ссылаетесь на это, это не имеет никакого эффекта. Поэтому я думаю, что ваше предложение будет рассматриваться как атрибут, который объявлен, но не упомянут.
То, что вам действительно нужно, это способ сказать «добавить этот атрибут к каждому существующему complexType», но вы этого не говорите. И, к сожалению, кажется, нет способа сказать это. (нет даже способа сказать «добавить этот атрибут в этот конкретный существующий complexType» - вы должны включить его в исходное определение или не включать вовсе).
Один из способов частично сделать это - <redefine>
печатать в другой схеме - я добавлю это во втором ответе.