2016-09-08 5 views
0

У меня есть файл xsd, который включает в себя группу повторяющихся групп, и я хочу получить список их путей. (Здесь в основном не повторяющиеся группы, мне это все равно.)Получение xpaths повторяющихся групп в xsd

Я думаю, что я могу перемещаться через какое-то древовидное представление схемы и проверять, повторяется ли узел. Если да, я напишу его xpath в файл. Если нет, я пропущу это.

Я знаю, что могу сгенерировать scm-файл, используя Saxon, и этот ответ How can I find all elements in an XML Schema whose value is specified as a QName?, но я только частично уверен, что это путь.

Есть ли какие-либо известные способы сделать это?

ответ

0

Я не уверен, что вы подразумеваете под «повторяющейся группой» (это напоминает мне что-то в COBOL ...), но я не думаю, что это действительно так.

В целом я советую не пытаться обрабатывать документы схемы источника с использованием XPath и XSLT, потому что получить его правильно слишком сложно - существует слишком много способов писать эквивалентные схемы. Существуют различные альтернативы: с помощью Saxon вы можете использовать файл SCM или использовать функцию расширения saxon: schema() для обработки скомпилированной модели компонентов схемы; или с Xerces для этого существует Java API.

Оговорка - это ваш термин «повторяющаяся группа». По группе, вы имеете в виду элемент xs: group с атрибутом имени (XSD называет это «определение группы модели») или с атрибутом ref («ссылка на группу моделей»), или вы имеете в виду «компонент определения группы» «который является общим термином для определений групп моделей и определений групп атрибутов, или вы имеете в виду« группу замещения », или вы имеете в виду« модельную группу », которая соответствует выбору xs: choice, xs: sequence или xs: все элементы? Термин XSD может быть ужасно запутанным - и, не зная ТОЧНО, что вы ищете, трудно посоветовать.

+0

Спасибо за ответ. Я должен был быть более ясным; Я имею в виду элемент xs:. Все они имеют атрибуты имени и типа (с complexTypes, определенные в схеме). Некоторые из них имеют minOccurs и maxOccurs. Мне нужно создать список путей для этих элементов с min/maxOccurs. – asdvbnm

+0

Какой вывод вы хотите, если список путей бесконечен, например./doc/section/section/section/section/...? –

+0

Я знаю, что он никогда не будет в этом конкретном прецеденте. – asdvbnm

Смежные вопросы