2013-09-03 9 views
6

Ich habe ein XML-Format verwendet, das aus verschiedenen vorhandenen Formaten und einigen benutzerdefinierten Elementen und Attributen besteht, und ich dachte, ich sollte ein Schema für diese benutzerdefinierten Bits schreiben.Deklarieren eines Attributs für einen anderen Namespace in XML Schema

Eines, was ich tun, ist die Verwendung benutzerdefinierte auf Elemente in bestehende Formate Attribute wie folgt aus:

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

Ich verstehe, dass dies zu tun erlaubt ist, aber ich kann nicht glauben, wie mein „extraAtt“ in XML-Schema zu erklären oder , schlimmer, in einer DTD.

Ich habe versucht, die specification lesen, aber es könnte genauso gut in Chinesisch geschrieben werden, soweit es mich betrifft. Die meisten Lernprogramme sprechen nur über "Name", "Typ" und "Verwendung", z. this one und that one.

Antwort

6

Jedes Schemadokument definiert Komponenten (Teile eines Schemas) für einen Namespace. Also Ihr Attribut definieren ns2:extraAtt Sie ein Schema Dokument etwas wie diese wollen:

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

Die Deklaration des Elements ns1: etwas muss irgendwie für dieses Attribut ermöglichen, entweder mit einem Attribut Referenz (<xs:attribute ref="ns2:extraAtt"/>) oder mit einem Attribut Wildcard (<xs:anyAttribute namespace="http://example.com/my-ns2"/> oder ähnlich).


Entschuldigung für die Lesbarkeit der Spezifikation; Es ist eine lange Geschichte, aber im Wesentlichen glaubten einige Mitglieder der WG nicht, dass Menschen wie du existieren ("niemand außer den Reaktoren liest die Spezifikationen und solange sie sich nicht beschweren, ist es lesbar genug" - so war es jedenfalls) sie sagten, bevor einige Implementatoren sich laut und bitter beklagt hatten, dann wechselten sie nur das Thema).

+0

Vielen Dank für antwortend! Ich bin ein wenig enttäuscht, dass meine XML-Dokumente nicht gültig sein können, wenn die Autoren des Schemas für ns1 nicht die Voraussicht hatten, Erweiterungen zuzulassen. ;-) Wenn das Format von ns1 nur in einer DTD definiert ist, was meines Wissens nach kein Äquivalent zu xs: anyAttribute ist, macht das meine Dokumente dann gültig oder ungültig? (Ich hoffe, dass ich einen Sinn habe.) – scozy

+1

Der Definierer eines Begriffs muss sagen, was es bedeutet. Der Definierer des Elements ns1: etwas sagt was sie als gültige Instanz zählen wollen. Der Begriff * valid * ist ein technischer Begriff, der die Beziehung eines Dokuments zu einem gegebenen Schema beschreibt. Die DTD-Gültigkeit wird in Form von Schemas definiert, die in DTD-Notation geschrieben sind, XSD-Validität in Form von XSD-Schemata; Weder bietet sie eine Validierung in gemischten Schemasprachen. Ob Ihnen das wichtig ist, hängt davon ab, warum das Dokument gültig sein soll. –

1

nur das Attribut deklarieren Sie diese XSD verwenden können:

<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 vorausgesetzt, ist ein einfacher String - Sie jede Art verwenden können, oder beschränken Sie einen vorhandenen Typ etc.)