XML çalışmamıza tekrar devam ediyoruz ve bu makalede işleme talimatları, yorumlar, nitelikler ve diğer XML öğeleri gibi XML yapıları hakkında bilgi sahibi olacağız. Bu unsurlar temeldir ve kesinlikle herhangi bir karmaşıklıktaki belgeleri standarda tam olarak uygun olarak esnek bir şekilde işaretlemenize izin verir.

XML etiketleri gibi bazı noktalar, önceki "" makalesinde zaten kısmen ele aldık. Şimdi bu konuya bir kez daha değineceğiz ve daha ayrıntılı olarak analiz edeceğiz. Bu, XML yapılarının tüm resmini görselleştirmenizi kolaylaştırmak için bilerek yapılır.

XML öğeleri. Boş ve boş olmayan XML öğeleri

Önceki makalede bahsedildiği gibi, XML'deki etiketler, HTML'de olduğu gibi yalnızca metni işaretlemekle kalmaz, aynı zamanda tek tek öğeleri (nesneleri) ayırır. Öğeler sırayla belgedeki bilgileri hiyerarşik olarak düzenler ve bu da onları XML dilinin temel yapısal birimleri haline getirir.

XML'de öğeler iki tür olabilir - boş ve boş olmayan. Boş öğeler, metin veya diğer yapılar gibi herhangi bir veri içermez. Boş öğelerden farklı olarak, boş olmayan öğeler, metin veya diğer XML öğeleri ve yapıları gibi herhangi bir veri içerebilir. Yukarıdakilerin özünü anlamak için boş ve boş olmayan XML öğelerinin örneklerine bakalım.

Boş XML öğesi

Boş olmayan XML öğesi

Öğe içeriği...

Yukarıdaki örnekten de görebileceğimiz gibi, boş ve boş olmayan öğeler arasındaki temel fark, yalnızca bir etiketten oluşmasıdır. Ayrıca, XML'de tüm isimlerin büyük/küçük harfe duyarlı olduğunu da belirtmekte fayda var. Bu, myElement, MyElement, MYELEMENT, vb. adlarının olduğu anlamına gelir. farklılar yani şu an gelecekte hata yapmamak için hemen hatırlanmalıdır.
Böylece elementleri anladık. Şimdi XML belgelerinin mantıksal organizasyonu gibi bir sonraki noktaya geçelim.

XML belgelerinin mantıksal organizasyonu. XML verilerinin ağaç yapısı

Hatırlayacağınız gibi XML dilinin ana yapısı, diğer iç içe yapıları içerebilen ve böylece ağaç şeklinde hiyerarşik bir yapı oluşturan öğelerdir. Bu durumda, ana öğe kök olacaktır ve diğer tüm öğeler alt öğeler XML ağacının dalları ve yaprakları olacaktır.

Yukarıdakilerin özünü anlamayı kolaylaştırmak için aşağıdaki resme bir örnekle bakalım.

Gördüğümüz gibi, bir XML belgesinin ağaç biçiminde düzenlenmesi, işlenmesi oldukça basit bir yapıdır. Aynı zamanda, ağacın kendisinin etkileyici karmaşıklığı oldukça büyüktür. XML'deki nesneleri tanımlamanın en uygun yolu ağaç temsilidir.

XML öznitelikleri. XML'de nitelik yazma kuralları

XML'de öğeler, tek veya çift tırnak içine alınmış, kendilerine atanan değerlere sahip nitelikler de içerebilir. Bir öğenin özniteliği şu şekilde ayarlanır:

Bu durumda, "nitelik" adında bir öznitelik ve "değer" değeri kullanılmıştır. Burada, XML özniteliğinin bir miktar değer içermesi gerektiğini ve boş olamayacağını hemen belirtmekte fayda var. Aksi takdirde, kod XML açısından yanlış olacaktır.

Alıntı kullanımına da dikkat etmelisiniz. Öznitelik değerleri, tek veya çift tırnak içine alınabilir. Ayrıca bazı alıntıları diğerlerinin içinde kullanmak da mümkündür. Göstermek için aşağıdaki örnekleri göz önünde bulundurun.

Diğer XML yapılarını incelemeye geçmeden önce, öznitelikler oluştururken, örneğin Özel semboller, ve işareti "&" veya açılı ayraçlar " gibi<>". Bu karakterler kontrol karakterleri olarak ayrılmıştır ("&" bir varlıktır ve "<» и «>” eleman etiketini aç ve kapat) ve “saf” bir şekilde kullanılamaz. Bunları kullanmak için özel karakterleri değiştirmeye başvurmanız gerekir.

XML işleme talimatları (işleme talimatları). XML Bildirimi

XML'de, belirli bir belgeyi işleyecek uygulamalar için belirli bilgileri taşıyan bir belgeye talimatlar eklemek mümkündür. XML'deki işleme talimatları aşağıdaki gibi oluşturulur.

Yukarıdaki örnekte de görebileceğiniz gibi, XML'de işlem talimatları açılı tırnak içine alınır ve ardından bir soru işareti gelir. Bu, ilk PHP eğitimlerimizde incelediğimiz normale biraz benziyor. İşleme talimatının ilk kısmı, bu talimatın veya içeriğinin ikinci kısmının amaçlandığı uygulama veya sistemi tanımlar. Ancak, işleme talimatları yalnızca yönlendirildikleri uygulamalar için geçerlidir. Bir işleme talimatının bir örneği, aşağıdaki talimat olacaktır.

XML'de bir işleme talimatına çok benzeyen özel bir yapı olduğunu belirtmekte fayda var, ancak kendisi değil. Bu, işlemeye geçen bir XML bildirimidir. yazılım XML belgesinin kodlama, yazıldığı dilin sürümü gibi özellikleri hakkında bazı bilgiler bu belge vb.

Yukarıdaki örnekten de görebileceğiniz gibi, XML bildirimi, yukarıda bahsettiğimiz normal özniteliklere çok benzeyen sözde öznitelikler içerir. Bunun nedeni, tanım gereği, bir XML bildirimi ve işleme talimatlarının öznitelikler içerememesidir, bu nedenle bu bildirimlere sözde öznitelikler denir. Çeşitli hatalardan kaçınmak için gelecek için hatırlamaya değer.

Sözde öznitelikleri ele aldığımıza göre, ne anlama geldiklerine bakalım.

  • Kodlama - XML ​​belgesinin kodlanmasından sorumludur. Genellikle kodlama UTF8'dir.
  • Sürüm - bu belgenin yazıldığı XML dilinin sürümü. Bu genellikle XML sürüm 1.0'dır.

Şimdi makalenin son kısmına geçelim ve bu tür XML yapılarını yorumlar ve CDATA bölümleri olarak ele alalım.

xml'de çift tırnak için bir kaçış karakteri var mı? Şöyle bir etiket yazmak istiyorum:

ama " koyarsam, o zaman satırın bittiği anlamına gelir. Bunun gibi bir şeye ihtiyacım var (c++):

Printf("Alıntı = \" ");

Çift alıntıdan önce kaçmak için yazılacak bir karakter var mı?

Eski, sık sorulan bir soruya yeni, geliştirilmiş bir yanıt...

XML'de çift alıntıdan ne zaman kaçılır?

Çift tırnak (") görünebilir çıkış yok :

    XML metin içeriğinde:

    "Benden alıntı yapma" dedi.

    Tek tırnak ("") ile ayrılmış XML özniteliklerinde:

    Not: tek tırnaklara (") geçmek ayrıca kaçmayı gerektirmez:

Çift tırnak (") korumalı olmalı :

    Çift tırnak ile ayrılmış XML niteliklerinde:

Sonuç olarak

Çift tırnak ("), yalnızca çok sınırlı bir bağlamda "XML'de" olarak kaçılmalıdır.

Bir şeyi çabucak denemeniz gerekiyorsa, işte hızlı ve kirli bir çözüm. Özellik değeri için tek tırnak kullanın:

C++'da EscapeXML ATL API'sini kullanabilirsiniz. Özel karakterleri işlemenin doğru yolu budur ...

Çift tırnak ile başlayarak, XML'de kaçılması gereken yaygın karakterler şunlardır:

  1. çift ​​tırnak (") " içine kaçıyor
  2. ve işareti (&) kaçar &
  3. tek tırnaklar (") " içine kaçıyor
  4. az (<), экранируется до <
  5. büyük (>), kaçan >

Diğerleri, bu durumda belirli kaçışlarla nasıl başa çıkılacağı konusunda cevap verdi.

Daha geniş cevap, bunu kendiniz yapmaya çalışmayın. XML API'sini kullanın - hemen hemen her modern programlama platformu için çok sayıda kullanılabilir.

XML API, bunun gibi şeyleri sizin için otomatik olarak halledecek ve fazla yanlış gitmek daha zor. XML API'sini kendiniz yazmıyorsanız, bu tür ayrıntılar için nadiren endişelenmeniz gerekir.

Uzun bir süre için standart, sıradan alıntıların eklenmesini öngörmektedir. HTML metni"Etiketler içinde, tırnak işaretleri "" yapısını kullanın, nitelikleri belirtmek için kullanılır.

Ancak, "Hiçbir etiketin DIŞINDA" basit bir simgeyi alıntı olarak göstermeyecek bir tarayıcıya henüz rastlamadım. Öyleyse söyleyin bana sevgili meslektaşlarım, belki de etiketlerin dışında kullanılması gereksiz bir sıkıcılık mı? Lafı fazla uzatmadan sakince yazabilirsiniz "? Özellikle tırnak işaretinin çok olduğu ve katı tasarım kurallarına uyulmasının (ulusal tırnak işaretlerinin doğru kullanımı hakkında) olduğu metinlerde önemsizdir.

IMHO, birçok insan bunu yapıyor ... ancak soru tamamen açık değil: standartlara göre " gibi alıntılar yazmanız gerektiğini anlarsanız, ancak tembelce, birçok sitenin böyle çalışmasına rağmen, o zaman ne Sanırım, tırnak işaretleri tarayıcıların yeni sürümlerinde desteklenip desteklenmediğini kimse bilmiyor, bu nedenle en açık öneri verilebilir: gelecekte sorun istemiyorsanız, buna bağlı kalın standartlar %100 :) Ama bunu zaten biliyorsun, hepsi bu, unut gitsin ve 10 yıl içinde her şey aynı olacak, garanti veriyorum (Microsoft, Mozilla, vb.)?

Lynn "Kahve Adam"[dosya]
evet, bu arada ... şimdi okumakta fayda var, hiçbir yerde alıntıların " olarak temsil edilmesi gerektiği belirtilmedi.
http://www2.stack.ru/~julia/HTML401/charset.html :

Bazı yazarlar, çift tırnak ("") örneklerini kodlamak için """ karakter varlık referansını kullanır, çünkü bu karakter öznitelik değerlerini sınırlamak için kullanılabilir.

ne hakkında, ihtiyaç tam olarak sadece hakkında söylendiği varlığı kullanın<, >ve &:

Yazar karakteri koymak isterse "<", во избежание возможной путаницы с началом тега (метка начала тега) он должен использовать ссылку "<" (десятичный код ASCII 60). Точно так же во избежание проблем со старыми версиями пользовательских агентов, некорректно принимающих символы ">" etiketinin sonu için (etiket sonu işareti), ">" referansını kullanmalısınız (ASCII ondalık kodu 62).

Karakter referanslarıyla (karakter referansı başlangıç ​​işareti) karışıklığı önlemek için "&" yerine "&" referansı (ASCII ondalık kodu 38) kullanılmalıdır. Ayrıca, CDATA öznitelik değerleri içinde karakter başvurularına izin verildiğinden, öznitelik değerlerinde "&" referansı da kullanılmalıdır.

Ama Lynn'in cevabına benzer bir şey bekliyorum: aslında böyle bir standart yok. Aklıma bile gelmedi - bilgilerim popüler ders kitaplarından ve "herkes yapıyor" nedenleriyle.

Veya başka bir seçenek: ancak benim uygulamamda karşılaşmadığım yeni standartları izlerseniz - xhtml gibi (tam olarak, xhtml'yi kontrol ettim), o zaman böyle bir numara çalışmaz. Bu nedenle, yazılan HTML kodu için taşınabilirlik sorunları yaratmaya gerek yoktur.

Ya da son olarak, bunu kendin nasıl yapıyorsun?

&, bu arada, benzer bir soru oluşturur. Yukarıdaki belgede "karışıklığı önlemek için" yazıyor. Ancak karışıklık, yalnızca &'nin ardından sağlanan kodlardan biri varsa mümkündür. Ya "..../script?A=1&B=2" gibi bir URL ise? Yanlışlıkla href gibi (elbette test sırasında doğru şekilde çalışan) bir URL belirtirsem herhangi bir riske girer miyim? 10 yıl içinde (site eski olduğunda veya zaten on kez yeniden yazıldığında) son derece düşük bir ihtimal dışında herhangi bir şey, abartılı bir isme sahip &B fragmansız bir varlık olacaktır; ? Başka bir deyişle, tüm bu tür vakalar ne kadar dikkatli bir şekilde kontrol edilmelidir?

Daniel, eğer mevcut kodlarla ilgili bir problemin olmadığından eminsen, basitçe & yazabilirsin. Gelecekte ortaya çıkarsa yeni kod- o zaman HTML 4.01 spesifikasyonunda açıkça bildirilmeyeceğini düşünüyorum, bu nedenle normal olarak bildirilen bir belgeyi etkilememelidir. Yoksa gelecekteki standartlar için destek sağlamayı mı umuyorsunuz? basit değişiklik belge şeması?

Daniel Alievsky[dosya]
XML'de, metin olarak normal bir alıntı da sorun oluşturmaz (sırasıyla, XHTML'de, elbette). IMHO alıntıları genellikle sadece bir nedenden dolayı "'e çevrilir - XML ​​/ HTML / XHTML'de değiştirirken metni güvenli bir forma getirmek için iki işlev yazmak istemezsiniz.

Merhaba sevgili site ziyaretçileri! XML biçimlendirme dilinin temasına devam edelim ve özniteliklerin kullanımına bakalım. Öznitelikler, tıpkı HTML'de olduğu gibi, XML öğelerinde bulunabilir. nitelikler sağlar Ek Bilgiler eleman hakkında.

XML Öznitelikleri

AT HTML özellikleriöğeler hakkında ek bilgi sağlar:

XML Öznitelikleri Alıntı Yapılmalıdır

değerler xml'deki nitelikler her zaman tırnak içine alınmalıdır. Hem tek hem de çift tırnak kullanılabilir. Bir kişi öğesinin cinsiyetini belirtmek için şunu yazabilirsiniz:

Öznitelik değerinin kendisi çift tırnak içeriyorsa, bu örnekte olduğu gibi tek tırnak kullanabilirsiniz:

XML Öğeleri ve Nitelikler

Aşağıdaki örneklere bir göz atın:

Victoria
Petrova

dişi
Victoria
Petrova

İlk örnekte, cinsiyet (cinsiyet) bir niteliktir. İkincisinde, seks bir unsurdur. Her iki örnek de aynı bilgiyi sağlar.

Özniteliklerin ne zaman kullanılacağı ve öğelerin ne zaman kullanılacağı konusunda hiçbir kural yoktur. Nitelikler HTML'de kullanışlıdır. XML'de bunlardan kaçınmanızı tavsiye ederim. Bunun yerine öğeleri kullanın.

Favori Yöntemim

Aşağıdaki üç XML belgesi tamamen aynı bilgileri içerir:

İlk örnekte date XML özniteliği kullanılmıştır:

Genişletilmiş tarih öğesi üçüncüde kullanılır: (BU BENİM FAVORİ YOLUM):



10
01
2008

Petya
Sveta
Hatırlatma

XML Özniteliklerinden Kaçının?

xml özniteliklerini kullanmayla ilgili sorunlardan bazıları:

  • nitelikler birden fazla değer içeremez (öğeler olabilir)
  • nitelikler ağaç yapıları içeremez (öğeler içerebilir)
  • niteliklerin genişletilmesi daha zordur (gelecekteki değişiklikler için)

Bunu böyle yapma:

to="Vasya" from="Sveta" başlığı="Hatırlatma"
body="Yarın beni aramayı unutmayın!">

Meta Veriler için XML Nitelikleri



Vasya
Sveta
Hatırlatma
Yarın beni aramayı unutma!


Sveta
Vasya
Ynt: Hatırlatma
TAMAM

Yukarıdaki kimlik özellikleri, farklı notları tanımlamak için kullanılır. Notun kendisinin bir parçası değiller.

Burada söylemeye çalıştığım şey, meta verilerin (verilerle ilgili veriler) xml öznitelikleri olarak saklanması ve verilerin kendisinin öğeler olarak saklanması gerektiğidir.

İlginiz için teşekkür ederiz!.

HTML'de olduğu gibi, XML öğeleri niteliklere sahip olabilir. Aynı zamanda, değer XML'deki nitelikler ve yaratılışlarının kuralı birçok yönden benzerdir.

Nitelikler, bir öğe hakkında ek bilgi sağlar.

XML öznitelikleri

HTML'de nitelikler, bir öğe hakkında bazı ek bilgiler sağlar:

Nitelikler genellikle verilerin parçası olmayan bilgiler sağlar. Aşağıdaki örnekte, dosya türü verilere bağlı değildir, ancak bu bilgi, bu öğeyi manipüle edecek uygulamalar için önemli olabilir:

bilgisayar.gif

XML nitelikleri tırnak içine alınmalıdır

Nitelik değeri her zaman tırnak içine alınmalıdır. Çift veya tek tırnak olabilir. Örneğin, bir karakterin cinsiyeti şu şekilde yazılabilir:

ya şöyle:

Öznitelik değerinin kendisi çift tırnak içeriyorsa, tek tırnak kullanılabilir. Örneğin:

veya varlık sembollerini kullanın:

XML öğeleri veya nitelikleri

Aşağıdaki örneklere bakın:

Örnek 1

Anna Smith

Örnek #2

dişi Anna Smith

İlk örnekte, cinsiyet bir öznitelikte belirtilmiştir. İkincisinde cinsiyet bir unsur olarak yazılır. Her iki örnek de aynı bilgiyi sağlar.

Niteliklerin ne zaman kullanılacağını ve öğelerin ne zaman kullanılacağını yöneten hiçbir kural yoktur. Nitelikler HTML'de yaygın olarak kullanılmaktadır. XML'de, onlardan kaçınmanın ve bunun yerine öğeleri kullanmanın en iyisi olduğunu düşünüyorum.

Daha iyi ne var?

Aşağıdaki üç XML belgesi tamamen aynı bilgileri içerir:

Tarih bir nitelik olarak yazılır:

Tove Jani Hatırlatma

Tarih eleman olarak yazılır:

10/01/2008 Tove Jani Hatırlatma Bu hafta sonu beni unutma!

Tarih, genişletilmiş bir öğe olarak yazılır(Bence en iyi seçenek):

10 01 2008 Tove Jani Hatırlatma Bu hafta sonu beni unutma!

XML özniteliklerinden kaçınılsın mı?

Nitelikleri kullanırken bazı sorunlar vardır:

  • nitelikler birden fazla değer içeremez (öğeler olabilir)
  • nitelikler ağaç yapıları içeremez (öğeler içerebilir)
  • niteliklerin genişletilmesi zordur (gelecekteki değişiklikler için)

Asla aşağıdaki yapıları kullanmayın:

Meta veriler için XML öznitelikleri

Bazen öğelere tanımlayıcılar verilir. Bu tanımlayıcılar, XML öğelerini HTML'deki tanımlama nitelikleriyle tam olarak aynı şekilde tanımlamak için kullanılır. Aşağıdaki örnek bunu göstermektedir:

Tove Jani Hatırlatma Bu hafta sonu beni unutma! Jani Tove Ynt: Hatırlatma unutmayacağım

Yukarıdaki örnekte, farklı notları tanımlamak için id özelliği kullanılmıştır. Bu bilgi notun kendisinin bir parçası değildir.

Tüm söylenenlerin ana fikri, meta verilerin (verilerle ilgili verilerin) nitelikler olarak ve verilerin kendisinin de öğeler olarak yazılması gerektiğidir.