3

以下は、XML Spy では有効であるが、Biztalk ではピリオドまたはハイフンを使用して参照された要素で停止する XSD のコードです。私が何か間違ったことをしているのか、またはこれがバグまたは「機能」であることを確認できますか? 誰にも回避策がありますか?.NET (および BizTalk) での XSD/XML 検証の異常をグーグルで検索して検索しましたが、何も見ていません (同様の質問や問題を抱えている人はいません)。

   <?xml version="1.0" encoding="UTF-8"?>
<!-- edited with XMLSpy v2012 rel. 2 (x64) (http://www.altova.com) by ZiggyDude (PA DPW-BIS) -->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
    <xs:element name="DotNetRestrictions">
        <xs:complexType>
            <xs:choice>
                <xs:element name="Valid">
                    <xs:complexType>
                        <xs:sequence>
                            <xs:element name="Embedded-Hyphen"/>
                            <xs:element name="Embedded.Period"/>
                            <xs:element name="Embedded_Underscore"/>
                        </xs:sequence>
                    </xs:complexType>
                </xs:element>
                <xs:element name="Invalid">
                    <xs:complexType>
                        <xs:sequence>
                            <xs:element ref="Embedded-Hyphen"/>
                            <xs:element ref="Embedded.Period"/>
                            <xs:element ref="Embedded_Underscore"/>
                        </xs:sequence>
                    </xs:complexType>
                </xs:element>
            </xs:choice>
        </xs:complexType>
    </xs:element>
    <xs:element name="Embedded.Period"/>
    <xs:element name="Embedded-Hyphen"/>
    <xs:element name="Embedded_Underscore"/>
</xs:schema>

埋め込まれたアンダースコアは .NET では失敗しないことに注意してください。すべてのピリオドとハイフンをアンダースコアに変更することでこれが機能するようになりましたが、送信機関は XML または XSD を「アンダースコア」形式で提供しません。ファイルは、ピリオドとハイフンであまりにも多くの場所に送信されます。1) 可能であれば機能するようにこの権利を構成するか、2) BizTalk と .NET (heh.heh.heh) を修正するか、3) これらの XML ドキュメントをオンザフライで変換して、処理前にピリオドとハイフンを置き換える必要があります。

考え?また、要素が参照として呼び出されると、BizTalk/.NET がこれらの文字でチョークするという私の理論を確認/反論してください。

ティア!

4

2 に答える 2

2

BizTalk の「窒息」の症状が、次の行に沿ってエラーが発生することである場合:

Node "Embedded.Period" - このルート ノードに有効な .NET タイプ名を指定します

次に、BizTalk スキーマ エディターで問題のあるノードを選択し、それらの Rootnode TypeName プロパティを変更することで、これを修正できます。アンダースコアのピリオドまたはハイフンを交換します。これは、XML 表現ではなく、生成される .NET タイプにのみ影響します。問題が解決するかどうかを確認してください。

于 2012-07-16T12:16:54.277 に答える
0

「Rootnode TypeName プロパティ」の問題のある文字をアンダースコアに置き換えることにより、XSD は独自に検証し、要素名に問題のある文字を含む着信 XML を受け入れることができます。

コードは

<xsd:element name="Embedded-Hyphen" type="xsd:anyType"/>
<xsd:element name="Embedded_Underscore" type="xsd:anyType"/>
<xsd:element name="Embedded.Period" type="xsd:string"/>

これを各要素に追加します。

<xsd:annotation>
   <xsd:appinfo>
      <fieldInfo rootTypeName="Embedded_Period" xmlns="http://schemas.microsoft.com/BizTalk/2003"/>
    </xsd:appinfo>
</xsd:annotation>

そして今、次のようになります。

<xsd:element name="Embedded-Hyphen" type="xsd:anyType">
    <xsd:annotation>
        <xsd:appinfo>
            <recordInfo rootTypeName="Embedded_Hyphen" xmlns="http://schemas.microsoft.com/BizTalk/2003"/>
        </xsd:appinfo>
    </xsd:annotation>
</xsd:element>
<xsd:element name="Embedded_Underscore" type="xsd:anyType"/>
<xsd:element name="Embedded.Period" type="xsd:string">
    <xsd:annotation>
        <xsd:appinfo>
            <fieldInfo rootTypeName="Embedded_Period" xmlns="http://schemas.microsoft.com/BizTalk/2003"/>
        </xsd:appinfo>
    </xsd:annotation>
</xsd:element>

君たちありがとう!

于 2012-07-23T14:13:55.357 に答える