D.3. ÐгÑаниÑÐµÐ½Ð¸Ñ XML и ÑовмеÑÑимоÑÑÑ Ñ SQL/XML
Ð SQL:2006 бÑли внеÑÐµÐ½Ñ Ð·Ð½Ð°ÑиÑелÑнÑе Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð² поÑвÑÑÑнной XML ÑаÑÑи ISO/IEC 9075-14 (SQL/XML). РеализаÑÐ¸Ñ Ñипа даннÑÑ XML и ÑвÑзаннÑÑ ÑÑнкÑий в Postgres Pro в болÑÑей ÑÑепени ÑооÑвеÑÑÑвÑÐµÑ Ð±Ð¾Ð»ÐµÐµ Ñанней ÑедакÑии, SQL:2003, Ñ Ð½ÐµÐºÐ¾ÑоÑÑми заимÑÑвованиÑми из поÑледÑÑÑÐ¸Ñ ÑедакÑий. Ð ÑаÑÑноÑÑи:
Тогда как в ÑекÑÑем ÑÑандаÑÑе ÑÑÑеÑÑвÑÐµÑ ÑемейÑÑво Ñипов даннÑÑ XML, ÑодеÑжаÑÐ¸Ñ Â«Ð´Ð¾ÐºÑменÑÑ» или «ÑодеÑжимое» в неÑипизиÑованном виде или Ñ Ñипами XML Schema, а Ñакже Ñип
XML(SEQUENCE), ÑодеÑжаÑий пÑоизволÑнÑе ÑаÑÑи XML-докÑменÑа, в Postgres Pro еÑÑÑ ÑолÑко один Ñипxml, коÑоÑÑй Ð¼Ð¾Ð¶ÐµÑ ÑодеÑжаÑÑ Â«Ð´Ð¾ÐºÑменÑ» или «ÑодеÑжимое». ÐпÑеделÑннÑй в ÑÑандаÑÑе Ñип «поÑледоваÑелÑноÑÑÑ» в Postgres Pro оÑÑÑÑÑÑвÑеÑ.Postgres Pro пÑедоÑÑавлÑÐµÑ Ð´Ð²Ðµ ÑÑнкÑии, поÑвивÑиеÑÑ Ð² SQL:2006, но вмеÑÑо ÑзÑка XML Query, как должно бÑÑÑ ÑоглаÑно ÑÑандаÑÑÑ, в Ð½Ð¸Ñ Ð¸ÑполÑзÑеÑÑÑ ÑзÑк XPath 1.0.
Ð ÑÑом Ñазделе опиÑÐ°Ð½Ñ Ð½ÐµÐºÐ¾ÑоÑÑе из обÑазовавÑÐ¸Ñ ÑÑ Ð² иÑоге ÑазлиÑий, Ñ ÐºÐ¾ÑоÑÑми Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе ÑÑолкнÑÑÑÑÑ.
D.3.1. ÐапÑоÑÑ Ð¾Ð³ÑаниÑиваÑÑÑÑ XPath веÑÑии 1.0
СпеÑиÑиÑнÑе Ð´Ð»Ñ Postgres Pro ÑÑнкÑии xpath() и xpath_exists() вÑполнÑÑÑ Ð·Ð°Ð¿ÑоÑÑ Ðº XML-докÑменÑам на ÑзÑке XPath. Ð Postgres Pro Ñакже имеÑÑÑÑ Ð¿Ð¾Ð´Ð´ÐµÑживаÑÑие ÑолÑко XPath ÑÑандаÑÑнÑе ÑÑнкÑии XMLEXISTS и XMLTABLE, Ñ
оÑÑ ÑоглаÑно ÑÑандаÑÑÑ Ð¾Ð½Ð¸ Ð´Ð¾Ð»Ð¶Ð½Ñ Ð¿Ð¾Ð´Ð´ÐµÑживаÑÑ XQuery. ÐÑе ÑÑи ÑÑнкÑии в Postgres Pro ÑÐµÐ°Ð»Ð¸Ð·Ð¾Ð²Ð°Ð½Ñ Ñ Ð¸ÑполÑзованием библиоÑеки libxml2, коÑоÑÐ°Ñ Ð¿Ð¾Ð´Ð´ÐµÑÐ¶Ð¸Ð²Ð°ÐµÑ ÑолÑко XPath 1.0.
СÑÑеÑÑвÑÐµÑ ÑеÑÐ½Ð°Ñ ÑвÑÐ·Ñ Ð¼ÐµÐ¶Ð´Ñ ÑзÑком XQuery и XPath веÑÑии 2.0 и новее: лÑбое вÑÑажение, ÑинÑакÑиÑеÑки пÑавилÑное и вÑполнÑÑÑееÑÑ ÑÑпеÑно, вÑдаÑÑ Ð² Ð¾Ð±Ð¾Ð¸Ñ ÑзÑÐºÐ°Ñ Ð¾Ð´Ð¸Ð½Ð°ÐºÐ¾Ð²Ñе ÑезÑлÑÑаÑÑ (за незнаÑиÑелÑнÑм иÑклÑÑением, ÑвÑзаннÑм Ñ ÑиÑловÑм обознаÑением Ñимволов или иÑполÑзованием пÑедопÑеделÑннÑÑ ÑÑÑноÑÑей â XQuery заменÑÐµÑ Ð¸Ñ ÑооÑвеÑÑÑвÑÑÑими Ñимволами, а XPath оÑÑавлÑÐµÑ Ð² иÑÑ Ð¾Ð´Ð½Ð¾Ð¼ виде). Ðо Ð¼ÐµÐ¶Ð´Ñ XPath 1.0 и ÑÑими ÑзÑками Ð¿Ð¾Ð´Ð¾Ð±Ð½Ð°Ñ ÑвÑÐ·Ñ Ð¾ÑÑÑÑÑÑвÑеÑ: он поÑвилÑÑ Ð³Ð¾Ñаздо ÑанÑÑе и во многом оÑлиÑаеÑÑÑ Ð¾Ñ Ð½Ð¸Ñ .
ÐаÑлÑживаÑÑ Ð¾ÑделÑного ÑаÑÑмоÑÑÐµÐ½Ð¸Ñ Ð´Ð²Ðµ каÑегоÑии огÑаниÑений: огÑаниÑение ÑзÑка XQuery до XPath Ð´Ð»Ñ ÑÑнкÑий, опиÑаннÑÑ Ð² ÑÑандаÑÑе SQL, и огÑаниÑение XPath до веÑÑии 1.0 как Ð´Ð»Ñ ÑÑандаÑÑизиÑованнÑÑ ÑÑнкÑий, Ñак и Ð´Ð»Ñ ÑпеÑиÑиÑнÑÑ ÑÑнкÑий Postgres Pro.
D.3.1.1. ÐгÑаниÑение ÑзÑка XQuery до XPath
Ð ÑиÑло оÑлиÑий XQuery Ð¾Ñ XPath Ð²Ñ Ð¾Ð´ÑÑ:
ÐÑÑÐ°Ð¶ÐµÐ½Ð¸Ñ XQuery могÑÑ Ð²ÑдаваÑÑ Ð½Ðµ ÑолÑко вÑевозможнÑе знаÑÐµÐ½Ð¸Ñ XPath, но и конÑÑÑÑиÑоваÑÑ Ð½Ð¾Ð²Ñе XML-ÑзлÑ. XPath Ð¼Ð¾Ð¶ÐµÑ ÑоздаваÑÑ Ð¸ возвÑаÑаÑÑ Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ Ð°ÑомаÑнÑÑ Ñипов (ÑиÑла, ÑÑÑоки и Ñак далее), но вÑдаваемÑе им XML-ÑÐ·Ð»Ñ Ð´Ð¾Ð»Ð¶Ð½Ñ Ñже пÑиÑÑÑÑÑвоваÑÑ Ð² докÑменÑе, поÑÑÑпивÑем на Ð²Ñ Ð¾Ð´ вÑÑажениÑ.
Ð XQuery еÑÑÑ ÑпÑавлÑÑÑие конÑÑÑÑкÑии Ð´Ð»Ñ Ð¾ÑганизаÑии Ñиклов, ÑоÑÑиÑовки и гÑÑппиÑовки.
Ð XQuery поддеÑживаеÑÑÑ Ð¾Ð±ÑÑвление и иÑполÑзование локалÑнÑÑ ÑÑнкÑий.
РпоÑледниÑ
веÑÑиÑÑ
XPath наÑинаÑÑ Ð¿Ð¾ÑвлÑÑÑÑÑ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ÑÑи, пеÑеÑекаÑÑиеÑÑ Ñ Ð¸Ð¼ÐµÑÑимиÑÑ Ð² XQuery (напÑимеÑ, конÑÑÑÑкÑии for-each, sort, анонимнÑе ÑÑнкÑии и ÑÑнкÑÐ¸Ñ parse-xml, ÑоздаÑÑÐ°Ñ Ñзел из ÑÑÑоки), но до XPath 3.0 иÑ
не бÑло.
D.3.1.2. ÐгÑаниÑÐµÐ½Ð¸Ñ XPath до веÑÑии 1.0
РазÑабоÑÑикам, знакомÑм Ñ XQuery и XPath 2.0 или новее, пÑÐ¸Ñ Ð¾Ð´Ð¸ÑÑÑ Ð¸Ð¼ÐµÑÑ Ð´ÐµÐ»Ð¾ Ñ ÑÑдом недоÑÑаÑков XPath веÑÑии 1.0:
ФÑндаменÑалÑнÑй Ñип ÑезÑлÑÑаÑов XQuery/XPath, Ñип
sequence, коÑоÑÑй Ð¼Ð¾Ð¶ÐµÑ ÑодеÑжаÑÑ XML-ÑзлÑ, аÑомаÑнÑе знаÑениÑ, и вÑÑ ÑÑо вмеÑÑе, в XPath 1.0 оÑÑÑÑÑÑвÑеÑ. Ð 1.0 вÑÑÐ°Ð¶ÐµÐ½Ð¸Ñ Ð¼Ð¾Ð³ÑÑ Ð²ÑдаваÑÑ ÑолÑко Ð½Ð°Ð±Ð¾Ñ Ñзлов (ÑоÑÑоÑÑÐ¸Ñ Ð¸Ð· нÑÐ»Ñ Ð¸Ð»Ð¸ неÑколÑÐºÐ¸Ñ Ñзлов XML) или единÑÑвенное аÑомаÑное знаÑение.РоÑлиÑие Ð¾Ñ Ð¿Ð¾ÑледоваÑелÑноÑÑей XQuery/XPath, коÑоÑÑе могÑÑ ÑодеÑжаÑÑ Ð¿ÑоизволÑнÑе ÑлеменÑÑ Ð² лÑбом ÑÑебÑÑÑемÑÑ Ð¿Ð¾ÑÑдке, во множеÑÑве Ñзлов XPath 1.0 Ð½ÐµÑ Ð³Ð°ÑанÑиÑованного поÑÑдка, и оно, как и лÑбое дÑÑгое множеÑÑво, не Ð¼Ð¾Ð¶ÐµÑ ÑодеÑжаÑÑ Ð½ÐµÑколÑко Ð²Ñ Ð¾Ð¶Ð´ÐµÐ½Ð¸Ð¹ одного ÑлеменÑа.
ÐÑимеÑание
ÐиблиоÑека libxml2 не вÑегда возвÑаÑÐ°ÐµÑ Ð² Postgres Pro набоÑÑ Ñзлов Ñ Ð²Ð½ÑÑÑенними Ñленами в Ñом поÑÑдке, в коÑоÑом они идÑÑ Ð²Ð¾ Ð²Ñ Ð¾Ð´Ð½Ð¾Ð¼ докÑменÑе. Ð ÐµÑ Ð´Ð¾ÐºÑменÑаÑии не гаÑанÑиÑÑеÑÑÑ ÐºÐ¾ÑÑекÑное поведение, а вÑÑажение XPath 1.0 не Ð¼Ð¾Ð¶ÐµÑ Ð½Ð° ÑÑо воздейÑÑвоваÑÑ.
Тогда как XQuery/XPath поддеÑживаÑÑ Ð²Ñе ÑипÑ, опÑеделÑннÑе в ÑÑандаÑÑе XML Schema, а Ñакже множеÑÑво опеÑаÑоÑов и ÑÑнкÑий, ÑабоÑаÑÑÐ¸Ñ Ñ ÑÑими Ñипами, XPath 1.0 поддеÑÐ¶Ð¸Ð²Ð°ÐµÑ ÑолÑко множеÑÑва Ñзлов и ÑÑи аÑомаÑнÑÑ Ñипа:
boolean,doubleиstring.Ð XPath 1.0 оÑÑÑÑÑÑвÑÐµÑ ÑÑловнÑй опеÑаÑоÑ. ÐÑÑажение XQuery/XPath вида
if ( hat ) then hat/@size else "no hat"не Ð¸Ð¼ÐµÐµÑ ÑквиваленÑа в XPath 1.0.Ð XPath 1.0 Ð½ÐµÑ Ð¾Ð¿ÐµÑаÑоÑа ÑÑÐ°Ð²Ð½ÐµÐ½Ð¸Ñ ÑÑÑок Ñ ÑпоÑÑдоÑиванием. УÑловиÑ
"cat" < "dog"и"cat" > "dog"оба ÑвлÑÑÑÑÑ Ð»Ð¾Ð¶Ð½Ñми, Ñак как они вÑполнÑÑÑÑÑ ÐºÐ°Ðº ÑиÑловÑе ÑÑÐ°Ð²Ð½ÐµÐ½Ð¸Ñ Ð´Ð²ÑÑ Ð·Ð½Ð°ÑенийNaN. УÑÐ»Ð¾Ð²Ð¸Ñ Ð¶Ðµ=и!=, напÑоÑив, ÑÑавниваÑÑ ÑÑÑоки в виде ÑÑÑок.XPath 1.0 ÑазмÑÐ²Ð°ÐµÑ ÑазниÑÑ Ð¼ÐµÐ¶Ð´Ñ ÑÑавнением знаÑений и обÑими ÑÑавнениÑми, коÑоÑÐ°Ñ Ð¸Ð¼ÐµÐµÑÑÑ Ð² XQuery/XPath. СÑавнениÑ
sale/@hatsize = 7иsale/@customer = "alice"по ÑÑÑи ÑвлÑÑÑÑÑ ÐºÐ¾Ð»Ð¸ÑеÑÑвеннÑми ÑÑавнениÑми, и ÑезÑлÑÑаÑом Ð¸Ñ Ð±ÑÐ´ÐµÑ Ð¸ÑÑина, еÑли ÑÑÑеÑÑвÑÐµÑ ÑлеменÑsaleÑ Ð·Ð°Ð´Ð°Ð½Ð½Ñм знаÑением аÑÑибÑÑа, Ñогда какsale/@taxable = false()â ÑÑавнение вÑего набоÑа Ñзлов Ñ ÑакÑиÑеÑким логиÑеÑким знаÑением. Ðго ÑезÑлÑÑÐ°Ñ Ð±ÑÐ´ÐµÑ Ð¸ÑÑиной, ÑолÑко еÑли Ñ ÑлеменÑаsaleвовÑе не бÑÐ´ÐµÑ Ð°ÑÑибÑÑаtaxable.Рмодели даннÑÑ XQuery/XPath Ñзел докÑменÑа Ð¼Ð¾Ð¶ÐµÑ Ð¸Ð¼ÐµÑÑ Ð»Ð¸Ð±Ð¾ ÑоÑÐ¼Ñ Ð´Ð¾ÐºÑменÑа (Ñо еÑÑÑ ÑодеÑжаÑÑ Ð² ÑоÑноÑÑи один ÑÐ»ÐµÐ¼ÐµÐ½Ñ Ð²ÐµÑÑ Ð½ÐµÐ³Ð¾ ÑÑовнÑ, ÑнаÑÑжи коÑоÑого допÑÑкаÑÑÑÑ ÑолÑко комменÑаÑии и инÑÑÑÑкÑии обÑабоÑки), либо ÑоÑÐ¼Ñ ÑодеÑжимого (Ñ Ð¾ÑлабленнÑми огÑаниÑениÑми). Ð XPath 1.0 ÐµÐ¼Ñ ÑооÑвеÑÑÑвÑÐµÑ ÐºÐ¾Ñневой Ñзел, коÑоÑÑй Ð¼Ð¾Ð¶ÐµÑ Ð¸Ð¼ÐµÑÑ ÑолÑко ÑоÑÐ¼Ñ Ð´Ð¾ÐºÑменÑа. ÐÑим оÑÑаÑÑи обÑÑÑнÑеÑÑÑ Ñо, ÑÑо знаÑение Ñипа
xml, пеÑедаваемое в каÑеÑÑве ÑлеменÑа конÑекÑÑа лÑбÑм ÑÑнкÑиÑм Postgres Pro на базе XPath, должно бÑÑÑ Ð² ÑоÑме докÑменÑа.
ÐÑоме оÑмеÑеннÑÑ Ð²ÑÑе имеÑÑÑÑ Ð¸ дÑÑгие ÑазлиÑиÑ. Ð ÑзÑÐºÐ°Ñ XQuery и XPath веÑÑии 2.0 и новее ÑÑÑеÑÑвÑÐµÑ Ñежим ÑовмеÑÑимоÑÑи Ñ XPath 1.0, а в докÑменÑаÑии W3C имееÑÑÑ Ð¿ÐµÑеÑÐµÐ½Ñ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ð¹ ÑÑнкÑий и изменений в ÑзÑке пÑимениÑелÑно к ÑÑÐ¾Ð¼Ñ ÑежимÑ. ÐÑÐ¾Ñ Ð¿ÐµÑеÑÐµÐ½Ñ Ð³Ð¾Ñаздо более полнÑй, но Ñоже не иÑÑеÑпÑваÑÑий. Ðаже Ñежим ÑовмеÑÑимоÑÑи ÑÑÐ¸Ñ ÑзÑков не обеÑпеÑÐ¸Ð²Ð°ÐµÑ Ð¸Ñ Ð¿Ð¾Ð»Ð½ÑÑ Ð¸Ð´ÐµÐ½ÑиÑноÑÑÑ XPath 1.0.
D.3.1.3. ÐÑеобÑазование знаÑений/Ñипов даннÑÑ Ð¼ÐµÐ¶Ð´Ñ SQL и XML
Ð SQL:2006 и более Ð¿Ð¾Ð·Ð´Ð½Ð¸Ñ ÑевизиÑÑ ÑÑÑко опÑÐµÐ´ÐµÐ»ÐµÐ½Ñ Ð¿ÑеобÑÐ°Ð·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¼ÐµÐ¶Ð´Ñ ÑÑандаÑÑнÑми Ñипами SQL и Ñипами ÑÑандаÑÑа XML Schema в обе ÑÑоÑонÑ. Ðднако ÑÑи пÑавила вÑÑажаÑÑÑÑ Ð² ÑÐ¸Ð¿Ð°Ñ Ð¸ понÑÑиÑÑ , опÑеделÑннÑÑ Ð² XQuery/XPath, и не могÑÑ Ð±ÑÑÑ Ð½ÐµÐ¿Ð¾ÑÑедÑÑвенно пÑÐ¸Ð¼ÐµÐ½ÐµÐ½Ñ Ðº дÑÑгой модели даннÑÑ , пÑиÑÑÑей XPath 1.0.
Ðогда Postgres Pro ÑопоÑÑавлÑÐµÑ Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ Ð´Ð°Ð½Ð½ÑÑ
SQL Ñ XML (как в ÑÑнкÑии xmlelement), или XML Ñ SQL (как в вÑÑ
однÑÑ
ÑÑолбÑаÑ
xmltable), за иÑклÑÑением неÑколÑкиÑ
оÑделÑно обÑабаÑÑваемÑÑ
ÑлÑÑаев, Postgres Pro пÑоÑÑо полагаеÑ, ÑÑо ÑÑÑока XPath 1.0, ÑодеÑжаÑÐ°Ñ Ð´Ð°Ð½Ð½Ñе Ñипа XML, бÑÐ´ÐµÑ Ð´Ð¾Ð¿ÑÑÑимой Ð´Ð»Ñ Ð²Ð²Ð¾Ð´Ð° в ÑекÑÑовом виде в Ñип даннÑÑ
SQL, и наобоÑоÑ. ÐÑо пÑавило добÑодеÑелÑно Ñвоей пÑоÑÑоÑой, и пÑи ÑÑом пÑеобÑÐ°Ð·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð´Ð»Ñ Ð¼Ð½Ð¾Ð³Ð¸Ñ
Ñипов даннÑÑ
в иÑоге оказÑваÑÑÑÑ Ñакими, какими и Ð´Ð¾Ð»Ð¶Ð½Ñ Ð±ÑÑÑ ÑоглаÑно ÑÑандаÑÑÑ. Ð ÑекÑÑем вÑпÑÑке ÑÑебÑеÑÑÑ Ñвное пÑеобÑазование, еÑли вÑÑажение ÑÑолбÑа xmltable вÑдаÑÑ Ð»Ð¾Ð³Ð¸ÑеÑкое знаÑение или ÑиÑло Ñ Ð¿Ð»Ð°Ð²Ð°ÑÑей ÑоÑкой; Ñм. ÐодÑаздел D.3.2.
Там же, где ÑÑо нÑжно Ð´Ð»Ñ Ð²Ð·Ð°Ð¸Ð¼Ð¾Ð´ÐµÐ¹ÑÑÐ²Ð¸Ñ Ñ Ð´ÑÑгими ÑиÑÑемами, Ð´Ð»Ñ Ð½ÐµÐºÐ¾ÑоÑÑÑ Ñипов даннÑÑ Ð¼Ð¾Ð¶Ð½Ð¾ Ñвно иÑполÑзоваÑÑ ÑÑнкÑии ÑоÑмаÑиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ñипов даннÑÑ (напÑимеÑ, опиÑаннÑе в Разделе 9.8) Ð´Ð»Ñ Ð¿Ð¾Ð»ÑÑÐµÐ½Ð¸Ñ Ð¿ÑеобÑазований, в ÑоÑноÑÑи ÑооÑвеÑÑÑвÑÑÑÐ¸Ñ ÑÑандаÑÑÑ.
D.3.2. ÐепÑеднамеÑеннÑе огÑаниÑÐµÐ½Ð¸Ñ ÑеализаÑии
Ð ÑÑом Ñазделе опиÑÑваÑÑÑÑ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑнÑе огÑаниÑениÑ, пÑиÑÑÑие ÑекÑÑей ÑеализаÑии в Postgres Pro, но не Ñамой библиоÑеке libxml2.
D.3.2.1. ÐеобÑ
одимоÑÑÑ Ð¿ÑÐ¸Ð²ÐµÐ´ÐµÐ½Ð¸Ñ ÑÑолбÑов xmltable, имеÑÑиÑ
логиÑеÑкий или ÑиÑловой Ñип
ÐÑÑажение ÑÑолбÑа xmltable, ÑезÑлÑÑаÑом коÑоÑого должно бÑÑÑ Ð»Ð¾Ð³Ð¸ÑеÑкое или ÑиÑловое знаÑение XPath, бÑÐ´ÐµÑ Ð²ÑдаваÑÑ Ð¾ÑÐ¸Ð±ÐºÑ Â«unexpected XPath object type» (неожиданнÑй Ñип обÑекÑа XPath). ЧÑÐ¾Ð±Ñ Ð¾Ð±Ð¾Ð¹Ñи ÑÑÑ Ð¾ÑибкÑ, ÑÑо вÑÑажение надо помеÑÑиÑÑ Ð²Ð½ÑÑÑÑ Ð²Ñзова ÑÑнкÑии string ÑзÑка XPath; в ÑÑом ÑлÑÑае Postgres Pro ÑÐ¼Ð¾Ð¶ÐµÑ ÑÑпеÑно пÑиÑвоиÑÑ ÑÑÑоковое знаÑение вÑÑ
Ð¾Ð´Ð½Ð¾Ð¼Ñ ÑÑолбÑÑ SQL, имеÑÑÐµÐ¼Ñ Ð»Ð¾Ð³Ð¸ÑеÑкий или ÑиÑловой Ñип Ñ Ð¿Ð»Ð°Ð²Ð°ÑÑей ÑоÑкой.
D.3.2.2. РезÑлÑÑÐ°Ñ Ð²ÑÑиÑÐ»ÐµÐ½Ð¸Ñ Ð¿ÑÑи или вÑÑ Ð¾Ð´Ð½Ð¾Ð¹ ÑÑÐ¾Ð»Ð±ÐµÑ SQL Ñипа XML
Ð ÑекÑÑей веÑÑии вÑÑажение ÑÑолбÑа xmltable, вÑдаÑÑее Ð½Ð°Ð±Ð¾Ñ XML-Ñзлов, Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¿ÑиÑвоено вÑÑ
Ð¾Ð´Ð½Ð¾Ð¼Ñ SQL-ÑÑолбÑÑ Ñипа XML. Ð ÑÑом ÑлÑÑае ÑезÑлÑÑаÑом бÑÐ´ÐµÑ ÐºÐ¾Ð½ÐºÐ°ÑенаÑÐ¸Ñ ÑледÑÑÑиÑ
даннÑÑ
: Ð´Ð»Ñ Ð±Ð¾Ð»ÑÑинÑÑва Ñипов Ñзлов в набоÑе Ñзлов беÑÑÑÑÑ ÑекÑÑовÑй Ñзел Ñо ÑÑÑоковÑм знаÑением Ñзла в опÑеделении XPath 1.0, но Ð´Ð»Ñ ÑзловâÑлеменÑов â ÐºÐ¾Ð¿Ð¸Ñ ÑÑого Ñзла. Такой Ð½Ð°Ð±Ð¾Ñ Ñзлов Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¿ÑиÑвоен SQL-ÑÑолбÑÑ, имеÑÑÐµÐ¼Ñ Ð½Ðµ XML-Ñип, ÑолÑко еÑли ÑÑÐ¾Ñ Ð½Ð°Ð±Ð¾Ñ ÑодеÑÐ¶Ð¸Ñ Ð¾Ð´Ð¸Ð½ Ñзел. ÐÑи ÑÑом ÑÑÑоковое знаÑение Ñзлов болÑÑинÑÑва Ñипов заменÑеÑÑÑ Ð¿ÑÑÑой ÑÑÑокой, ÑÑÑоковое знаÑение Ñзла-ÑлеменÑа заменÑеÑÑÑ ÐºÐ¾Ð½ÐºÐ°ÑенаÑией ÑолÑко его непоÑÑедÑÑвеннÑÑ
поÑомков â ÑекÑÑовÑÑ
Ñзлов (дÑÑгие поÑомки иÑклÑÑаÑÑÑÑ Ð¸Ð· ÑаÑÑмоÑÑениÑ), а ÑÑÑоковое знаÑение ÑекÑÑового Ñзла или аÑÑибÑÑа вÑдаÑÑÑÑ ÑоглаÑно опÑÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ XPath 1.0. СÑÑоковое вÑÑажение XPath, пÑиÑваиваемое вÑÑ
Ð¾Ð´Ð½Ð¾Ð¼Ñ ÑÑолбÑÑ Ñипа XML, должно пÑоÑ
одиÑÑ ÑÐ°Ð·Ð±Ð¾Ñ XML.
ÐÑи ÑазÑабоÑке кода не ÑекомендÑеÑÑÑ Ð¿Ð¾Ð»Ð°Ð³Ð°ÑÑÑÑ Ð½Ð° опиÑанное оÑобое поведение: во-пеÑвÑÑ , оно не вполне ÑооÑвеÑÑÑвÑÐµÑ ÑÑандаÑÑÑ, а во-вÑоÑÑÑ , в Postgres Pro 12 оно изменено.
D.3.2.3. ÐеÑедаÑа паÑамеÑÑов ÑолÑко по знаÑÐµÐ½Ð¸Ñ (BY VALUE)
Ð ÑÑандаÑÑе SQL опÑÐµÐ´ÐµÐ»ÐµÐ½Ñ Ð´Ð²Ð° меÑ
анизма пеÑедаÑи паÑамеÑÑов, оÑÑÑеÑÑвлÑÑÑиÑ
пеÑедаÑÑ XML-аÑгÑменÑа из SQL в XML-ÑÑнкÑÐ¸Ñ Ð¸Ð»Ð¸ полÑÑение ÑезÑлÑÑаÑа: BY REF, в коÑоÑом конкÑеÑное знаÑение в XML оÑÑаÑÑÑÑ Ð¿ÑивÑзаннÑм к ÑÐ²Ð¾ÐµÐ¼Ñ ÑзлÑ, и BY VALUE, в коÑоÑом пеÑедаÑÑÑÑ ÑодеÑжимое XML, но ÑвÑÐ·Ñ Ñ Ñзлом ÑеÑÑеÑÑÑ. ÐÑбÑаÑÑ Ð¼ÐµÑ
анизм можно пеÑед ÑпиÑком паÑамеÑÑов, в каÑеÑÑве меÑ
анизма по ÑмолÑÐ°Ð½Ð¸Ñ Ð´Ð»Ñ Ð²ÑеÑ
паÑамеÑÑов, или поÑле каждого оÑделÑного паÑамеÑÑа, пеÑеопÑеделив Ñем ÑамÑм вÑÐ±Ð¾Ñ Ð¿Ð¾ ÑмолÑаниÑ.
РкаÑеÑÑве иллÑÑÑÑаÑии ÑазлиÑÐ¸Ñ Ð²Ð·Ð³Ð»ÑниÑе на ÑледÑÑÑие два запÑоÑа, коÑоÑÑе в окÑÑжении SQL:2006 вÑдаÑÑ true и false, еÑли x ÑвлÑеÑÑÑ XML-знаÑением:
SELECT XMLQUERY('$a is $b' PASSING BY REF x AS a, x AS b NULL ON EMPTY);
SELECT XMLQUERY('$a is $b' PASSING BY VALUE x AS a, x AS b NULL ON EMPTY);Ð ÑÑом вÑпÑÑке Postgres Pro пÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ Ñказание BY REF в конÑÑÑÑкÑии XMLEXISTS или XMLTABLE, но игноÑиÑÑÐµÑ ÐµÐ³Ð¾. Тип xml ÑодеÑÐ¶Ð¸Ñ ÑеÑиализованное пÑедÑÑавление даннÑÑ
в ÑекÑÑовом виде, поÑÑÐ¾Ð¼Ñ ÑÑÑноÑÑÑ Ñзла, коÑоÑÑÑ Ð½Ñжно ÑоÑ
ÑанÑÑÑ, оÑÑÑÑÑÑвÑеÑ, и пеÑедаÑа ÑакÑиÑеÑки пÑоизводиÑÑÑ Ð¿Ð¾ знаÑÐµÐ½Ð¸Ñ (BY VALUE).
D.3.2.4. ÐÑÑÑÑÑÑвие именованнÑÑ Ð¿Ð°ÑамеÑÑов запÑоÑов
ФÑнкÑии на базе XPath могÑÑ Ð¿ÑинимаÑÑ Ð¾Ð´Ð¸Ð½ паÑамеÑÑ, ÑлÑжаÑий конÑекÑÑнÑм ÑлеменÑом Ð´Ð»Ñ Ð²ÑÑÐ°Ð¶ÐµÐ½Ð¸Ñ XPath, но не поддеÑживаÑÑ Ð¿ÐµÑедаÑÑ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑнÑÑ Ð·Ð½Ð°Ñений, коÑоÑÑе могли Ð±Ñ Ð¸ÑполÑзоваÑÑÑÑ Ð² вÑÑажении как именованнÑе паÑамеÑÑÑ.
D.3.2.5. ÐÑÑÑÑÑÑвие Ñипа XML(SEQUENCE)
Тип даннÑÑ
xml в Postgres Pro Ð¼Ð¾Ð¶ÐµÑ ÑодеÑжаÑÑ Ð·Ð½Ð°Ñение ÑолÑко в ÑоÑме докÑменÑа (DOCUMENT) или ÑодеÑжимого (CONTENT). ÐонÑекÑÑнÑй ÑÐ»ÐµÐ¼ÐµÐ½Ñ Ð²ÑÑÐ°Ð¶ÐµÐ½Ð¸Ñ XQuery/XPath должен бÑÑÑ Ð¾Ð´Ð¸Ð½Ð¾ÑнÑм XML-Ñзлом или аÑомаÑнÑм знаÑением, но в XPath 1.0 ÑÑо Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ ÑолÑко XML-Ñзел, и пÑи ÑÑом Ð½ÐµÑ Ñипа Ñзла, ÑодеÑжаÑего CONTENT. Ðак ÑледÑÑвие, в Postgres Pro в каÑеÑÑве конÑекÑÑного ÑлеменÑа XPath можно пеÑедаÑÑ Ð´Ð°Ð½Ð½Ñе XML в единÑÑвенном виде â в виде пÑавилÑно оÑоÑмленного докÑменÑа (DOCUMENT).