xsi: schemaLocation kullanımı nedir?


131

Baharda olduğu gibi bu özelliğin değeri olarak birden fazla url'ye sahip olduğumuzu görüyorum:

<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-2.0.xsd">

Neden gereklidir ve ne için kullanılır? Bahar URL'ye gidip onaylıyor mu? xmlns ve xsi: schemaLocation arasındaki fark nedir?

Yanıtlar:


87

Spring'in kullandığı Java XML ayrıştırıcısı schemaLocation, XML dosyasını doğrulamak için değerleri okuyacak ve internetten yüklemeye çalışacaktır. Spring, sırayla, bu yükleme isteklerini durdurur ve sürümleri kendi JAR dosyalarının içinden sunar.

Öğesini atlarsanız, schemaLocationXML ayrıştırıcısı yapılandırmayı doğrulamak için şemayı nereden alacağını bilemez.


XML ayrıştırıcısı sınıf yolunda arama yapmaz mı?
HDave

1
@skaffman, Bu, -o (çevrimdışı) işaretiyle yay tabanlı projeksiyon maven derlemesini çalıştırdığımda, tüm bağımlılıkların yerel depomda mevcut olmasına rağmen derlemenin başarısız olacağı anlamına mı geliyor?
aviad

@HDave Ama XML ayrıştırıcının aradığı şey, şemanın herhangi bir adı olabilir
Krzysztof Krasoń

Teknik olarak XML ayrıştırıcı öncelikle şemayı internetten yüklemeye çalışacak, eğer bulunamazsa veya internet erişimi yoksa, * .xsd dosyasını sınıf yolundan yerel olarak arayacak, hala bulunamazsa atlanacaktır.
Frank Zhang

Yay kesişme katmanı hakkında daha fazla bilgi için bkz. Stackoverflow.com/a/10768972/32453
rogerdpack

68

An xmlns, belge içindeki benzersiz bir tanımlayıcıdır - şema için bir URI olmak zorunda değildir:

XML ad alanları, Genişletilebilir Biçimlendirme Dili belgelerinde kullanılan öğe ve öznitelik adlarını URI referanslarıyla tanımlanan ad alanlarıyla ilişkilendirerek nitelendirmek için basit bir yöntem sağlar.

xsi:schemaLocation gerçek şema konumu hakkında bir ipucu vermesi gerekiyor:

değerlendirme için kullanılabilecek şema belgelerinin fiziksel konumuna ilişkin ipuçları sağlamak için bir belgede kullanılabilir.


22

Şemaları bulmak için spesifikasyona göre

ad alanı adı aracılığıyla geri alınabilen bir şema olabilir veya olmayabilir ... Kullanıcı topluluğu ve / veya tüketici / sağlayıcı anlaşmaları, [ad alanı url'sinden bir xsd almaya çalışmak] mantıklı bir varsayılan strateji olduğu durumlar oluşturabilir

(açık olduğunuz için teşekkürler, spec!)

ve

bir belge yazarının (insan veya değil) belirli bir şemaya sahip bir belge oluşturması ve belgenin bir kısmının veya tamamının bu şemaya uygun olduğunu garanti etmesi durumunda, schemaLocation ve noNamespaceSchemaLocation [öznitelikler] sağlanır.

Dolayısıyla, temelde yalnızca bir ad alanı belirterek, XML'niz schemaLocation"topluluğunuza" bağlı olarak o konumdaki bir xsd'ye karşı doğrulanmaya çalışılabilir (bir özniteliği olmasa bile ). Spesifik bir belirtirseniz schemaLocation, temel olarak xml belgesinin adı geçen xsd'ye "uygun" olması gerektiği anlamına gelir, bu nedenle "lütfen doğrulayın" (okurken). Tahminim, bir schemaLocationveya noNamespaceSchemaLocationözniteliği yapmazsanız , çoğu zaman sadece "doğrulanmaz" (diğer yanıtlara göre, java bunu bu şekilde yapıyor gibi görünüyor).

Buradaki başka bir kırışıklık, tipik olarak, java kitaplıklarında [ör: spring config xml dosyalarında] xsd doğrulamasında, XML dosyalarınız schemaLocationbir XML dosyasında belirli bir xsd url'sini xsi:schemaLocation="http://somewhere http://somewhere/something.xsd"belirtiyorsa , tıpkı bağımlılık kavanozlarınızdan birinde olduğu gibi , bir kopyasını içerecektir . bu xsd dosyası, kaynaklar bölümünde ve spring, xsd dosyasını url ile eşleşiyormuş gibi ele almayı söyleyen bir "eşleme" özelliğine sahiptir http://somewhere/something.xsd(böylece hiçbir zaman web'e gidip dosyayı indiremezsiniz, sadece yerel olarak mevcuttur). Biraz daha fazla bilgi için ayrıca https://stackoverflow.com/a/41225329/32453 sayfasına bakın .


0

Bu konumlardan herhangi birine girerseniz, o zaman o şemada neyin tanımlandığını bulacaksınız. Örneğin, size ini-yöntem anahtar kelime değerinin veri türünün ne olduğunu söyler.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.