Aklımda Kalası Kelimeler

* давайте работать вместе
* Zarf ve Mazruf, Zerafet(xHoyratlık) ile aynı kökten(za-ra-fe) gelir
* Bedesten
* Suç subuta ermiştir - Suç sabit olmuştur

20 Kasım 2013 Çarşamba

Xml Serileştirmede XmlArray, XmlArrayItem, XmlAttribute, XmlSerializer, XmlType, XmlEnum, XmlIgnore, XmlInclude, IsNullable vd. incelemesi

Kodun içinde notlarım var. Örnek msdn den.

using System.IO;
using System.Xml.Serialization;

public class Run
{
    public static void Main()
    {
        Run test = new Run();
        test.SerializeDocument("books.xml");
    }

    public void SerializeDocument(string filename)
    {
        // Creates a new XmlSerializer.
        XmlSerializer s =
        new XmlSerializer(typeof(MyRootClass));

        // Writing the file requires a StreamWriter.
        TextWriter myWriter = new StreamWriter(filename);

        // Creates an instance of the class to serialize. 
        MyRootClass myRootClass = new MyRootClass();

        /* Uses a basic method of creating an XML array: Create and 
        populate a string array, and assign it to the 
        MyStringArray property. */

        string[] myString = { "Hello", "world", "!" };
        myRootClass.MyStringArray = myString;

        /* Uses a more advanced method of creating an array:
           create instances of the Item and BookItem, where BookItem 
           is derived from Item. */
        Item item1 = new Item();
        BookItem item2 = new BookItem();

        // Sets the objects' properties.
        item1.ItemName = "Widget1";
        item1.ItemCode = "w1";
        item1.ItemPrice = 231;
        item1.ItemQuantity = 3;

        item2.ItemCode = "w2";
        item2.ItemPrice = 123;
        item2.ItemQuantity = 7;
        item2.ISBN = "34982333";
        item2.Title = "Book of Widgets";
        item2.Author = "John Smith";

        // Fills the array with the items.
        Item[] myItems = { item1, item2 };

        // Sets the class's Items property to the array.
        myRootClass.Items = myItems;

        /* Serializes the class, writes it to disk, and closes 
           the TextWriter. */
        s.Serialize(myWriter, myRootClass);
        myWriter.Close();
    }
}

// This is the class that will be serialized. 
public class MyRootClass
{
    private Item[] items;

    /* Here is a simple way to serialize the array as XML. Using the
       XmlArrayAttribute, assign an element name and namespace. The
       IsNullable property determines whether the element will be 
       generated if the field is set to a null value. If set to true,
       the default, setting it to a null value will cause the XML
       xsi:null attribute to be generated. */

    /* IsNullable = true 
            <NULLveOLUSTURULacak xsi:nil="true" xmlns="http://www.IsNullable.com" /> */
    [XmlElement(ElementName = "NULLveOLUSTURULacak", IsNullable = true, Namespace = "http://www.IsNullable.com")]
    public string IsNullable_true_ornegi;

    /* IsNullable = false (değer atanmazsa da false gibi çalışır) 
            'null değeri olduğu için xml elemanı oluşturulmadı' */
    [XmlElement(ElementName = "NULLveOLUSTURULMAYAcak", IsNullable = false, Namespace = "http://www.IsNullable.com")]
    public string IsNullable_false_ornegi;
    
    
    
    [XmlArray(ElementName = "bomBosDizi", Namespace = "http://www.nullDegerliDizi.com", IsNullable = true)]
    public string[] bosDizi;
    /* IsNullable = true olan XmlArray özellikli field sonucu:
            <bomBosDizi xsi:nil="true" xmlns="http://www.nullDegerliDizi.com" />
     */

    /// <summary>
    /// 
    /// XmlArray Özelliğinin BASİT şekli
    /// 
    /// </summary>
    [XmlArray(ElementName = "MyStrings", Namespace = "http://www.cpandl.com", IsNullable = true)]
    public string[] MyStringArray;
    /* En temel haliyle XmlArray aynı tip dizi elemanları için bir xml elemanı altında toplayacaktır.
       Sonuç:
        <MyStrings xmlns="http://www.cpandl.com">
          <string>Hello</string>
          <string>world</string>
          <string>!</string>
        </MyStrings>
     */


    [XmlArray(ElementName = "Dizi_Kok_Elemani")]
    [XmlArrayItem("Eleman_Etiketi")]
    public string[] stringDizi =  { "Hello", "world", "!" };
    /*
        <Dizi_Kok_Elemani>
          <Eleman_Etiketi>Hello</Eleman_Etiketi>
          <Eleman_Etiketi>world</Eleman_Etiketi>
          <Eleman_Etiketi>!</Eleman_Etiketi>
        </Dizi_Kok_Elemani>
     */


    /// <summary>
    /// 
    /// XmlArray Özelliğinin KARMAŞIK şekli
    /// 
    /// </summary>
    [XmlArrayItem(ElementName = "Item",     IsNullable = true, Type = typeof(Item),     Namespace = "http://www.cpandl.com"),
     XmlArrayItem(ElementName = "BookItem", IsNullable = true, Type = typeof(BookItem), Namespace = "http://www.cohowinery.com")]
    [XmlArray]
    public Item[] Items
    {
        get { return items; }
        set { items = value; }
    }
    /*
     Items propertysi Item cinsinden bir dizi alır.
     Yani hem Item, hem BookItem türü verileri alabilir.
     Serileştirilecek nesnenin Items elemanı hem Item hem de BookItem 
     türünde iki nesne alacağı için dizi içindeki eleman türüne göre serileştirme çalışacak
     Sonuç:
      <Items>
        <Item xmlns="http://www.cpandl.com">
          <OrderItem>Widget1</OrderItem>
          <ItemCode>w1</ItemCode>
          <ItemPrice>231</ItemPrice>
          <ItemQuantity>3</ItemQuantity>
        </Item>
        <BookItem xmlns="http://www.cohowinery.com">
          <ItemCode>w2</ItemCode>
          <ItemPrice>123</ItemPrice>
          <ItemQuantity>7</ItemQuantity>
          <Title>Book of Widgets</Title>
          <Author>John Smith</Author>
          <ISBN>34982333</ISBN>
        </BookItem>
      </Items> 
     */


    [
        XmlArrayItem(Type = typeof (BookItem)),
        XmlArrayItem(Type = typeof (string)),
        XmlArrayItem(Type = typeof (int))
    ] 
    public object[] KarisikTipler =
    {
        "Bu", 1, new BookItem()
                 {
                     Author = "Cem",
                     ISBN = "93845934",
                     ItemCode = "item kod 10",
                     ItemName = "item adı",
                     ItemPrice = 1.2m,
                     ItemQuantity = 10,
                     Title = "Başlık şu, bu, o"
                 }
    };
    /* Her dizi elemanı string, int ve BookItem tipindeyse serileştirilecek değilse istisna fırlatacak.
        <KarisikTipler>
          <string>Bu</string>
          <int>1</int>
          <BookItem>
            <OrderItem>item adı</OrderItem>
            <ItemCode>item kod 10</ItemCode>
            <ItemPrice>1.2</ItemPrice>
            <ItemQuantity>10</ItemQuantity>
            <Title>Başlık şu, bu, o</Title>
            <Author>Cem</Author>
            <ISBN>93845934</ISBN>
          </BookItem>
        </KarisikTipler>
     */

    /// 
    /// xml çıktısı:
    ///     <EmpStatus>Triple</EmpStatus>
    /// 
    public EmployeeStatus EmpStatus=EmployeeStatus.Three;
}

public enum EmployeeStatus
{
    [XmlEnum(Name = "Single")]
    One,
    [XmlEnum(Name = "Double")]
    Two,
    [XmlEnum(Name = "Triple")]
    Three
}


public class Item
{
    [XmlElement(ElementName = "OrderItem")]
    public string ItemName;
    public string ItemCode;
    public decimal ItemPrice;
    public int ItemQuantity;
}

public class BookItem : Item
{
    public string Title;
    public string Author;
    public string ISBN;
}


/// <summary>
/// Şu nesne için:
/// 
///    public KitapItem kit = new KitapItem()
///                           {
///                               Author = "Kitapçı Cem",
///                               ISBN = "---1---",
///                               ItemCode = "item kodum oldu",
///                               ItemName = "item adım yok oldu",
///                               ItemPrice = 10.2m,
///                               ItemQuantity = 23,
///                               Title = "illa başlık, hep başlık"
///                           };
/// 
/// 
/// xml sonucu:
/// 
///  <kit d2p1:baslik="illa başlık, hep başlık" xmlns:d2p1="attribute_nameSpeysi">
///    <OrderItem xmlns="kitapNameSpace">item adım yok oldu</OrderItem>
///    <ItemCode xmlns="kitapNameSpace">item kodum oldu</ItemCode>
///    <ItemPrice xmlns="kitapNameSpace">10.2</ItemPrice>
///    <ItemQuantity xmlns="kitapNameSpace">23</ItemQuantity>
///    <Author xmlns="kitapNameSpace">Kitapçı Cem</Author>
///    <ISBN xmlns="kitapNameSpace">---1---</ISBN>
///  </kit>
/// 
/// </summary>
[XmlType(TypeName = "KitapEleman", Namespace = "kitapNameSpace")]
public class KitapItem : Item
{
    [XmlAttribute(Namespace = "attribute_nameSpeysi", AttributeName = "baslik", DataType = "normalizedString")]
    public string Title;
    public string Author;
    public string ISBN;
}

<?xml version="1.0" encoding="utf-8"?>
<MyRootClass xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <NULLveOLUSTURULacak xsi:nil="true" xmlns="http://www.IsNullable.com" />
  <bomBosDizi xsi:nil="true" xmlns="http://www.nullDegerliDizi.com" />
  <MyStrings xmlns="http://www.cpandl.com">
    <string>Hello</string>
    <string>world</string>
    <string>!</string>
  </MyStrings>
  <Items>
    <Item xmlns="http://www.cpandl.com">
      <OrderItem>Widget1</OrderItem>
      <ItemCode>w1</ItemCode>
      <ItemPrice>231</ItemPrice>
      <ItemQuantity>3</ItemQuantity>
    </Item>
    <BookItem xmlns="http://www.cohowinery.com">
      <ItemCode>w2</ItemCode>
      <ItemPrice>123</ItemPrice>
      <ItemQuantity>7</ItemQuantity>
      <Title>Book of Widgets</Title>
      <Author>John Smith</Author>
      <ISBN>34982333</ISBN>
    </BookItem>
  </Items>
</MyRootClass>

XmlAttribute bir yerde tanımlıysa, o field ya da property nin tipindeki(class,struct vs.) [XmlType(......)] bir işe yaramaz.
KitapItem sınıfının Title fieldı için farklı bir namespace tanımladık (attribute_namepseysi) ve bunun için d2p1 oluşturulup özelliğin önüne konulduğuna dikkat edelim emi...

Enum gösterimi için [XmlEnum (Name = "enumGorunecekAdi")] kullanılır


XmlIgnore ile serileştirilmesini istemediğimiz field, prop vs. seçilir


XmlInclude ile hangi tiplerin serileştirilip serileştirilmeyeceği belirlenir

WCF'te tanımlı interface(arayüz) istemci(client) de nasıl görünüyor

Temel olarak çalışma şeklim her durumu ince detaylarına varıncaya kadar irdelemektir. Sonuçta en basit haliyle sunucu tarafındaki ServiceContract olarak tanımlı Interface'in istemci tarafında nasıl hayat bulduğunu görmek istedim.

Interface aynı şekliyle istemciye gelmiş ek olarak System.Threading.Tasks.Task<t> metotAdiAsync(parametreleri) diye asenkron metodu eklenmiş.
İşte ekranı görüntüsü:
Bu adres fena anlatmamış: http://www.yazgelistir.com

Yukarıda arayüzün istemci tarafındaki şeklini gördük. Aşağıda ise bu arayüzü System.ServiceModel.ClientBase<Arayuz> ile istemci oluşturmak için nasıl miras alındığını göreceğiz.
Sınıfımız System.ServiceModel.ClientBase sınıfından türetiltiği için Channel özelliği ile kanalın üstünden metot çağrılarını yapabiliyoruz.

17 Kasım 2013 Pazar

UBL içinde cbc, cac gibi isim uzayları ne anlama gelir

Ben de sizin gibi merak ettim ve aşağıdaki bağlantıları okudum. Daha iyi öğrenmek için XML isim uzayları ile ilgili derlemelerimi de okuyabilirsiniz.

cbc = UBL-CommonBasicComponents-2.0.xsd
Common Basic Components kısaltması olarak cbc öneki(prefix) kullanılmış.
cac = CommonAggregateComponents-2.0.xsd
Common Aggregate Components kısaltması olarak cac öneki kullanılmış.

Ayrıca UBL 2.0 içinde kullanılan önekler şunlardır:

File Name Prefix Namespace
common/CCTS_CCT_SchemaModule-2.0.xsd cct urn:un:unece:uncefact:data:specification:CoreComponentTypeSchemaModule:2
common/CodeList_CurrencyCode_ISO_7_04.xsd clm54217 urn:un:unece:uncefact:codelist:specification:54217:2001
common/CodeList_LanguageCode_ISO_7_04.xsd clm5639 urn:un:unece:uncefact:codelist:specification:5639:1988
common/CodeList_MIMEMediaTypeCode_IANA_7_04.xsd clmIANAMIMEMediaType urn:un:unece:uncefact:codelist:specification:IANAMIMEMediaType:2003
common/CodeList_UnitCode_UNECE_7_04.xsd clm66411 urn:un:unece:uncefact:codelist:specification:66411:2001
common/UBL-CommonAggregateComponents-2.0.xsd cac urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2
common/UBL-CommonBasicComponents-2.0.xsd cbc urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2
common/UBL-CommonExtensionComponents-2.0.xsd ext urn:oasis:names:specification:ubl:schema:xsd:CommonExtensionComponents-2
common/UBL-CoreComponentParameters-2.0.xsd urn:un:unece:uncefact:documentation:2
common/UBL-ExtensionContentDatatype-2.0.xsd ext urn:oasis:names:specification:ubl:schema:xsd:CommonExtensionComponents-2
common/UBL-QualifiedDatatypes-2.0.xsd qdt urn:oasis:names:specification:ubl:schema:xsd:QualifiedDatatypes-2
common/UnqualifiedDataTypeSchemaModule-2.0.xsd udt urn:un:unece:uncefact:data:specification:UnqualifiedDataTypesSchemaModule:2

Cevap burada: http://ubl.xml.org/forum/cbc-cac
Ayrıca buralardan da faydalanabilirsiniz:
http://www.w3.org
http://msdn.microsoft.com

XML Namespace (İsim uzayı)

Önce namespace (isim uzayı) nedir?
İçinde eşsiz isimlerin bulunduğu bir kümedir.
Mesela bir babanın çocuklarının isimleri, web adresleri, şehir adları birer isim uzayı oluşturur. Bir isim uzayının bir adı olmalıdır. Tıpkı ailenin soyadı olması gibi.
XML namespace tanımları URI(Uniform Resource Identifier) referanslarıyla yapılır.
Thumbnail for version as of 21:40, 26 September 2011
URI'nin iki genel şekli vardır: URL(Uniform Resource Locators) ve URN(Uniform Resource Names).
In order to ensure the global uniqueness of URN namespaces, their identifiers (NIDs) are required to be registered with the IANA.
URI'nin 2 Formu olan URL ve URN Örnekleri
URL ÖrnekleriURN Örnekleri

http://www.develop.com/student
http://www.ed.gov/elementary/students

urn:www-develop-com:student
urn:www.ed.gov:elementary.students
urn:uuid:E7F73B13-05FE-44ec-81CE-F898C4A6CDB4

<x xmlns:edi='http://ecommerce.example.org/schema'>
  <!-- the "edi" prefix is bound to http://ecommerce.example.org/schema for the "x" element and contents -->
</x>
Bu örnekte: edi öneki 'http://ecommerce.example.org/schema' adresine bağlanmış, hem x elemanı hem de içeriği tarafından kullanılmış.

The prefix xml is by definition bound to the namespace name http://www.w3.org/XML/1998/namespace. It MAY, but need not, be declared, and MUST NOT be bound to any other namespace name. Other prefixes MUST NOT be bound to this namespace name, and it MUST NOT be declared as the default namespace.
xml'i önek olarak, isim uzayı(xml namespace) olarak kullanmamalısınız.

<x xmlns:edi='http://ecommerce.example.org/schema'>
  <!-- the 'taxClass' attribute's namespace is http://ecommerce.example.org/schema -->
  <lineItem edi:taxClass="exempt">Baby food</lineItem>
</x>
taxClass "özelliğinin" isim uzayı ancak önekin kullanılacağı etikegin(tag) içinde ya da bulunduğu etiketi içeren elemanda tanımlanmış olmalıdır. Örnekte taxClass öneki "lineItem" elemanınını içeren "x" elemanında tanımlıdır.

<?xml version="1.0"?>

<html:html xmlns:html='http://www.w3.org/1999/xhtml'>
  <!-- html öneki html etiketinin içinde tanımlanmış ve kullanılmış...! -->

  <html:head><html:title>Frobnostication</html:title></html:head>
  <html:body><html:p>Moved to 
    <html:a href='http://frob.example.com'>here.</html:a></html:p></html:body>
</html:html>

Çoklu önek tanımı:
<?xml version="1.0"?>
<!-- bk ve isbn önekleri "book" elemanında tanımlanmış...! -->
<bk:book xmlns:bk='urn:loc.gov:books'
         xmlns:isbn='urn:ISBN:0-395-36341-6'>
    <bk:title>Cheaper by the Dozen</bk:title>
    <isbn:number>1568491379</isbn:number>
</bk:book>

11 Kasım 2013 Pazartesi

XML tiplerinden NormalizedString ile String farkı

normalizedString

string veri elemanının tanımı:
   <xs:element name="customer" type="xs:string"/>
Veri taşırken:
   <customer>John Smith</customer>
ya da tab tuşu ile şu şekilde değeri olabilir
   <customer>       John Smith     </customer>
ve string kullandığımız için XML işlemcisi elemanın değerini değiştirmeyecektir ve 
  * satır besleme (#xA) 
  * satırbaşı karakterlerini (#xD) 
  * sekme (#x9) karakterleri aynı kalacaktır...

Ama NormalizedString veri elemanını kullanırsak (#xA),(#xD),(#x9) karakterleri, boşluk karakterine(#x20) dönüştürülür...
normalizedString veri elemanının tanımı:
   <xs:element name="customer" type="xs:normalizedString"/>
Veri taşırken:
   <customer>John Smith</customer>
ya da tab tuşu(#x9) ile girilmiş değerler boşluk karakterine(#x20) ye dönüştürülüyor
   <customer>       John Smith     </customer>
Ref:
www.w3schools.com
http://support.microsoft.com