2013-09-03 18 views
6

Farklı varolan biçimlerin ve bazı özel öğelerin ve özniteliklerin bir karışımı olan bir XML formatı kullanıyorum ve bu özel bitler için bir şema yazmam gerektiğini düşündüm.XML şemada farklı ad alanı için bir özellik bildirme

Ben buna izin ancak yapıyor ben XML şeması benim "extraAtt" ilan etmek nasıl düşünemiyorum anlıyoruz
<ns1:something attA="b" attB="a" ns2:extraAtt="c"/> 

ya: Yapmam

Bir şey kullanımının özel böyle, mevcut formatlarda elemanlarında niteliklerini olduğu Daha da kötüsü, bir DTD'de.

specification'u okumayı denedim, ancak söz konusu olabildiğince çok Çince dilinde yazılabilir. Çoğu öğretici yalnızca "ad", "tip" ve "kullanım" ile ilgili konuşur, ör. this one ve that one.

cevap

6

Her bir şema belgesi, bir ad alanı için bileşenleri (bir şema parçası) tanımlar.

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" 
    targetNamespace="http://example.com/my-ns2"> 
    <xs:attribute name="extraAtt" type="xs:anySimpleType"/> 
</xs:schema> 

eleman ns1 ilanını: Yani böyle bir şema belge şey istiyorum ns2:extraAtt sizin niteliğini tanımlamak için bir şey ya bir nitelik referans (<xs:attribute ref="ns2:extraAtt"/>) ile, her nasılsa bu özellik için izin gerekecek ya da birlikte özellik joker karakteri (<xs:anyAttribute namespace="http://example.com/my-ns2"/> veya benzeri).


spec okunabilirlik yaklaşık yazık ki; Bu uzun bir hikaye, ama aslında WG'nin bazı üyeleri sizin gibi insanların var olduğunu düşünmüyordu ("uygulayıcılar dışında hiç kimse spekülasyonu okuyor ve şikayet edemediği sürece yeterince okunabilir" - en azından Bazı uygulayıcılar önce, yüksek sesle ve acı bir şekilde şikayet ettiler, sonra konuyu değiştirdiler.

+0

için teşekkür ederiz cevaplama! Ns1 şemasının yazarlarının uzantılara izin verme öngörüsüne sahip olmaması durumunda XML belgelerimin geçerli olmamasına rağmen biraz hayal kırıklığına uğradım. ;-) ns1 formatı sadece bir DTD'de tanımlanmışsa, bildiğim kadarıyla xs'e eşdeğer bir değere sahip değil: anyAttribute, bu, belgelerimi geçerli mi yoksa geçersiz mi yapıyor? (Umarım mantıklı olurum.) – scozy

+1

Bir terimin tanımı ne anlama geldiğini söyler. Ns1 elementinin tanımı: bir şey geçerli bir örnek olarak saymak istediklerini söyler. * Geçerli * terimi, bir belgenin belirli bir şemaya ilişkisini tanımlayan teknik bir terimdir; DTD geçerliliği DTD notasyonunda yazılan şemalar, XSD şemaları açısından XSD geçerliliği; karışık şema dili doğrulaması için ne işe yaramıyor. Sizin için önemli olan, belgenin neden geçerli olmasını istediğinize bağlıdır. –

1

bu XSD kullanabilirsiniz sadece niteliğini bildirmek için:

<xs:schema 
    targetNamespace="theNamespaceUri" 
    elementFormDefault="qualified" 
    attributeFormDefault="qualified" 
    xmlns="theNamespaceUri" 
    xmlns:xs="http://www.w3.org/2001/XMLSchema"> 

    <xs:attribute name="extraAtt" type="xs:string"> 
    </xs:attribute> 

</xs:schema> 

(extraAtt varsayarak basit dizedir - Herhangi bir türü kullanmak veya mevcut türü vb kısıtlayabilir)

İlgili konular