Автодополнение для XML по XSD
От: dmitry_npi Россия  
Дата: 14.08.14 15:18
Оценка: 6 (1)
Подскажите, пожалуйста, может, есть в природе свободная библиотека, с помощью которой можно реализовать что-то вроде интеллисенса для XML файлов?

Вроде того: передаешь ей xsd схему и контекст (текущий узел) в XML файле, а она выдаёт список элементов, которые в эту точку могут быть вставлены (причем с учетом ограничений sequence и maxOccurs).
Атмосферная музыка — www.aventuel.net
xml xsd
Re: Автодополнение для XML по XSD
От: Sinix  
Дата: 14.08.14 19:16
Оценка:
Здравствуйте, dmitry_npi, Вы писали:

_>Вроде того: передаешь ей xsd схему и контекст (текущий узел) в XML файле, а она выдаёт список элементов, которые в эту точку могут быть вставлены (причем с учетом ограничений sequence и maxOccurs).


Можно начать вот с этих:
http://stackoverflow.com/questions/1692992/open-source-xml-editor

Возможно, что-то есть в sharpdevelop, но эт надо у них на форуме спрашивать.
Re[2]: Автодополнение для XML по XSD
От: dmitry_npi Россия  
Дата: 15.08.14 04:55
Оценка: 20 (1)
Здравствуйте, Sinix, Вы писали:

S>Здравствуйте, dmitry_npi, Вы писали:


_>>Вроде того: передаешь ей xsd схему и контекст (текущий узел) в XML файле, а она выдаёт список элементов, которые в эту точку могут быть вставлены (причем с учетом ограничений sequence и maxOccurs).


S>Можно начать вот с этих:

S>http://stackoverflow.com/questions/1692992/open-source-xml-editor

Смотрел уже. Автодополнения там нет (из тех, что на C#).

S>Возможно, что-то есть в sharpdevelop, но эт надо у них на форуме спрашивать.


Тоже ковырял. Автодополнение есть, контекст оно, я так понял, не учитывает. То есть если дочерний элемент уже вставлен, и по схеме он единственный, шарпдевелоп все равно его предложит.
Атмосферная музыка — www.aventuel.net
Re[3]: Автодополнение для XML по XSD
От: Sinix  
Дата: 15.08.14 06:06
Оценка:
Здравствуйте, dmitry_npi, Вы писали:

_>Тоже ковырял. Автодополнение есть, контекст оно, я так понял, не учитывает. То есть если дочерний элемент уже вставлен, и по схеме он единственный, шарпдевелоп все равно его предложит.


Тогда ой
Re[4]: Автодополнение для XML по XSD
От: dmitry_npi Россия  
Дата: 15.08.14 11:45
Оценка:
Здравствуйте, Sinix, Вы писали:

S>Тогда ой


Не подскажете ли такую вещь. Нашел класс XmlSchemaValidator и даже намеки, как им пользоваться:
http://stackoverflow.com/questions/6823866/xml-schemas-list-allowed-attributes-tags-at-position-in-xml

http://bytes.com/topic/net/answers/509174-get-valid-elements-using-xmlschema-net

Но. Я не могу понять, этот валидатор, что, в сам проверяемый XML документ вообще не смотрит?
Есть какое-то объяснение тому, что в метод ValidateElement передаётся не XmlElement, у которого есть родитель и потомки, а абстрактное имя элемента. Где же контекст?
Атмосферная музыка — www.aventuel.net
Отредактировано 15.08.2014 11:56 dmitry_npi . Предыдущая версия .
Re[5]: Автодополнение для XML по XSD
От: Sinix  
Дата: 15.08.14 12:34
Оценка:
Здравствуйте, dmitry_npi, Вы писали:

_>Но. Я не могу понять, этот валидатор, что, в сам проверяемый XML документ вообще не смотрит?

_>Есть какое-то объяснение тому, что в метод ValidateElement передаётся не XmlElement, у которого есть родитель и потомки, а абстрактное имя элемента. Где же контекст?
Я XmlSchemaValidator почти не использовал, по памяти и msdn — контекст зависит от предыдущих вызовов + от XmlSchemaValidator.Initialize(). Одна из перегрузок .Initialize() позволяет задать узел схемы, который сейчас проверяем.
Re[6]: Автодополнение для XML по XSD
От: dmitry_npi Россия  
Дата: 15.08.14 12:49
Оценка:
Здравствуйте, Sinix, Вы писали:

S>Здравствуйте, dmitry_npi, Вы писали:


_>>Но. Я не могу понять, этот валидатор, что, в сам проверяемый XML документ вообще не смотрит?

_>>Есть какое-то объяснение тому, что в метод ValidateElement передаётся не XmlElement, у которого есть родитель и потомки, а абстрактное имя элемента. Где же контекст?
S>Я XmlSchemaValidator почти не использовал, по памяти и msdn — контекст зависит от предыдущих вызовов + от XmlSchemaValidator.Initialize(). Одна из перегрузок .Initialize() позволяет задать узел схемы, который сейчас проверяем.

Вот именно, узел схемы, но не узел документа, который подлежит проверке. Таким образом, как сказать этому валидатору, что в проверяемом узле уже фактически есть некоторые узлы, и при вытягивании списка возможных детей для проверяемого узла, следует учесть что часть детей уже присутствует, и их из списка надо исключить в соответствии с ограничениями maxOccurs?
Атмосферная музыка — www.aventuel.net
Re[7]: Автодополнение для XML по XSD
От: Sinix  
Дата: 15.08.14 13:03
Оценка:
Здравствуйте, dmitry_npi, Вы писали:

_>Вот именно, узел схемы, но не узел документа, который подлежит проверке. Таким образом, как сказать этому валидатору, что в проверяемом узле уже фактически есть некоторые узлы, и при вытягивании списка возможных детей для проверяемого узла, следует учесть что часть детей уже присутствует, и их из списка надо исключить в соответствии с ограничениями maxOccurs?

Если ничего не путаю — только вызовом ValidateElement для существующих элементов.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.