Я пытаюсь написать xsd для проверки входных файлов для моей программы.
Может быть, это я, но для этого случая мне кажется странным, что мне нужно определить все элементы, которые могут появиться в xml, так как мне просто нужно подмножество содержащихся данных, и xml можетбыть продлен в будущем. Учитывая, что это мой xml:
<?xml version="1.0" encoding="utf-8"?>
<Setup>
<Foo desc="i don't need you">This is some random Element</Foo>
<Bar>This is what i need to process</Bar>
<Bar>And it might appear more than once</Bar>
<Foobar>Some other random element. There might be more</Foobar>
</Setup>
Существует ли xsd, действительный до тех пор, пока присутствует <Setup
> -> <Bar
>, независимо от того, присутствуют ли другие случайные элементы где-либо под <Setup
>?
Я думаю, что базовая структура может выглядеть примерно так:
<?xml version="1.0" encoding="utf-8"?>
<xs:schema>
<xs:element name="Setup">
<xs:complexType>
<xs:someting>
<xs:element name="bar" type="xs:string" minOccurence="1" maxOccurence="unbounded"/>
<xsd:any processContents="skip" minOccurs="0" maxOccurs="unbounded"/>
</xs:something>
</xs:complexType>
</xs:element>
</xs:schema>
Но <any
> просто позволяет добавлять элементы, и я не нашел решения с помощью <choice>
, <sequence>
или <all>
или их комбинация, чтобы обойти это. Есть какой-то трюк, чтобы сделать это?
PS: XSD1.1, к сожалению, не вариант