У меня есть XML-документ, который выглядит примерно так, как показано ниже (resources.xml), с соответствующей xml-схемой (resources.xsd).Этот XML-документ поддерживается вручную (т.е. добавление / удаление / редактирование элементов ресурса).Всего может быть 500-1000 элементов ресурса.Каждый ресурс может иметь вариант X или вариант Y (в «реальной жизни» есть еще несколько вариантов).
Я хотел бы разделить XML-документ на несколько XML-документов.Один xml-документ для каждого варианта (в данном случае X и Y) с соответствующими новыми xml-схемами.XML-схемы для каждого варианта должны расширять исходную схему и добавлять только «жестко закодированное» (фиксированное?) Значение для своего «варианта» атрибута.
Причина: чтобы не повторять атрибут «Вариант» в каждом элементе ресурса.
Возможно ли это?Как будут выглядеть xml-схемы для каждого варианта?Какие изменения нужно сделать в resources.xsd?
Любые другие предложения также приветствуются:)
resources.xml
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="resources.xsd">
<resource name="res00" variant="X" >
<property name="propA" value="..." />
<property name="propB" value="..." />
</resource>
<resource name="res01" variant="X" >
<property name="propA" value="..." />
<property name="propB" value="..." />
</resource>
<resource name="res02" variant="Y" >
<property name="propA" value="..." />
<property name="propB" value="..." />
</resource>
<resource name="res03" variant="Y" >
<property name="propA" value="..." />
<property name="propB" value="..." />
</resource>
</resources>
resources.xsd
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:rb="http://example.org/resourcebase">
<xs:complexType name="property">
<xs:attribute name="name" type="xs:string" />
<xs:attribute name="value" type="xs:string" />
</xs:complexType>
<xs:complexType name="resource">
<xs:sequence>
<xs:element name="property" type="property" minOccurs="0" maxOccurs="unbounded" />
</xs:sequence>
<xs:attribute name="name" type="xs:string" use="required" />
<xs:attribute name="variant" type="xs:string" use="required" />
</xs:complexType>
<xs:element name="resources">
<xs:complexType>
<xs:sequence>
<xs:element name="resource" type="resource" minOccurs="0" maxOccurs="unbounded" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
Вот как я это представляю.Один XML-документ для варианта = X, который ссылается на resourcesX.xsd.Нет необходимости добавлять атрибут «Вариант», так как он добавляется указанными ресурсами X.xsd.
resourcesX.xml
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="resourceX.xsd">
<resource name="res00" >
<property name="propA" value="..." />
<property name="propB" value="..." />
</resource>
<resource name="res01" >
<property name="propA" value="..." />
<property name="propB" value="..." />
</resource>
</resources>
Другой XML-документ для варианта = Y, который ссылается наresourcesY.xsd.Нет необходимости добавлять атрибут «option», так как он добавляется указанными ресурсами Y.xsd.
resourcesY.xml
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="resourceY.xsd">
<resource name="res02" >
<property name="propA" value="..." />
<property name="propB" value="..." />
</resource>
<resource name="res03" >
<property name="propA" value="..." />
<property name="propB" value="..." />
</resource>
</resources>
Могут ли resourceX.xsd и resourceY.xsd расширить ресурсы.xsd?Если так, то как бы они выглядели?какие-либо изменения должны быть сделаны в resources.xsd?
Спасибо!/ Alex