• 締切済み

XMLSchemaのデータ型をインポートしたい

外部ファイルで定義したXMLSchemaのデータ型をimportで取り込んで使おうとすると、エラーになってしまいます。 XMLSchemaで使用するデータ型を次のように定義しました。 ------------- datatype.xsd ---------------- <?xml version="1.0" encoding="UTF-8" standalone="no"?> <sd:schema  targetNamespace="http://datatype.com"  xmlns:datatype="http://datatype.com"  xmlns="http://datatype.com"  xmlns:sd="http://www.w3.org/2001/XMLSchema" > <sd:simpleType name="html_xhtml_id">  <sd:restriction base="sd:token">   <sd:pattern value="[A-Za-z]+[A-Za-z0-9]*" />  </sd:restriction> </sd:simpleType> </sd:schema> ------------------------------------------------- そして次のようにXMLSchemaで呼び出しました。 ----------------- caller.xsd ----------------------- <?xml version="1.0" encoding="UTF-8" standalone="no"?> <sd:schema  targetNamespace="http://example.com"  xmlns="http://sample.com"  xmlns:datatype="http://datatype.com"  xmlns:sd="http://www.w3.org/2001/XMLSchema" > <sd:import namespace="http://datatype.com" schemaLocation="./datatype.xsd" /> <!-- ここでエラーが発生する模様 --> <sd:element name="testElement" type="datatype:html_xhtml_id" /> </sd:schema> ----------------------------------------------------------- エラーの内容(Java): org.xml.sax.SAXParseException: src-resolve: Cannot resolve the name 'datatype:html_xhtml_id' to a(n) 'type definition' component. ちなみに、datatype.xsdで定義せずにcaller.xsdで定義したデータ型を使っても、エラーは発生しません。 何がいけないのでしょうか。 分かる方よろしくお願いします。

  • ggaogg
  • お礼率86% (209/243)
  • XML
  • 回答数1
  • ありがとう数4

みんなの回答

回答No.1

VisualStudio 2005で試してみました。 caller.xsdのschema要素のxmlns属性が"http://sample.com"になっているのがだめみたいで、"http://example.com"にしたらエラーがなくなりました。

ggaogg
質問者

お礼

検証して頂いてありがとうございます。 提示した例のxmlnsが間違っていて、余分な時間をとらせてしまいまってすみません。 こちらはVisualStudioの環境がなく、Javaでスキーマを読み込んでいて、問題は解決しません。 他の言語でXMLSchemaを扱ったことがないので、Javaの場合のみおかしくなるのかどうかが判断しかねますので、(結構時間かかると思うけど)他の言語でも試してみようと思います。 ちなみに、当方がJavaで試したものを捕捉のほうに書かせてもらいます。(さきほどのサンプル間違っていたので、もう一度すべて載せます。。)

ggaogg
質問者

補足

------- caller.xsd --------- <?xml version="1.0" encoding="UTF-8" standalone="no"?> <sd:schema targetNamespace="http://example.com" xmlns="http://example.com" xmlns:datatype="http://datatype.com" xmlns:sd="http://www.w3.org/2001/XMLSchema"> <sd:import namespace="http://datatype.com" schemaLocation="./datatype.xsd" /> <!-- ここでエラーが発生する模様 --> <sd:element name="testElement" type="datatype:html_xhtml_id" /> </sd:schema> ------- datatype.xsd -------- <?xml version="1.0" encoding="UTF-8" standalone="no"?> <sd:schema targetNamespace="http://datatype.com" xmlns:datatype="http://datatype.com" xmlns="http://datatype.com" xmlns:sd="http://www.w3.org/2001/XMLSchema"> <sd:simpleType name="html_xhtml_id"> <sd:restriction base="sd:token"> <sd:pattern value="[A-Za-z]+[A-Za-z0-9]*" /> </sd:restriction> </sd:simpleType> </sd:schema> ----- Test.java ------ package test.schema; import java.io.InputStream; import javax.xml.XMLConstants; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.transform.stream.StreamSource; import javax.xml.validation.Schema; import javax.xml.validation.SchemaFactory; public class Test { public static void main(String[] args) { try { DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); dbf.setSchema(getSchema()); DocumentBuilder parser = dbf.newDocumentBuilder(); } catch (Exception e) { e.printStackTrace(); } } private static Schema getSchema() throws Exception { InputStream in = Test.class.getResourceAsStream("./caller.xsd"); SchemaFactory schemaFactory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI); Schema schema = schemaFactory.newSchema(new StreamSource(in)); return schema; } } --- ディレクトリ構成(こちらの環境と曖昧な点をなくすため --- Java実行ディレクトリ  |-test   |-schema    |-Test.class    |-datatype.xsd    |-caller.xsd

関連するQ&A

  • targetNamespaceは不要?

    xmllint.exeを使い、XML Schemaの動作実験をしています。 が、下記 XML Schemaでどうしてもエラーが出て頓挫しています。 その解決方法を伺っても宜しいでしょうか? エラーの具体的な内容は、TestElement要素の型がおかしいとの事した。 <?xml version="1.0" encoding="UTF-8" ?> <xsd:schema version="1.0" xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="test_namespace"> <xsd:simpleType name="MyByte"> <xsd:restriction base="xsd:byte"/> </xsd:simpleType> <xsd:element name="TestElement" type="MyByte"/> </xsd:schema> 尚、targetNamespace属性を除去するとエラーが出なくなります。が「この属性は使うべき」とあるHPに書いてあった為、困っております。 どうか宜しくお願い致します。

    • ベストアンサー
    • XML
  • XMLの名前空間について

    XMLの名前空間についてです。 色々と参考ページを読ませて頂き、 名前空間はネット上で衝突が起きない一意のURIを使うと書かれていたのですが、 質問です 1. 実際に衝突が起きなければURIは任意に決めていいのでしょうか? 2. 1と若干かぶりますが、ネットに上げなければ何でもよいのでしょうか? 3. ネット上で使用するにあたって、それを定義する際どのようなURIを使うと良いでしょうか? 宜しければ教えて下さい。 <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">

    • ベストアンサー
    • XML
  • 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> ' どなたか分かる方がいらっしゃいましたら、 アドバイスをお願いいたします。

  • XML Schemaの名前空間

    XML Schemaを利用する際、名前空間としてhttp://www.w3.org/2001/XMLSchemaを定義する必要があります。上記の末尾に.xsdを追加し、ブラウザで開くと、組み込みデータ型が定義してあるファイルを参照できます。XML Schemaを利用してXMLの検証を行うアプリは、名前空間を元にこのファイルを参照して、組み込みデータ型の検証を行うのでしょうか。いまいち挙動がわかりません。

    • 締切済み
    • XML
  • XML Schema内で、128[bit]整数型を定義するには?

    XML Schemaファイル内で、128[bit]整数型を定義するにはどうすれば宜しいでしょうか? 今、integer,minInclusive,maxInclusive を使い、試験的に128ビット符号無し整数型を定義しようとしています。が、xmllint.exeを使うとエラー扱いになってしまいます。試したXML Schemaは下の通りです。 <xsd:simpleType name="U128"> <xsd:restriction base="xsd:integer"> <xsd:minInclusive value="0"/> <xsd:maxInclusive value="340282366920938463463374607431768211455"/> </xsd:restriction> </xsd:simpleType> 因みに、上記のmaxInclusive値を小さくすると、xmllint.exeの検査に合格します。又、いくつかのHPでintegerの変域を調べたら、特に上、下限共 書いてありませんでした。 どうか宜しくお願い致します。

    • ベストアンサー
    • XML
  • 要素の内容にxmlを入れたい

    次のようなxmlを作成しました。 <?xml version="1.0" encoding="UTF-8"?> <tns:StateChange xsi:schemaLocation="http://sample.com/Change.xsd" xmlns:tns="http://sample.com/XSDDefinition" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <ServiceName>test</ServiceName> <wsdl></wsdl> </tns:StateChange> wsdl要素の内容として <?xml version="1.0" encoding="utf-8\"?><wsdl:definitions xmlns:s="http://www.w3.org/2001/XMLSchema".... といったいわゆるWSDLを文字列として指定したいと考えて、指定するとvalidate時にエラーになってしまいます。 xmlを要素の内容にしたい場合、どのようにすればいいのでしょうか?

    • ベストアンサー
    • XML
  • PHPでXMLデータ生成、スキーマで失敗

    PHPのDOMDocumentを使ってXMLデータを生成しています。 $dom->schemaValidate('xsdファイル'); で失敗してしまします。 どうしても原因がわからないので吐き出すデータを最小限にして試してみましたが状況が変わりませんでした。 スキーマは以下のようになっています。 <?xml version="1.0" encoding="Shift_JIS" ?> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <xsd:element name="Response"> <xsd:complexType> <xsd:sequence> <xsd:element name="user" type="user_type" minOccurs="0" maxOccurs="unbounded" /> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:complexType name="user_type"> <xsd:sequence> <xsd:element name="developerID" type="xsd:string" /> <xsd:element name="operation" type="xsd:string" /> <xsd:element name="User-Agent" type="xsd:string" /> </xsd:sequence> </xsd:complexType> </xsd:schema> そして吐き出されるxml形式のデータは、 <?xml version="1.0" encoding="Shift-JIS"?> <Response> <user> <developerID>testdeveloperID</developerID> <operation>testoperation</operation> <User-Agent>Mozilla/5.0 (Windows NT 6.0; rv:7.0.1) Gecko/20100101 Firefox/7.0.1</User-Agent> </user> </Response> 出てしまうエラーは、 Warning: DOMDocument::schemaValidate() [<a href='domdocument.schemavalidate'>domdocument.schemavalidate</a>]: The document has no document element. in "実行しているphpファイルのパス" on line 12 ちなみに実行phpの12行目には、 $dom->schemaValidate('xsdファイル'); があります。 スキーマを使用してのxmlデータ吐き出しは初めてなのでいろいろと戸惑っています。 何か解決方法もしくはエラーが出てしまう原因をご存知の方がいらっしゃいましたらアドバイスをいただけないでしょうか。 よろしくお願いいたします。

    • ベストアンサー
    • XML
  • PHPでXMLデータ生成、スキーマで失敗

    PHPのDOMDocumentを使ってXMLデータを生成しています。 $dom->schemaValidate('xsdファイル'); で失敗してしまします。 どうしても原因がわからないので吐き出すデータを最小限にして試してみましたが状況が変わりませんでした。 スキーマは以下のようになっています。 <?xml version="1.0" encoding="Shift_JIS" ?> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <xsd:element name="Response"> <xsd:complexType> <xsd:sequence> <xsd:element name="user" type="user_type" minOccurs="0" maxOccurs="unbounded" /> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:complexType name="user_type"> <xsd:sequence> <xsd:element name="developerID" type="xsd:string" /> <xsd:element name="operation" type="xsd:string" /> <xsd:element name="User-Agent" type="xsd:string" /> </xsd:sequence> </xsd:complexType> </xsd:schema> そして吐き出されるxml形式のデータは、 <?xml version="1.0" encoding="Shift-JIS"?> <Response> <user> <developerID>testdeveloperID</developerID> <operation>testoperation</operation> <User-Agent>Mozilla/5.0 (Windows NT 6.0; rv:7.0.1) Gecko/20100101 Firefox/7.0.1</User-Agent> </user> </Response> 出てしまうエラーは、 Warning: DOMDocument::schemaValidate() [<a href='domdocument.schemavalidate'>domdocument.schemavalidate</a>]: The document has no document element. in "実行しているphpファイルのパス" on line 12 ちなみに実行phpの12行目には、 $dom->schemaValidate('xsdファイル'); があります。 スキーマを使用してのxmlデータ吐き出しは初めてなのでいろいろと戸惑っています。 何か解決方法もしくはエラーが出てしまう原因をご存知の方がいらっしゃいましたらアドバイスをいただけないでしょうか。 よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • xhtml2.0をhtmlに変換したい

    xhtml2.0をhtmlに変換したいと考えています。 ---------------- [ 共通 essay.xsl ] <?xml version="1.0" encoding="UTF-8" ?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:output method="html" encoding="UTF-8" /> <xsl:template match="/"> <html lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html;charset=UTF-8" /> <title><xsl:value-of select="html/head/title" /></title> </head> <body> <xsl:value-of select="html/head/title" /> </body> </html> </xsl:template> 15 </xsl:stylesheet> ----------------- <例1> [偽物xhtml2.xml] <?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet type="text/xsl" href="essay.xsl" ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 2.0//EN" "http://www.w3.org/MarkUp/DTD/xhtml2.dtd"> <html xml:lang="ja"> <head> <title>偽xhtml2.0</title> <meta property="keywords" xml:lang="ja">xhtml2.0</meta> <meta property="dc:dreated" content="2008-01-06" /> </head> <body> <h>テスト</h> <p>偽xhtml2.0</p> </body> </html> --------------------------- <結果> 「偽xhtml2.0」と表示される ------------------------ 上記のように、xmlns無しで書いた、偽物xml2.0は変換できるのですが、下記の ------------------------------ <正式xhtml2.xml> <?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet type="text/xsl" href="essay.xsl" ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 2.0//EN" "http://www.w3.org/MarkUp/DTD/xhtml2.dtd"> <html xmlns="http://www.w3.org/2002/06/xhtml2/" xml:lang="en" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3.org/2002/06/xhtml2/ http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd" > <head> <title>正式xhtml2.0</title> <meta property="keywords" xml:lang="ja">xhtml2.0</meta> <meta property="dc:dreated" content="2008-01-06" /> </head> <body> <h>テスト</h> <p>正式xhtml2.0</p> </body> </html> ------ 正式な形のxhtml2.0を共通xsltで変換しようとすると、うまくいきません。名前空間あたりが怪しいと思うのですが、どうすればうまく変換できるでしょうか?

    • 締切済み
    • XML