标签: xsd

XSD:如何限制字符串类型属性中的字符数?

我有一个关于在我的xml架构(xsd)中添加限制的问题.我有一个复杂的类型:

<xsd:complexType name="xxx">
   <xsd:attribute/>
   .....
</xsd:complexType>
Run Code Online (Sandbox Code Playgroud)

我在这个复杂类型中有很多属性,其中很少有字符串类型.现在我希望将这些字符串类型属性限制为y no.chars,我该如何添加此限制?

谢谢!-Ankush

xml xsd

35
推荐指数
3
解决办法
9万
查看次数

针对web.xml的Bogus Eclipse警告:"没有检测到文档的语法约束(DTD或XML模式)."

web.xml文件的顶部如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_5.xsd"
    version="2.5">
Run Code Online (Sandbox Code Playgroud)

但我仍然得到Eclipse(Ganymede)的警告,即没有检测到XML模式,并且没有警告模式违规.我的项目中的其他XML文件(例如Spring Framework配置文件)没有警告,并且确实给出了有关模式违规的正确警告.

如何让架构检查工作,希望警告消失?服务器运行正常.它似乎是一个IDE问题.

java eclipse xsd warnings

34
推荐指数
3
解决办法
6万
查看次数

验证XSD架构?

我正在编写一个XML模式(XSD)来描述我们的合作伙伴应该向我们发送数据的格式.

而且我很难找到可以验证我编写的XSD架构文件的工具.

到目前为止,我发现的最好的方法是首先编写一个示例输入XML文件,然后尝试使用XSD 验证.但这并不是一种最佳操作策略.

那么,我该如何验证XML模式呢?

xml validation xsd

33
推荐指数
3
解决办法
4万
查看次数

理解xsd:choice和minOccurs

我无法理解以下XML架构的行为:

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:element name="rootnode">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:choice minOccurs="1" maxOccurs="2">
          <xsd:element name="e1" minOccurs="1" maxOccurs="2"/>
          <xsd:element name="e2" minOccurs="0" maxOccurs="1"/>
        </xsd:choice>
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>
</xsd:schema>
Run Code Online (Sandbox Code Playgroud)

我期望任何一个元素的至少一个实例<e1><e2>作为孩子的必需品<rootnode>.尽管我的期望,空的<rootnode>将验证这个架构:

 > xmllint --schema test.xsd empty.xml
 <?xml version="1.0" encoding="UTF-8"?>
 <rootnode>
 </rootnode>
 empty.xml validates
Run Code Online (Sandbox Code Playgroud)

如果我将minOccurs元素的属性更改为e2其他内容"0",我会得到我最初预期的行为.

  • 似乎仅仅缺少元素<e2>就像xsd:choice我的例子中出现的一样.

  • 如果是这种情况,那么为什么这无限次的出现不会违反maxOccurs我的限制xsd:choice呢?

xml xsd

33
推荐指数
1
解决办法
2万
查看次数

如何针对xsd验证xml并获取*ALL*错误?

我有一个像下面这样的标准代码来验证xml对xsd,但它在第一次错误时抛出异常并停止.如何验证xml,但继续第一个和下一个错误并最终得到它们?它甚至可能吗?

public static void validate(File xml, InputStream xsd) {
    try {
        SchemaFactory factory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
        Schema schema = factory.newSchema(new StreamSource(xsd));
        Validator validator = schema.newValidator();
        StreamSource xmlFile = new StreamSource(xml);
        validator.validate(xmlFile);

    } catch (SAXException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
}
Run Code Online (Sandbox Code Playgroud)

java xml validation xsd

33
推荐指数
1
解决办法
2万
查看次数

使用XSD验证XML ...但仍允许可扩展性

也许是我,但似乎你有一个XSD

<?xml version="1.0" encoding="utf-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:element name="User">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="GivenName" />
                <xs:element name="SurName" />
            </xs:sequence>
            <xs:attribute name="ID" type="xs:unsignedByte" use="required" />
        </xs:complexType>
    </xs:element>
</xs:schema>
Run Code Online (Sandbox Code Playgroud)

它定义了此文档的架构

<?xml version="1.0" encoding="utf-8" ?>
<User ID="1">
    <GivenName></GivenName>
    <SurName></SurName>
</User>
Run Code Online (Sandbox Code Playgroud)

它将无法验证您是否添加了另一个元素,例如EmailAddress,并混淆了订单

<?xml version="1.0" encoding="utf-8" ?>
<User ID="1">
    <SurName></SurName>
    <EmailAddress></EmailAddress>
    <GivenName></GivenName>
</User>
Run Code Online (Sandbox Code Playgroud)

我不想将EmailAddress添加到文档中并将其标记为可选.

我只想要一个XSD来验证文档必须满足的最低要求.

有没有办法做到这一点?

编辑:

marc_s在下面指出你可以使用xs:any内部xs:sequence允许更多元素,遗憾的是,你必须维护元素的顺序.

或者,我可以使用xs:all哪个不强制执行元素的顺序,但是,唉,不允许我放在xs:any它内部.

xml xsd xml-validation

32
推荐指数
2
解决办法
1万
查看次数

XML关心元素的顺序吗?

XML有时会让我感到困惑,但我正试图解决这个问题.供应商告诉我的内容没有意义但是,我和XML并不相处:)

我有一些XML,我发送给供应商的Web服务,给我随机的失败:

<root>
    <Request>
        <Driver id="1" VehId="1">...</Driver>
        <Driver id="2" VehId="1">...</Driver>
        <Driver id="3" VehId="2">...</Driver>
        <Vehicle id="1">...</Vehicle>
        <Vehicle id="2">...</Vehicle>
        <Driver id="4" VehId="2">...</Driver>
    </Request>
</root>
Run Code Online (Sandbox Code Playgroud)

没有要比较的XSLT或XSD,以查看我的XML是否有效.

供应商声明XML无效,因为Driver#4位于错误的区域.驱动程序的XPath应该是root/Request/Driver,Vehicle是root/Request/Vehicle.

XML解析器是否会强制执行元素顺序,特别是如果没有XSD来比较XML?供应商对我的支持很慢,所以我想知道什么是好的常见做法.

跟进

我抱怨我们的帐户代表不能测试这个(并且听起来好像他们只是想获得支持资金),事实证明开发人员有XSD,但支持没有.所以我一直在和错误的小组交谈*facepalm*

我得到了XSD,它确实强制执行特定的元素顺序.

现在就他们自己的样本XML来对抗它们并不遵循模式,但至少现在我有一些东西需要测试.

xml xsd

32
推荐指数
4
解决办法
4万
查看次数

我怎样才能获得"Eclipse> Generate> Jaxb classes"选项?

我最近不得不迁移到新机器并重新安装Eclipse.目前,我需要从xsd生成JAXB类.我不记得我安装了什么,但在我的旧Eclipse中我有选择-rightclick-generate-jaxb类.

谁知道我需要安装什么/插件来取回它?

我正在考虑安装Dali,看起来它可能是正确的,但我很确定我上次没有安装Dali.我还在我的构建路径中包含了jaxb jar,就像上次一样,所以应该没问题.

我正在使用Eclipse 3.6和Java SE 1.6.

java eclipse xsd jaxb

32
推荐指数
3
解决办法
9万
查看次数

为什么xsd.exe为xs:integer生成字符串属性?

当我使用xsd.exe从xsd模式生成ac#类时,我觉得这个行为有点奇怪.

我的元素:

<xs:element name="InvoiceNo" type="xs:integer"/>
Run Code Online (Sandbox Code Playgroud)

生成为:

[System.Xml.Serialization.XmlElementAttribute(DataType="integer", Order=5)]
public string InvoiceNo
{
   ...
}
Run Code Online (Sandbox Code Playgroud)

为什么该属性不是作为int而不是字符串生成的?

.net c# xsd xsd.exe

32
推荐指数
1
解决办法
9347
查看次数

SchemaFactory不支持平台级别8中的W3C XML Schema?

使用Android SDK,普通空活动中的以下代码将失败:

@Override
protected void onStart() {
    super.onStart();

    SchemaFactory schemaFactory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
}
Run Code Online (Sandbox Code Playgroud)

2.2模拟器logcat显示此异常:

06-28 05:38:06.107: WARN/dalvikvm(495): threadid=1: thread exiting with uncaught exception (group=0x4001d800)
06-28 05:38:06.128: ERROR/AndroidRuntime(495): FATAL EXCEPTION: main
        java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example/com.example.HelloWorldActivity}: java.lang.IllegalArgumentException: http://www.w3.org/2001/XMLSchema
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
        at android.app.ActivityThread.access$2300(ActivityThread.java:125)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:123)
        at android.app.ActivityThread.main(ActivityThread.java:4627)
        at java.lang.reflect.Method.invokeNative(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:521)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
        at dalvik.system.NativeStart.main(Native Method)
        Caused by: java.lang.IllegalArgumentException: http://www.w3.org/2001/XMLSchema
        at javax.xml.validation.SchemaFactory.newInstance(SchemaFactory.java:194)
        at com.example.HelloWorldActivity.onStart(HelloWorldActivity.java:26)
        at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1129)
        at android.app.Activity.performStart(Activity.java:3781)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2636)
        ... 11 …
Run Code Online (Sandbox Code Playgroud)

xml android xsd android-2.2-froyo

31
推荐指数
1
解决办法
3425
查看次数