2013-09-03 19 views
6

Używałem formatu XML będącego miksowaniem różnych istniejących formatów oraz niektórych niestandardowych elementów i atrybutów. Pomyślałem, że powinienem napisać schemat dla tych niestandardowych bitów.Deklarowanie atrybutu dla innej przestrzeni nazw w schemacie XML

Jedno mogę zrobić, to użycie niestandardowych atrybutów elementów w istniejących formatach, takich jak to:

<ns1:something attA="b" attB="a" ns2:extraAtt="c"/> 

Rozumiem, że ten sposób jest dozwolone, ale nie mogę myśleć jak deklarować mój „extraAtt” w XML Schema lub , gorzej, w DTD.

Próbowałem przeczytać specification, ale równie dobrze mógłbym napisać po chińsku, o ile mi wiadomo. Większość samouczków mówi tylko o "nazwie", "typie" i "użyciu", np. this one i that one.

Odpowiedz

6

Każdy dokument schematu definiuje komponenty (fragmenty schematu) dla jednego obszaru nazw. Tak, aby zdefiniować atrybut ns2:extraAtt chcesz coś dokument schematu jak ten:

<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> 

Deklaracja elementu NS1: coś będzie potrzebne w celu umożliwienia tego atrybutu jakoś, albo z odniesieniem atrybutu (<xs:attribute ref="ns2:extraAtt"/>) lub ze związkiem atrybut wieloznaczny (<xs:anyAttribute namespace="http://example.com/my-ns2"/> lub podobny).


Przepraszamy za czytelność specyfikacji; to długa historia, ale w gruncie rzeczy niektórzy członkowie grupy roboczej nie sądzili, że istnieją ludzie tacy jak ty ("nikt oprócz wykonawców nie czyta specyfikacji, i dopóki nie skarżą się, że jest wystarczająco czytelny" - przynajmniej tak mówili, zanim niektórzy realizatorzy narzekali, głośno i gorzko, po prostu zmienili temat).

+0

Dziękujemy za odpowiadając! Jestem jednak nieco rozczarowany, że moje dokumenty XML nie mogą być poprawne, jeśli autorzy schematu dla ns1 nie przewidzieli możliwości rozszerzenia. ;-) Jeśli format ns1 jest zdefiniowany tylko w DTD, co, o ile wiem, nie ma odpowiednika xs: anyAttribute, czy to powoduje, że moje dokumenty są ważne lub nieważne? (Mam nadzieję, że to ma sens). – scozy

+1

Definiujący termin otrzymuje informację, co to znaczy. Definitor elementu ns1: coś mówi, co chce zliczyć jako poprawną instancję. Termin * valid * jest terminem technicznym określającym relację dokumentu do danego schematu; Ważność DTD definiowana jest w terminach schematów zapisanych w notacji DTD, ważności XSD w terminach schematów XSD; żaden z nich nie jest przeznaczony do sprawdzania poprawności w języku mieszanym. To, czy ci zależy, zależy od tego, dlaczego chcesz, aby dokument był ważny. –

1

Aby zadeklarować tylko atrybut można użyć tej xsd:

<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> 

(zakładając extraAtt jest prosty ciąg - można użyć dowolnego typu, lub ograniczyć istniejącego typu etc.)

Powiązane problemy