|
xsd:keyref видимость ключа
|
|||
---|---|---|---|
#18+
Правильно ли я понимаю, чтобы в XML валидировалась ссылочная целостность, элементы xsd:key и xsd:keyref должны быть объявлены в одном и том же элементе xsd:element (сами селекторы могут указывать куда угодно). Если это верно, то как тогда трактовать фразу refer Required. Specifies the name of a key or unique element defined in this or another schemaКак их можно объявить в разных схемах, если они должны иметь одного родителя? С уважением, Vasilisk ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2017, 17:07 |
|
xsd:keyref видимость ключа
|
|||
---|---|---|---|
#18+
Все оказалось не так просто. Вот полное "расследование" Есть XML Код: xml 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
задача - элементы ref/id должны ссылаться на существующие элементы main/id . Вот такая схема Код: xml 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34.
все отлично валидирует Теперь я хочу спрятать ключи в соответствующие элементы (основная цель - вынести описание main с ключом в отдельную схему) и пишу вот такую схему Код: xml 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34.
Xerces говорит, что документ по прежнему валиден, а вот MSXML6 начинает ругаться MSXMLДля ограничения по идентификатору "ref" ссылка на ключ keyref "key" не сопоставляется ключу. Далее, проводим следующий эксперимент xsd:key делаем глобальным, а xsd:keyref прячем в элемент ref Код: xml 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34.
Теперь поведение валидаторов меняется с точностью до наоборот Xerces выдает Xerces Identity Constraint error: identity constraint "KeyRef@1c5960f" has a keyref which refers to a key or unique that is out of scope. А MSXML говорит, что документ валиден Ну и наконец, я попробовал оба элемента xsd:key и xsd:keyref спрятать в свои элементы Код: xml 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33.
Схема осталась валидной, а на документ оба валидатора стали ругаться XercesIdentity Constraint error: identity constraint "KeyRef@11145ed" has a keyref which refers to a key or unique that is out of scope. MSXMLДля ограничения по идентификатору "ref" ссылка на ключ keyref "key" не сопоставляется ключу. Вопрос следующий: кто прав? Т.к. нигде в документации я не нашел ограничений на то, где могут быть объявлены xsd:key и xsd:keyref . Можно ли как-то заставить работать последний вариант схемы? Если нет, то можно ли убедить MSXML работать с "локальным" ключом? Судя по фразе с MSDN MSDN refer Имя элемента key или unique, определенного в этой схеме ( или в другой схеме , обозначенной в указанном пространстве имен). Значение refer должно быть полным именем (QName). Этот тип может включать префикс пространства имен. Вариант с "локальным" ключом должен работать. Иначе как бы его можно было бы перенести в другую схему? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2017, 19:15 |
|
|
start [/forum/topic.php?fid=14&msg=39507897&tid=1332016]: |
0ms |
get settings: |
8ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
38ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
47ms |
get tp. blocked users: |
2ms |
others: | 21ms |
total: | 148ms |
0 / 0 |