Как создать случайный XML-файл, который является семантически действительным?
Я хочу использовать инструмент генератора случайных XML, чтобы выполнить случайное тестирование путем генерации случайных файлов XML из XSD. (Я использую кислородный инструмент)
Генератор случайных чисел не будет применять семантические ограничения к сгенерированным значениям. например, у меня есть элемент "параметры", который имеет несколько элементов "параметр", например, p1 и p2, с другой стороны, у меня есть еще один элемент "ограничение", который будет использовать "параметр". Я имею в виду, если у меня есть P1, P2, он должен использовать подмножество p1 и p2. Я хочу заставить инструмент генератора случайных чисел использовать их ( p1 и p2) вместо случайной генерации некоторых других параметров снова для ограничения. Я использовал "ключ", "keyref" и... но все равно это не работает. он просто генерирует случайную строку везде без каких-либо ограничений, я должен отметить, что я выбираю опцию "значения элементов и атрибутов: Случайные (применять ограничения) ", поэтому следует учитывать ограничение при генерации случайных значений, но это не так! пожалуйста помоги..
ОБРАЗЕЦ действительного XML:
<system>
<parameters>
<parameter id="1" name="p1" >
<value id="1" name="value1"/>
<value id="2" name="value2"/>
</parameter>
<parameter id="2" name="p2" >
<value id="1" name="value1"/>
<value id="2" name="value2"/>
</parameter>
</parameters>
<constraint text="p1=p2">
<parameter name="p1"/>
<parameter name="p2"/>
</constraint>
</system>
Поэтому я хочу использовать подмножество уже сгенерированных параметров ( p1 и p2), как вы можете видеть в приведенном выше примере, вместо генерации некоторых других случайных параметров, потому что тогда все сгенерированные xmls являются недействительными, и я хочу действительный.
ОБРАЗЕЦ неверного XML:
<system>
<parameters>
<parameter id="1" name="p1" >
<value id="1" name="value1"/>
<value id="2" name="value2"/>
</parameter>
<parameter id="2" name="p2" >
<value id="1" name="value1"/>
<value id="2" name="value2"/>
</parameter>
</parameters>
<constraint text="**p3**=**p5**">
<parameter name="**p8**"/>
<parameter name="**p9**"/>
</constraint>
</system>
Спасибо
1 ответ
В общем, проверка ограничений идентичности значительно усложняет задачу создания документа. (Я полагаю, что однажды я увидел заявление о том, что он делает NP завершенным, но, возможно, меня неправильно поняли.) Поэтому я сомневаюсь, что вам повезет, если вы расскажете генератору примеров документов Oxygen, чтобы он соблюдал ограничение, которое вы имеете в виду; большинство генераторов довольствуются производством данных, удовлетворяющих моделям контента.
Возможно, вам повезет больше, написав фильтр, чтобы отличать примеры, которые подчиняются имеющемуся у вас ограничению, от примеров, которые этого не делают (так что вы можете сгенерировать 100 примеров и запустить фильтр, чтобы найти те, которые пригодны для ваших целей), или преобразование, чтобы взять произвольный пример и изменить его, чтобы удовлетворить ваши ограничения.