<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0"><channel><atom:id>tag:blogger.com,1999:blog-3440514228829272358</atom:id><lastBuildDate>Fri, 29 Jul 2011 02:25:33 +0000</lastBuildDate><category>owl</category><category>C#</category><category>hack</category><category>rdf</category><category>Twitter</category><category>SPARQL</category><category>SemWeb</category><category>Binding</category><category>аннотация</category><category>helper</category><category>Javascript</category><category>Kooboo</category><category>синглтон</category><category>System.Xml</category><category>semantic web</category><category>.net</category><category>IE</category><category>System.Reflection</category><category>ASP.Net</category><category>RIA</category><category>многопоточность</category><category>asp.net mvc</category><category>Silverlight</category><category>ссылки</category><title>Копилка знаний</title><description /><link>http://kopilkaz.blogspot.com/</link><managingEditor>noreply@blogger.com (Сергей Истомин)</managingEditor><generator>Blogger</generator><openSearch:totalResults>24</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/kopilkaz" /><feedburner:info uri="kopilkaz" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item><guid isPermaLink="false">tag:blogger.com,1999:blog-3440514228829272358.post-3439799425669396037</guid><pubDate>Fri, 10 Sep 2010 22:18:00 +0000</pubDate><atom:updated>2010-09-10T17:03:15.902-07:00</atom:updated><title>Событие изменения свойства в Javascript</title><description>&lt;p&gt;Довольно частая задача - запустить какие-то действия в скрипте в ответ на изменение некоторого свойства объекта. Подумав в очередной раз над этой задачей написал небольшой класс реализующий это поведение.&lt;/p&gt;&lt;pre&gt;&lt;code class="js"&gt;function Property (param_value) {&lt;br /&gt;var value = param_value;&lt;br /&gt;var delegates = new Array();&lt;br /&gt;var RiseChangedEvent = function () {&lt;br /&gt;      $.each(delegates, function (index, item) {&lt;br /&gt;          item(value);&lt;br /&gt;      });&lt;br /&gt;  };&lt;br /&gt;  this.Property = function () {&lt;br /&gt;&lt;br /&gt;      this.SetChangedEventDelegate = function (delegate) {&lt;br /&gt;          delegates.push(delegate);&lt;br /&gt;      };&lt;br /&gt;      this.Get = function () {&lt;br /&gt;          return this;&lt;br /&gt;      };&lt;br /&gt;      this.Set = function (param_value) {&lt;br /&gt;          value = param_value;&lt;br /&gt;          RiseChangedEvent();&lt;br /&gt;      };&lt;br /&gt;&lt;br /&gt;  };&lt;br /&gt;return new this.Property();&lt;br /&gt;};&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;delegates - коллекция ссылок на функции обратного вызова.&lt;br /&gt;Подписываемся функцией - SetChangedEventDelegate(),&lt;/p&gt;&lt;p&gt;&lt;br /&gt;Использование:&lt;/p&gt;&lt;pre&gt;&lt;code class="js"&gt;&lt;br /&gt;event.finished = new Property(event.finished);&lt;br /&gt;//Заменяем переменную свойством (объектом класса Proerty)&lt;br /&gt;event.finished.SetChangedEventDelegate(function (value) {&lt;br /&gt;              input.attr("checked", value);&lt;br /&gt;          });&lt;br /&gt;//Подписываемся на событие изменения свойства&lt;br /&gt;//Теперь все обращения только через get и set&lt;br /&gt;var input = event.finished.Get();&lt;br /&gt;event.finished.Set(this.checked);&lt;/code&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3440514228829272358-3439799425669396037?l=kopilkaz.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/kopilkaz/~4/0BdVVXXLfQ8" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/kopilkaz/~3/0BdVVXXLfQ8/javascript.html</link><author>noreply@blogger.com (Сергей Истомин)</author><thr:total>3</thr:total><feedburner:origLink>http://kopilkaz.blogspot.com/2010/09/javascript.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-3440514228829272358.post-1666363850094784314</guid><pubDate>Mon, 03 May 2010 00:35:00 +0000</pubDate><atom:updated>2010-05-02T17:52:41.099-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">.net</category><category domain="http://www.blogger.com/atom/ns#">asp.net mvc</category><category domain="http://www.blogger.com/atom/ns#">Kooboo</category><title>Kooboo CMS. Процедура обновление версии</title><description>&lt;p&gt;В Kooboo предусмотрена удобная система обновления версии СМS. Но как и для всего, остального что связанно с Kooboo по этой теме крайне мало информации. В этой заметке я постараюсь кратко описать процедуру.&lt;/p&gt;&lt;p&gt;Для начала необходимо скачать девелоперскую версию &lt;a href="http://kooboo.codeplex.com/"&gt;Kooboo&lt;/a&gt; и версию до которой необходимо обновить сайт.&lt;/p&gt;&lt;p&gt;Скачанную версию CMS распаковываем в отдельную папку. После чего необходимо собрать и запустить проект Kooboo.Upgrade Tool. В появившемся диалоге выбираем размещение старой версии сайта, размещение новой версии и запускаем обновление. &lt;/p&gt; Вот собственно и все.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3440514228829272358-1666363850094784314?l=kopilkaz.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/kopilkaz/~4/a98QbqeYXEU" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/kopilkaz/~3/a98QbqeYXEU/kooboo-cms.html</link><author>noreply@blogger.com (Сергей Истомин)</author><thr:total>0</thr:total><feedburner:origLink>http://kopilkaz.blogspot.com/2010/05/kooboo-cms.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-3440514228829272358.post-4632168030401726151</guid><pubDate>Sun, 13 Dec 2009 00:12:00 +0000</pubDate><atom:updated>2009-12-12T16:25:56.632-08:00</atom:updated><title>Прекрасная статья о том как упаковывать dll в один exe файл.</title><description>&lt;a href="http://weblogs.asp.net/ralfw/archive/2007/02/04/single-assembly-deployment-of-managed-and-unmanaged-code.aspx"&gt;Single Assembly Deployment of Managed and Unmanaged Code&lt;/a&gt;&lt;p&gt;В кратце:&lt;/p&gt;&lt;p&gt;Добавляем нужную dll сборку как emebeded resource. Затем в статическом конструкторе класса, где она нужна (у меня это статический класс оборачивающий функции этой dll) прописываем вызов следующего метода:&lt;/p&gt;&lt;pre name="code" class="csharp"&gt;namespace MyLib&lt;br /&gt;{&lt;br /&gt;  public class MyClass&lt;br /&gt;  {&lt;br /&gt;      static MyClass()&lt;br /&gt;      {&lt;br /&gt;          ResourceExtractor.ExtractResourceToFile("MyLib.ManagedService.dll", "managedservice.dll");&lt;br /&gt;          ResourceExtractor.ExtractResourceToFile("MyLib.UnmanagedService.dll", "unmanagedservice.dll");&lt;br /&gt;      }&lt;br /&gt;&lt;br /&gt;      ...&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;А это собственно реализация экстрактора:&lt;/p&gt;&lt;pre name="code" class="csharp"&gt;public static class ResourceExtractor&lt;br /&gt;{&lt;br /&gt;    public static void ExtractResourceToFile(string resourceName, string filename)&lt;br /&gt;    {&lt;br /&gt;        if (!System.IO.File.Exists(filename))&lt;br /&gt;            using (System.IO.Stream s = System.Reflection.Assembly.GetExecutingAssembly().GetManifestResourceStream(resourceName))&lt;br /&gt;                using (System.IO.FileStream fs = new System.IO.FileStream(filename, System.IO.FileMode.Create))&lt;br /&gt;                {&lt;br /&gt;                    byte[] b = new byte[s.Length];&lt;br /&gt;                    s.Read(b, 0, b.Length);&lt;br /&gt;                    fs.Write(b, 0, b.Length);&lt;br /&gt;                }&lt;br /&gt;    }&lt;br /&gt;}&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3440514228829272358-4632168030401726151?l=kopilkaz.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/kopilkaz/~4/8a5w2VSUl9Q" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/kopilkaz/~3/8a5w2VSUl9Q/blog-post.html</link><author>noreply@blogger.com (Сергей Истомин)</author><thr:total>0</thr:total><feedburner:origLink>http://kopilkaz.blogspot.com/2009/12/blog-post.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-3440514228829272358.post-2345526769124967828</guid><pubDate>Sun, 09 Aug 2009 09:41:00 +0000</pubDate><atom:updated>2009-12-12T17:09:50.460-08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">.net</category><category domain="http://www.blogger.com/atom/ns#">Silverlight</category><category domain="http://www.blogger.com/atom/ns#">Binding</category><title>Танцы с бубнами.</title><description>&lt;p&gt;Существует некоторый класс простых багов, которые могут запросто превратиться в головную боль, привести к срыву всех сроков и довести до нервного истощения. Чаще всего оказывается, что решение лежало на поверхности.&lt;/p&gt;&lt;p&gt;Вот например кусок XAML, который мучал меня почти сутки&lt;/p&gt;&lt;pre name="code" class="xml"&gt;&lt;br /&gt; &lt;chartingToolkit:Chart x:Name="MainChart" Margin="0" Grid.Column="1" template="{StaticResource ChartControlTemplate}"&gt;&lt;/chartingToolkit:Chart&gt;&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;Если попытаться записать ему DataContext из CodeBehind, вот так:&lt;/p&gt;&lt;pre name="code" class="csharp"&gt;MainChart.DataContext = Sale.Data;&lt;/pre&gt;&lt;p&gt;то можно поймать совершенно изумительное ВэллНоун исключение:&lt;br /&gt;...................................................&lt;br /&gt;.................................&lt;br /&gt;................&lt;/p&gt;&lt;p&gt;Вот так всегда. Даже попытка повторить его не удалась. Спрашивается, с чем я боролся то сутки? Танцы с бубнами, да и только...&lt;/p&gt;&lt;p&gt;В общем исключение было следующим:  "Collection was modified; enumeration operation may not execute".  Как я его заборол не понимаю до сих пор. Код, вроде как, тот же. Раньше не работал, теперь работает.&lt;/p&gt;&lt;p&gt;Возможно нужно было убрать установку DataContext из шаблонов в XAML и все. Еще один вариант - необходимо явно указывать Binding на родительские элементы. А те в свою очередь необходимо инициализировать из XAML каким-то начальным значением. Что-то из этого работает.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3440514228829272358-2345526769124967828?l=kopilkaz.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/kopilkaz/~4/HbLjsYeqpZo" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/kopilkaz/~3/HbLjsYeqpZo/blog-post.html</link><author>noreply@blogger.com (Сергей Истомин)</author><thr:total>0</thr:total><feedburner:origLink>http://kopilkaz.blogspot.com/2009/08/blog-post.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-3440514228829272358.post-4208138920698263796</guid><pubDate>Wed, 29 Jul 2009 21:35:00 +0000</pubDate><atom:updated>2009-08-09T02:46:32.646-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">RIA</category><category domain="http://www.blogger.com/atom/ns#">.net</category><category domain="http://www.blogger.com/atom/ns#">C#</category><category domain="http://www.blogger.com/atom/ns#">ASP.Net</category><category domain="http://www.blogger.com/atom/ns#">Silverlight</category><title>Странный баг в .Net Silverlight RIA Services</title><description>Портируя Silverlight приложение на .Net RIA Services столкнулся с неприятным багом, который сейчас и попробую описать.&lt;br /&gt;&lt;br /&gt;Имеется некий метод TotalDueByRegionId который принимает в качестве параметра с именем inputName строку ( раньше принимал число, но баг повторяется независимо от этого ).&lt;br /&gt;И вот необходимо вызвать его из XAML кода контрола, что я и делаю следующим образом, пытаясь передать ему параметр:&lt;br /&gt;&lt;pre name="code" class="xml"&gt;&lt;br /&gt;&lt;riacontrols:domaindatasource name="TDR" queryname="TotalDueByRegionId" autoload="True"&gt;&lt;br /&gt;          &lt;riacontrols:domaindatasource.domaincontext&gt;&lt;br /&gt;              &lt;domain:addomaincontext&gt;&lt;br /&gt;          &lt;/domain:addomaincontext&gt;&lt;/riacontrols:domaindatasource.domaincontext&gt;&lt;br /&gt;          &lt;riacontrols:domaindatasource.queryparameters&gt;&lt;br /&gt;              &lt;riadata:controlparameter parametername="inputName" value="zuxel"&gt;&lt;br /&gt;          &lt;/riadata:controlparameter&gt;&lt;/riacontrols:domaindatasource.queryparameters&gt;&lt;br /&gt;      &lt;/riacontrols:domaindatasource&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Запускаем код и отлавливаем в вызов TotalDueByRegionId в сгенерированом коде:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://content.screencast.com/users/Neanderthal/folders/Jing/media/1d0e1b42-849b-486d-a4ef-503c76913d9b/2009-07-30_0201.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 1091px; height: 232px;" src="http://content.screencast.com/users/Neanderthal/folders/Jing/media/1d0e1b42-849b-486d-a4ef-503c76913d9b/2009-07-30_0201.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;В этом месте инструкция по адресу 03Bh передает значение в переменную this._value&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://content.screencast.com/users/Neanderthal/folders/Jing/media/5b89b2c3-d5fe-4918-80b4-89fcc6994dc3/2009-07-30_0211.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 1058px; height: 441px;" src="http://content.screencast.com/users/Neanderthal/folders/Jing/media/5b89b2c3-d5fe-4918-80b4-89fcc6994dc3/2009-07-30_0211.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Следующая инструкция устанавливает эту же переменную в null:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://content.screencast.com/users/Neanderthal/folders/Jing/media/8e2b7353-1ea2-4f12-9501-87b391875d80/2009-07-30_0221.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 996px; height: 438px;" src="http://content.screencast.com/users/Neanderthal/folders/Jing/media/8e2b7353-1ea2-4f12-9501-87b391875d80/2009-07-30_0221.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Дизасемблер IL кажет нам следующие:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://content.screencast.com/users/Neanderthal/folders/Jing/media/2d36d895-5d9e-4f2f-ac07-af86e71a2b3e/2009-07-30_0223.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 718px; height: 488px;" src="http://content.screencast.com/users/Neanderthal/folders/Jing/media/2d36d895-5d9e-4f2f-ac07-af86e71a2b3e/2009-07-30_0223.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Что явно не вяжется с тем, что происходит в реальности. Я в тупике. Как жить дальше?&lt;br /&gt;&lt;br /&gt;UPD: Запостил на официальный форум Silverlight: &lt;a href="http://silverlight.net/forums/p/115386/260071.aspx#260071"&gt;http://silverlight.net/forums/p/115386/260071.aspx#260071&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;UPD 2: Решение: Когда необходимо просто передать параметр в запрос - надо использовать тип parameter вместо controlparameter. Controlparameter позволяет забаиндиться к свойствам других контролов. (Надо меньше тупить... Надо меньше тупить... и чаще отдыхать)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3440514228829272358-4208138920698263796?l=kopilkaz.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/kopilkaz/~4/GNI-e5WvXbc" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/kopilkaz/~3/GNI-e5WvXbc/net-silverlight-ria-services.html</link><author>noreply@blogger.com (Сергей Истомин)</author><thr:total>0</thr:total><feedburner:origLink>http://kopilkaz.blogspot.com/2009/07/net-silverlight-ria-services.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-3440514228829272358.post-5413481234551768469</guid><pubDate>Sat, 23 May 2009 01:42:00 +0000</pubDate><atom:updated>2009-05-22T18:42:51.675-07:00</atom:updated><title /><description>У меня программерская проблема. Некоторые вещи очень медленно компиляться. И за время компиляции я успеваю зачитатьс чьим нибудь блогом.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3440514228829272358-5413481234551768469?l=kopilkaz.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/kopilkaz/~4/MKBKk1L4oZk" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/kopilkaz/~3/MKBKk1L4oZk/blog-post_626.html</link><author>noreply@blogger.com (Сергей Истомин)</author><thr:total>0</thr:total><feedburner:origLink>http://kopilkaz.blogspot.com/2009/05/blog-post_626.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-3440514228829272358.post-5893817166660700364</guid><pubDate>Tue, 28 Apr 2009 09:01:00 +0000</pubDate><atom:updated>2009-04-28T02:01:25.105-07:00</atom:updated><title /><description>Сейчас открою америку. Если не очень долго но упорно и не отдыхая делать одно дело - скучно становиться чрезвычайно быстро. Очень быстро....&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3440514228829272358-5893817166660700364?l=kopilkaz.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/kopilkaz/~4/12c8zhb_wQM" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/kopilkaz/~3/12c8zhb_wQM/blog-post_28.html</link><author>noreply@blogger.com (Сергей Истомин)</author><thr:total>0</thr:total><feedburner:origLink>http://kopilkaz.blogspot.com/2009/04/blog-post_28.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-3440514228829272358.post-5916974021841843054</guid><pubDate>Sat, 18 Apr 2009 02:57:00 +0000</pubDate><atom:updated>2009-12-12T19:02:35.597-08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Javascript</category><category domain="http://www.blogger.com/atom/ns#">helper</category><title>Javascript функция рекурсивного обхода DOM</title><description>Пока я с красными глазами искал как исправить баг в IE из прошлого поста. Я написал весьма полезную функцию подписывающую все подписывающиеся потомки заданного элемента на событие вызывающие alert. И хотя существует мнение, что дебажить код алертами плохо - эта возможность меня спасла, от разрыва мозга, как минимум.&lt;br /&gt;&lt;pre name="code" class="js"&gt;&lt;br /&gt;function resetinputs(node) {&lt;br /&gt;    var oNode = node;&lt;br /&gt;    if (!oNode.length) {&lt;br /&gt;        try {&lt;br /&gt;            if (oNode.tagName == "IMG" || oNode.tagName == "MAP" || oNode.tagName == "AREA") { alert(oNode.tagName + "-|-" + oNode.id); };&lt;br /&gt;            if (oNode.Id == "ChartArea1") { oNode.style.opacity = ".5"; };&lt;br /&gt;        }&lt;br /&gt;        catch (dfr) { };&lt;br /&gt;        var curch = oNode;&lt;br /&gt;        try {&lt;br /&gt;            curch.onmouseup = function(evnt) {&lt;br /&gt;                var n = 1;&lt;br /&gt;                alert(this.tagName + " -|- " + this.id);&lt;br /&gt;                var z = 25;&lt;br /&gt;            };&lt;br /&gt;        } catch (eval) { };&lt;br /&gt;        if (oNode.childNodes) {&lt;br /&gt;            curch = oNode.childNodes;&lt;br /&gt;            for (var n = 0; n &lt; curch.length; n++) resetinputs(curch[n]);&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;    else {&lt;br /&gt;        curch = oNode.childNodes;&lt;br /&gt;        for (var i = 0; i &lt; curch.length; i++) { resetinputs(curch[i]) };&lt;br /&gt;    }&lt;br /&gt;    return 1;   &lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3440514228829272358-5916974021841843054?l=kopilkaz.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/kopilkaz/~4/6PKG6nQL4Rk" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/kopilkaz/~3/6PKG6nQL4Rk/javascript-dom.html</link><author>noreply@blogger.com (Сергей Истомин)</author><thr:total>0</thr:total><feedburner:origLink>http://kopilkaz.blogspot.com/2009/04/javascript-dom.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-3440514228829272358.post-7976419006948482876</guid><pubDate>Sat, 18 Apr 2009 02:41:00 +0000</pubDate><atom:updated>2009-04-18T05:26:14.753-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Javascript</category><category domain="http://www.blogger.com/atom/ns#">IE</category><category domain="http://www.blogger.com/atom/ns#">hack</category><title>События Javascript на прозрачных элементах в IE 7 (Internet Explorer 7)</title><description>Мерзкий, гадкий, подлый осёл не дает перехватывать события на элементах страницы для которых стоит свойство &lt;span style="font-weight:bold;"&gt;background-color:transparent&lt;/span&gt;. У меня ушло немеряно времени что-бы отучить его от этого поведения, и заставить поймать мое событие.&lt;br /&gt;&lt;br /&gt;Хак:&lt;br /&gt;&lt;pre name="code" class="javascript"&gt;&lt;br /&gt;//Panel - это мой div&lt;br /&gt;//Проверяем, действительно ли это IE7&lt;br /&gt;if((document.all &amp;&amp; !window.opera &amp;&amp; window.XMLHttpRequest) ? true : false) {&lt;br /&gt;       //Делаем его мой див непрозрачным, ибо только непрозрачные контролы ловят события.&lt;br /&gt;       Panel.style.backgroundColor = "gray";&lt;br /&gt;//И делаем его прозрачным снова.&lt;br /&gt;       Panel.style.filter  = "alpha(opacity = 0)";&lt;br /&gt;   }&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Но у этого решения есть серьезный недостаток. Все вложенные элементы тоже становятся прозрачными!!! Хак приведенный ниже работает без этого недостатка:&lt;br /&gt;&lt;pre name="code" class="javascript"&gt;&lt;br /&gt;    /*IE HACK. It takes more than 40 hours for me.*/&lt;br /&gt;    if((document.all &amp;&amp; !window.opera &amp;&amp; window.XMLHttpRequest) ? true : false) {&lt;br /&gt;       Panel.style.background = "url(bogus)";&lt;br /&gt;    }&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Это решение найдено &lt;a href="http://getsatisfaction.com/livelabs/topics/mouse_events_not_captured_for_clear_overlays_in_ie_7"&gt;здесь&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3440514228829272358-7976419006948482876?l=kopilkaz.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/kopilkaz/~4/hIn4jAzXNck" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/kopilkaz/~3/hIn4jAzXNck/javascript-ie-7-internet-explorer-7.html</link><author>noreply@blogger.com (Сергей Истомин)</author><thr:total>2</thr:total><feedburner:origLink>http://kopilkaz.blogspot.com/2009/04/javascript-ie-7-internet-explorer-7.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-3440514228829272358.post-3969633458921020256</guid><pubDate>Sun, 05 Apr 2009 15:40:00 +0000</pubDate><atom:updated>2009-04-05T08:40:47.647-07:00</atom:updated><title /><description>Продолжаю скрещивать Semantic Web и ASP.Net MVC...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3440514228829272358-3969633458921020256?l=kopilkaz.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/kopilkaz/~4/6RExKj1rON0" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/kopilkaz/~3/6RExKj1rON0/semantic-web-asp.html</link><author>noreply@blogger.com (Сергей Истомин)</author><thr:total>0</thr:total><feedburner:origLink>http://kopilkaz.blogspot.com/2009/04/semantic-web-asp.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-3440514228829272358.post-8940237091075212680</guid><pubDate>Fri, 03 Apr 2009 23:16:00 +0000</pubDate><atom:updated>2009-04-03T16:16:38.226-07:00</atom:updated><title /><description>Очень тяжело вникать в суть онтологий.. Мозг клинит. Как  надо парсить случайные RDF данные?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3440514228829272358-8940237091075212680?l=kopilkaz.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/kopilkaz/~4/-HnR95d6jGk" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/kopilkaz/~3/-HnR95d6jGk/blog-post.html</link><author>noreply@blogger.com (Сергей Истомин)</author><thr:total>2</thr:total><feedburner:origLink>http://kopilkaz.blogspot.com/2009/04/blog-post.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-3440514228829272358.post-3886527274086030956</guid><pubDate>Thu, 02 Apr 2009 20:16:00 +0000</pubDate><atom:updated>2009-04-02T13:16:33.554-07:00</atom:updated><title /><description>Programmer: an organism that turns coffee into software&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3440514228829272358-3886527274086030956?l=kopilkaz.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/kopilkaz/~4/1OzPNkf5qpE" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/kopilkaz/~3/1OzPNkf5qpE/programmer-organism-that-turns-coffee.html</link><author>noreply@blogger.com (Сергей Истомин)</author><thr:total>0</thr:total><feedburner:origLink>http://kopilkaz.blogspot.com/2009/04/programmer-organism-that-turns-coffee.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-3440514228829272358.post-1728699929000061276</guid><pubDate>Sat, 21 Mar 2009 14:53:00 +0000</pubDate><atom:updated>2009-03-22T17:26:43.789-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">.net</category><category domain="http://www.blogger.com/atom/ns#">C#</category><category domain="http://www.blogger.com/atom/ns#">ASP.Net</category><title>URL rewritintg а точнее routing в ASP.Net 3.5</title><description>Все, что необходимо знать по этой теме прекрасно описано в статье &lt;a href="http://chriscavanagh.wordpress.com/2008/03/11/aspnet-routing-goodbye-url-rewriting/"&gt;ASP.Net routing... Goodby URL rewriting?&lt;/a&gt;  Криса Каванагса (Интересно правильно ли я транскрибировал его фамилию? :) &lt;div&gt;И здесь я просто кратко повторю:&lt;/div&gt;&lt;br /&gt;&lt;div&gt;Первым делом надо добавить в проект ссылки на сборки&lt;span class="Apple-style-span" style="font-weight: bold;"&gt; System.Web.Routing&lt;/span&gt; и &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;System.Web.Abstrations&lt;/span&gt;&lt;/div&gt;&lt;pre name="code" class="C#"&gt;&lt;br /&gt;public class WebFormRouteHandler&lt;t&gt; : IRouteHandler where T : IHttpHandler, new()&lt;br /&gt;{&lt;br /&gt;    public string VirtualPath { get; set; }&lt;br /&gt;&lt;br /&gt;    public WebFormRouteHandler(string virtualPath)&lt;br /&gt;    {&lt;br /&gt;        this.VirtualPath = virtualPath;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public IHttpHandler GetHttpHandler(RequestContext requestContext)&lt;br /&gt;    {&lt;br /&gt;        return (VirtualPath != null)&lt;br /&gt;            ? (IHttpHandler)BuildManager.CreateInstanceFromVirtualPath(VirtualPath, typeof(T))&lt;br /&gt;            : new T();&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;//Этот клас необходим для работы механизма роутинга в IIS 7&lt;br /&gt;public class RoutingHandler : UrlRoutingHandler&lt;br /&gt;{&lt;br /&gt;    protected override void VerifyAndProcessRequest(IHttpHandler httpHandler, HttpContextBase httpContext)&lt;br /&gt;    {&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/t&gt;&lt;/pre&gt;&lt;div&gt;Чтобы роутинг заработал в IIS7 Необходимо выполнить ряд дополнительных действий&lt;ul&gt;&lt;br /&gt;&lt;li&gt;Вставить в &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;web.config&lt;/span&gt;, в раздел&lt;span class="Apple-style-span" style="font-weight: bold;"&gt; system.webServer &lt;/span&gt;в теге&lt;span class="Apple-style-span" style="font-weight: bold;"&gt; modules&lt;/span&gt; следующую строчку:&lt;br /&gt;&lt;pre name="code" class="xml"&gt;&lt;br /&gt;&lt;add name="UrlRoutingModule" type="System.Web.Routing.UrlRoutingModule, System.Web.Routing, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"&gt;&lt;br /&gt;&lt;/add&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li&gt;В сам тег&lt;span class="Apple-style-span" style="font-weight: bold;"&gt; modules&lt;/span&gt; добавить атрибут&lt;br /&gt;&lt;pre name="code" class="xml"&gt;&lt;br /&gt;&lt;modules runallmanagedmodulesforallrequests="true"&gt;&lt;br /&gt;&lt;/modules&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li&gt;И последнее в том же разделе в тег &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;handlers&lt;/span&gt; добавить:&lt;br /&gt;&lt;pre name="code" class="xml"&gt;&lt;br /&gt;&lt;add name="UrlRoutingHandler" precondition="integratedMode" verb="*" path="UrlRouting.axd" type="SimpleRoutingTest.RoutingHandler, SimpleRoutingTest"&gt;&lt;br /&gt;&lt;/add&gt;&lt;/pre&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;br /&gt;Ну и теперь для счастливой жизни нам не хватает только следующего кода в файле &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;Global.asax&lt;/span&gt;&lt;br /&gt;&lt;pre name="code" class="C#"&gt;&lt;br /&gt;    protected void Application_Start(object sender, EventArgs e)&lt;br /&gt;    {&lt;br /&gt;        RegisterRoutes(RouteTable.Routes);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public static void RegisterRoutes(RouteCollection routes)&lt;br /&gt;    {&lt;br /&gt;        // Note: Change the URL to "{controller}.mvc/{action}/{id}" to enable&lt;br /&gt;        //       automatic support on IIS6 and IIS7 classic mode&lt;br /&gt;&lt;br /&gt;        var routeHandler = new WebFormRouteHandler&lt;page&gt;("~/MyPage.aspx");&lt;br /&gt;&lt;br /&gt;        routes.Add(new Route("{page}", routeHandler));&lt;br /&gt;        routes.Add(new Route("AccountServices/{page}", routeHandler));&lt;br /&gt;        routes.Add(new Route("Default.aspx", routeHandler));&lt;br /&gt;    }&lt;br /&gt;&lt;/page&gt;&lt;/pre&gt;&lt;div&gt;Перед тем как использовать рекомендую так-же прочитать&lt;br /&gt;&lt;a href="http://haacked.com/archive/2008/03/11/using-routing-with-webforms.aspx"&gt;&lt;br /&gt;Using routing with WEbforms &lt;/a&gt;. Дабы спастись от злых хакеров&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3440514228829272358-1728699929000061276?l=kopilkaz.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/kopilkaz/~4/QbW6sbncvhI" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/kopilkaz/~3/QbW6sbncvhI/url-rewritintg-routing-aspnet-35.html</link><author>noreply@blogger.com (Сергей Истомин)</author><thr:total>0</thr:total><feedburner:origLink>http://kopilkaz.blogspot.com/2009/03/url-rewritintg-routing-aspnet-35.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-3440514228829272358.post-6266032514833846246</guid><pubDate>Sat, 21 Mar 2009 00:11:00 +0000</pubDate><atom:updated>2009-03-20T19:31:50.110-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">C#</category><category domain="http://www.blogger.com/atom/ns#">ASP.Net</category><title>Получаем абсолютный путь к файлу в аттрибуте action тега form  в ASP.Net</title><description>Так уж устроена работа программиста, что периодически приходиться спотыкаться на тривиальнейших вещах. И вот споткнувшись, обязательно во время выполнения черезвычайно срочного заказа, который надо было сдать позавчера, приходиться сидеть по многу часов подряд, и искать способ обойти какую-нибудь очередную хрень. За это время, заказчик успевает плюнуть на тебя и уходит на всегда. А ты продолжаешь сидеть и пытаешься понять, где же тебя...&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Так и в этот раз. Оказалось, что атрибут action тега form возвращаемый aspx страницей содержит в содержит в себе исключительно относительный путь к странице. И что делать? Могли ведь предусмотреть в webconfig-е параметр, например, AbsoluteURLs = true, который бы заменял в случае необходимости относительные пути на абсолютные? И где он? Может я просто про него не знаю?&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Ну а теперь собственно решение.&lt;/div&gt;&lt;div&gt;В папочке App_Browsers создаем файл Form.browser. В этот файл помещаем следующий код:&lt;/div&gt;&lt;pre name="code" class="xml"&gt;&lt;br /&gt;&lt;browsers&gt;&lt;br /&gt;&lt;browser refid="Default"&gt;&lt;br /&gt;&lt;controladapters&gt;&lt;br /&gt; &lt;adapter controltype="System.Web.UI.HtmlControls.HtmlForm" adaptertype="WebApplication1.FormRewriterControlAdapter"&gt;&lt;br /&gt;&lt;/adapter&gt;&lt;/controladapters&gt;&lt;br /&gt;&lt;/browser&gt;&lt;br /&gt;&lt;/browsers&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;После этого мы созадем классы FormRewriterControlAdapter и RewriteFormHtmlTextWriter со следующим содержимым:&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;pre name="code" class="C#"&gt;&lt;br /&gt;namespace WebApplication1&lt;br /&gt;{&lt;br /&gt;   public class FormRewriterControlAdapter : System.Web.UI.Adapters.ControlAdapter&lt;br /&gt;   {&lt;br /&gt;       protected override void Render(System.Web.UI.HtmlTextWriter writer)&lt;br /&gt;       {&lt;br /&gt;           base.Render(new RewriteFormHtmlTextWriter(writer));&lt;br /&gt;       }&lt;br /&gt;&lt;br /&gt;       public class RewriteFormHtmlTextWriter : HtmlTextWriter&lt;br /&gt;       {&lt;br /&gt;           public RewriteFormHtmlTextWriter(HtmlTextWriter writer)&lt;br /&gt;               : base(writer)&lt;br /&gt;           {&lt;br /&gt;               this.InnerWriter = writer.InnerWriter;&lt;br /&gt;           }&lt;br /&gt;&lt;br /&gt;           public override void WriteAttribute(string name, string value, bool fEncode)&lt;br /&gt;           {&lt;br /&gt;               if (name == "action")&lt;br /&gt;               {&lt;br /&gt;                   HttpContext Context = HttpContext.Current;&lt;br /&gt;&lt;br /&gt;                   if (Context.Items["ActionAlreadyWritten"] == null)&lt;br /&gt;                   {&lt;br /&gt;                       Uri url = Context.Request.Url;&lt;br /&gt;                     &lt;br /&gt;                       value = ((new StringBuilder()).AppendFormat("http://{0}:{1}{2}", url.Host, url.Port, Context.Request.RawUrl)).ToString();&lt;br /&gt;                       Context.Items["ActionAlreadyWritten"] = true;&lt;br /&gt;                   }&lt;br /&gt;               }&lt;br /&gt;               base.WriteAttribute(name, value, fEncode);&lt;br /&gt;           }&lt;br /&gt;       }&lt;br /&gt;   }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;&lt;br /&gt;Вуаля. Сейчас если соберусь, выложу способ замены относительных путей на абсолютные в других частях aspx. &lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3440514228829272358-6266032514833846246?l=kopilkaz.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/kopilkaz/~4/-YsARWqgjZ0" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/kopilkaz/~3/-YsARWqgjZ0/action-form-aspnet.html</link><author>noreply@blogger.com (Сергей Истомин)</author><thr:total>0</thr:total><feedburner:origLink>http://kopilkaz.blogspot.com/2009/03/action-form-aspnet.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-3440514228829272358.post-1859482679545279144</guid><pubDate>Fri, 13 Mar 2009 19:17:00 +0000</pubDate><atom:updated>2009-03-20T19:34:33.376-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">.net</category><category domain="http://www.blogger.com/atom/ns#">C#</category><category domain="http://www.blogger.com/atom/ns#">Silverlight</category><title>Загрузка XAML во время выполнения</title><description>Загружаем элементы Silverlight из стороннего XAML файла.&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="C#"&gt;private Canvas GetControlFromFile()&lt;br /&gt;{&lt;br /&gt;Uri uri = new Uri("Hands.xaml", UriKind.Relative);&lt;br /&gt;&lt;br /&gt;System.Windows.Resources.StreamResourceInfo streamInfo = Application.GetResourceStream(uri);&lt;br /&gt;if ((streamInfo != null) &amp;amp;&amp;amp; (streamInfo.Stream != null))&lt;br /&gt;  {&lt;br /&gt;  using (System.IO.StreamReader reader = new StreamReader(streamInfo.Stream))&lt;br /&gt;      {&lt;br /&gt;          return XamlReader.Load(reader.ReadToEnd()) as Canvas;&lt;br /&gt;      }&lt;br /&gt;  }&lt;br /&gt;return null;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Полученный элемент добавляем к другому элементу&lt;br /&gt;&lt;pre name="code" class="C#"&gt;&lt;br /&gt;LayoutRoot.Children.Add(GetControlFromFile);&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3440514228829272358-1859482679545279144?l=kopilkaz.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/kopilkaz/~4/wx0NkFR-pmw" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/kopilkaz/~3/wx0NkFR-pmw/silverlight-xml.html</link><author>noreply@blogger.com (Сергей Истомин)</author><thr:total>0</thr:total><feedburner:origLink>http://kopilkaz.blogspot.com/2009/03/silverlight-xml.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-3440514228829272358.post-6723327031523618894</guid><pubDate>Sun, 01 Mar 2009 13:04:00 +0000</pubDate><atom:updated>2009-03-01T05:06:28.305-08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">SPARQL</category><category domain="http://www.blogger.com/atom/ns#">rdf</category><category domain="http://www.blogger.com/atom/ns#">Twitter</category><title>Turn Twitter Into Your Personal Assistant</title><description>A few simple conventions, together with &lt;a href="http://www.w3.org/RDF/" target="_blank"&gt;RDF&lt;/a&gt;  and &lt;a href="http://www.w3.org/TR/rdf-sparql-query/" target="_blank"&gt;SPARQL&lt;/a&gt;, can turn your Twitter feeds into rich information streams, which you can then use for a more productive microblogging experience.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://www.devx.com/semantic/Article/40869"&gt;Читаем тут&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Помоему это интересно..&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3440514228829272358-6723327031523618894?l=kopilkaz.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/kopilkaz/~4/KhVmhOI2neU" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/kopilkaz/~3/KhVmhOI2neU/turn-twitter-into-your-personal.html</link><author>noreply@blogger.com (Сергей Истомин)</author><thr:total>0</thr:total><feedburner:origLink>http://kopilkaz.blogspot.com/2009/03/turn-twitter-into-your-personal.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-3440514228829272358.post-8678135300430753236</guid><pubDate>Sun, 01 Mar 2009 10:36:00 +0000</pubDate><atom:updated>2009-03-01T15:39:15.481-08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">аннотация</category><category domain="http://www.blogger.com/atom/ns#">ссылки</category><category domain="http://www.blogger.com/atom/ns#">semantic web</category><title>Ссылки по SW</title><description>&lt;span style="font-weight: bold;font-size:130%;"&gt;Аннотация&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://wiki.stasis-project.net/Wiki.jsp?page=Annotation#ref-Annotation-2"&gt;Stasis Wiki&lt;/a&gt; - коротко об аннотации. На сайте кроме этого много другой полезной информации.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.w3.org/2001/Annotea/"&gt;Anotea&lt;/a&gt; - Анотация от W3C&lt;br /&gt;&lt;br /&gt;&lt;a href="http://nazou.fiit.stuba.sk/home/misc/itat_nazou_ontea.pdf"&gt;OnTeA: Semi-automatic Ontology based TextAnnotation Method &lt;/a&gt;- Чрезвычайно позновательный документ о методах реализации анотирования.&lt;br /&gt;&lt;blockquote&gt;In this paper we describe a solution for the ontology based text annotation (OnTeA) tool. The tool analyzes a document or text using regular expression patterns and detects equivalent semantic elements according to the defined domain ontology.&lt;/blockquote&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;"&gt;&lt;br /&gt;Просто ссылки&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.w3.org/2001/sw/"&gt;W3C Semantic Web Activity&lt;/a&gt; - Самая ЖЫРНАЯ ссылка&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.semanticfocus.com/blog/entry/title/30-semantic-web-introductions-references-guides-and-tutorials/"&gt;30+ Semantic Web Introductions, References, Guides, and Tutorials&lt;/a&gt; - Кладезь. Найден при помощи HeadUp. ;) &lt;blockquote&gt;"Matrix has you" &lt;/blockquote&gt;&lt;a href="http://www.semanticuniverse.com/"&gt;Semantic Universe&lt;/a&gt; - Очень полезный источник всего и вся.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://librdf.org/"&gt;Redland RDF Libraries&lt;/a&gt; - библиотеки для работы c SW на C&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.xml.com/pub/a/2005/11/16/introducing-sparql-querying-semantic-web-tutorial.html"&gt;Introducing SPARQL: Querying the Semantic Web&lt;/a&gt;  - Введение в SPARQL: Запросы к Смантическому Веб-у&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3440514228829272358-8678135300430753236?l=kopilkaz.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/kopilkaz/~4/z74bo6G5sfU" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/kopilkaz/~3/z74bo6G5sfU/sw.html</link><author>noreply@blogger.com (Сергей Истомин)</author><thr:total>0</thr:total><feedburner:origLink>http://kopilkaz.blogspot.com/2009/03/sw.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-3440514228829272358.post-5404365882764689852</guid><pubDate>Sun, 01 Mar 2009 01:05:00 +0000</pubDate><atom:updated>2009-03-01T03:53:35.939-08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">аннотация</category><category domain="http://www.blogger.com/atom/ns#">semantic web</category><category domain="http://www.blogger.com/atom/ns#">rdf</category><category domain="http://www.blogger.com/atom/ns#">owl</category><title>Аннотирование семантических данных</title><description>перевод фрагмента статьи &lt;a href="http://www.dcs.shef.ac.uk/%7Efabio/paperi/webSemantics2006.pdf"&gt;Semantic annotation for knowledge management: Requirements and a survey of the state of the art&lt;/a&gt;&lt;br /&gt;&lt;h2&gt;Требования&lt;/h2&gt;&lt;p&gt;Разработка модели Управления Знаниями ориентированная на документы, потребовала от нас формулировки требований к системам аннотации семантических данных. Они совпадают в какой-то степени с требованиями изложенных Handschuh и др.. [15], но существуют также различия. Например, мы не касались таких проблем, как эффективность и правильные ссылки, хотя мы и признаем, что это важно. Вместо этого, мы рассмотрели задачу с четырех точек зрения: онтологий, документов, аннотаций, которые связывают онтологии и документы, а также пользователей системы. Все эти точки зрения предполагают одно или несколько требований, каждое из которых, как правило, объединяет несколько связанных потребностей. Например, с точки зрения онтологий появляется требование поддержки инструментами множества меняющихся онтологий, а с точки зрения документов мы видим необходимость поддержки повторного использования и контроля версий документов.&lt;/p&gt;&lt;p&gt;[Ниже перечислены семь требований к инструментам анотации - прим.пер.] &lt;/p&gt;&lt;h3&gt;1. Использование стандартных форматов&lt;/h3&gt;&lt;p&gt;Использование стандартных форматов предпочтительнее, где это возможно, поскольку затраты на маркировку ресурсов значительны - стандартизация создаст прочную основу для будущего, так-так новые инструменты, услуги и т.д., которые не были предусмотрены при первоначальной семантической аннотации, смогут легко использовать такие ресурсы. Соответствие стандартам, также освобождает компании от ограничений связанных с использованием лицензионных форматов при выборе программного обеспечения по управлению знаниями Эти преимущества могут быть отнесены к системам в целом.&lt;br /&gt;В системах аннотации, в частности, стандартные форматы могут стать тем связующим механизмом, который позволит обеспечить совместный доступ к распределенным ресурсам, а так же объединит усилия пользователей и организации в  предоставлении доступа к аннотациям. Активность W3C в развитии и поощрении международных стандартов в области Семантического Веба, убеждает нас в том, что  в области управления знаниями стоит следовать этим путем. Два вида стандартов являются обязательными, стандарты для описания онтологий,&lt;br /&gt;такие как OWL и стандарты аннотации такие как W3C схема аннотации RDF .&lt;/p&gt;&lt;h3&gt;2. Ориентированный на пользователя / совместную работу дизайн&lt;/h3&gt;&lt;p&gt;Аннотирование может стать узким местом, если оно выполняется  специально-обученными людьми и занимает много их времени. Хорошей практикой будет иметь  единый интерфейс ввода данных, например когда инструмент позволяющий пользователю аннотировать документы интегрирован с инструментами для их чтения, создания, редактирования, и распространения.&lt;br /&gt;Дизайн системы, так же, нуждается в облегчении взаимодействия между пользователями, что является ключевым аспектом обработки знаний экспертами в различных областях, способствуя повторному использования "умных" документов. Мы уже определили стандартные форматы, как предпосылку для обмена аннотациями.&lt;br /&gt; Другие вопросы сотрудничества включают реализацию системы контроля над тем, что разделять и с кем. Например, в медицинском контексте, врачи могли бы обмениваться всей информацией о пациентах между собой, но предоставлять только общую, обезличенную информацию в отдел планирования. Это подводит нас к вопросам, связанным с доверием, источниками данных и правами доступа к ним. Внутренние сети обеспечивают более контролируемую среду для отслеживания источников аннотаций, чем дикий Веб, но и в этом случае политика доступа к данным является важным вопросом для организаций, которые неизбежно касаются вопросов конфиденциальности данных клиентов и сотрудников.&lt;/p&gt;&lt;h3&gt;3. Поддержка онтологий (множества онтологий и их развития) &lt;/h3&gt;&lt;p&gt;В дополнение к поддержке соответствующих форматов онтологий, средства аннотации должны быть в состоянии поддерживать большое количество онтологий. Например, в медицинском контексте, это может быть одна онтология для общих метаданные о пациенте и несколько других технических онтологиях, связанных с диагностикой и лечением. Либо онтологии должны быть объединены либо аннотации должны четко декларировать, на какие онтологии они ссылаются.&lt;br /&gt;Кроме того, система должна уметь обрабатывать изменения, внесенные в онтологии с течением времени, как, например, включение новых классов или изменение существующих. В этом случае, проблема заключается в обеспечении соответствия между онтологиями и аннотациями в плане изменения онтологий.&lt;br /&gt;Один из важных аспектов проектирования среды аннотации, определить, как изменения должны быть отражены в базе знаний аннотированных документов, и не появляется ли в измененных онтологиях конфликтов с существующими аннотациями.&lt;/p&gt;&lt;h3&gt;4. Поддержка разнообразных форматов документов&lt;/h3&gt;&lt;p&gt;Стандарты Семантического Веб для аннотаций, как правило, предполагают, что аннотируемые документы представлены в наиболее часто используемых форматах веб-документов, таких как HTML или XML. Например, Annotea для определения местоположения аннотации в документе использует XPointers. Такой подход имеет ограниченную полезность для управления знаниями.&lt;br /&gt;Документы могут иметь самые разные форматы, включая файлы текстовых процессоров, электронные таблицы, графические файлы и сложные смеси различных форматов. И хотя это рождает техническую проблему, требующую большого количества исследований, возможность использования разнообразных форматов документов является необходимым условием для массового использования аннотаций на практике.&lt;/p&gt;&lt;h3&gt;5. Отселживание изменений в документ ( связь документа и аннотации )&lt;/h3&gt;&lt;p&gt;Случается онтологии меняются, но документы меняются гораздо чаще. Примером могут служить спецификации консорциума W3, которые проходят через множество ревизий. Требование 3 сосредотачивается на проблеме сохранения связанности онтологий и аннотаций. Данное требование, касается поддержания связи аннотации с текстом документа, т.е. обслуживания указателей из аннотации на информацию в тексте.&lt;br /&gt;Вопрос - "Что должно происходит с аннотацией документа, когда он изменяется?", имеет как технические стороны, так и стороны касающиеся логики самого приложения. Если якорь к аннотации в общедоступном документе удаляется кем-то, при редактировании, надо ли информировать автора этого документа, чтобы он мог повторно поставить якорь, а быть может и удалить соответствующую аннотацию, или документ не может быть изменен ни кем кроме автора? Надо ли, в общем случае, приводить аннотации в соответствие с новым вариантом документа, или же версии аннотации необходимо поддерживать параллельно с версиями документа? Например, если договор изменяется под нового клиента, аннотации указывающие на правовые онтологии должны быть сохранены, но аннотации, в которых говорится о предыдущих клиентах, надо удалить. Как может быть достигнуто такое выборочное изменение аннотаций?&lt;br /&gt;Инструмент аннотации должен уметь помогать пользователю грамотно изменять необходимые аннотации при изменении документа. &lt;/p&gt;&lt;h3&gt;6. Хранение аннотаций&lt;/h3&gt;&lt;p&gt;Модель Семантического Веб-а предполагает, что аннотации будут храниться отдельно от первоначального документа, в то время как модель "текстового процессора" предполагает, что комментарии, хранятся в качестве неотъемлемой часть документа, и могут быть показаны или скрыты в зависимости от предпочтений пользователя. Модель Семантического Веб-а, в которой содержание отделено от семантики, особенно хорошо работает в Веб, где авторы аннотаций не обязательно имеют контроль над документами, которые они аннотировали. Этот аспект следует учитывать при работе с документами некоторых форматов, которые могут уже содержать в себе аннотации.&lt;/p&gt;&lt;h3&gt;7. Автоматизация&lt;/h3&gt;&lt;p&gt;Другим аспектом облегчения работы с инструментами аннотации является создание условий для автоматической разметки наборов документов, в целях облегчения аннотации больших собраний документов. Чтобы добиться этого, большое значение имеет интеграция технологий добычи знаний в среду аннотации. Это позволяет автоматически идентифицировать сущности, которые являются экземплярами классов и отношения между классами. Надо отметит, что автоматические инструменты могут помочь эффективно справится с аннотированием даже неподготовленному пользователю, для этого могут использоваться, например методы обработки естественного языка (NLP).&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3440514228829272358-5404365882764689852?l=kopilkaz.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/kopilkaz/~4/IKuRuI8GJJc" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/kopilkaz/~3/IKuRuI8GJJc/blog-post_28.html</link><author>noreply@blogger.com (Сергей Истомин)</author><thr:total>0</thr:total><feedburner:origLink>http://kopilkaz.blogspot.com/2009/02/blog-post_28.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-3440514228829272358.post-5196994510038884082</guid><pubDate>Tue, 10 Feb 2009 03:38:00 +0000</pubDate><atom:updated>2009-02-11T00:06:40.492-08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">System.Xml</category><category domain="http://www.blogger.com/atom/ns#">.net</category><category domain="http://www.blogger.com/atom/ns#">C#</category><title>Атрибут xmlns</title><description>При попытке выполнить следующий код:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;XmlWriter output;&lt;br /&gt;output.WriteStartElement("sparql");&lt;br /&gt;output.WriteAttributeString("xmlns", "http://www.w3.org/2005/sparql-results#");&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;получаем исключение:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;System.Xml.XmlException: Префикс "" не может быть переопределен с "" на "http://www.w3.org/2005/sparql-results#" внутри того же начального тега элемента.&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;Это все потому, что правильно делать вот так:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;XmlWriter output;&lt;br /&gt;output.WriteStartElement("sparql", "http://www.w3.org/2005/sparql-results#");&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;Ошибка была обнаружена в библиотеке &lt;a href="http://razor.occams.info/code/semweb/"&gt;SemWeb&lt;/a&gt;. Теперь в репозитории лежит уже исправленная версия.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3440514228829272358-5196994510038884082?l=kopilkaz.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/kopilkaz/~4/oQsLEATDIgk" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/kopilkaz/~3/oQsLEATDIgk/xmlns.html</link><author>noreply@blogger.com (Сергей Истомин)</author><thr:total>0</thr:total><feedburner:origLink>http://kopilkaz.blogspot.com/2009/02/xmlns.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-3440514228829272358.post-8574360744070582215</guid><pubDate>Mon, 02 Feb 2009 02:26:00 +0000</pubDate><atom:updated>2009-02-13T23:49:19.828-08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">SemWeb</category><category domain="http://www.blogger.com/atom/ns#">.net</category><category domain="http://www.blogger.com/atom/ns#">C#</category><title>Вывод результата запроса в SemWeb</title><description>&lt;p style="text-align: left;"&gt;Для того чтобы сериализовать результаты выполнения запроса к RDF хранилищу в нужный нам формат в пространстве имен SemWeb.Query библиотеки SemWeb предусмотрен абстрактный класс QueryResultSync, а так же реализованы несколько его наследников:&lt;/p&gt;&lt;ol&gt;&lt;li&gt;SparqlXmlQuerySynk, возвращающий результат запроса в виде XML документа содержащего исходный запрос и результат.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;HTMLQuerySink, - возвращает результат в виде таблицы HTML&lt;br /&gt;&lt;/li&gt;&lt;li&gt;CSVQuerySynk - как нетрудно догадаться возвращает результат в строку разделенную запятыми&lt;/li&gt;&lt;li&gt;QueryResultBuffer - класс который сохраняет результаты в три коллекции Variables, Bindings, и Coments&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;В случае если функциональности перечисленных классов нехватает для того чтобы возвратить результаты в необходимой нам форме, можно написать свою реализацию класса QueryResultSyn.&lt;/p&gt;&lt;code&gt;&lt;br /&gt;public abstract class QueryResultSink&lt;br /&gt;{&lt;br /&gt;public virtual void Init(Variable[] variables){}&lt;br /&gt;public abstract bool Add(VariableBindings result);&lt;br /&gt;public virtual void Finished() {}&lt;br /&gt;public virtual void AddComments(string comments) {}&lt;br /&gt;}&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Примеры реализации лучше всего смотреть в коде самой библиотеки.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3440514228829272358-8574360744070582215?l=kopilkaz.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/kopilkaz/~4/POe0AXVJs3E" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/kopilkaz/~3/POe0AXVJs3E/semweb.html</link><author>noreply@blogger.com (Сергей Истомин)</author><thr:total>0</thr:total><feedburner:origLink>http://kopilkaz.blogspot.com/2009/02/semweb.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-3440514228829272358.post-966115793094224749</guid><pubDate>Mon, 02 Feb 2009 00:57:00 +0000</pubDate><atom:updated>2009-02-01T17:35:59.244-08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">синглтон</category><category domain="http://www.blogger.com/atom/ns#">.net</category><category domain="http://www.blogger.com/atom/ns#">многопоточность</category><category domain="http://www.blogger.com/atom/ns#">C#</category><title>Cинглтон и многопоточность</title><description>Допустим у нас есть некий синглтон, который сохраняет свои состояния и работает как конечный автомат. И состояний этих у него много. Но допустим нам хотелось бы воспроизвести результаты его поведения в начальном состоянии. А как его в это состояние вернуть непонятно.&lt;br /&gt;В этом случае иногда может выручить многопоточность. &lt;br /&gt;&lt;code&gt;&lt;br /&gt;public delegate string GetXmlFromTestedDelegate(Person[] persons);&lt;br /&gt;private string GetXmlFromTested(Params[] params)&lt;br /&gt;{&lt;br /&gt;Singletone.Instance.Import(params);&lt;br /&gt;return Singletone.GetAllInXml();&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;public void GetResultInXml()&lt;br /&gt;{&lt;br /&gt;GetXmlFromTestedDelegate asyncDelegate = GetXmlFromTested;&lt;br /&gt;IAsyncResult result = asyncDelegate.BeginInvoke(Params, null, null);&lt;br /&gt;while (!result.IsCompleted)&lt;br /&gt;{&lt;br /&gt; Thread.Sleep(50);&lt;br /&gt;}&lt;br /&gt;string xml = asyncDelegate.EndInvoke(result);&lt;br /&gt;&lt;br /&gt;Assert.That(xml,Is.EqualTo(GetEtalonXML()));&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;А может и не выручить... Это я к чему собственно?? А к тому, что не всякая реализация синглтона действительно синглтон.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3440514228829272358-966115793094224749?l=kopilkaz.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/kopilkaz/~4/kiyV4ZMJ88M" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/kopilkaz/~3/kiyV4ZMJ88M/blog-post.html</link><author>noreply@blogger.com (Сергей Истомин)</author><thr:total>0</thr:total><feedburner:origLink>http://kopilkaz.blogspot.com/2009/02/blog-post.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-3440514228829272358.post-5482123792423086980</guid><pubDate>Sat, 31 Jan 2009 01:53:00 +0000</pubDate><atom:updated>2009-01-30T18:17:27.539-08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">.net</category><category domain="http://www.blogger.com/atom/ns#">C#</category><category domain="http://www.blogger.com/atom/ns#">ASP.Net</category><title>Как узнать полный путь к файлу в приложении на ASP.Net?</title><description>&lt;p&gt;Исчерпывающее руководство по этому вопросу можно найти &lt;a href="http://msdn.microsoft.com/ru-ru/library/ms178116.aspx" target="_blank"&gt;здесь&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Основное же – это использование метода MapPath(), который прячется в таких классах как Control, Page, Server.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3440514228829272358-5482123792423086980?l=kopilkaz.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/kopilkaz/~4/t7Xs0TnujZc" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/kopilkaz/~3/t7Xs0TnujZc/aspnet.html</link><author>noreply@blogger.com (Сергей Истомин)</author><thr:total>0</thr:total><feedburner:origLink>http://kopilkaz.blogspot.com/2009/01/aspnet.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-3440514228829272358.post-4186272533040811360</guid><pubDate>Fri, 30 Jan 2009 03:40:00 +0000</pubDate><atom:updated>2009-02-01T17:19:38.463-08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">System.Reflection</category><category domain="http://www.blogger.com/atom/ns#">.net</category><category domain="http://www.blogger.com/atom/ns#">C#</category><title>Перебираем все свойства класса</title><description>&lt;p&gt;Иногда возникает задача перебрать все свойства некоторого класса. Задача очень просто решается при помощи рефлексии: &lt;code&gt;person.GetType().GetProperties();&lt;/code&gt; &lt;/p&gt;  &lt;p&gt;Этот код возвращает коллекцию PropertyInfo, из которой мы можем достать все необходимое.&lt;/p&gt;  &lt;p&gt;А вот пример кода возвращающего значение свойства объекта по имени свойства: &lt;code&gt;person.GetType().GetProperty(property.Name).GetValue(person, null)&lt;/code&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3440514228829272358-4186272533040811360?l=kopilkaz.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/kopilkaz/~4/k3qgN41ElDk" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/kopilkaz/~3/k3qgN41ElDk/blog-post.html</link><author>noreply@blogger.com (Сергей Истомин)</author><thr:total>0</thr:total><feedburner:origLink>http://kopilkaz.blogspot.com/2009/01/blog-post.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-3440514228829272358.post-5951163663619524385</guid><pubDate>Thu, 29 Jan 2009 16:32:00 +0000</pubDate><atom:updated>2009-01-29T19:44:58.753-08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">System.Xml</category><category domain="http://www.blogger.com/atom/ns#">.net</category><category domain="http://www.blogger.com/atom/ns#">C#</category><title>Вывод XML в виде форматированного текста</title><description>Иногда возникает задача вывести некий Xml документ в строку, а иногда даже в виде текста на HTML страничке. Я нашел два похожих варианта решения.&lt;br /&gt;&lt;br /&gt;Вариант с использованием XmlTextWriter&lt;br /&gt;&lt;br /&gt;&lt;code&gt;StringBuilder builder = new StringBuilder();&lt;br /&gt;XmlTextWriter wr = new XmlTextWriter(new StringWriter(builder));&lt;br /&gt;wr.Indentation = 2;&lt;br /&gt;wr.IndentChar = '\t';&lt;br /&gt;wr.Formatting = Formatting.Indented;&lt;br /&gt;&lt;br /&gt;//Этот запрос заполняет строку builder xml данными форматированными символами "/t и /n"&lt;br /&gt;ExecuteQuery(query, new SparqlXmlQuerySink(wr));&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;string s = builder.ToString();&lt;br /&gt;//А это нам понадобилось чтобы получить возможность вставить строку в HTML&lt;br /&gt;s.Replace("\t", "&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;").Replace("&lt;", "&amp;amp;lt;").Replace("&gt;", "&amp;amp;gt;").Replace("\n", "br")           &lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Вариант с использованием XmlWriter&lt;br /&gt;&lt;br /&gt;&lt;code&gt;StringBuilder builder = new StringBuilder();&lt;br /&gt;XmlWriterSettings settings = new XmlWriterSettings();&lt;br /&gt;settings.Indent = true;&lt;br /&gt;settings.IndentChars = ("\t");&lt;br /&gt;&lt;br /&gt;XmlWriter xmlWriter = XmlWriter.Create(builder, settings);&lt;br /&gt;&lt;br /&gt;//Заполняем builder XML кодом и опять получаем строку форматированную символами "/t и /n"     &lt;br /&gt;manager.Write(xmlWriter);&lt;br /&gt;&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3440514228829272358-5951163663619524385?l=kopilkaz.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/kopilkaz/~4/TjDW6txzDuM" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/kopilkaz/~3/TjDW6txzDuM/xml.html</link><author>noreply@blogger.com (Сергей Истомин)</author><thr:total>0</thr:total><feedburner:origLink>http://kopilkaz.blogspot.com/2009/01/xml.html</feedburner:origLink></item></channel></rss>

