Domanda

Quando si cerca di importare definizioni condivise da un XML Schema, posso correttamente riferimento tipi condivisi, ma fa riferimento a elementi condivisi provoca errori di convalida.

Questo è lo schema che importa le definizioni condivise (example.xsd):

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema
  elementFormDefault="qualified"
  xmlns:xs="http://www.w3.org/2001/XMLSchema"
  xmlns:shared="http://shared.com">

    <xs:import namespace="http://shared.com" schemaLocation="shared.xsd"/>

    <xs:element name="example">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="importedElement"/>
                <xs:element ref="importedType"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>

    <xs:element name="importedElement">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="shared:fooElement"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>

    <xs:element name="importedType">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="bar" type="shared:barType"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>

</xs:schema>

Queste sono le definizioni condivise (shared.xsd):

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    xmlns="http://shared.com"
    targetNamespace="http://shared.com">

    <xs:element name="fooElement">
        <xs:simpleType>
            <xs:restriction base="xs:integer"/>
        </xs:simpleType>
    </xs:element>

    <xs:simpleType name="barType">
        <xs:restriction base="xs:integer"/>
    </xs:simpleType>

</xs:schema>

Ora considerare questo esempio XML:

<?xml version="1.0"?>
<example
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"                     
  xsi:noNamespaceSchemaLocation="example.xsd">
    <importedElement>
        <fooElement>42</fooElement>
    </importedElement>
    <importedType>
        <bar>42</bar>
    </importedType>
</example>

Quando convalidato, il "importedType" funziona perfettamente bene, ma il "importedElement" dà il seguente errore:

  

contenuto non valido è stato trovato a partire con l'elemento 'fooElement'. Uno dei '{ " http://shared.com ": fooElement}' è previsto

Direi che i miei problemi sono connessi alle questioni di spazio dei nomi (da qui il qualche modo fuorviante "ha ottenuto fooElement ma si aspettava fooElement") -? Eventuali suggerimenti su ciò che non va qui

È stato utile?

Soluzione

si fa riferimento fooElement come se fosse in nessun spazio dei nomi, è necessario utilizzare lo spazio dei nomi corretto nel documento di istanza:

<?xml version="1.0"?>
<example
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"                     
  xsi:noNamespaceSchemaLocation="example.xsd" xmlns:shared="http://shared.com">
    <importedElement>
        <shared:fooElement>42</shared:fooElement>
    </importedElement>
    <importedType>
        <bar>42</bar>
    </importedType>
</example>

Modifica avrei fatto notare: questa è la differenza tra tipo e elementi ; solo queste ultime appaiono in documenti (con alcune eccezioni), è per questo che le vostre opere di tipo importati come si voleva, e il vostro elemento non lo fa.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top