Laden...

Problem mit xml namespace

Erstellt von T-Man vor 15 Jahren Letzter Beitrag vor 15 Jahren 1.245 Views
T
T-Man Themenstarter:in
210 Beiträge seit 2006
vor 15 Jahren
Problem mit xml namespace

verwendetes Datenbanksystem: XML

Moin!

Ich habe folgendes Schema:


<?xml version="1.0" encoding="utf-8"?>
<xs:schema id="ResourceFileSchema"
    targetNamespace="http://tempuri.org/ResourceFileSchema.xsd"
    elementFormDefault="qualified"
    xmlns="http://tempuri.org/ResourceFileSchema.xsd"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
>
  <xs:attribute name="overrideOnUpdate" type="xs:boolean" fixed="true" />

  <xs:attribute name="cultureName">
    <xs:simpleType>
      <xs:restriction base="xs:string">
        <xs:pattern value="[a-z]{2,3}(-(((Latn)|(Kyrl)|(Mong)|(Cans))-)?[A-Z]{2,3})?" />
      </xs:restriction>
    </xs:simpleType>
  </xs:attribute>

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

  <xs:complexType name="defaultResourceStringType" >
    <xs:simpleContent>
      <xs:extension base="xs:string">
        <xs:attribute ref="overrideOnUpdate" />
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>

  <xs:complexType name="localizedResourceStringType">
    <xs:simpleContent>
      <xs:extension base="defaultResourceStringType">
        <xs:attribute ref="cultureName" use="required" />
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>

  <xs:complexType name="resourceStringType">
    <xs:sequence>
      <xs:element name="defaultValue" type="defaultResourceStringType" maxOccurs="1" minOccurs="1" />
      <xs:element name="value" type="localizedResourceStringType" maxOccurs="unbounded" minOccurs="0" />
    </xs:sequence>
    <xs:attribute ref="id" use="required" />
  </xs:complexType>

  <xs:complexType name="localizedStringCollectionType">
    <xs:sequence>
      <xs:element name="resourceString" type="resourceStringType" maxOccurs="unbounded" minOccurs="0" />
    </xs:sequence>
  </xs:complexType>

  <xs:element name="localizedStringCollection" type="localizedStringCollectionType" />
</xs:schema>

und dazu folgende XML Datei:


<?xml version="1.0" encoding="utf-8"?>
<localizedStringCollection xmlns="http://tempuri.org/ResourceFileSchema.xsd">
  <xs:schema targetNamespace="http://tempuri.org/ResourceFileSchema.xsd" xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:include schemaLocation="ResourceFileSchema.xsd" />
  </xs:schema>
  
  <resourceString id="German">
    <defaultValue overrideOnUpdate="true">german</defaultValue>
    <value cultureName="de" overrideOnUpdate="true">deutsch</value>
    <value cultureName="it">tedesco</value>
    <value cultureName="sr-Latn-CS">nemacko</value>
  </resourceString>
  <resourceString id="English">
    <defaultValue overrideOnUpdate="true">english</defaultValue>
    <value cultureName="de" overrideOnUpdate="true">englisch</value>
    <value cultureName="it">inglese</value>
    <value cultureName="sr-Latn-CS">englesko</value>
  </resourceString>
</localizedStringCollection>

Ich bekomme folgende Fehler:

The 'id' attribute is not declared.

und

The required attribute 'http://tempuri.org/ResourceFileSchema.xsd:id' is missing.

Diese Fehler bekomme ich für alle Attribute.

Wieso sind die Attribute nicht bekannt, die Tags aber schon?

Mit folgender XML-Datei funktioniert es:


<?xml version="1.0" encoding="utf-8"?>
<localizedStringCollection xmlns="http://tempuri.org/ResourceFileSchema.xsd" xmlns:r="http://tempuri.org/ResourceFileSchema.xsd">
  <xs:schema targetNamespace="http://tempuri.org/ResourceFileSchema.xsd" xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:include schemaLocation="ResourceFileSchema.xsd" />
  </xs:schema>
  
  <resourceString r:id="German">
    <defaultValue r:overrideOnUpdate="true">german</defaultValue>
    <value r:cultureName="de" r:overrideOnUpdate="true">deutsch</value>
    <value r:cultureName="it">tedesco</value>
    <value r:cultureName="sr-Latn-CS">nemacko</value>
  </resourceString>
  <resourceString r:id="English">
    <defaultValue r:overrideOnUpdate="true">english</defaultValue>
    <value r:cultureName="de" r:overrideOnUpdate="true">englisch</value>
    <value r:cultureName="it">inglese</value>
    <value r:cultureName="sr-Latn-CS">englesko</value>
  </resourceString>
</localizedStringCollection>

Ich verstehe, dass die zweite Version funktioniert (auch wenn sie mir nicht gefällt, denn ich möchte eigentlich auf das r: verzichten), aber ich verstehe absolut nicht, wieso die erste Version nicht funktioniert.

Wenn ich das Schema direkt einbette, statt es über include einzubinden, funktioniert die erste Variante übrigens.

Kann mir das jemand erklären?

Vielen Dank in vorraus!

T-Man

T
T-Man Themenstarter:in
210 Beiträge seit 2006
vor 15 Jahren

Ich habe das Problem jetzt gelöst, indem ich die Attribute in dem Schema direkt in den Typen definiert habe, statt sie vorher zu definieren und dann zu referenzieren.

Hier die neue Version des Schemas:


<?xml version="1.0" encoding="utf-8"?>
<xs:schema id="ResourceFileSchema"
    targetNamespace="http://tempuri.org/ResourceFileSchema.xsd"
    elementFormDefault="qualified"
    xmlns="http://tempuri.org/ResourceFileSchema.xsd"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
>
  <xs:complexType name="defaultResourceStringType" >
    <xs:simpleContent>
      <xs:extension base="xs:string">
        <xs:attribute name="overrideOnUpdate" type="xs:boolean" fixed="true" />
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>

  <xs:complexType name="localizedResourceStringType">
    <xs:simpleContent>
      <xs:extension base="defaultResourceStringType">
        <xs:attribute name="cultureName" use="required">
          <xs:simpleType>
            <xs:restriction base="xs:string">
              <xs:pattern value="[a-z]{2,3}(-(((Latn)|(Kyrl)|(Mong)|(Cans))-)?[A-Z]{2,3})?" />
            </xs:restriction>
          </xs:simpleType>
        </xs:attribute>
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>

  <xs:complexType name="resourceStringType">
    <xs:sequence>
      <xs:element name="defaultValue" type="defaultResourceStringType" maxOccurs="1" minOccurs="1" />
      <xs:element name="value" type="localizedResourceStringType" maxOccurs="unbounded" minOccurs="0" />
    </xs:sequence>
    <xs:attribute name="id" type="xs:string" use="required" />
  </xs:complexType>

  <xs:complexType name="localizedStringCollectionType">
    <xs:sequence>
      <xs:element name="resourceString" type="resourceStringType" maxOccurs="unbounded" minOccurs="0" />
    </xs:sequence>
  </xs:complexType>

  <xs:element name="localizedStringCollection" type="localizedStringCollectionType" />
</xs:schema>

Dennoch würde ich gerne verstehen, wo das Problem liegt.
Kennt einer ein wirklich gutes, ausführliches Tutorial dazu? Oder kann mir jemand ein Buch empfehlen?

Gruß
Tony

T
T-Man Themenstarter:in
210 Beiträge seit 2006
vor 15 Jahren

Kann mir wirklich keiner weiterhelfen?

Gruß
Tony