Удалите неиспользуемые элементы из XML-схемы с помощью XSLT

Я ищу способ (если это вообще возможно) использовать XSL-преобразование документа XSD для удаления неиспользуемых элементов. Это часто встречается в моей работе, когда компания будет определять XSD абсолютно со всем, что есть в нем, но затем они захотят создать урезанную версию для одного корневого элемента в нем.

Для дальнейшего объяснения, у меня может быть XSD, подобный следующему:

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
    <xs:element name="RootElement">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="ChildElement"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
    <xs:element name="ChildElement"/>
    <xs:element name="UnusedElement"/>
</xs:schema>

Я бы хотел создать XSL, в котором я предоставляю начальный элемент (в данном случае RootElement ]), и он скопирует все зависимые элементы, но опустит неиспользуемые. В приведенном выше примере, если я передал RootElement, я ожидал бы увидеть RootElement и ChildElement включенными, но UnusedElement опущенными.

(Когда я говорю «предоставить начальный элемент», я очень рад вскрыть таблицу стилей и набрать xsl: template match = "RootElement" там, где требуется.)

Очевидно, это могло бы помочь. должны быть рекурсивными, чтобы перемещаться по всей структуре, определенной под начальным элементом, и любой элемент в этой схеме, который не использовался, будет отброшен.

(Конечно, было бы даже лучше, если бы он мог делать то же самое в любых импортированных схемах!)

Я много искал в Google и ничего не нашел по этому поводу - я не уверен, что это означает это невозможно или нет.

Спасибо!

Правка : На самом деле мне, вероятно, следует уточнить и сказать, что я хотел бы удалить неиспользуемые элементы И типы, чтобы он соответствовал как ref = "childElement" , так и type = "someType " ссылки.

13
задан ChrisC 13 April 2011 в 04:57
поделиться