ちょっとした練習として、いくつかのスキーマを使用してドキュメントをアップロードして検証しようとしています。これらはいずれ成長するので、別々に保管したいと思います。
これらのスキーマの例では、ローカライズされたテキスト文字列と料理を定義しています。
bitfood-common.xsd:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:bfc="http://bitfood.org/common"
targetNamespace="http://bitfood.org/common"
elementFormDefault="qualified">
<xs:simpleType name="objectId">
<xs:restriction base="xs:string">
<xs:length value="24"/>
<xs:whiteSpace value="collapse"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="locale">
<xs:restriction base="xs:string">
<xs:length value="5"/>
<xs:whiteSpace value="collapse"/>
</xs:restriction>
</xs:simpleType>
<xs:complexType name="localizedText">
<xs:attribute name="text" type="xs:string" use="required"/>
<xs:attribute name="locale" type="bfc:locale" use="required"/>
</xs:complexType>
</xs:schema>
bitfood-dish.xsd:
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:bfd="http://bitfood.org/dish"
xmlns:bfc="http://bitfood.org/common"
targetNamespace="http://bitfood.org/dish"
elementFormDefault="qualified">
<xs:import namespace="http://bitfood.org/common"
schemaLocation="../common/bitfood-common.xsd" />
<xs:element name="Dish">
<xs:complexType>
<xs:sequence>
<xs:element name="name" type="bfc:localizedText" maxOccurs="unbounded"/>
<xs:element name="description" type="bfc:localizedText" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="id" type="bfc:objectId" use="required"/>
<xs:attribute name="price" type="xs:decimal" use="required"/>
<xs:attribute name="imageUrl" type="xs:anyURI" use="required"/>
</xs:complexType>
</xs:element>
</xs:schema>
次に、次の URI ID を使用して、xml データベースに割り当てられたスキーマ データベース内にこれら 2 つのドキュメントをアップロードしました。
schema/common/bitfood-common.xsd
schema/dish/bitfood-dish.xsd
次に、サンプル ドキュメントをアップロードしました。
皿/520cc720c208c01ddfb75254.xml:
<?xml version="1.0" encoding="UTF-8"?>
<Dish id="520cc720c208c01ddfb75254" price="35"
imageUrl="FoodCantonGourrmetTwoDish.jpg"
xmlns="http://bitfood.org/dish">
<name text="Example dish." locale="en-US"/>
<description text="Localized text test." locale="en-US"/>
</Dish>
サーバーのクエリ コンソールで次のコマンドを発行すると、xml ドキュメントのルート ノードの型を推測するようにデータベースに指示すると、空のセットが返されます。
更新: 間違ったノード インデックス、この場合は 1 でなければなりません:
(: is it working? :)
declare namespace bfd = "http://bitfood.org/dish";
declare namespace bfc = "http://bitfood.org/common";
xdmp:describe(data(
doc('dish/520cc720c208c01ddfb75254.xml')/bfd:Dish[1]
))
出力:
<?xml version="1.0" encoding="UTF-8"?>
<results warning="atomic item">xs:untypedAtomic("")</results>
これは、データベースがスキーマ ドキュメントを無視しているか、見つけられないことを意味します。xs:import namespace
また、ステートメントのためにスキーマを適用できないかどうかもわかりません。
インポートされた XSD ドキュメントをこの方法で Marklogic に操作しようとした人はいますか? 私が間違っているかもしれないことはありますか?
更新 2:これは属性にのみ適用できるようです。次のコマンドは期待どおりに機能します。これは、スキーマが検出されていることを意味します。
(: is it working? :)
declare namespace bfd = "http://bitfood.org/dish";
declare namespace bfc = "http://bitfood.org/common";
xdmp:describe(data(doc('dish/520cc720c208c01ddfb75254.xml')/bfd:Dish[1]/@id))
ありがとう!