xsd <any/> marklogic 中的不同结果

xsd <any/> different result in marklogic

XML:

<?xml version="1.0"?>
<note
xmlns="http://www.w3schools.com"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <to>Tove</to>
    <from>Jani</from>
    <heading>Reminder</heading>
    <body xml:lang="en"><div></div></body>
</note>

XSD:

<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.w3schools.com"
xmlns="http://www.w3schools.com"
elementFormDefault="qualified">
    <xs:import namespace="http://www.w3.org/XML/1998/namespace" schemaLocation="http://www.w3.org/2001/xml.xsd">
    </xs:import>
    <xs:element name="note">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="to" type="xs:string"/>
                <xs:element name="from" type="xs:string"/>
                <xs:element name="heading" type="xs:string"/>
                <xs:element name="body">
                    <xs:complexType mixed="true">
                        <xs:complexContent>
                            <xs:extension base="someType">
                                <xs:attribute ref="xml:lang" use="required">
                                </xs:attribute>
                            </xs:extension>
                        </xs:complexContent>
                    </xs:complexType>
                </xs:element>
            </xs:sequence>
        </xs:complexType>
    </xs:element>

    <xs:complexType name="someType" mixed="true">
        <xs:sequence>
            <xs:any maxOccurs="unbounded" minOccurs="1" processContents="skip"/>
        </xs:sequence>  
    </xs:complexType>

</xs:schema>

已检查 this 并且有效。 但是这在Marklogic中不起作用,错误是:

XDMP-VALIDATEMISSINGELT: (err:XQDY0027) validate lax { $node } -- Missing required elements: Expected ((any(skip,!())+),(any(skip,!())+)) at fn:doc("d:/xml.xml")/*:note/*:body using schema "/schemas/xsd.xsd"

我的意图是像这样在正文中强制出现 HTML 内容:

<body xml:lang="en"><div></div></body>

在深入挖掘之前,我只想澄清一件事——你的模式在哪里?

MarkLogic 希望模式存在于特定内容数据库配置中引用的模式数据库中。这默认为 Schemas 数据库。

您是否已将所有引用的 Scema 包含在(通过 XML 或 XSD 到 Schemas 数据库中?)

在此处查看详细信息,包括 MarkLogic 解析架构的顺序和位置:https://docs.marklogic.com/guide/admin/schemas

最后,当开始探索 MarkLogic 中的模式使用时,请注意,更改模式时最好重新启动 MarkLogic。从技术上讲,您不需要重新启动,但实际上只是清除一些缓存,但如果可以重新启动,那么这会让您更快地完成并降低学习曲线。

似乎在 MarkLogic 模式解析中存在错误,其中 complexType 被标记为 'mixed' 并且还具有扩展名。

如果您要扩展另一种混合类型,第一个 'mixed' 是多余的,关闭此选项,一切都会如您所愿。

所以您应该尝试使用架构:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"    targetNamespace="http://www.w3schools.com"    xmlns="http://www.w3schools.com"    elementFormDefault="qualified">
  <xs:import namespace="http://www.w3.org/XML/1998/namespace" schemaLocation="http://www.w3.org/2001/xml.xsd">
  </xs:import>
  <xs:element name="note">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="to" type="xs:string"/>
        <xs:element name="from" type="xs:string"/>
        <xs:element name="heading" type="xs:string"/>
        <xs:element name="body">
          <xs:complexType>
            <xs:complexContent>
              <xs:extension base="someType">
                <xs:attribute ref="xml:lang" use="required">
                </xs:attribute>
              </xs:extension>
            </xs:complexContent>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:complexType name="someType" mixed="true">
    <xs:sequence>
      <xs:any maxOccurs="unbounded" minOccurs="1" processContents="skip"/>
    </xs:sequence>
  </xs:complexType>
</xs:schema>