وبلاگ شخصی آقای استثنایی

تبدیل داده های OSM به سه گانه های RDF

mahdi | 06 July, 2017 08:17

RDF اولین زبان وب معنایی است که یک چهارچوب برای توصیف منابع را فراهم می­کند. این زبان خانواده ای از توصیفات W3C است که به عنوان یک مدل داده­ ای فراداده طراحی شده است. داده های منتشر شده توسط OSM به صورت XML است. XML از نظر سطح انتزاع پایین تر از RDF است و راه ­های نحوی مختلفی برای نمایش یک جمله RDF در آن وجود دارد. بنابراین بر حسب نحوه نمایش، شیوه ارائه پرس و جو نیز متفاوت است. هرچند در حال حاضر استاندارد خاصی برای نمایش داده­های OSM در قالب XML وجود دارد اما چنانچه در آینده تغییراتی روی آن صورت گیرد، پرس و جو های طراحی شده بر روی آن دیگر قابل استفاده نخواهد بود. برای استخراج اطلاعات مورد نظر از زبان پرس و جوی  SPARQL بر روی داده­های RDF استفاده می­شود. در زیر نمونه ای از داده های OSM در قالب XML آورده شده است.
 

<node id="260124290" visible="true" version="6" changeset="6603724" timestamp="2010-12-10T10:29:20Z" user="kesler" uid="13908" lat="36.3225001" lon="59.5178539">

  <tag k="bench" v="yes"/>

  <tag k="bus" v="yes"/>

  <tag k="name" v="ایستگاه سید رضی"/>

  <tag k="public_transport" v="stop_position"/>

  <tag k="shelter" v="yes"/>

 </node>

<way id="23989292" visible="true" version="8" changeset="11928655" timestamp="2012-06-17T18:05:43Z" user="Claudius Henrichs" uid="18069">

  <nd ref="260096368"/>

  <nd ref="260096382"/>

  <nd ref="260096383"/>

  <nd ref="260096384"/>

  <nd ref="689360930"/>

  <tag k="highway" v="residential"/>

  <tag k="name" v="هنرستان ۱۹"/>

 </way>

<relation id="27278" visible="true" version="2" changeset="47136036" timestamp="2017-03-24T22:02:12Z" user="sebastic" uid="665748">

  <member type="way" ref="23992168" role="outer"/>

  <member type="way" ref="25415406" role="inner"/>

  <tag k="natural" v="water"/>

  <tag k="type" v="multipolygon"/>

 </relation>

کد تبدیل داده های OSM به سه گانه های RDF به زبان #C

 

Normal 0 false false false EN-US X-NONE AR-SA

            string prefix = "PREFIX wtlab: <http://wtlab.um.ac.ir/osm#> \nPREFIX geo: <http://www.w3.org/2003/01/geo/wgs84_pos#> \nPREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>\n";

 

            System.IO.StreamWriter fp = new System.IO.StreamWriter("map.ttl");

            fp.WriteLine(prefix);

 

            foreach (XElement nodeElement in XElement.Load("map.xml").Elements("node"))

            {

                

                fp.WriteLine("wtlab:"+nodeElement.Attribute("id").Value+" rdf:type"+" wtlab:Node.");

                fp.WriteLine("wtlab:" + nodeElement.Attribute("id").Value + " geo:lat " + nodeElement.Attribute("lat").Value+".");

                fp.WriteLine("wtlab:" + nodeElement.Attribute("id").Value + " geo:long " + nodeElement.Attribute("lon").Value + ".");

 

                foreach (XElement tagElement in nodeElement.Elements("tag"))

                {

                    fp.Write("wtlab:" + nodeElement.Attribute("id").Value);

                    fp.WriteLine(" wtlab:" + tagElement.Attribute("k").Value + " \"" + tagElement.Attribute("v").Value+"\".");

                }

             }

 

 

 

            foreach (XElement wayElement in XElement.Load("map.xml").Elements("way"))

            {

 

                fp.WriteLine("wtlab:" + wayElement.Attribute("id").Value + " rdf:type" + " wtlab:Way.");

                foreach (XElement tagElement in wayElement.Elements("tag"))

                {

                    fp.Write("wtlab:" + wayElement.Attribute("id").Value);

                    fp.WriteLine(" wtlab:" + tagElement.Attribute("k").Value + " \"" + tagElement.Attribute("v").Value + "\".");

                }

                foreach (XElement refElement in wayElement.Elements("nd"))

                {

                    fp.Write("wtlab:" + wayElement.Attribute("id").Value);

                    fp.WriteLine(" wtlab:hasNode" + " wtlab:"+refElement.Attribute("ref").Value + ".");

                }

 

            }

 

 

            foreach (XElement relationElement in XElement.Load("map.xml").Elements("relation"))

            {

 

                fp.WriteLine("wtlab:" + relationElement.Attribute("id").Value + " rdf:type" + " wtlab:Relation.");

                foreach (XElement memberElement in relationElement.Elements("member"))

                {

                    fp.Write("wtlab:" + relationElement.Attribute("id").Value);

                    if(memberElement.Attribute("type").Value == "node")

                        fp.WriteLine(" wtlab:hasNode wtlab:" + memberElement.Attribute("ref").Value + ".");

 

                    if (memberElement.Attribute("type").Value == "way")

                        fp.WriteLine(" wtlab:hasWay wtlab:" + memberElement.Attribute("ref").Value + ".");

 

                    if (memberElement.Attribute("type").Value == "relation")

                        fp.WriteLine(" wtlab:hasRelation wtlab:" + memberElement.Attribute("ref").Value + ".");

 

                }

                foreach (XElement tagElement in relationElement.Elements("tag"))

                {

 

                    fp.Write("wtlab:" + relationElement.Attribute("id").Value);

                    fp.WriteLine(" wtlab:" + tagElement.Attribute("k").Value + " \"" + tagElement.Attribute("v").Value + "\".");

 

                }

            }

 

            fp.Close();

        }

Normal 0 false false false EN-US X-NONE AR-SA

نمونه ای از نتیجه

 

 

Normal 0 false false false EN-US X-NONE AR-SA

PREFIX wtlab: <http:// wtlab.um.ac.ir/osm#>

PREFIX geo: <http://www.w3.org/2003/01/geo/wgs84_pos#>

PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>

 

wtlab:260124290 rdf:type wtlab:Node.

wtlab:260124290 geo:lat 36.3225001.

wtlab:260124290 geo:long 59.5178539.

wtlab:260124290 wtlab:bench "yes".

wtlab:260124290 wtlab:bus "yes".

wtlab:260124290 wtlab:name "ایستگاه سید رضی".

wtlab:260124290 wtlab:public_transport "stop_position".

wtlab:260124290 wtlab:shelter "yes".

 

wtlab:23989292 rdf:type wtlab:Way.

wtlab:23989292 wtlab:highway "residential".

wtlab:23989292 wtlab:name "هنرستان ۱۹".

wtlab:23989292 wtlab:hasNode wtlab:260096368.

wtlab:23989292 wtlab:hasNode wtlab:260096382.

wtlab:23989292 wtlab:hasNode wtlab:260096383.

wtlab:23989292 wtlab:hasNode wtlab:260096384.

wtlab:23989292 wtlab:hasNode wtlab:689360930.

 

wtlab:27278 rdf:type wtlab:Relation.

wtlab:27278 wtlab:hasWay wtlab:23992168.

wtlab:27278 wtlab:hasWay wtlab:25415406.

wtlab:27278 wtlab:natural "water".

wtlab:27278 wtlab:type "multipolygon".

 

Normal 0 false false false EN-US X-NONE AR-SA

نظرات

ارسال نظر
Info

توجه: از ارسال پيام هاي خصوصي در حالت لاگين براي نويسنده وبلاگ اجتناب نماييد.
در صورتی که در فرم ارسال نظر، نام شما توسط سیستم شناسایی شده باشد(در حالت لاگین) نظر شما بلافاصله منتشر خواهد شد.


در غیر اینصورت نظر شما پس از تایید توسط مالک وبلاگ منتشر خواهد شد.

 authimage
 
Accessible and Valid XHTML 1.0 Strict and CSS
Converted to use with ITS. Powered by FUMblog