Tôi muốn đặt câu hỏi về xác thực tài liệu XML đối với (các) lược đồ XML tương ứng và tôi sẽ đánh giá cao nếu bạn có thể cho tôi một tay. Trên thực tế, tôi vừa mới bắt đầu tìm hiểu về các lược đồ XML (tôi hoàn toàn là người mới bắt đầu). Tôi đã mua cuốn sách "Lược đồ XML dứt khoát" được viết bởi Priscilla Walmsley (ấn bản lần 2) trình bày Lược đồ XML 1.1 (mà tôi tin là phiên bản mới nhất).Oracle có thể xác nhận hợp lệ XML bằng cách sử dụng lược đồ XSD trên hệ thống tệp cục bộ không?
Bây giờ vấn đề là trong tất cả các ví dụ và thực hành của cuốn sách, không gian tên và vị trí của tệp lược đồ được cung cấp bằng cách sử dụng URL web.
Dưới đây là một ví dụ về cuốn sách:
Đây là schema
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://datypic.com/prod"
xmlns:prod="http://datypic.com/prod">
<xs:element name="product" type="prod:ProductType"/>
<xs:complexType name="ProductType">
<xs:sequence>
<xs:element name="number" type="xs:integer"/>
<xs:element name="size" type="prod:SizeType"/>
</xs:sequence>
<xs:attribute name="effDate" type="xs:date"/>
</xs:complexType>
<xs:simpleType name="SizeType">
<xs:restriction base="xs:integer">
<xs:minInclusive value="2"/>
<xs:maxInclusive value="18"/>
</xs:restriction>
</xs:simpleType>
</xs:schema>
Và nội dung XML để được xác nhận chống lại nêu trên được này
<prod:product xmlns:prod="http://datypic.com/prod"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://datypic.com/prod prod.xsd"
effDate="2011-04-12">
<number>557</number>
<size>10</size>
</prod:product>
Rõ ràng, [ http://datypic.com/prod] là một trang web được duy trì bởi tác giả, vì vậy tôi không thể thêm hoặc XÓA bất kỳ tệp nào trên trang web này cho các bài tập của tôi trong khi tôi đang đọc cuốn sách này. Kết quả là tôi cần phải đặt cả hai tài liệu XML và XSD trên ổ cứng cục bộ của mình (tôi đang sử dụng Linux Fedora Core 17 X86_64). Vì vậy, những gì tôi đã làm, là đặt nội dung của lược đồ vào một tệp có tên ví dụ 'Example-01.xsd' và nội dung XML trong một tệp có tên 'Example-01.xml'.
Tôi sử dụng gói PL/SQL oracle DBMS_XMLSCHEMA (Enterprise Edition 11.2.0.1.0) để đăng ký lược đồ đầu tiên và sau đó gọi phương thức xác thực của đối tượng XMLType để xác thực tài liệu XML của tôi dựa trên lược đồ, tương tự liên kết sau:
https://forums.oracle.com/forums/thread.jspa?messageID=2462207
tôi đã tạo ra một thư mục (bằng cách tạo thư mục) tuyên bố trong oracle:
/home/tàu/Documents/myutl_file_dir/
Tôi đặt cả tài liệu XML & XSD của mình ở đâu. Đây chính xác là cách tôi thay đổi nội dung XML nêu trên để tham khảo XSD tại địa phương
<prod:product xmlns:prod="http://datypic.com/prod"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://datypic.com/prod file:///home/train/Documents/myutl_file_dir/Example-01.xsd"
effDate="2011-04-12">
<number>557</number>
<size>10</size>
</prod:product>
Vì vậy, nếu bạn so sánh nội dung XML mới với ví dụ nêu trên, điều duy nhất mà tôi đã thêm là file:///home/train/Documents/myutl_file_dir/Example-01.xsd ở cuối giá trị xsi: schemaLocation để tham chiếu đến ổ đĩa cứng cục bộ. Tôi thấy phương pháp này, ở đây:
http://lists.w3.org/Archives/Public/xmlschema-dev/2001Dec/0161.html
Bây giờ, vấn đề là nó không hoạt động. Khi tôi chạy kịch bản của tôi để xác nhận các tài liệu bằng cách gọi phương thức schemaValidate() của đối tượng XMLType, đây là thông báo lỗi oracle:
BEGIN
*
ERROR at line 1:
ORA-19030: Method invalid for non-schema based XML Documents.
ORA-06512: at "SYS.XMLTYPE", line 354
ORA-06512: at "TRAIN2012.ZXML_PKG", line 176
ORA-06512: at line 2
Những gì tôi hiểu từ các thông báo lỗi 'Phương pháp không hợp lệ cho phi Các tài liệu XML dựa trên lược đồ ' là oracle đơn giản đã bỏ qua filepath mà tôi đã định nghĩa cho tệp lược đồ và nó xem xét rằng không có bất kỳ lược đồ nào được khai báo cho tài liệu XML này.
Bất kỳ ý tưởng nào? Làm thế nào tôi có thể đối phó với vấn đề này?
Cảm ơn trước,
Dariyoosh
Vâng như bạn nói tôi đã thay đổi các tài liệu XML như thế này prod: product> Nhưng một lần nữa tôi gặp lỗi tương tự. –
dariyoosh
@ stefan nebesnak Tôi sử dụng targetNameSpace và do đó xsi: noNamespaceSchemaLocation không thích hợp cho vấn đề này. Cũng chỉ có lược đồ được tích hợp (nghĩa là tôi đã đăng ký vào cơ sở dữ liệu), tài liệu XML chỉ là một đối tượng XMLType cục bộ có phạm vi giới hạn ở một DECLARE cục bộ ... BEGIN ... END; PL/SQL khối vì vậy không cần phải xóa và tải lại tài liệu vì chúng không được tích hợp sẵn. Tuy nhiên, tôi cảm ơn bạn đã nhận xét (mà tôi không biết) và các liên kết – dariyoosh