2016-12-15 9 views
2

Si je le fragment XSD suivant (en utilisant MyRootNs mais n'a pas d'importance)espace de noms XML

<xs:complexType name="SomeType"> 
    <xs:sequence> 
     <xs:element name="SomeElement" type="ns1:SomeType" /> 
     ... 

Est-ce que ce résultat dans

<SomeType xmlns="MyRootNs" xmlns:ns1="MySecondNS"> 
    <SomeElement> 
     ... 
    </SomeElement> 
</SomeType> 

ou

<SomeType xmlns="MyRootNs" xmlns:ns1="MySecondNS"> 
    <ns1:SomeElement> 
     ... 
    </ns1:SomeElement> 
</SomeType> 

J'ai trouvé à la fois en

XSD with elements from other namespace

https://www.codeproject.com/articles/18455/xsd-tutorial-part-of-namespaces

Laquelle est correcte?

Répondre

0

Il ne résulte pas non plus. SomeType dans votre schéma est le nom d'un type, pas le nom d'une déclaration d'élément. Il peut bien sûr aussi être le nom d'une déclaration d'élément, mais nous ne savons pas dans quel espace de noms il se trouve. Nous ne pouvons pas non plus voir où MySpaceNS apparaît (s'il existe) dans le schéma.

0

Vous n'avez pas vraiment fourni suffisamment d'informations. Comme Michael le souligne, vous ne pouvez pas créer un élément XML à partir d'une définition complexType.

Mais l'un ou l'autre scénario est valide étant donné les bons schémas.

Je devrais également souligner que dans cet exemple l'instruction xmlns: ns1 = "MySecondNS" ne fait rien, c'est juste déclarer un espace de noms. Une fois déclaré, il n'est pas utilisé.

<SomeType xmlns="MyRootNs" xmlns:ns1="MySecondNS"> 
    <SomeElement> 
     ... 
    </SomeElement> 
</SomeType> 

Exemple

Si votre schéma ressemble à ceci

<?xml version="1.0" encoding="utf-8" ?> 
<!--Created with Liquid XML 2017 Developer Bundle Edition (Trial) 15.0.0.6978 (https://www.liquid-technologies.com)--> 
<xs:schema elementFormDefault="qualified" targetNamespace="http://MyNamespce1" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:q1="http://MyNamespce1"> 
    <xs:complexType name="SomeType"> 
     <xs:sequence> 
      <xs:element name="SomeElement" type="q1:SomeType" minOccurs="0" /> 
     </xs:sequence> 
    </xs:complexType> 
    <xs:element name="MyRoot" type="q1:SomeType" /> 
</xs:schema> 

enter image description here

XML Valid Ensuite ressemblera à ceci

<?xml version="1.0" encoding="utf-8"?> 
<!-- Created with Liquid XML 2017 Developer Bundle Edition (Trial) 15.0.0.6978 (https://www.liquid-technologies.com) --> 
<MyRoot xmlns="http://MyNamespce1" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://MyNamespce1 Schema.xsd"> 
    <SomeElement> 
     <SomeElement> 
      <SomeElement></SomeElement> 
     </SomeElement> 
    </SomeElement> 
</MyRoot> 

ou

<?xml version="1.0" encoding="utf-8"?> 
<!-- Created with Liquid XML 2017 Developer Bundle Edition (Trial) 15.0.0.6978 (https://www.liquid-technologies.com) --> 
<ns:MyRoot xmlns:ns="http://MyNamespce1" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://MyNamespce1 Schema.xsd"> 
    <ns:SomeElement> 
     <ns:SomeElement> 
      <ns:SomeElement></ns:SomeElement> 
     </ns:SomeElement> 
    </ns:SomeElement> 
</ns:MyRoot> 

Les règles de namespaces sont assez simples dans un seul fichier, mais obtenir assez compliqué quand vous utilisez plusieurs fichiers de schéma qui sont inlucded ou importés. Je vous conseille de comprendre les règles telles qu'elles s'appliquent à un seul schéma avant d'essayer de comprendre les effets import/include sur les espaces de noms.

Il serait également utile si vous fournissez des échantillons plus complets à l'avenir.