• 締切済み

XMLSchemaの記述法で質問です。

当方XMLSchemaを使用しているのですが、以下の表現ができなくて困っています。(b要素とc要素はどちらが先でも構わない) <a> <b>b要素必須</b> <c>c要素は必須でない</c> </a> どうもXMLSchemaのall要素は、その子にelement要素しか持つことができないようで、上記の表現ができません。 何かよい記法教えて頂けないでしょうか。

みんなの回答

noname#39970
noname#39970
回答No.1

こんな感じ? <xsd:element name="a">  <xsd:all>   <xsd:element ref="b" />   <xsd:element ref="c" />  </xsd:all> </xsd:element> <xsd:element name="b">  <!-- 内容 --> </xsd:element> <xsd:element name="c">  <!-- 内容 --> </xsd:element>

ggaogg
質問者

お礼

うーん、質問が簡単すぎてちゃんと伝わらなかったようですみません。。 今日一日調べてみたのですが、こう書けばよかったようです。 <element name="a" namespace="http://www.w3.org/2001/XMLSchema">  <complexType>   <all>    <element name="b" type="???"/>    <element name="c" type="???" minOccurs="0"/>   </all>  </complexType> </element> にわとりと卵が逆になりましたが、質問の意図はこれでした。 お騒がせしました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • XMLのDTDによる文書型宣言の記述の仕方

    初心者ですが簡単なXMLのDTDによる文書型宣言の記述の仕方がよく分かりませんので教えてください。 XMLでは同じ要素名の要素でも親が異なる場合は別の要素として扱うことができます。例えば、要素Bの子の要素Dと、要素Cの子の要素Dがある場合、要素Bの子の要素Dには属性bdを、要素Cの子の要素Dには属性cdを定義できます。この場合にDTDによる文書型宣言を記述する場合、要素Bの子の要素Dと、要素Cの子の要素Dをどのように記述するのでしょうか。 例えば <A>  <B>   <D bd="123"></D>  </B>  <C>   <D cd="abc"></D>  </C> </A> というようなXMLインスタンスがあった場合 この場合のDTDによる文書型宣言の記述は <!DOCTYPE A [  <!ELEMENT A (B,C)>  <!ELEMENT B (D)>  <!ELEMENT D EMPTY>  <!ATTLIST D bd CDATA #REQUIRED>  <!ELEMENT C (D)>  <!ELEMENT D EMPTY>  <!ATTLIST D cd CDATA #REQUIRED> ]> と記述しましたがこれでは駄目でした。2つ目の要素DのELEMENTの宣言で、要素Dはすでに宣言されているというエラーになるのです。上記の例の場合にDTDによる文書型宣言はどのように記述するのでしょうか。 よろしくお願い致します。

    • ベストアンサー
    • XML
  • XMLスキーマのrefの使い方

    こんにちは。yukimura1024です。 以下のXMLスキーマなんですが「Aの下にBを置ける」という意味でrefを使っています。 しかしこの書き方では「ルート要素としてAもBも使える」という意味でも解釈されてしまいます。 これをrefを使いつつ「Aの下にBを置ける」けど「ルート要素はAのみ」とするにはどう書けばいいでしょうか? <?xml version="1.0" encoding="UTF-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">  <xs:element name="A">   <xs:complexType>    <xs:sequence>     <xs:element ref="B"/>    </xs:sequence>   </xs:complexType>  </xs:element>  <xs:element name="B">   <xs:complexType>    <xs:sequence>     <xs:element name="C" type="xs:string"/>    </xs:sequence>   </xs:complexType>  </xs:element> </xs:schema> アドバイスいただける方いましたらお願いします。

    • 締切済み
    • XML
  • DTDを記述する意味

    DTDを使ってXMLの形式を厳密に定義する方法があると聞いて試してみたのですが、記述した形式を破っても何も起きません。たとえば以下のように <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE root [ <!ELEMENT root (a, b, c+)> ]> <root> <b>BBB</b> <a>AAA</a> </root> と書いた場合、「A,B,Cという要素をこの順番で配置せよ」という命令と「Cという要素を1つ以上配置せよ」という2つの命令を無視していますが、何かしらのエラーを返すといった動作は全くありません。HTML(XHTML)みたいな感じです(テキトーにコーディングしてもエラーを返さない点)。XMLのDTDはそれを守らないとエラーを返すような動作はしないのでしょうか?それではDTDの存在意義が分からなくなってしまいますが・・・

    • 締切済み
    • XML
  • XMLSchema この要素以外はOK

    質問します。 XMLSchemaで 名前空間とは関係無しに (あるいは同一名前空間の要素同士について) 要素Aの子として、 要素B以外は何でもOK、 という指定はできますでしょうか? 要素Aの子として 名前空間Cの要素以外はOKというのはわかったのですが、 質問に上げたことについて、 やり方が分かりません。 よろしくお願いします。

    • 締切済み
    • XML
  • ただしいHTMLタグ記法でしょうか?

    あるページのソースを見て発見したのですが、下記の記法1のHTMLタグ記法は、正しいものなのでしょうか? ●記法1 <a href="http://yahoo.co.jp/?a=1&amp;b=2">http://yahoo.co.jp/?a=1&amp;b=2</a> (注)<と>と&と;は、本来半角のところを全角で表記しています。以下同様。 疑問に思う点は、aタグのhref要素中に、&記号をHTMLエンコードしてしまってもよいのかということです。 次の記法2が一般的ではないかと(個人的に)考えています。 ●記法2 <a href="http://yahoo.co.jp/?a=1&b=2">http://yahoo.co.jp/?a=1&amp;b=2</a> 上記記法1は、妥当な記法でしょうか? また、多くのブラウザでも対応しているのでしょうか? Windows版のIE7とFireFox2では問題なく動作しているようです。 お詳しい方、ご回答お願いします。

    • ベストアンサー
    • HTML
  • complexTypeは入れ子にできない?

    次のようなXML文書を実現する為のXML Schemaを伺っても宜しいでしょうか。 <Test> <A>0</A> <!-- 唯一の要素--> <B>0</B> <!-- 反復要素 --> <C>0</C> <B>0</B> <C>0</C> : : </Test> で、下記のようなXML Schemaを書きましたが、文法エラーになります。 <xsd:element name="Test"><xsd:complexType><xsd:sequence> <!-- 唯一の要素 --> <xsd:element name="A" type="Int"/> <!-- 反復要素 --> <xsd:complexType><xsd:sequence> <xsd:element name="B" type="Int"/> <xsd:element name="C" type="Int"/> </xsd:sequence></xsd:complexType> </xsd:sequence></xsd:complexType></xsd:element> この解決方法をお教え頂けないでしょうか?どうか宜しくお願い致します。

    • ベストアンサー
    • XML
  • DOMでの要素名の変更

    初歩的なことかもしれませんが、なんだかGoogleなどで検索してもなかなかひっかかってくれません。 そこで質問です。。 1つの要素オブジェクト(Element)があって、その下にDOMツリーがたくさんあるとします。 そしてその下のDOMツリーは保持したまま、親の要素オブジェクトの要素名を変更することは可能でしょうか? 例えば <a><b><c></c></b></a> を <a2><b><c></c></b></a2> とするような感じです。 NodeクラスのcloneNodeを使用しても、要素名は変わらないので、ダメですよね。 もしかすると、任意の名前の空要素を1つ用意しておいて、その後子ノードをばんばん追加する処理を書かなくてはダメなのでしょうか。 以上、よろしくお願いします。

    • 締切済み
    • XML
  • 中置記法から前置記法(ポーランド記法)について

    どうも、はじめまして 初めて質問を投稿させていただきます・・・ ひとつどうしても前置記法(ポーランド記法)についてわからないことがあります。 中置記法で A×(B + C)  と  (B + C)×A は同じ答えですよね? これをそれぞれ前置記法にすると・・・ ×A + BC    と   × + ABC となるのでしょうか?? もし、そうであるのならば・・・ 2つとも前置記法で出される結果は同じでしょうか?? よろしくおねがいします。

  • DTDとXML Schemaでのデフォルト値の指定について

    以下のようなXMLをパーズするプログラムがあります。 ------------------------------------------------------------------ DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); dbf.setNamespaceAware(true); dbf.setValidating(true); DocumentBuilder documentBuilder = factory.newDocumentBuilder(); Document doc = documentBuilder.parse(new InputSourc("a.xml")); ------------------------------------------------------------------ a.xmlに以下のようなXMLの構造をDTDで指定した場合のxmlをパーズさせると、 <!DOCTYPE a [ <!ELEMENT a (#PCDATA)> <!ATTLIST a a1 CDATA "abc"> ]> <a/> 上記のプログラム3行目のvalidationの設定がtrue、falseに関わらす、 <a a1="abc"/> というような形式のドキュメントオブジェクトが返ってきます。 ですが、以下のようにXMLの構造をXML Schemaで定義した場合、 a.xml <a xsi:noNamespaceSchemaLocation="b.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/> b.xsd <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <xsd:element name="a"> <xsd:complexType> <xsd:attribute name="a1" type="xsd:string" default="abc"/> </xsd:complexType> </xsd:element> </xsd:schema> 返ってくるドキュメントオブジェクトのa要素には、validationがtrueの場合はa1属性が含まれる、falseの場合は含まれません。 これは正しい動作なのでしょうか? また、XML Schemaの場合もvalidationがtrue、falseに関わらず、 デフォルト値が指定された属性を含めることはできないのでしょうか?

    • ベストアンサー
    • XML
  • SQL ServerのXMLスキーマがうまくいきません。

    「SQL Server 2005 Express」を使用しています。 次のようなスキーマをサーバーに登録して CREATE XML SCHEMA COLLECTION dbo.schema_test AS N'<?xml version="1.0" encoding="UTF-16"?> <xsd:schema targetNamespace="http://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstructions" xmlns:xsd="http://www.w3.org/2001/XMLSchema" > <xsd:element name="root">  <xsd:complexType mixed="true">   <xsd:choice>    <xsd:element name="A" type="xsd:string" />    <xsd:element name="B" type="xsd:string" />    <xsd:element name="C" type="xsd:string" />   </xsd:choice>  </xsd:complexType> </xsd:element> </xsd:schema>' ; つぎのようなクエリを試したのですが、 「メッセージ 6913、レベル 16、状態 1、行 5 XML 検証: 要素 'root' の宣言が見つかりませんでした。場所: /*:root[1]」 というエラーメッセージが表示されてしまいます。 DECLARE @xml xml (dbo.schema_text) SET @xml = '<root> <A>AAA</A> <B>BBB</B> <C>ooo</C> </root> ' どなたか分かる方がいらっしゃいましたら、 アドバイスをお願いいたします。