2016-12-16 7 views
0

私はその構造を受け取るために計画しています:xsd-validateは正確な属性を持つ要素ですか?

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<Document> 
    <property key="DocumentType" value="INV" /> 
    <property key="InvInternalNumber" value="i-1651-84" /> 
    <property key="OtherDynamicProperty" value="yes" /> 
</Document> 

私は、ドキュメントタイプを識別し、ああ、ビジネスは請求書が「InvInternalNumber」プロパティを持たなければならないと言う

「INV.xsd」を検証するために行きます!

したがって、 xsdの検証が可能ですか?「InvInternalNumber」というプロパティがありますか?

更新 XSDはJaxbContextによって生成されています。

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

    <xs:element name="Document" type="Document"/> 

    <xs:complexType name="Document"> 
    <xs:sequence> 
     <xs:element name="property" type="property" nillable="true" minOccurs="0" maxOccurs="unbounded"/> 
    </xs:sequence> 
    </xs:complexType> 

    <xs:complexType name="property"> 
    <xs:sequence/> 
    <xs:attribute name="key" type="xs:string"/> 
    <xs:attribute name="value" type="xs:string"/> 
    </xs:complexType> 
</xs:schema> 
+1

これはかなり基本的なXMLスキーマ検証ルールですか?スキーマファイルで "xs:attribute"検証ルールを試しましたか?この例を確認してください:http://www.w3schools.com/xml/schema_example.asp – EventHorizon

+1

設定したINV.xsdスキーマも投稿できますか?あなたの心配は、構造の検証よりもむしろ書いているルールだと思う...だから、別のアプローチを使うかもしれない。 – potame

+3

XMLはキーと値の順序付けられていないリストですか、または既知のキーリストの特定の順序を取ることができますか?このSOの質問への答えはおそらくあなたのために働くでしょうか? http://stackoverflow.com/questions/19543806/xml-schema-how-to-make-sure-one-element-exists-with-a-specific-attribute-value – EventHorizon

答えて

3

XSD 1.0は、この仕事のために設計されていません:それは要素名を適用する検証ルールを決定することを前提としています。それに取り組む1つの方法は、XML(XSLTを使用)を

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<Document> 
    <DocumentType>INV</DocumentType> 
    <InvInternalNumber>i-1651-84</InvInternalNumber> 
    <OtherDynamicProperty>yes</OtherDynamicProperty> 
</Document> 

に変換して検証することです。 (これは、スキーマ対応変換を使用して結果ドキュメントを検証することで、1つのステップで達成できます)。

要素名ではなく、属性値(ケースproperty/@key)によって検証規則が決定される場合、XSD 1.1の条件付き型割り当ての新機能を使用できます。これにより、property要素の型(したがって、value属性の型)がkey属性の値に依存することを宣言できます。

1

これはあなたがInvInternalNumberはいつもあなたはこのようにそれを行うには固定属性を使用することができるかもしれ最初の要素だったという仮定をした場合、私は思ったXSD 1.0は不可能であると思われます残念ながらこれは有効ではありません。

エラーcos-element-consistent: 'Document'タイプのエラーです。モデルグループには、名前が 'property'で、タイプが異なる複数の要素が表示されます。

したがって、@Dagは、link providedのXSD 1.1で唯一の解決策が利用可能だと言います。

enter image description here

関連する問題