1

親が異なる2つの値が少なくとも1つ必要な選択肢(またはその他の手法)を使用して検証する方法はありますか? 例えば...

<?xml version="1.0" encoding="UTF-8"?>
<DOC>
    <GROUP1>
        <VAL1>TEST</VAL1>
        <DATE1>20130306</DATE1>
    </GROUP1>
    <GROUP2>
        <VAL2>TEST2</VAL2>
        <DATE2>20130405</DATE2>        
    </GROUP2>
</DOC>

このドキュメントに DATE1 および/または DATE2 の少なくとも 1 つが含まれていることを確認するにはどうすればよいですか? つまり、DATE1 と DATE2 の両方が空白の場合、ドキュメントは無効です。

4

1 に答える 1

1

XSD 1.0 では実行できません。XSD 1.0 を Schematron で拡張するか、XSD 1.1 (非常に限定的なサポート) に移行して assert を使用する必要があります。

以下は、説明に基づいて、XSD 1.1 を使用して可能な方法です (空の値なので、DATEx は必須フィールドであると想定しています)。

<?xml version="1.0" encoding="utf-8"?>
<!--XML Schema generated by QTAssistant/XML Schema Refactoring (XSR) Module (http://www.paschidev.com)-->
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">       
    <xsd:element name="DOC">
        <xsd:complexType>
            <xsd:sequence>
                <xsd:element name="GROUP1">
                    <xsd:complexType>
                        <xsd:sequence>
                            <xsd:element name="VAL1" type="xsd:string"/>                        
                            <xsd:element name="DATE1" type="date"/>
                        </xsd:sequence>
                    </xsd:complexType>
                </xsd:element>
                <xsd:element name="GROUP2">
                    <xsd:complexType>
                        <xsd:sequence>
                            <xsd:element name="VAL2" type="xsd:string"/>
                            <xsd:element name="DATE2" type="date"/>
                        </xsd:sequence>
                    </xsd:complexType>
                </xsd:element>
            </xsd:sequence>

            <xsd:assert test="string-length(concat(GROUP1/DATE1, GROUP2/DATE2)) gt 0"/>
        </xsd:complexType>
    </xsd:element>

    <xsd:simpleType name="date">
        <xsd:restriction base="xsd:string">
            <xsd:pattern value="|[0-9]{8}"/>        
        </xsd:restriction>
    </xsd:simpleType>       
</xsd:schema>
于 2013-03-07T01:19:48.430 に答える