当前位置: 首页 > 知识库问答 >
问题:

如何在具有相同元素的2个值的XSD中使用复杂类型中的?

漆雕和昶
2023-03-14

我想验证两种类型的XML“过滤器”块,其“形状”包含两个值:“空”或“圆”:

  • 如果为“空”,则块应仅包含“形状”

XML示例:

<filter>
  <shape>empty</shape>
</filter>

<filter>            
  <shape>circle</shape>
  <center>10.3</center>
  <diameter>5.1</diameter>
<filter>

我尝试了这个XSD模式:

<xs:element name="filter">
  <xs:complexType>
    <xs:choice>
      <xs:all>
        <xs:element name="shape" type="xs:string" fixed="circle"/>
        <xs:element name="center" type="xs:decimal"/>
        <xs:element name="diameter" type="xs:decimal"/>
      </xs:all>
      <xs:element name="shape" type="xs:string" fixed="empty"/>
    </xs:choice>
  </xs:complexType>
</xs:element>

失败…xmllint抱怨:

我的测试。xsd:160:element-all:Schemas解析器错误:element'{http://www.w3.org/2001/XMLSchema}选项“:内容无效。预期为(注释?,(元素|组|选择|序列|任意)*)。

WXS模式mytest.xsd编译失败

如果我将xs: all替换为xs:序列,它说:

mytest:158:元素复合类型:模式解析器错误:本地复合类型:内容模型不是确定性的。

WXS模式mytest.xsd编译失败

如何编写这段XSD-如果可能的话?

我知道如果我的XML使用“shape0”而不是“form”来表示“空”:

<filter>
  <shape0>empty</shape0>
</filter>

<filter>            
  <shape>circle</shape>
  <center>10.3</center>
  <diameter>5.1</diameter>
<filter>

它可以通过以下方式验证:

<xs:element name="filter">
  <xs:complexType>
    <xs:choice>
      <xs:sequence>
        <xs:element name="shape" type="xs:string" fixed="circle"/>
        <xs:element name="center" type="xs:decimal"/>
        <xs:element name="diameter" type="xs:decimal"/>
      </xs:sequence>
      <xs:element name="shape0" type="xs:string" fixed="empty"/>
    </xs:choice>
  </xs:complexType>
</xs:element>

但是,不幸的是,我的XML使用了相同的关键字。。。

共有1个答案

上官思博
2023-03-14

在XSD 1.0中,不可能为依赖于内容的结构定义规则。

在XSD 1.1中,您可以通过断言来实现这一点,例如<代码>

 类似资料:
  • 问题内容: 在JPA中,我有2个实体:Entry和Comment。条目包含两个Comment对象集合。 为了存储此类对象,JPA + Hibernate创建“ Entry”表,“ Comment”表和单个“ Entry_Comment”: 对象的存储失败,并且不能同时为“非null”。 如何使用JPA + Hibernate存储包含两个相同类型的集合的对象? 问题答案: 这是许多Hibernate

  • 我试图编写我的第一个XSD . . . XSD如下,不验证。 我在用http://www.utilities-online.info/xsdvalidation/为了验证 我得到了这个错误 无效。错误-第7行,49:org.xml.sax.SAXParseExctive; lineNumber: 7; block nNumber: 49; src-解决.4.2:解决组件“xsd: Hdr”的错误。

  • 问题内容: 在JPA中,我有2个实体:Entry和Comment。条目包含两个Comment对象集合。 为了存储这些对象,JPA + Hibernate创建“ Entry”表,“ Comment”表和单个“ Entry_Comment”: 对象的存储失败,并且不能同时为“非null”。 如何使用JPA + Hibernate存储包含两个相同类型的集合的对象? 问题答案: 这是许多Hibernate

  • 问题内容: 我正在尝试单击网页上的所有“喜欢”按钮。我知道如何单击其中之一,但我希望能够全部单击它们。它们具有相同的类名,但ID不同。 我是否需要创建某种列表,并告诉它单击列表中的每个项目?有没有写“全部单击”的方法? 这是我的代码的样子(我删除了登录代码): 我知道我无法单击列表,因为它不是单个对象,但是我不知道如何处理。 非常感谢您的帮助。 问题答案: 不幸的是,您只得到了两半,因为ID对于单

  • 问题内容: 我对Python中的字典有疑问。 这里是: 我有一个像 现在,我想通过相同的值获取所有关键元素,并将其保存在新的字典中。 新的Dict应该如下所示: 问题答案: 如果您对新字典中的列表而不是元组感到满意,则可以使用 如果您想避免使用,也可以这样做

  • 我正在学习用java实现链表类。但每次调用get方法时,都会得到最后一个节点的内容。我不知道为什么。代码如下:, 我得到的结果是, 我想在类中添加一些数据,并创建该类的链接列表。 提前谢谢!