2017-01-16 9 views
0

XSDファイルはdt:dt属性を含むXMLファイルを検証できません。 dt:dt属性は、XSDファイルでは受け入れられません。XSDはdt:dt属性を含むXMLを検証できません

たとえば、

<xs:attribute name="dt:dt" type="xs:nonNegativeInteger" use="optional"/> 

上記のxs:属性では、dt:dtという名前は受け入れられません。したがって、属性dt:dt="10"を含むXMLファイルを検証することはできません。

dt:dtの属性が有効になるようにXSDを変更するソリューションはありますか?

XMLファイル:

<?xml version="1.0" encoding="UTF-8"?> 
<OperationalTopology xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
        xmlns:dt="urn:schemas-microsoft-com:datatypes" 
        xsi:noNamespaceSchemaLocation="xsd.xsd"> 
    <Element1> 
     <Element1_In ID="xx" dt:dt="string"/> 
    </Element1> 
</OperationalTopology> 

XSDファイル:XMLを検証中

<?xml version="1.0" encoding="UTF-8"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified"> 
    <xs:element name="OperationalTopology"> 
     <xs:annotation> 
      <xs:documentation>Comment describing your root element</xs:documentation> 
     </xs:annotation> 
     <xs:complexType> 
      <xs:all> 
       <xs:element name="Element1" minOccurs="0"> 
        <xs:complexType> 
         <xs:sequence> 
          <xs:element name="Element1_In" minOccurs="0" maxOccurs="unbounded"> 
           <xs:complexType> 
           <xs:attribute name="ID" use="optional"/> 
           <xs:attribute name="dt" use="optional"/> 
           </xs:complexType> 
          </xs:element> 
         </xs:sequence> 
        </xs:complexType> 
       </xs:element> 
      </xs:all> 
     </xs:complexType> 
    </xs:element> 
</xs:schema> 

のxsd上記ではエラーになります。 エラーはdt:dt属性で発生します。

+0

通常ソリューションが無効なXMLを生成されたコードを修正することです:dtプレフィックスにし、代わりにそれを宣言するのに使用dt:dtへの属性参照を使用しています。 – jdweng

+0

作業中のXMLファイルとXSDファイルを提供すると、問題を理解して助けてくれるはずです。ありがとう! –

+0

@GhislainFourny私はXMLとXSDファイルを貼り付けました。 –

答えて

1

xs:attribute要素のname属性の値は、ローカル名のみ(dt)である必要があります。 (このスキーマはすでにどこかのコースの存在しない限り)、それは別の名前空間を持っているので、独自のスキーマ(たとえば、xsd2.xsd)内で宣言する必要があります。

<?xml version="1.0" encoding="UTF-8"?> 
<xs:schema 
    xmlns:xs="http://www.w3.org/2001/XMLSchema" 
    targetNamespace="urn:schemas-microsoft-com:datatypes"> 
    <xs:attribute name="dt"/> 
</xs:schema> 

元のスキーマは、その後、上記のスキーマをインポートすることができ、名前空間をバインド

<?xml version="1.0" encoding="UTF-8"?> 
<xs:schema 
    xmlns:xs="http://www.w3.org/2001/XMLSchema" 
    xmlns:dt="urn:schemas-microsoft-com:datatypes" 
    elementFormDefault="qualified" 
    attributeFormDefault="unqualified"> 
    <xs:import namespace="urn:schemas-microsoft-com:datatypes" schemaLocation="xsd2.xsd"/> 
    <xs:element name="OperationalTopology"> 
     <xs:annotation> 
      <xs:documentation>Comment describing your root element</xs:documentation> 
     </xs:annotation> 
     <xs:complexType> 
      <xs:all> 
       <xs:element name="Element1" minOccurs="0"> 
        <xs:complexType> 
         <xs:sequence> 
          <xs:element name="Element1_In" minOccurs="0" maxOccurs="unbounded"> 
           <xs:complexType> 
            <xs:attribute name="ID" use="optional"/> 
            <xs:attribute ref="dt:dt" use="optional" /> 
           </xs:complexType> 
          </xs:element> 
         </xs:sequence> 
        </xs:complexType> 
       </xs:element> 
      </xs:all> 
     </xs:complexType> 
    </xs:element> 
</xs:schema> 
+0

申し訳ありません。私の質問がどのように編集されたのかわかりません。属性名は "name"ではなく、属性名はdt:dtです。例えば。これに答えてください。 –

関連する問題