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>
答案 0 :(得分:1)
似乎MarkLogic架构解析中存在一个错误,其中complexType被标记为“混合”并且还具有扩展名。
如果您正在扩展另一种混合类型,那么第一个'混合'是多余的,这样一切都将按预期工作。
所以你应该尝试使用架构:
<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>
答案 1 :(得分:0)
在深入挖掘之前,我只想澄清一些问题 - 你的模式在哪里?
MarkLogic希望模式存在于特定内容数据库配置中引用的模式数据库中。这默认为Schemas数据库。
您是否已将所有引用的Scemas包含在内(通过XML或XSD进入Schemas数据库?)
在此处查看详细信息,包括MarkLogic解析模式的顺序和位置:https://docs.marklogic.com/guide/admin/schemas
最后,在开始探索MarkLogic中的架构使用时,请注意在更改架构时重新启动MarkLogic是个好主意。从技术上讲,您不需要重新启动,但实际上只需要清除一些缓存,但如果可以重新启动,那么这可以让您更快地完成并保持学习曲线。