5

required別の属性が設定されている場合、属性を作成することはできますか?

たとえば、次のコードでは、viewId属性を作成する必要があります。属性が設定されているrequired場合。action

XML:

<node id="id1" destination="http://www.yahoo.com" />
<node id="id2" action="demo" viewId="demo.asp"/>

これが可能であれば、これがどのように行われるかを教えてください。今のところ、私はすべての場合にviewId設定しました。そのため、最初の要素は検証に失敗します。requirednode

<xsd:attribute name="focusViewId" type="xsd:anyURI" use="required"/>
4

2 に答える 2

5

XSD1.0だけでは不可能です。XSDに加えて、またはXSDの代わりに、別のXMLスキーマ言語を使用するか、XSD1.1に移行する必要があります。

もう1つの方法は、スキーマを再構築することです。@destinationが{@action、@viewId}と相互に排他的である場合、代わりに要素を使用して、を使用できるようにすることができますxsd:choice

更新:XSD1.1の場合

<?xml version="1.0" encoding="utf-8" ?>
<!-- XML Schema generated by QTAssistant/XSD Module (http://www.paschidev.com) -->
<xsd:schema elementFormDefault="qualified" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <xsd:element name="node">
        <xsd:complexType>
            <xsd:attribute name="id" type="xsd:ID" use="required"/>
            <xsd:attribute name="destination" type="xsd:string"/>
            <xsd:attribute name="action" type="xsd:string"/>
            <xsd:attribute name="viewId" type="xsd:string"/>
            <xsd:assert test="(@viewId) or not(@action)" />
        </xsd:complexType>
    </xsd:element>
</xsd:schema>
于 2012-10-05T13:11:38.947 に答える
1

@idの定義を含む要素「node」(abstactNodeと呼びましょう)の抽象複合型を作成できます。

次に、@ destinationの定義を使用して、abstactNodeを拡張する複合型「nodeWithDestination」を作成します。

@actionおよび@viewId属性定義を使用して、abstactNodeも拡張する2番目の複合型「nodeWithActionAndViewId」。

XMLは次のようになります。

<node id="id1" destination="http://www.yahoo.com" xsi:type="nodeWithDestination"/>
<node id="id2" action="demo" viewId="demo.asp" xsi:type="nodeWithActionAndViewId"/>

それはあなたのニーズに合っていますか?

于 2012-10-09T15:19:58.647 に答える