首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何为下面的XML编写XML Schema?

如何为下面的XML编写XML Schema?
EN

Stack Overflow用户
提问于 2012-06-28 19:59:30
回答 3查看 268关注 0票数 2

我想为XML文件编写XML Schema:

代码语言:javascript
运行
复制
<root>
    <rate>10</rate>
    <rate></rate>
    <rate>15</rate>
    ...
</root>

minOccurs为1,maxOccurs是无界的。必须有xs:integer类型,但如何处理呢?我不想写。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-06-28 20:12:44

您只能声明一个接受任何整数值或不接受任何内容的<rate>元素,而不是一个具有xs:integer内容的<rate>元素和另一个没有任何内容的元素。

实际上,这可以使用<xs:union>元素来完成:

代码语言:javascript
运行
复制
<xs:simpleType name="emptyString">
  <xs:restriction base="xs:string">
    <xs:maxLength value="0"/>
  </xs:restriction>
</xs:simpleType>

<xs:element name="rate">
    <xs:simpleType>
        <xs:union memberTypes="xs:integer emptyString"/>
    </xs:simpleType>
</xs:element>

这将接受<rate/><rate></rate><rate>42</rate> (或任何其他xs:integer值),但不接受<rate>Hello, World!</rate>

请注意,要使其起作用,必须在模式中将无前缀的名称空间设置为与目标名称空间相同,否则将找不到memberTypes属性中的emptyString。(当然,您也可以为目标名称空间定义一个前缀并使用它。)

我省略了关于如何编写完整的模式以及如何使用maxOccurs等方面的任何解释,因为从您的问题中,我认为您已经知道如何做到这一点。如果您需要进一步的信息,请让我知道。

票数 4
EN

Stack Overflow用户

发布于 2012-06-28 23:51:33

除了O.R.Mapper的方法之外,另一种方法是使用maxLength=1将元素的类型声明为整数列表。

代码语言:javascript
运行
复制
<xs:element name="rate">
    <xs:simpleType>
       <xs:restriction base="listOfInteger">
          <xs:maxLength value="1"/>
       </xs:restriction>
    </xs:simpleType>
</xs:element>

<xs:simpleType name="listOfInteger">
  <xs:list itemType="xs:integer"/>
</xs:simpleType>

与使用联合(整数,零长度字符串)相比,我倾向于使用这种方法,因为它更容易在支持模式的XQuery和XSLT应用程序中处理。我不知道,如果您使用JAXB进行数据绑定,它也可能工作得更好。

票数 1
EN

Stack Overflow用户

发布于 2012-06-29 00:54:42

我会编写您想要使用的XML模式。由于您将使用C++代码生成器,这将使事情变得容易得多(我是的负责人,所以我在Java端对此有经验)。

代码语言:javascript
运行
复制
<xs:element name="root">
    <xs:complexType>
        <xs:sequence>
            <xs:element name="rate" type="xs:integer" minOccurs="0" maxOccurs="unbounded"/>
        </xs:sequence>
    </xs:complexType>
</xs:element>

由于您预计会收到无效数据,因此您有以下选项:

  1. 您的object-to-XML解决方案将以所需的方式自动为您处理这些无效数据。例如,JAXB被设计为能够容忍坏数据。
  2. 提供了一种处理坏数据的机制,您可以利用这种机制来解决您的问题。例如,JAXB提供了ValidationEventHandler机制。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11244148

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档