ΠŸΡ€ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ слоТных ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ Π² срСдС 1Π‘:ΠŸΡ€Π΅Π΄ΠΏΡ€ΠΈΡΡ‚ΠΈΠ΅ программисты часто ΡΡ‚Π°Π»ΠΊΠΈΠ²Π°ΡŽΡ‚ΡΡ с Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒΡŽ строгого контроля структуры ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Π΅ΠΌΡ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ…. Если Π²Ρ‹ ΠΊΠΎΠ³Π΄Π°-Π»ΠΈΠ±ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Π»ΠΈ с Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π°ΠΌΠΈ XML ΠΈΠ»ΠΈ настраивали ΠΎΠ±ΠΌΠ΅Π½ ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΎΠ½Π½Ρ‹ΠΌΠΈ систСмами, Ρ‚ΠΎ понятиС XSD схСма Π²Π°ΠΌ навСрняка Π²ΡΡ‚Ρ€Π΅Ρ‡Π°Π»ΠΎΡΡŒ. Π­Ρ‚ΠΎ Ρ„ΡƒΠ½Π΄Π°ΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Ρ‹ΠΉ инструмСнт, ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‰ΠΈΠΉ Ρ†Π΅Π»ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒ ΠΈ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΡΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Ρ… Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ ΠΈΡ… структуры.

ΠŸΡ€ΠΎΡΡ‚Ρ‹ΠΌΠΈ словами, XSD схСма (XML Schema Definition) β€” это Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ описываСт ΠΏΡ€Π°Π²ΠΈΠ»Π° построСния XML-Ρ„Π°ΠΉΠ»Π°. Она опрСдСляСт, ΠΊΠ°ΠΊΠΈΠ΅ элСмСнты ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Π² Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π΅, Π² ΠΊΠ°ΠΊΠΎΠΌ порядкС ΠΎΠ½ΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΠ΄Ρ‚ΠΈ, ΠΊΠ°ΠΊΠΈΠ΅ Ρ‚ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ… допустимы для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ поля ΠΈ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π»ΠΈ ΠΎΠ½ΠΈ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ. Π‘Π΅Π· Ρ‚Π°ΠΊΠΎΠΉ схСмы ΠΎΠ±ΠΌΠ΅Π½ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ прСвращаСтся Π² Π»ΠΎΡ‚Π΅Ρ€Π΅ΡŽ: ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‰Π°Ρ сторона ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Ρ„Π°ΠΉΠ» с нСпрСдсказуСмой структурой, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ ошибкам ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ.

Π’ контСкстС ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ 1Π‘ использованиС схСм становится критичСски Π²Π°ΠΆΠ½Ρ‹ΠΌ ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с Π²Π΅Π±-сСрвисами, Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π°ΠΌΠΈ XML ΠΈ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ°ΠΌΠΈ сСриализации ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ². ПониманиС ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΎΠ² Ρ€Π°Π±ΠΎΡ‚Ρ‹ с XSD позволяСт Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Π½Π°Π΄Π΅ΠΆΠ½Ρ‹Π΅ интСрфСйсы, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ автоматичСски ΠΎΡ‚ΠΊΠ»ΠΎΠ½ΡΡŽΡ‚ Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ Π΅Ρ‰Π΅ Π΄ΠΎ Π½Π°Ρ‡Π°Π»Π° бизнСс-Π»ΠΎΠ³ΠΈΠΊΠΈ. Π”Π°Π²Π°ΠΉΡ‚Π΅ Ρ€Π°Π·Π±Π΅Ρ€Π΅ΠΌ Π΄Π΅Ρ‚Π°Π»ΡŒΠ½ΠΎ, ΠΊΠ°ΠΊ это устроСно Π²Π½ΡƒΡ‚Ρ€ΠΈ систСмы ΠΈ Π·Π°Ρ‡Π΅ΠΌ Π²Π°ΠΌ это Π½ΡƒΠΆΠ½ΠΎ.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ XSD схСма ΠΈ Π΅Ρ‘ Ρ€ΠΎΠ»ΡŒ Π² экосистСмС 1Π‘

XSD (XML Schema Definition) прСдставляСт собой Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°Ρ†ΠΈΡŽ консорциума W3C, ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‰ΡƒΡŽ структуру XML-Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°. Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠΈΡ… DTD-схСм, XSD ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Π±ΠΎΠ³Π°Ρ‚ΡƒΡŽ систСму Ρ‚ΠΈΠΏΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ…, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ строки, числа, Π΄Π°Ρ‚Ρ‹ ΠΈ слоТныС составныС Ρ‚ΠΈΠΏΡ‹. Π’ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅ 1Π‘:ΠŸΡ€Π΅Π΄ΠΏΡ€ΠΈΡΡ‚ΠΈΠ΅ этот стандарт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для Π²Π°Π»ΠΈΠ΄Π°Ρ†ΠΈΠΈ входящих ΠΈ исходящих ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ….

Когда систСма 1Π‘ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ XML Π½Π° основС ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Ρ… ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ, ΠΎΠ½Π° нСявно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΡŽΡŽ схСму, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΡƒΡŽ структурС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ². Однако ΠΏΡ€ΠΈ внСшнСм ΠΎΠ±ΠΌΠ΅Π½Π΅ Π²Π°ΠΌ часто трСбуСтся явная XSD-схСма, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΊΠΎΠ½Ρ‚Ρ€Π°Π³Π΅Π½Ρ‚ ΠΌΠΎΠ³ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ ваш Ρ„Π°ΠΉΠ», ΠΈΠ»ΠΈ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ваша систСма приняла Ρ„Π°ΠΉΠ» ΠΎΡ‚ ΠΏΠ°Ρ€Ρ‚Π½Π΅Ρ€Π° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΈ ΠΏΠΎΠ»Π½ΠΎΠΌ соотвСтствии ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌ. Π­Ρ‚ΠΎ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚, Ρ‡Ρ‚ΠΎ числовоС ΠΏΠΎΠ»Π΅ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ тСкст, Π° ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ элСмСнт Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠΏΡƒΡ‰Π΅Π½.

ИспользованиС схСм особСнно Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½ΠΎ Π² Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π΅ SOA (Service Oriented Architecture), Π³Π΄Π΅ 1Π‘ выступаСт Π² Ρ€ΠΎΠ»ΠΈ поставщика ΠΈΠ»ΠΈ потрСбитСля Π²Π΅Π±-сСрвисов. Π‘Ρ…Π΅ΠΌΠ° выступаСт Π² Ρ€ΠΎΠ»ΠΈ ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚Π° ΠΌΠ΅ΠΆΠ΄Ρƒ систСмами: Ссли Π΄Π°Π½Π½Ρ‹Π΅ Π½Π΅ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‚ ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚Ρƒ, взаимодСйствиС прСрываСтся с понятной ошибкой Π²Π°Π»ΠΈΠ΄Π°Ρ†ΠΈΠΈ, Π° Π½Π΅ ΠΏΠ°Π΄Π΅Π½ΠΈΠ΅ΠΌ процСсса с нСпонятным ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ.

⚠️ Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: ΠŸΡ€ΠΈ Ρ€ΡƒΡ‡Π½ΠΎΠΌ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ XSD-Ρ„Π°ΠΉΠ»ΠΎΠ² Π² тСкстовых Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π°Ρ… Π»Π΅Π³ΠΊΠΎ Π΄ΠΎΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΡΠΈΠ½Ρ‚Π°ΠΊΡΠΈΡ‡Π΅ΡΠΊΡƒΡŽ ΠΎΡˆΠΈΠ±ΠΊΡƒ Π² пространствС ΠΈΠΌΠ΅Π½ (namespace). Π­Ρ‚ΠΎ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ Ρ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ 1Π‘ Π½Π΅ смоТСт ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ схСму, Π΄Π°ΠΆΠ΅ Ссли Π΅Ρ‘ структура логичСски Π²Π΅Ρ€Π½Π°. ВсСгда провСряйтС Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ xmlns.

πŸ’‘

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ спСциализированныС Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Ρ‹ XML, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ OxygenXML ΠΈΠ»ΠΈ бСсплатныС ΠΏΠ»Π°Π³ΠΈΠ½Ρ‹ для VS Code, для Π²ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ рСдактирования схСм. Они ΠΏΠΎΠ΄ΡΠ²Π΅Ρ‡ΠΈΠ²Π°ΡŽΡ‚ ошибки Π² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, Ρ‡Ρ‚ΠΎ экономит часы ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ.

ΠœΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с XML ΠΈ схСмами Π² ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅ 1Π‘

ΠŸΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ° 1Π‘ прСдоставляСт встроСнныС срСдства для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с XML Ρ‡Π΅Ρ€Π΅Π· ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π§Ρ‚Π΅Π½ΠΈΠ΅XML ΠΈ Π—Π°ΠΏΠΈΡΡŒXML, Π½ΠΎ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ со схСмами ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ. Основной класс для Ρ€Π°Π±ΠΎΡ‚Ρ‹ β€” Π‘Ρ…Π΅ΠΌΠ°XML. Он позволяСт Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ описаниС структуры ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ². ΠŸΡ€ΠΎΡ†Π΅ΡΡ Π²Π°Π»ΠΈΠ΄Π°Ρ†ΠΈΠΈ происходит Π² памяти ΠΈ Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ сохранСния ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ² Π½Π° диск, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ²Ρ‹ΡˆΠ°Π΅Ρ‚ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ.

Для Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ схСмы ΠΈΠ· Ρ„Π°ΠΉΠ»Π° ΠΈΠ»ΠΈ строки ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π—Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒΠ‘Ρ…Π΅ΠΌΡƒ(). ПослС ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠΉ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Π²Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ схСмы, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Π² ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ() ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° чтСния XML. Если Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ Π½Π΅ соотвСтствуСт ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌ, описанным Π² XSD, систСма Π²Π΅Ρ€Π½Π΅Ρ‚ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΡŽ ошибок с ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ΠΌ строки ΠΈ символа, Π³Π΄Π΅ ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΎ Π½Π°Ρ€ΡƒΡˆΠ΅Π½ΠΈΠ΅. Π­Ρ‚ΠΎ позволяСт быстро Π»ΠΎΠΊΠ°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ Π² Π±ΠΎΠ»ΡŒΡˆΠΈΡ… Ρ„Π°ΠΉΠ»Π°Ρ… ΠΎΠ±ΠΌΠ΅Π½Π°.

Π’Π°ΠΆΠ½ΠΎ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ 1Π‘ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρƒ с нСсколькими схСмами ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ. Π­Ρ‚ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π² случаях, ΠΊΠΎΠ³Π΄Π° XML-Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ элСмСнты ΠΈΠ· Ρ€Π°Π·Π½Ρ‹Ρ… пространств ΠΈΠΌΠ΅Π½, описанных Π² Ρ€Π°Π·Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»Π°Ρ… .xsd. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ нСсколько схСм Π² ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΡŽ ΠΏΠ΅Ρ€Π΅Π΄ запуском ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ. Π’Π°ΠΊΠΆΠ΅ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ° ΡƒΠΌΠ΅Π΅Ρ‚ автоматичСски ΠΏΠΎΠ΄Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒ связанныС схСмы, Ссли Π² основной схСмС ΡƒΠΊΠ°Π·Π°Π½Ρ‹ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹Π΅ ΠΏΡƒΡ‚ΠΈ ΠΊ Π½ΠΈΠΌ Ρ‡Π΅Ρ€Π΅Π· Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ schemaLocation.

β˜‘οΈ ΠŸΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠ° ΠΊ Π²Π°Π»ΠΈΠ΄Π°Ρ†ΠΈΠΈ Π² 1Π‘

Π’Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΎ: 0 / 4

ΠŸΡ€Π°ΠΊΡ‚ΠΈΡ‡Π΅ΡΠΊΠΎΠ΅ созданиС ΠΈ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ XSD схСм

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ схСмы Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ знания синтаксиса XML ΠΈ понимания Ρ‚ΠΈΠΏΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ…. Однако Π² 1Π‘ часто Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ Π·Π°Π΄Π°Ρ‡Π° ΡΠ³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ схСму Π½Π° основС ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ структуры Π΄Π°Π½Π½Ρ‹Ρ… ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ. Для этого ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ сСриализации. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ тСстовый ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, Π·Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Π΅Π³ΠΎ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ ΠΈ Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Π² XML с ΠΎΠΏΡ†ΠΈΠ΅ΠΉ записи схСмы. Π­Ρ‚ΠΎ даст Π²Π°ΠΌ Π³ΠΎΡ‚ΠΎΠ²Ρ‹ΠΉ шаблон, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΡ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΏΠΎΠ΄ Π½ΡƒΠΆΠ΄Ρ‹ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ.

Рассмотрим ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ создания простой схСмы нСпосрСдствСнно Π² ΠΊΠΎΠ΄Π΅ 1Π‘. ΠœΡ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠΌ элСмСнт "Π—Π°ΠΊΠ°Π·", ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ содСрТит ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ ΠΏΠΎΠ»Π΅ "НомСр" (строка) ΠΈ Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ ΠΏΠΎΠ»Π΅ "Π‘ΡƒΠΌΠΌΠ°" (число). Π’Π°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΏΠΎΠ»Π΅Π·Π΅Π½ для динамичСской Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΏΡ€Π°Π²ΠΈΠ» Π²Π°Π»ΠΈΠ΄Π°Ρ†ΠΈΠΈ Π² зависимости ΠΎΡ‚ настроСк систСмы.

ВСкстБхСмы = "<?xml version=""1.0"" encoding=""UTF-8""?>

<xs:schema xmlns:xs=""http://www.w3.org/2001/XMLSchema"">

<xs:element name=""Π—Π°ΠΊΠ°Π·"">

<xs:complexType>

<xs:sequence>

<xs:element name=""НомСр"" type=""xs:string""/>

<xs:element name=""Π‘ΡƒΠΌΠΌΠ°"" type=""xs:decimal"" minOccurs=""0""/>

</xs:sequence>

</xs:complexType>

</xs:element>

</xs:schema>";

Π‘Ρ…Π΅ΠΌΠ° = Новый Π‘Ρ…Π΅ΠΌΠ°XML;

Π‘Ρ…Π΅ΠΌΠ°.Π—Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒΠ‘Ρ…Π΅ΠΌΡƒ(ВСкстБхСмы);

ΠŸΡ€ΠΈ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ Π³ΠΎΡ‚ΠΎΠ²Ρ‹Ρ… схСм, ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Ρ… ΠΎΡ‚ ΠΏΠ°Ρ€Ρ‚Π½Π΅Ρ€ΠΎΠ², часто трСбуСтся ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Ρ‚ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ»ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π½ΠΎΠ²Ρ‹Π΅ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹. НапримСр, Ссли ΠΏΠ°Ρ€Ρ‚Π½Π΅Ρ€ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ» Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ Π΄Π°Ρ‚Ρ‹ с xs:date Π½Π° xs:dateTime, Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ внСсти это ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π² Π»ΠΎΠΊΠ°Π»ΡŒΠ½ΡƒΡŽ копию схСмы, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡƒΡŽ для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ. НС Π·Π°Π±Ρ‹Π²Π°ΠΉΡ‚Π΅, Ρ‡Ρ‚ΠΎ Π»ΡŽΠ±Ρ‹Π΅ измСнСния Π² схСмС Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ согласованы с поставщиком Π΄Π°Π½Π½Ρ‹Ρ…, ΠΈΠ½Π°Ρ‡Π΅ валидация Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ, Π½ΠΎ Π΄Π°Π½Π½Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹ Π½Π΅Π²Π΅Ρ€Π½ΠΎ.

Π‘Π»ΠΎΠΆΠ½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ Π² XSD

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ собствСнныС Ρ‚ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ…, комбинируя простыС Ρ‚ΠΈΠΏΡ‹. НапримСр, ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Ρ‚ΠΈΠΏ "АртикулВовара", ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ прСдставляСт собой строку ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ Π΄Π»ΠΈΠ½Ρ‹ ΠΈ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π°, ΠΈ Π·Π°Ρ‚Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ Π² мноТСствС элСмСнтов схСмы, обСспСчивая Π΅Π΄ΠΈΠ½ΠΎΠΎΠ±Ρ€Π°Π·ΠΈΠ΅ ΠΏΡ€Π°Π²ΠΈΠ».

Валидация Π΄Π°Π½Π½Ρ‹Ρ…: Ρ‚ΠΈΠΏΡ‹ ошибок ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ

ΠŸΡ€ΠΎΡ†Π΅ΡΡ Π²Π°Π»ΠΈΠ΄Π°Ρ†ΠΈΠΈ Π² 1Π‘ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠžΡˆΠΈΠ±ΠΊΠΈΠ’Π°Π»ΠΈΠ΄Π°Ρ†ΠΈΠΈXML, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ содСрТит ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Ρ‹ΠΉ список всСх нСсоотвСтствий. КаТдая ошибка ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚ΠΈΠΏ, сообщСниС ΠΈ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ Π² Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π΅. ПониманиС Ρ‚ΠΈΠΏΠΎΠ² ошибок критичСски Π²Π°ΠΆΠ½ΠΎ для написания качСствСнных ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ. Ошибки дСлятся Π½Π° структурныС (Π½Π΅Π²Π΅Ρ€Π½Ρ‹ΠΉ порядок элСмСнтов), Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Π΅ (Π½Π΅Π²Π΅Ρ€Π½Ρ‹ΠΉ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ Π΄Π°Π½Π½Ρ‹Ρ…) ΠΈ ограничСния (Π½Π°Ρ€ΡƒΡˆΠ΅Π½ΠΈΠ΅ ΠΌΠΈΠ½/макс Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ).

НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π° Ρ‚Π°Π±Π»ΠΈΡ†Π° основных Ρ‚ΠΈΠΏΠΎΠ² ошибок, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ Π²Ρ‹ ΡΡ‚ΠΎΠ»ΠΊΠ½Π΅Ρ‚Π΅ΡΡŒ ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с XSD схСмами Π² 1Π‘, ΠΈ ΠΈΡ… Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ΠΌΠΈ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°ΠΌΠΈ:

Π’ΠΈΠΏ ошибки ОписаниС ВозмоТная ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°
InvalidContent Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠΈΠΌΠΎΠ΅ элСмСнта Π½Π΅ соотвСтствуСт Ρ‚ΠΈΠΏΡƒ Π’ числовоС ΠΏΠΎΠ»Π΅ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½ тСкст ΠΈΠ»ΠΈ Π±ΡƒΠΊΠ²Ρ‹
MissingElement ΠžΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΡƒΠ΅Ρ‚ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ элСмСнт Π’ схСмС ΡƒΠΊΠ°Π·Π°Π½ΠΎ minOccurs="1", Π° Π² Ρ„Π°ΠΉΠ»Π΅ элСмСнт ΠΏΡ€ΠΎΠΏΡƒΡ‰Π΅Π½
UnexpectedElement ΠžΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ элСмСнт, Π½Π΅ описанный Π² схСмС Π’ XML ΠΏΡ€ΠΈΡˆΠ΅Π» лишний Ρ‚Π΅Π³, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π½Π΅Ρ‚ Π² XSD
InvalidAttributeValue НСвСрноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π° Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π° Π½Π΅ Π²Ρ…ΠΎΠ΄ΠΈΡ‚ Π² список допустимых enumeration

ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° этих ошибок Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ Π³Ρ€Π°ΠΌΠΎΡ‚Π½ΠΎΠΉ. НС стоит просто Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒ тСкст ошибки ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ. Π›ΡƒΡ‡ΡˆΠ΅ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ тСхничСскоС сообщСниС Π² понятноС описаниС ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹. НапримСр, вмСсто "InvalidContent Π½Π° строкС 45" Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ "Π’ ΠΏΠΎΠ»Π΅ 'ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ' ΡƒΠΊΠ°Π·Π°Π½ΠΎ нСчисловоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅". Π­Ρ‚ΠΎ ускорит исправлСниС Π΄Π°Π½Π½Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ ΠΈΠ»ΠΈ ΠΏΠ°Ρ€Ρ‚Π½Π΅Ρ€ΠΎΠΌ.

πŸ’‘

АвтоматичСская валидация Π½Π° Π²Ρ…ΠΎΠ΄Π΅ систСмы экономит рСсурсы сСрвСра, прСдотвращая запуск тяТСлой бизнСс-Π»ΠΎΠ³ΠΈΠΊΠΈ Π½Π° Π·Π°Π²Π΅Π΄ΠΎΠΌΠΎ Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ….

Π˜Π½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡ с Π²Π΅Π±-сСрвисами ΠΈ WSDL

ΠŸΡ€ΠΈ ΠΏΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΠΈ Π²Π΅Π±-сСрвисов Π² 1Π‘ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ° автоматичСски Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ описаниС сСрвиса Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ WSDL (Web Services Description Language). WSDL, Π² свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ, содСрТит ссылки Π½Π° XSD схСмы, ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‰ΠΈΠ΅ Ρ‚ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ… сообщСний (запросов ΠΈ ΠΎΡ‚Π²Π΅Ρ‚ΠΎΠ²). ΠšΠ»ΠΈΠ΅Π½Ρ‚ΡΠΊΠΈΠ΅ систСмы ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ эти схСмы для Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ прокси-классов, Ρ‡Π΅Ρ€Π΅Π· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ происходит Π²Ρ‹Π·ΠΎΠ² ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ².

Если Π²Ρ‹ потрСбляСтС внСшний Π²Π΅Π±-сСрвис, Π²Π°ΠΌ часто Π½ΡƒΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ссылку Π½Π° WSDL Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ 1Π‘. БистСма автоматичСски скачаСт связанныС XSD схСмы ΠΈ создаст Ρ‚ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ… Π² ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ. Однако ΠΈΠ½ΠΎΠ³Π΄Π° автоматичСская гСнСрация Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ ΠΈΠ·-Π·Π° слоТной структуры схСм ΠΏΠ°Ρ€Ρ‚Π½Π΅Ρ€Π°. Π’ Ρ‚Π°ΠΊΠΈΡ… случаях приходится Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ Π½Π°ΡΡ‚Ρ€Π°ΠΈΠ²Π°Ρ‚ΡŒ соотвСтствиС Ρ‚ΠΈΠΏΠΎΠ² ΠΈΠ»ΠΈ Π·Π°Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒ схСмы ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ Ρ‡Π΅Ρ€Π΅Π· ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ Π‘Ρ…Π΅ΠΌΠ°XML для ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ SOAP-ΠΊΠΎΠ½Π²Π΅Ρ€Ρ‚ΠΎΠ².

ОсобоС Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ слСдуСт ΡƒΠ΄Π΅Π»ΠΈΡ‚ΡŒ пространствам ΠΈΠΌΠ΅Π½ (namespace). Π’ Π²Π΅Π±-сСрвисах ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ… Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΌΡƒ пространству ΠΈΠΌΠ΅Π½, ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΌΡƒ Π² схСмС. Если Π² 1Π‘ ΠΏΡ€ΠΈ Ρ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ ΠΎΡ‚Π²Π΅Ρ‚Π° пространство ΠΈΠΌΠ΅Π½ Π½Π΅ совпадаСт с ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΡ‹ΠΌ Π² XSD, клиСнтская сторона ΠΎΡ‚Π²Π΅Ρ€Π³Π½Π΅Ρ‚ ΠΎΡ‚Π²Π΅Ρ‚. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° соотвСтствия namespaces β€” ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ шаг ΠΏΡ€ΠΈ ΠΎΡ‚Π»Π°Π΄ΠΊΠ΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ.

⚠️ Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: ЦиркулярныС ссылки Π² схСмах (ΠΊΠΎΠ³Π΄Π° Ρ‚ΠΈΠΏ А ссылаСтся Π½Π° Ρ‚ΠΈΠΏ Π‘, Π° Ρ‚ΠΈΠΏ Π‘ Π½Π° Ρ‚ΠΈΠΏ А) ΠΌΠΎΠ³ΡƒΡ‚ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ ΠΏΡ€ΠΈ автоматичСской Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΊΠΎΠ΄Π° Π² 1Π‘. Π’ Ρ‚Π°ΠΊΠΈΡ… случаях ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚ΡŒΡΡ ручная Π΄ΠΎΡ€Π°Π±ΠΎΡ‚ΠΊΠ° структуры Ρ‚ΠΈΠΏΠΎΠ² ΠΈΠ»ΠΈ Ρ€Π°Π·Π±ΠΈΠ΅Π½ΠΈΠ΅ схСм Π½Π° ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹.

πŸ“Š Π‘ ΠΊΠ°ΠΊΠΈΠΌ аспСктом XSD Π² 1Π‘ Π²Ρ‹ ΡΡ‚Π°Π»ΠΊΠΈΠ²Π°Π΅Ρ‚Π΅ΡΡŒ Ρ‡Π°Ρ‰Π΅ всСго?
ГСнСрация схСм ΠΈΠ· Π΄Π°Π½Π½Ρ‹Ρ…
Валидация входящих Ρ„Π°ΠΉΠ»ΠΎΠ²
Настройка Π²Π΅Π±-сСрвисов
Π ΡƒΡ‡Π½ΠΎΠ΅ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ XSD

ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с большими схСмами

Π—Π°Π³Ρ€ΡƒΠ·ΠΊΠ° ΠΈ компиляция слоТных XSD схСм β€” опСрация рСсурсоСмкая. Если ваша систСма ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ тысячи Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² Π² ΠΌΠΈΠ½ΡƒΡ‚Ρƒ, созданиС Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π‘Ρ…Π΅ΠΌΠ°XML для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° станСт ΡƒΠ·ΠΊΠΈΠΌ мСстом. ΠžΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ΠΌ являСтся ΠΊΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½Π½Ρ‹Ρ… схСм Π² глобальной ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΈΠ»ΠΈ Π² Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π½Π° сторонС сСрвСра.

Один Ρ€Π°Π· Π·Π°Π³Ρ€ΡƒΠ·ΠΈΠ² схСму ΠΏΡ€ΠΈ стартС прилоТСния ΠΈΠ»ΠΈ ΠΏΠΎ Ρ€Π°ΡΠΏΠΈΡΠ°Π½ΠΈΡŽ, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠ΅Ρ€Π΅ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ этот ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ мноТСства Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ². ΠŸΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ° 1Π‘ позволяСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ схСмы ΠΌΠ½ΠΎΠ³ΠΎΠΊΡ€Π°Ρ‚Π½ΠΎ Π² Ρ€Π°Π·Π½Ρ‹Ρ… ΠΏΠΎΡ‚ΠΎΠΊΠ°Ρ… выполнСния, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π‘Ρ…Π΅ΠΌΠ°XML послС Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ являСтся нСизмСняСмым (read-only) Π² контСкстС структуры. Π­Ρ‚ΠΎ обСспСчиваСт ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ ΠΈ Π²Ρ‹ΡΠΎΠΊΡƒΡŽ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ.

Π’Π°ΠΊΠΆΠ΅ стоит ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€ самих Ρ„Π°ΠΉΠ»ΠΎΠ² схСм. Если схСма вСсит нСсколько ΠΌΠ΅Π³Π°Π±Π°ΠΉΡ‚ ΠΈ содСрТит сотни Ρ‚ΠΈΠΏΠΎΠ², врСмя Π΅Ρ‘ парсинса ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π·Π°ΠΌΠ΅Ρ‚Π½Ρ‹ΠΌ. Π’ Ρ‚Π°ΠΊΠΈΡ… случаях рСкомСндуСтся Ρ€Π°Π·Π΄Π΅Π»ΡΡ‚ΡŒ ΠΎΠ±Ρ‰ΡƒΡŽ схСму Π½Π° ΠΌΠΎΠ΄ΡƒΠ»ΡŒΠ½Ρ‹Π΅ части ΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹ для ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Ρ… Π·Π°Π΄Π°Ρ‡ Π²Π°Π»ΠΈΠ΄Π°Ρ†ΠΈΠΈ, ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Ρ Π½Π°ΠΊΠ»Π°Π΄Π½Ρ‹Π΅ расходы.

πŸ’‘

Для ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ с Π²Π°Π»ΠΈΠ΄Π°Ρ†ΠΈΠ΅ΠΉ Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΠ΅ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅. ЗаписывайтС Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ„Π°ΠΊΡ‚ ошибки, Π½ΠΎ ΠΈ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ XML (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, 100 символов Π²ΠΎΠΊΡ€ΡƒΠ³ ошибки), Ρ‡Ρ‚ΠΎΠ±Ρ‹ быстро воспроизвСсти ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ Π½Π° тСстовом стСндС.

ЧастыС ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ ΠΈ способы ΠΈΡ… Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ часто ΡΡ‚Π°Π»ΠΊΠΈΠ²Π°ΡŽΡ‚ΡΡ с ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΎΠΉ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠΈ. XSD схСма Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ сохранСна Π² ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠ΅ UTF-8 Π±Π΅Π· BOM (Byte Order Mark). Если Ρ„Π°ΠΉΠ» сохранСн Π² Windows-1251 ΠΈΠ»ΠΈ с BOM, 1Π‘ ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ символы Π² ΠΈΠΌΠ΅Π½Π°Ρ… элСмСнтов, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ ошибкС "Π­Π»Π΅ΠΌΠ΅Π½Ρ‚ Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½", хотя Π²ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½ΠΎ имя написано Π²Π΅Ρ€Π½ΠΎ.

Π•Ρ‰Π΅ ΠΎΠ΄Π½Π° распространСнная ситуация β€” нСсоотвСтствиС вСрсий схСм. ΠŸΠ°Ρ€Ρ‚Π½Π΅Ρ€ ΠΎΠ±Π½ΠΎΠ²ΠΈΠ» свой интСрфСйс ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΠ» Π½ΠΎΠ²Ρ‹Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ поля Π² XSD, Π½ΠΎ ваша систСма ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡΡ‚Π°Ρ€ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ схСмы для Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ Π΄Π°Π½Π½Ρ‹Ρ…. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ валидация Π½Π° сторонС ΠΏΠ°Ρ€Ρ‚Π½Π΅Ρ€Π° ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ (Ссли ΠΎΠ½ΠΈ Π½Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡŽΡ‚ строго), Π½ΠΎ ваша систСма ΠΏΡ€ΠΈ ΠΏΡ€ΠΈΠ΅ΠΌΠ΅ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΎΡ‚ ΠΏΠ°Ρ€Ρ‚Π½Π΅Ρ€Π° Π²Ρ‹Π΄Π°Π΅Ρ‚ ошибки. НСобходимо Π½Π°Π»Π°Π΄ΠΈΡ‚ΡŒ процСсс синхронизации вСрсий схСм ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΊΠΎΠ½Ρ‚Ρ€Π°Π³Π΅Π½Ρ‚Π°ΠΌΠΈ.

Иногда Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ошибка ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с пространствами ΠΈΠΌΠ΅Π½ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ. Если Π² XML-Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π΅ пространство ΠΈΠΌΠ΅Π½ Π½Π΅ ΡƒΠΊΠ°Π·Π°Π½ΠΎ явно, Π° Π² схСмС ΠΎΠ½ΠΎ трСбуСтся, валидация Π½Π΅ ΠΏΡ€ΠΎΠΉΠ΄Π΅Ρ‚. РСшСниСм являСтся явноС ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π° xmlns Π² ΠΊΠΎΡ€Π½Π΅Π²ΠΎΠΌ элСмСнтС записываСмого XML Π² 1Π‘ ΠΏΠ΅Ρ€Π΅Π΄ Π½Π°Ρ‡Π°Π»ΠΎΠΌ записи Π΄Π°Π½Π½Ρ‹Ρ….

МоТно Π»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ΄Π½Ρƒ XSD схСму для Ρ€Π°Π·Π½Ρ‹Ρ… вСрсий ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ 1Π‘?

Π”Π°, это Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Ссли структура Π΄Π°Π½Π½Ρ‹Ρ… Π² этих вСрсиях Π½Π΅ измСнилась ΠΊΠ°Ρ€Π΄ΠΈΠ½Π°Π»ΡŒΠ½ΠΎ. Однако, Ссли Π² Π½ΠΎΠ²ΠΎΠΉ вСрсии ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ добавились ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Ρ€Π΅ΠΊΠ²ΠΈΠ·ΠΈΡ‚Ρ‹, старая схСма Π½Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ Π²Ρ‹Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ. РСкомСндуСтся вСсти вСрсионированиС схСм ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎ с вСрсионированиСм ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ.

Как ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ XSD схСму Π½Π° ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΡΡ‚ΡŒ Π±Π΅Π· 1Π‘?

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½-Π²Π°Π»ΠΈΠ΄Π°Ρ‚ΠΎΡ€Ρ‹ XML/XSD ΠΈΠ»ΠΈ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρ‹ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ xmllint. Π—Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚Π΅ Π²Π°ΡˆΡƒ схСму ΠΈ тСстовый XML-Ρ„Π°ΠΉΠ», Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ структура описана Π²Π΅Ρ€Π½ΠΎ ΠΈ Π½Π΅ содСрТит логичСских ΠΏΡ€ΠΎΡ‚ΠΈΠ²ΠΎΡ€Π΅Ρ‡ΠΈΠΉ ΠΏΠ΅Ρ€Π΅Π΄ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΎΠΉ Π² 1Π‘.

Π§Ρ‚ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ, Ссли 1Π‘ Π²Ρ‹Π΄Π°Π΅Ρ‚ ΠΎΡˆΠΈΠ±ΠΊΡƒ "НСвСрная схСма XML" ΠΏΡ€ΠΈ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ΅?

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ Π·Π°ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰ΠΈΡ… Ρ‚Π΅Π³ΠΎΠ², ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΡΡ‚ΡŒ влоТСнности элСмСнтов ΠΈ соотвСтствиС Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ² спСцификации W3C. Часто ошибка кроСтся Π² ΠΎΠΏΠ΅Ρ‡Π°Ρ‚ΠΊΠ΅ Π² Π½Π°Π·Π²Π°Π½ΠΈΠΈ Ρ‚ΠΈΠΏΠ° Π΄Π°Π½Π½Ρ‹Ρ… (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, xs:stringg вмСсто xs:string) ΠΈΠ»ΠΈ Π² Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠΌ объявлСнии пространств ΠΈΠΌΠ΅Π½.

ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Π»ΠΈ 1Π‘ всС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ стандарта XSD 1.1?

ΠŸΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ° 1Π‘:ΠŸΡ€Π΅Π΄ΠΏΡ€ΠΈΡΡ‚ΠΈΠ΅ 8 ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΠΎΡΠ½ΠΎΠ²Π½ΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ спСцификации XSD 1.0 ΠΈ ряд Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ XSD 1.1. Однако Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€ΠΎΠ΄Π²ΠΈΠ½ΡƒΡ‚Ρ‹Π΅ возмоТности, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ слоТныС assertions (утвСрТдСния) ΠΈΠ»ΠΈ условныС Ρ‚ΠΈΠΏΡ‹, ΠΌΠΎΠ³ΡƒΡ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ ΠΈΠ»ΠΈ Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒΡΡ вовсС. РСкомСндуСтся ΠΏΡ€ΠΈΠ΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒΡΡ стандарта XSD 1.0 для максимальной совмСстимости.